+
+ * reload.c (find_reloads ): Pass operand_mode to
+ find_reloads_address.
+
+ 2002-09-07 Scott Snyder
+
+ PR target/7374
+ * config/alpha/alpha.md (abstf2): Fix typo: 'neg' for 'abs'.
+
+ 2002-09-07 Glen Nakamura
+
+ PR opt/7814
+ * sched-deps.c (sched_analyze_insn): Make sure to add insn
+ to reg_last->sets after flushing the dependency lists to guarantee
+ that subsequent clobbers will be dependent on it.
+
+ 2002-09-07 Alan Modra
+
+ * config/rs6000/linux64.h (ASM_PREFERRED_EH_DATA_FORMAT): Define.
+
+ 2002-09-06 Jakub Jelinek
+
+ * configure.in (HAVE_AS_OFFSETABLE_LO10): Use -xarch=v9
+ unconditionally when gcc_cv_as_flags64 checks are gone.
+ * configure: Rebuilt.
+
+ 2002-09-04 Eric Botcazou
+
+ PR c/7102
+ * optabs.c (expand_binop): Convert CONST_INTs in all cases.
+
+ 2002-09-04 Jason Thorpe
+
+ * config/sparc/t-netbsd64: Disable multilib for now.
+
+ 2002-09-01 Alexandre Oliva
+
+ * c-tree.h (skip_evaluation): Move declaration...
+ * c-common.h: ... here.
+ * c-typeck.c (build_external_ref): Don't assemble_external nor
+ mark a tree as used if skip_evaluation is set.
+ * c-parse.in (typeof): New non-terminal to set skip_evaluation
+ around TYPEOF.
+ (typespec_nonreserved_nonattr): Use it.
+
+ 2002-09-01 Marek Michalkiewicz
+
+ 2002-08-13 Denis Chertykov
+ * config/avr/avr.md: Call CC_STATUS_INIT in all peepnoles
+ which can change CC0.
+
+ 2002-08-29 Rodney Brown
+
+ * doc/install.texi (Specific, alpha*-dec-osf*): Add "virtual
+ memory exhausted" workarounds.
+
+ 2002-08-29 John David Anglin
+
+ * install.texi (hppa64-hp-hpux11*): Document installation procedure.
+
+ 2002-08-28 Jason Merrill
+
+ * c-common.c (c_expand_expr) [STMT_EXPR]: If the last expression is
+ a VAR_DECL with RTL that matches the target, just return that RTL.
+
+ 2002-08-28 Daniel Berlin
+
+ * tree-inline.c (expand_call_inline): Make the statement
+ expression we generate have a COMPOUND_STMT.
+
+ 2002-08-27 Mark Mitchell
+
+ * doc/invoke.texi: Document -Wabi.
+
+ 2002-08-23 David Edelsohn
+
+ * config/rs6000/rs6000.c (rs6000_select_section): Treat
+ DEFAULT_ABI == ABI_AIX like PIC. Test PIC & reloc for readonly
+ default.
+ (rs6000_unique_section): Likewise.
+
+ 2002-08-22 Jason Merrill
+
+ * langhooks-def.h (LANG_HOOKS_EXPR_SIZE): New macro.
+ * langhooks.c (lhd_expr_size): Define default.
+ * langhooks.h (struct lang_hooks): Add expr_size.
+ * explow.c (expr_size): Call it.
+ (int_expr_size): New fn.
+ * expr.h: Declare it.
+ * expr.c (expand_expr) [CONSTRUCTOR]: Use it to calculate how
+ much to store.
+
+ 2002-08-23 Alan Modra
+
+ * config/rs6000/rs6000.c (output_mi_thunk): Don't determine insns
+ for loading delta with num_insns_constant_wide. Calculate
+ delta_low, delta_high without using a conditional.
+
+ 2002-08-20 Andreas Jaeger
+
+ Merge from trunk:
+ Wed Jul 17 00:20:48 CEST 2002 Jan Hubicka
+
+ * i386.md (prefetch): Fix for 64bit mode.
+ (prefetch_sse_rex, prefetch_3dnow_rex): New patterns.
+
+ 2002-08-11 Andreas Jaeger
+ PR target/7531:
+ * doc/invoke.texi (i386 and x86-64 Options): Document -mcmodel.
+
+ 2002-06-24 Jeff Law
+
+ * flow.c (propagate_one_insn): When removing an insn
+ with a REG_LIBCALL note but not the entire libcall sequence,
+ delete the associated REG_RETVAL note.
+
+ 2002-06-04 Jeff Law
+ Michael Matz
+
+ * sched-int.h (struct deps): New field libcall_block_tail_insn.
+ * sched_deps.c (init_deps): Initialize libcall_block_tail_insn.
+ * sched_deps.c (sched_analyze_insn): If libcall_block_tail_insn
+ is set, then mark the current insn as being part of a libcall
+ scheduling group.
+ (sched_analyze): Set and clear libcall_block_tail_insn appropriately.
+
+ * haifa-sched.c (schedule_block): Do not count USE or CLOBBER
+ insns against the issue rate.
+
+ 2002-05-30 Jeff Law
+
+ * flow.c (propagate_one_insn): Revise yesterday's patch. Delete
+ a dead insn with a REG_RETVAL note when the entire libcall is not
+ dead and remove the associated REG_LIBCALL note at the same time.
+
+ 2002-05-29 Jeff Law
+
+ * flow.c (propagate_one_insn): Do not remove a dead insn if it
+ contains a REG_RETVAL note.
+
+ * haifa-sched (sched_analyze): Remove another useless clearing
+ of SCHED_GROUP_P I missed yesterday.
+
+ 2002-05-28 David Edelsohn
+ Jeff Law
+
+ * optabs.c (expand_binop): Fix nwords sign warnings.
+ generate pseudo for add_optab.
+
+ * sched-deps.c (sched_analyze): Do not clear SCHED_GROUP_P.
+ * haifa-sched.c (move_insn): Clear SCHED_GROUP_P after it is used.
+
+ 2002-08-18 Neil Booth
+
+ PR preprocessor/7602
+ * cppinit.c (path_include): Treat the system environment
+ variables as being cxx_aware.
+
+ 2002-08-16 David Edelsohn
+
+ * collect2.c (is_ctor_dtor): Add other possible JOINER values.
+
+ * config/rs6000/rs6000.c (output_mi_thunk): Return to function
+ section on TARGET_ELF.
+
+ * doc/install.texi (*-ibm-aix*): Explain AIX shared object versioning.
+ (Binaries): Update Bull Freeware URL.
+
+ 2002-08-15 Neil Booth
+
+ PR preprocessor/7358
+ PR preprocessor/7357
+ PR preprocessor/7526
+ * cppfiles.c (stack_include_file): Ignore main file if
+ appropriate. Correct test of whether a dependency should
+ be output.
+ * cppinit.c (init_dependency_output): Ignore main file
+ for SUNPRO_DEPENDENCIES.
+ (struct lang_flags): Rename trigraphs std.
+ (set_lang): Update.
+ * cpplib.c (run_directive): Kludge so _Pragma dependency works.
+ * cpplib.h (struct cpp_options): New members.
+ * cppmacro.c (collect_args): Flag whether to swallow a possible
+ future comma pasted with varargs.
+ (replace_args): Use this flag.
+ * doc/cpp.texi: Update varargs extension documentation.
+ * doc/cppenv.texi: Update.
+
2002-08-14 Release Manager
* GCC 3.2 Released.
***************
*** 105,111 ****
instead of gen_rtx_SUBREG.
(arm_reload_out_hi): Use gen_lowpart instead of
gen_rtx_SUBREG to access QImode components.
! * config/arm/arm.md: Disable zero_extend split for QImode
subregs in BIG_ENDIAN mode.
(storehi_bigend): Match use of least significant byte.
(storeinthi): Remove extraneous SUBREG.
--- 1103,1109 ----
instead of gen_rtx_SUBREG.
(arm_reload_out_hi): Use gen_lowpart instead of
gen_rtx_SUBREG to access QImode components.
! * config/arm/arm.md: Disable zero_extend split for QImode
subregs in BIG_ENDIAN mode.
(storehi_bigend): Match use of least significant byte.
(storeinthi): Remove extraneous SUBREG.
***************
*** 191,197 ****
* config/m68hc11/m68hc11.md ("*movqi_68hc12"): Avoid allocating
QI mode registers in soft registers.
! ("zero_extendqihi2"): Do not take into account soft registers
for register allocation (use '*' constraint).
2002-07-05 Stephane Carrez
--- 1189,1195 ----
* config/m68hc11/m68hc11.md ("*movqi_68hc12"): Avoid allocating
QI mode registers in soft registers.
! ("zero_extendqihi2"): Do not take into account soft registers
for register allocation (use '*' constraint).
2002-07-05 Stephane Carrez
***************
*** 212,218 ****
* dwarfout.c (output_reg_number): Fix warning message.
(output_bound_representation): Check SAVE_EXPR_RTL is not NULL
before using it.
!
2002-07-03 Richard Henderson
* config/i386/i386.md (prologue_get_pc): Issue pop here ...
--- 1210,1216 ----
* dwarfout.c (output_reg_number): Fix warning message.
(output_bound_representation): Check SAVE_EXPR_RTL is not NULL
before using it.
!
2002-07-03 Richard Henderson
* config/i386/i386.md (prologue_get_pc): Issue pop here ...
***************
*** 255,261 ****
* config/m68hc11/m68hc11.md ("*addsi3"): Use 'o' constraint to
avoid the auto increment addressing modes.
("*subsi3"): Likewise.
! (split for add/sub on address): For 68HC12 push the value on
the stack and do the operation with a pop.
2002-06-28 Stephane Carrez
--- 1253,1259 ----
* config/m68hc11/m68hc11.md ("*addsi3"): Use 'o' constraint to
avoid the auto increment addressing modes.
("*subsi3"): Likewise.
! (split for add/sub on address): For 68HC12 push the value on
the stack and do the operation with a pop.
2002-06-28 Stephane Carrez
***************
*** 302,308 ****
* config/xtensa/xtensa.h (ASM_OUTPUT_POOL_PROLOGUE): Pass
flag_function_sections as new 3rd arg to resolve_unique_section.
!
2002-06-27 Neil Booth
PR preprocessor/7070
--- 1300,1306 ----
* config/xtensa/xtensa.h (ASM_OUTPUT_POOL_PROLOGUE): Pass
flag_function_sections as new 3rd arg to resolve_unique_section.
!
2002-06-27 Neil Booth
PR preprocessor/7070
***************
*** 318,324 ****
* doc/install.texi: Change ` bit' to `-bit'.
* doc/md.texi: Change `-bits' to `-bit'.
* doc/tm.texi: Change `-bits' to ` bits'.
!
2002-06-24 David S. Miller
* config/sparc/sparc.h (INIT_TARGET_OPTABS): If ARCH64, set the
--- 1316,1322 ----
* doc/install.texi: Change ` bit' to `-bit'.
* doc/md.texi: Change `-bits' to `-bit'.
* doc/tm.texi: Change `-bits' to ` bits'.
!
2002-06-24 David S. Miller
* config/sparc/sparc.h (INIT_TARGET_OPTABS): If ARCH64, set the
diff -Nrc3pad gcc-3.2/gcc/Makefile.in gcc-3.2.1/gcc/Makefile.in
*** gcc-3.2/gcc/Makefile.in Thu May 23 17:57:21 2002
--- gcc-3.2.1/gcc/Makefile.in Mon Oct 14 21:04:16 2002
*************** libgcc.mk: config.status Makefile mklibg
*** 1003,1009 ****
SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
! SHLIB_SLIBDIR_SUFFIXES='$(SHLIB_SLIBDIR_SUFFIXES)' \
mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \
$(SHELL) mklibgcc > tmp-libgcc.mk
mv tmp-libgcc.mk libgcc.mk
--- 1003,1009 ----
SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
! MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \
$(SHELL) mklibgcc > tmp-libgcc.mk
mv tmp-libgcc.mk libgcc.mk
*************** libgcc.a: $(LIBGCC_DEPS)
*** 1037,1043 ****
# switches.
multilib.h: s-mlib; @true
s-mlib: $(srcdir)/genmultilib Makefile
! if test @enable_multilib@ = yes; then \
$(SHELL) $(srcdir)/genmultilib \
"$(MULTILIB_OPTIONS)" \
"$(MULTILIB_DIRNAMES)" \
--- 1037,1044 ----
# switches.
multilib.h: s-mlib; @true
s-mlib: $(srcdir)/genmultilib Makefile
! if test @enable_multilib@ = yes \
! || test -n "$(MULTILIB_OSDIRNAMES)"; then \
$(SHELL) $(srcdir)/genmultilib \
"$(MULTILIB_OPTIONS)" \
"$(MULTILIB_DIRNAMES)" \
*************** s-mlib: $(srcdir)/genmultilib Makefile
*** 1045,1053 ****
"$(MULTILIB_EXCEPTIONS)" \
"$(MULTILIB_EXTRA_OPTS)" \
"$(MULTILIB_EXCLUSIONS)" \
> tmp-mlib.h; \
else \
! $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' > tmp-mlib.h; \
fi
$(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
$(STAMP) s-mlib
--- 1046,1057 ----
"$(MULTILIB_EXCEPTIONS)" \
"$(MULTILIB_EXTRA_OPTS)" \
"$(MULTILIB_EXCLUSIONS)" \
+ "$(MULTILIB_OSDIRNAMES)" \
+ "@enable_multilib@" \
> tmp-mlib.h; \
else \
! $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
! > tmp-mlib.h; \
fi
$(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
$(STAMP) s-mlib
*************** varasm.o : varasm.c $(CONFIG_H) $(SYSTEM
*** 1379,1385 ****
$(HASHTAB_H) $(TARGET_H) langhooks.h
function.o : function.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
function.h $(EXPR_H) libfuncs.h $(REGS_H) hard-reg-set.h \
! insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H) $(TM_P_H)
stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
$(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H)
--- 1383,1390 ----
$(HASHTAB_H) $(TARGET_H) langhooks.h
function.o : function.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
function.h $(EXPR_H) libfuncs.h $(REGS_H) hard-reg-set.h \
! insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H) \
! $(TM_P_H) langhooks.h
stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
$(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H)
*************** $(docdir)/gcc.info: $(docdir)/gcc.texi $
*** 2273,2279 ****
$(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
$(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
$(docdir)/bugreport.texi $(docdir)/service.texi \
! $(docdir)/contribute.texi $(docdir)/vms.texi \
$(docdir)/include/funding.texi $(docdir)/gnu.texi \
$(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
$(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
--- 2278,2284 ----
$(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
$(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
$(docdir)/bugreport.texi $(docdir)/service.texi \
! $(docdir)/contribute.texi $(docdir)/vms.texi $(docdir)/compat.texi \
$(docdir)/include/funding.texi $(docdir)/gnu.texi \
$(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
$(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
diff -Nrc3pad gcc-3.2/gcc/NEWS gcc-3.2.1/gcc/NEWS
*** gcc-3.2/gcc/NEWS Wed Aug 14 09:31:23 2002
--- gcc-3.2.1/gcc/NEWS Tue Nov 19 18:12:06 2002
*************** http://gcc.gnu.org/gcc-3.2/index.html
*** 9,47 ****
GCC 3.2
! August 14, 2002
The [1]GNU project and the GCC developers are pleased to announce the
release of GCC 3.2.
GCC used to stand for the GNU C Compiler, but since the compiler
supports several other languages aside from C, it now stands for the
GNU Compiler Collection.
! A list of [2]successful builds is updated as new information becomes
available.
The GCC developers would like to thank the numerous people that have
! contributed [3]new features, improvements, bug fixes, and other
! changes as well as test results to GCC. This [4]amazing group of
volunteers is what makes GCC successful.
! For additional information about GCC please refer to the [5]GCC
! project web site or contact the [6]GCC development mailing list.
! To obtain GCC please use [7]our mirror sites, one of the [8]GNU mirror
! sites, or [9]our CVS server.
_________________________________________________________________
_________________________________________________________________
! Please send FSF & GNU inquiries & questions to [10]gnu@gnu.org. There
! are also [11]other ways to contact the FSF.
! These pages are maintained by [12]The GCC team.
! Please send comments on these web pages and GCC to [13]gcc@gnu.org
! or [14]gcc@gcc.gnu.org, send other questions to [15]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 9,55 ----
GCC 3.2
! November 19, 2002
The [1]GNU project and the GCC developers are pleased to announce the
+ release of GCC 3.2.1.
+
+ The links below still apply to GCC 3.2.1.
+
+ August 14, 2002
+
+ The [2]GNU project and the GCC developers are pleased to announce the
release of GCC 3.2.
GCC used to stand for the GNU C Compiler, but since the compiler
supports several other languages aside from C, it now stands for the
GNU Compiler Collection.
! A list of [3]successful builds is updated as new information becomes
available.
The GCC developers would like to thank the numerous people that have
! contributed [4]new features, improvements, bug fixes, and other
! changes as well as test results to GCC. This [5]amazing group of
volunteers is what makes GCC successful.
! For additional information about GCC please refer to the [6]GCC
! project web site or contact the [7]GCC development mailing list.
! To obtain GCC please use [8]our mirror sites, one of the [9]GNU mirror
! sites, or [10]our CVS server.
_________________________________________________________________
_________________________________________________________________
! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There
! are also [12]other ways to contact the FSF.
! These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [14]gcc@gnu.org or [15]gcc@gcc.gnu.org, send other
! questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/gcc-3.2/index.html
*** 49,87 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-08-14 [16]Valid XHTML 1.0
References
1. http://www.gnu.org/
! 2. http://gcc.gnu.org/gcc-3.2/buildstat.html
! 3. http://gcc.gnu.org/gcc-3.2/changes.html
! 4. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
! 5. http://gcc.gnu.org/index.html
! 6. mailto:gcc@gcc.gnu.org
! 7. http://gcc.gnu.org/mirrors.html
! 8. http://www.gnu.org/order/ftp.html
! 9. http://gcc.gnu.org/cvs.html
! 10. mailto:gnu@gnu.org
! 11. http://www.gnu.org/home.html#ContactInfo
! 12. http://gcc.gnu.org/about.html
! 13. mailto:gcc@gnu.org
! 14. mailto:gcc@gcc.gnu.org
! 15. mailto:gnu@gnu.org
! 16. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.2/changes.html
! GCC 3.2 Changes, New Features, and Fixes
! Relase Notes
! See [1]this message for a list of bugs fixed in this released.
Caveats
* This GCC release is based on the GCC 3.1 sourcebase, and thus has
! all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has
a number of C++ ABI fixes which make its C++ compiler generate
binary code which is incompatible with the C++ compilers found in
earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
--- 57,144 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-18 [17]Valid XHTML 1.0
References
1. http://www.gnu.org/
! 2. http://www.gnu.org/
! 3. http://gcc.gnu.org/gcc-3.2/buildstat.html
! 4. http://gcc.gnu.org/gcc-3.2/changes.html
! 5. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
! 6. http://gcc.gnu.org/index.html
! 7. mailto:gcc@gcc.gnu.org
! 8. http://gcc.gnu.org/mirrors.html
! 9. http://www.gnu.org/order/ftp.html
! 10. http://gcc.gnu.org/cvs.html
! 11. mailto:gnu@gnu.org
! 12. http://www.gnu.org/home.html#ContactInfo
! 13. http://gcc.gnu.org/about.html
! 14. mailto:gcc@gnu.org
! 15. mailto:gcc@gcc.gnu.org
! 16. mailto:gnu@gnu.org
! 17. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.2/changes.html
! Changes in GCC 3.2.1
! C/C++/Objective-C
! * The method of constructing the list of directories to be searched
! for header files has been revised. If a directory named by a -I
! option is a standard system include directory, the option is
! ignored to ensure that the default search order for system
! directories and the special treatment of system header files are
! not defeated.
! * The C and Objective-C compilers no longer accept the "Naming
! Types" extension (typedef foo = bar); it was already unavailable
! in C++. Code which uses it will need to be changed to use the
! "typeof" extension instead: typedef typeof(bar) foo. (We have
! removed this extension without a period of deprecation because it
! has caused the compiler to crash since version 3.0 and no one
! noticed until very recently. Thus we conclude it is not in
! widespread use.)
!
! New Targets and Target Specific Improvements
!
! IA-32
!
! * Fixed a number of bugs in SSE and MMX intrinsics.
! * Fixed common compiler crashes with SSE instruction set enabled
! (implied by -march=pentium3, pentium4, athlon-xp)
! * __m128 and __m128i is not 128bit aligned when used in structures.
!
! x86-64
!
! * A bug whereby the compiler could generate bad code for bzero has
! been fixed.
! * ABI fixes (implying ABI incompatibilities with previous version in
! some corner cases)
! * Fixed prefetch code generation
!
! Bug Fixes
!
! See [1]this message for a list of bugs fixed in this release.
!
! Changes in GCC 3.2
!
! Bug Fixes
!
! See [2]this message for a list of bugs fixed in this release.
Caveats
+ * The C++ compiler does not correctly zero-initialize
+ pointers-to-data members. You must explicitly initialize them. For
+ example:
+ int S::*m(0);
+
+ will work, but depending on default-initialization to zero will
+ not work. This bug cannot be fixed in GCC 3.2 without inducing
+ unacceptable risks. It will be fixed in GCC 3.3.
* This GCC release is based on the GCC 3.1 sourcebase, and thus has
! all the [3]changes in the GCC 3.1 series. In addition, GCC 3.2 has
a number of C++ ABI fixes which make its C++ compiler generate
binary code which is incompatible with the C++ compilers found in
earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
*************** New Languages and Language specific impr
*** 99,123 ****
they are necessary for correct compilation of C++, as opposed to
conformance to the ABI documents.
* For details on how to build an ABI compliant compiler for
! GNU/Linux systems, check the [3]common C++ ABI page.
!
! New Targets and Target Specific Improvements
!
! x86-64
!
! * A bug whereby the complier could generated bad code for bzero has
! been fixed.
! *
_________________________________________________________________
! Please send FSF & GNU inquiries & questions to [4]gnu@gnu.org. There
! are also [5]other ways to contact the FSF.
! These pages are maintained by [6]The GCC team.
! Please send comments on these web pages and GCC to [7]gcc@gnu.org or
! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 156,173 ----
they are necessary for correct compilation of C++, as opposed to
conformance to the ABI documents.
* For details on how to build an ABI compliant compiler for
! GNU/Linux systems, check the [4]common C++ ABI page.
_________________________________________________________________
! Please send FSF & GNU inquiries & questions to [5]gnu@gnu.org. There
! are also [6]other ways to contact the FSF.
! These pages are maintained by [7]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [8]gcc@gnu.org or [9]gcc@gcc.gnu.org, send other
! questions to [10]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** New Targets and Target Specific Improvem
*** 125,144 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-08-14 [10]Valid XHTML 1.0
References
! 1. http://gcc.gnu.org/ml/gcc/2002-08/msg00405.html
! 2. http://gcc.gnu.org/gcc-3.1/changes.html
! 3. http://gcc.gnu.org/gcc-3.2/c++-abi.html
! 4. mailto:gnu@gnu.org
! 5. http://www.gnu.org/home.html#ContactInfo
! 6. http://gcc.gnu.org/about.html
! 7. mailto:gcc@gnu.org
! 8. mailto:gcc@gcc.gnu.org
! 9. mailto:gnu@gnu.org
! 10. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.1/index.html
--- 175,195 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-18 [11]Valid XHTML 1.0
References
! 1. http://gcc.gnu.org/ml/gcc/2002-11/msg00445.html
! 2. http://gcc.gnu.org/ml/gcc/2002-08/msg00405.html
! 3. http://gcc.gnu.org/gcc-3.1/changes.html
! 4. http://gcc.gnu.org/gcc-3.2/c++-abi.html
! 5. mailto:gnu@gnu.org
! 6. http://www.gnu.org/home.html#ContactInfo
! 7. http://gcc.gnu.org/about.html
! 8. mailto:gcc@gnu.org
! 9. mailto:gcc@gcc.gnu.org
! 10. mailto:gnu@gnu.org
! 11. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-3.1/index.html
*************** http://gcc.gnu.org/gcc-3.1/index.html
*** 182,189 ****
These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to [14]gcc@gnu.org
! or [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 233,241 ----
These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [14]gcc@gnu.org or [15]gcc@gcc.gnu.org, send other
! questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/gcc-3.1/index.html
*** 191,197 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-28 [17]Valid XHTML 1.0
References
--- 243,249 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [17]Valid XHTML 1.0
References
*************** Documentation improvements
*** 544,551 ****
These pages are maintained by [21]The GCC team.
! Please send comments on these web pages and GCC to [22]gcc@gnu.org
! or [23]gcc@gcc.gnu.org, send other questions to [24]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 596,604 ----
These pages are maintained by [21]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [22]gcc@gnu.org or [23]gcc@gcc.gnu.org, send other
! questions to [24]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** Documentation improvements
*** 553,559 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-26 [25]Valid XHTML 1.0
References
--- 606,612 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [25]Valid XHTML 1.0
References
*************** References
*** 565,571 ****
6. http://www.codesourcery.com/
7. http://gcc.gnu.org/gcc-3.1/c99status.html
8. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#4_1
! 9. http://gcc.gnu.org/onlinedocs/g77_news.html
10. http://www.gnat.com/
11. http://www-cs-faculty.stanford.edu/~knuth/mmix.html
12. http://www.axis.com/
--- 618,624 ----
6. http://www.codesourcery.com/
7. http://gcc.gnu.org/gcc-3.1/c99status.html
8. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#4_1
! 9. http://gcc.gnu.org/onlinedocs/g77/News.html
10. http://www.gnat.com/
11. http://www-cs-faculty.stanford.edu/~knuth/mmix.html
12. http://www.axis.com/
*************** Previous 3.0.x Releases
*** 632,639 ****
These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to [14]gcc@gnu.org
! or [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 685,693 ----
These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [14]gcc@gnu.org or [15]gcc@gcc.gnu.org, send other
! questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** Previous 3.0.x Releases
*** 641,647 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [17]Valid XHTML 1.0
References
--- 695,701 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [17]Valid XHTML 1.0
References
*************** Other significant improvements
*** 832,839 ****
These pages are maintained by [16]The GCC team.
! Please send comments on these web pages and GCC to [17]gcc@gnu.org
! or [18]gcc@gcc.gnu.org, send other questions to [19]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 886,894 ----
These pages are maintained by [16]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [17]gcc@gnu.org or [18]gcc@gcc.gnu.org, send other
! questions to [19]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** Other significant improvements
*** 841,847 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [20]Valid XHTML 1.0
References
--- 896,902 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [20]Valid XHTML 1.0
References
*************** References
*** 855,861 ****
8. http://gcc.gnu.org/news/inlining.html
9. http://gcc.gnu.org/news/dependencies.html
10. http://gcc.gnu.org/gcc-3.0/c99status.html
! 11. http://gcc.gnu.org/onlinedocs/g77_news.html
12. http://gcc.gnu.org/gcc-3.0/libgcc.html
13. http://gcc.gnu.org/gcc-2.95/features.html
14. mailto:gnu@gnu.org
--- 910,916 ----
8. http://gcc.gnu.org/news/inlining.html
9. http://gcc.gnu.org/news/dependencies.html
10. http://gcc.gnu.org/gcc-3.0/c99status.html
! 11. http://gcc.gnu.org/onlinedocs/g77/News.html
12. http://gcc.gnu.org/gcc-3.0/libgcc.html
13. http://gcc.gnu.org/gcc-2.95/features.html
14. mailto:gnu@gnu.org
*************** http://gcc.gnu.org/gcc-3.0/caveats.html
*** 910,917 ****
These pages are maintained by [6]The GCC team.
! Please send comments on these web pages and GCC to [7]gcc@gnu.org or
! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 965,973 ----
These pages are maintained by [6]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [7]gcc@gnu.org or [8]gcc@gcc.gnu.org, send other
! questions to [9]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/gcc-3.0/caveats.html
*** 919,925 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-08-14 [10]Valid XHTML 1.0
References
--- 975,981 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [10]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/gcc-2.95/index.html
*** 988,995 ****
These pages are maintained by [15]The GCC team.
! Please send comments on these web pages and GCC to [16]gcc@gnu.org
! or [17]gcc@gcc.gnu.org, send other questions to [18]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1044,1052 ----
These pages are maintained by [15]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org, send other
! questions to [18]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/gcc-2.95/index.html
*** 997,1003 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [19]Valid XHTML 1.0
References
--- 1054,1060 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [19]Valid XHTML 1.0
References
*************** Additional Changes in GCC 2.95.3
*** 1261,1268 ****
These pages are maintained by [20]The GCC team.
! Please send comments on these web pages and GCC to [21]gcc@gnu.org
! or [22]gcc@gcc.gnu.org, send other questions to [23]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1318,1326 ----
These pages are maintained by [20]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [21]gcc@gnu.org or [22]gcc@gcc.gnu.org, send other
! questions to [23]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** Additional Changes in GCC 2.95.3
*** 1270,1276 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [24]Valid XHTML 1.0
References
--- 1328,1334 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [24]Valid XHTML 1.0
References
*************** References
*** 1283,1289 ****
7. http://gcc.gnu.org/news/alias.html
8. http://gcc.gnu.org/fom_serv/cache/24.html
9. http://gcc.gnu.org/gcc-2.95/c++features.html
! 10. http://gcc.gnu.org/onlinedocs/g77_news.html
11. http://gcc.gnu.org/java/gcj-announce.txt
12. http://gcc.gnu.org/news/javaannounce.html
13. http://gcc.gnu.org/c99status.html
--- 1341,1347 ----
7. http://gcc.gnu.org/news/alias.html
8. http://gcc.gnu.org/fom_serv/cache/24.html
9. http://gcc.gnu.org/gcc-2.95/c++features.html
! 10. http://gcc.gnu.org/onlinedocs/g77/News.html
11. http://gcc.gnu.org/java/gcj-announce.txt
12. http://gcc.gnu.org/news/javaannounce.html
13. http://gcc.gnu.org/c99status.html
*************** http://gcc.gnu.org/gcc-2.95/caveats.html
*** 1350,1357 ****
These pages are maintained by [6]The GCC team.
! Please send comments on these web pages and GCC to [7]gcc@gnu.org or
! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1408,1416 ----
These pages are maintained by [6]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [7]gcc@gnu.org or [8]gcc@gcc.gnu.org, send other
! questions to [9]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/gcc-2.95/caveats.html
*** 1359,1365 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [10]Valid XHTML 1.0
References
--- 1418,1424 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [10]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.1/index.html
*** 1578,1585 ****
These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to [14]gcc@gnu.org
! or [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1637,1645 ----
These pages are maintained by [13]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [14]gcc@gnu.org or [15]gcc@gcc.gnu.org, send other
! questions to [16]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.1/index.html
*** 1587,1593 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [17]Valid XHTML 1.0
References
--- 1647,1653 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [17]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.1/features.htm
*** 1684,1691 ****
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to [9]gcc@gnu.org or
! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1744,1752 ----
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org, send other
! questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.1/features.htm
*** 1693,1703 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [12]Valid XHTML 1.0
References
! 1. http://gcc.gnu.org/onlinedocs/g77_news.html
2. http://gcc.gnu.org/egcs-1.1/c++features.html
3. http://gcc.gnu.org/news/gcse.html
4. http://gcc.gnu.org/news/alias.html
--- 1754,1764 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [12]Valid XHTML 1.0
References
! 1. http://gcc.gnu.org/onlinedocs/g77/News.html
2. http://gcc.gnu.org/egcs-1.1/c++features.html
3. http://gcc.gnu.org/news/gcse.html
4. http://gcc.gnu.org/news/alias.html
*************** http://gcc.gnu.org/egcs-1.1/caveats.html
*** 1744,1751 ****
These pages are maintained by [4]The GCC team.
! Please send comments on these web pages and GCC to [5]gcc@gnu.org or
! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1805,1813 ----
These pages are maintained by [4]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [5]gcc@gnu.org or [6]gcc@gcc.gnu.org, send other
! questions to [7]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.1/caveats.html
*** 1753,1759 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [8]Valid XHTML 1.0
References
--- 1815,1821 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [8]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h
*** 1848,1855 ****
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to [9]gcc@gnu.org or
! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 1910,1918 ----
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org, send other
! questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h
*** 1857,1863 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [12]Valid XHTML 1.0
References
--- 1920,1926 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [12]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h
*** 1987,1994 ****
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to [9]gcc@gnu.org or
! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 2050,2058 ----
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org, send other
! questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h
*** 1996,2002 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [12]Valid XHTML 1.0
References
--- 2060,2066 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [12]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h
*** 2126,2133 ****
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to [9]gcc@gnu.org or
! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 2190,2198 ----
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org, send other
! questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h
*** 2135,2141 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [12]Valid XHTML 1.0
References
--- 2200,2206 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [12]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm
*** 2222,2229 ****
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to [9]gcc@gnu.org or
! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 2287,2295 ----
These pages are maintained by [8]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org, send other
! questions to [11]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm
*** 2231,2237 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [12]Valid XHTML 1.0
References
--- 2297,2303 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [12]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.0/features.htm
*** 2295,2302 ****
These pages are maintained by [5]The GCC team.
! Please send comments on these web pages and GCC to [6]gcc@gnu.org or
! [7]gcc@gcc.gnu.org, send other questions to [8]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 2361,2369 ----
These pages are maintained by [5]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [6]gcc@gnu.org or [7]gcc@gcc.gnu.org, send other
! questions to [8]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.0/features.htm
*** 2304,2310 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [9]Valid XHTML 1.0
References
--- 2371,2377 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [9]Valid XHTML 1.0
References
*************** http://gcc.gnu.org/egcs-1.0/caveats.html
*** 2354,2361 ****
These pages are maintained by [4]The GCC team.
! Please send comments on these web pages and GCC to [5]gcc@gnu.org or
! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
--- 2421,2429 ----
These pages are maintained by [4]The GCC team.
! Please send comments on these web pages and GCC to our public
! mailing list at [5]gcc@gnu.org or [6]gcc@gcc.gnu.org, send other
! questions to [7]gnu@gnu.org.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite
330, Boston, MA 02111, USA.
*************** http://gcc.gnu.org/egcs-1.0/caveats.html
*** 2363,2369 ****
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-07-17 [8]Valid XHTML 1.0
References
--- 2431,2437 ----
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
! Last modified 2002-11-11 [8]Valid XHTML 1.0
References
diff -Nrc3pad gcc-3.2/gcc/alias.c gcc-3.2.1/gcc/alias.c
*** gcc-3.2/gcc/alias.c Thu Jun 20 07:35:41 2002
--- gcc-3.2.1/gcc/alias.c Mon Oct 14 21:04:16 2002
***************
*** 1,5 ****
/* Alias analysis for GNU C
! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Contributed by John Carr (jfc@mit.edu).
This file is part of GCC.
--- 1,5 ----
/* Alias analysis for GNU C
! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by John Carr (jfc@mit.edu).
This file is part of GCC.
*************** objects_must_conflict_p (t1, t2)
*** 321,328 ****
then they may not conflict. */
if ((t1 != 0 && readonly_fields_p (t1))
|| (t2 != 0 && readonly_fields_p (t2))
! || (t1 != 0 && TYPE_READONLY (t1))
! || (t2 != 0 && TYPE_READONLY (t2)))
return 0;
/* If they are the same type, they must conflict. */
--- 321,328 ----
then they may not conflict. */
if ((t1 != 0 && readonly_fields_p (t1))
|| (t2 != 0 && readonly_fields_p (t2))
! || (t1 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t1))
! || (t2 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t2)))
return 0;
/* If they are the same type, they must conflict. */
diff -Nrc3pad gcc-3.2/gcc/c-common.c gcc-3.2.1/gcc/c-common.c
*** gcc-3.2/gcc/c-common.c Thu Jun 20 07:35:43 2002
--- gcc-3.2.1/gcc/c-common.c Wed Aug 28 21:17:12 2002
*************** c_expand_expr (exp, target, tmode, modif
*** 3564,3569 ****
--- 3564,3570 ----
tree rtl_expr;
rtx result;
bool preserve_result = false;
+ bool return_target = false;
/* Since expand_expr_stmt calls free_temp_slots after every
expression statement, we must call push_temp_slots here.
*************** c_expand_expr (exp, target, tmode, modif
*** 3591,3598 ****
if (TREE_CODE (last) == SCOPE_STMT
&& TREE_CODE (expr) == EXPR_STMT)
{
! TREE_ADDRESSABLE (expr) = 1;
! preserve_result = true;
}
}
--- 3592,3611 ----
if (TREE_CODE (last) == SCOPE_STMT
&& TREE_CODE (expr) == EXPR_STMT)
{
! if (target && TREE_CODE (EXPR_STMT_EXPR (expr)) == VAR_DECL
! && DECL_RTL_IF_SET (EXPR_STMT_EXPR (expr)) == target)
! /* If the last expression is a variable whose RTL is the
! same as our target, just return the target; if it
! isn't valid expanding the decl would produce different
! RTL, and store_expr would try to do a copy. */
! return_target = true;
! else
! {
! /* Otherwise, note that we want the value from the last
! expression. */
! TREE_ADDRESSABLE (expr) = 1;
! preserve_result = true;
! }
}
}
*************** c_expand_expr (exp, target, tmode, modif
*** 3600,3606 ****
expand_end_stmt_expr (rtl_expr);
result = expand_expr (rtl_expr, target, tmode, modifier);
! if (preserve_result && GET_CODE (result) == MEM)
{
if (GET_MODE (result) != BLKmode)
result = copy_to_reg (result);
--- 3613,3621 ----
expand_end_stmt_expr (rtl_expr);
result = expand_expr (rtl_expr, target, tmode, modifier);
! if (return_target)
! result = target;
! else if (preserve_result && GET_CODE (result) == MEM)
{
if (GET_MODE (result) != BLKmode)
result = copy_to_reg (result);
diff -Nrc3pad gcc-3.2/gcc/c-common.h gcc-3.2.1/gcc/c-common.h
*** gcc-3.2/gcc/c-common.h Wed Apr 17 01:43:56 2002
--- gcc-3.2.1/gcc/c-common.h Sun Sep 1 20:11:06 2002
*************** extern int warn_conversion;
*** 464,469 ****
--- 464,474 ----
extern int warn_long_long;
+ /* Nonzero means the expression being parsed will never be evaluated.
+ This is a count, since unevaluated expressions can nest. */
+
+ extern int skip_evaluation;
+
/* C types are partitioned into three subsets: object, function, and
incomplete types. */
#define C_TYPE_OBJECT_P(type) \
diff -Nrc3pad gcc-3.2/gcc/c-decl.c gcc-3.2.1/gcc/c-decl.c
*** gcc-3.2/gcc/c-decl.c Fri Jul 26 23:23:03 2002
--- gcc-3.2.1/gcc/c-decl.c Sat Oct 19 03:17:39 2002
*************** start_decl (declarator, declspecs, initi
*** 3485,3499 ****
switch (TREE_CODE (decl))
{
case TYPE_DECL:
! /* typedef foo = bar means give foo the same type as bar.
! We haven't parsed bar yet, so `finish_decl' will fix that up.
! Any other case of an initialization in a TYPE_DECL is an error. */
! if (pedantic || list_length (declspecs) > 1)
! {
! error ("typedef `%s' is initialized",
! IDENTIFIER_POINTER (DECL_NAME (decl)));
! initialized = 0;
! }
break;
case FUNCTION_DECL:
--- 3485,3493 ----
switch (TREE_CODE (decl))
{
case TYPE_DECL:
! error ("typedef `%s' is initialized (use __typeof__ instead)",
! IDENTIFIER_POINTER (DECL_NAME (decl)));
! initialized = 0;
break;
case FUNCTION_DECL:
*************** finish_decl (decl, init, asmspec_tree)
*** 3642,3657 ****
init = 0;
if (init)
! {
! if (TREE_CODE (decl) != TYPE_DECL)
! store_init_value (decl, init);
! else
! {
! /* typedef foo = bar; store the type of bar as the type of foo. */
! TREE_TYPE (decl) = TREE_TYPE (init);
! DECL_INITIAL (decl) = init = 0;
! }
! }
/* Deduce size of array from initialization, if not already known */
if (TREE_CODE (type) == ARRAY_TYPE
--- 3636,3642 ----
init = 0;
if (init)
! store_init_value (decl, init);
/* Deduce size of array from initialization, if not already known */
if (TREE_CODE (type) == ARRAY_TYPE
diff -Nrc3pad gcc-3.2/gcc/c-objc-common.c gcc-3.2.1/gcc/c-objc-common.c
*** gcc-3.2/gcc/c-objc-common.c Thu Mar 28 18:49:58 2002
--- gcc-3.2.1/gcc/c-objc-common.c Fri Oct 25 22:11:08 2002
*************** inline_forbidden_p (nodep, walk_subtrees
*** 131,136 ****
--- 131,152 ----
break;
+ case RECORD_TYPE:
+ case UNION_TYPE:
+ /* We cannot inline a function of the form
+
+ void F (int i) { struct S { int ar[i]; } s; }
+
+ Attempting to do so produces a catch-22 in tree-inline.c.
+ If walk_tree examines the TYPE_FIELDS chain of RECORD_TYPE/
+ UNION_TYPE nodes, then it goes into infinite recursion on a
+ structure containing a pointer to its own type. If it doesn't,
+ then the type node for S doesn't get adjusted properly when
+ F is inlined, and we abort in find_function_data. */
+ for (t = TYPE_FIELDS (node); t; t = TREE_CHAIN (t))
+ if (variably_modified_type_p (TREE_TYPE (t)))
+ return node;
+
default:
break;
}
*************** c_cannot_inline_tree_fn (fnp)
*** 149,154 ****
--- 165,178 ----
&& lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
return 1;
+ /* Don't auto-inline anything that might not be bound within
+ this unit of translation. */
+ if (!DECL_DECLARED_INLINE_P (fn) && flag_pic && TREE_PUBLIC (fn))
+ {
+ DECL_UNINLINABLE (fn) = 1;
+ return 1;
+ }
+
if (! function_attribute_inlinable_p (fn))
{
DECL_UNINLINABLE (fn) = 1;
diff -Nrc3pad gcc-3.2/gcc/c-parse.c gcc-3.2.1/gcc/c-parse.c
*** gcc-3.2/gcc/c-parse.c Wed Aug 14 09:32:35 2002
--- gcc-3.2.1/gcc/c-parse.c Tue Nov 19 18:13:17 2002
*************** c_parse_init ()
*** 199,209 ****
! #define YYFINAL 900
#define YYFLAG -32768
#define YYNTBASE 91
! #define YYTRANSLATE(x) ((unsigned)(x) <= 322 ? yytranslate[x] : 289)
static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
--- 199,209 ----
! #define YYFINAL 901
#define YYFLAG -32768
#define YYNTBASE 91
! #define YYTRANSLATE(x) ((unsigned)(x) <= 322 ? yytranslate[x] : 290)
static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
*************** static const short yyprhs[] = { 0,
*** 248,480 ****
62, 67, 68, 69, 79, 84, 85, 86, 95, 99,
101, 103, 105, 107, 109, 111, 113, 115, 117, 119,
120, 122, 124, 128, 130, 133, 136, 139, 142, 145,
! 150, 153, 158, 161, 164, 166, 168, 170, 175, 177,
! 181, 185, 189, 193, 197, 201, 205, 209, 213, 217,
! 221, 225, 226, 231, 232, 237, 238, 239, 247, 248,
! 254, 258, 262, 264, 266, 268, 270, 271, 279, 283,
! 287, 291, 295, 300, 307, 316, 323, 328, 332, 336,
! 339, 342, 344, 347, 348, 350, 353, 357, 359, 361,
! 364, 367, 372, 377, 380, 383, 387, 388, 390, 395,
! 400, 404, 408, 411, 414, 416, 419, 422, 425, 428,
! 431, 433, 436, 438, 441, 444, 447, 450, 453, 456,
! 458, 461, 464, 467, 470, 473, 476, 479, 482, 485,
! 488, 491, 494, 497, 500, 503, 506, 508, 511, 514,
! 517, 520, 523, 526, 529, 532, 535, 538, 541, 544,
! 547, 550, 553, 556, 559, 562, 565, 568, 571, 574,
! 577, 580, 583, 586, 589, 592, 595, 598, 601, 604,
! 607, 610, 613, 616, 619, 622, 625, 628, 631, 634,
! 637, 640, 642, 644, 646, 648, 650, 652, 654, 656,
658, 660, 662, 664, 666, 668, 670, 672, 674, 676,
678, 680, 682, 684, 686, 688, 690, 692, 694, 696,
698, 700, 702, 704, 706, 708, 710, 712, 714, 716,
718, 720, 722, 724, 726, 728, 730, 732, 734, 736,
! 738, 740, 742, 744, 746, 748, 750, 752, 753, 755,
! 757, 759, 761, 763, 765, 767, 769, 774, 779, 781,
! 786, 788, 793, 794, 799, 800, 807, 811, 812, 819,
! 823, 824, 826, 828, 831, 838, 840, 844, 845, 847,
! 852, 859, 864, 866, 868, 870, 872, 874, 875, 880,
! 882, 883, 886, 888, 892, 896, 899, 900, 905, 907,
! 908, 913, 915, 917, 919, 922, 925, 931, 935, 936,
! 937, 945, 946, 947, 955, 957, 959, 964, 968, 971,
! 975, 977, 979, 981, 985, 988, 990, 994, 997, 1001,
! 1005, 1010, 1014, 1019, 1023, 1026, 1028, 1030, 1033, 1035,
! 1038, 1040, 1043, 1044, 1052, 1058, 1059, 1067, 1073, 1074,
! 1083, 1084, 1092, 1095, 1098, 1101, 1102, 1104, 1105, 1107,
! 1109, 1112, 1113, 1117, 1120, 1124, 1129, 1133, 1135, 1137,
! 1140, 1142, 1147, 1149, 1154, 1159, 1166, 1172, 1177, 1184,
! 1190, 1192, 1196, 1198, 1200, 1204, 1205, 1209, 1210, 1212,
! 1213, 1215, 1218, 1220, 1222, 1224, 1228, 1231, 1235, 1240,
! 1244, 1247, 1250, 1252, 1256, 1261, 1264, 1268, 1272, 1277,
! 1282, 1288, 1294, 1296, 1298, 1300, 1302, 1304, 1307, 1310,
! 1313, 1316, 1318, 1321, 1324, 1327, 1329, 1332, 1335, 1338,
! 1341, 1343, 1346, 1348, 1350, 1352, 1354, 1357, 1358, 1359,
! 1360, 1361, 1362, 1364, 1366, 1369, 1373, 1375, 1378, 1380,
! 1382, 1388, 1390, 1392, 1395, 1398, 1401, 1404, 1405, 1411,
! 1412, 1417, 1418, 1419, 1421, 1424, 1428, 1432, 1436, 1437,
! 1442, 1444, 1448, 1449, 1450, 1458, 1464, 1467, 1468, 1469,
! 1470, 1471, 1484, 1485, 1492, 1495, 1497, 1499, 1502, 1506,
! 1509, 1512, 1515, 1519, 1526, 1535, 1546, 1559, 1563, 1568,
! 1570, 1574, 1580, 1583, 1589, 1590, 1592, 1593, 1595, 1596,
! 1598, 1600, 1604, 1609, 1617, 1619, 1623, 1624, 1628, 1631,
! 1632, 1633, 1640, 1643, 1644, 1646, 1648, 1652, 1654, 1658,
! 1663, 1668, 1672, 1677, 1681, 1686, 1691, 1695, 1700, 1704,
! 1706, 1707, 1711, 1713, 1716, 1718, 1722, 1724, 1728
};
static const short yyrhs[] = { -1,
92, 0, 0, 93, 95, 0, 0, 92, 94, 95,
0, 97, 0, 96, 0, 27, 67, 106, 83, 84,
! 0, 288, 95, 0, 127, 161, 84, 0, 147, 127,
! 161, 84, 0, 146, 127, 160, 84, 0, 153, 84,
0, 1, 84, 0, 1, 85, 0, 84, 0, 0,
! 0, 146, 127, 189, 98, 122, 99, 249, 250, 238,
! 0, 146, 127, 189, 1, 0, 0, 0, 147, 127,
! 194, 100, 122, 101, 249, 250, 238, 0, 147, 127,
! 194, 1, 0, 0, 0, 127, 194, 102, 122, 103,
! 249, 250, 238, 0, 127, 194, 1, 0, 3, 0,
4, 0, 51, 0, 57, 0, 56, 0, 62, 0,
63, 0, 86, 0, 87, 0, 108, 0, 0, 108,
! 0, 113, 0, 108, 88, 113, 0, 119, 0, 58,
! 112, 0, 288, 112, 0, 105, 112, 0, 48, 104,
! 0, 110, 109, 0, 110, 67, 215, 83, 0, 111,
! 109, 0, 111, 67, 215, 83, 0, 33, 112, 0,
! 34, 112, 0, 11, 0, 29, 0, 109, 0, 67,
! 215, 83, 112, 0, 112, 0, 113, 56, 113, 0,
! 113, 57, 113, 0, 113, 58, 113, 0, 113, 59,
! 113, 0, 113, 60, 113, 0, 113, 54, 113, 0,
! 113, 55, 113, 0, 113, 53, 113, 0, 113, 52,
! 113, 0, 113, 51, 113, 0, 113, 49, 113, 0,
! 113, 50, 113, 0, 0, 113, 48, 114, 113, 0,
! 0, 113, 47, 115, 113, 0, 0, 0, 113, 45,
! 116, 106, 46, 117, 113, 0, 0, 113, 45, 118,
! 46, 113, 0, 113, 44, 113, 0, 113, 43, 113,
! 0, 3, 0, 8, 0, 121, 0, 42, 0, 0,
! 67, 215, 83, 89, 120, 175, 85, 0, 67, 106,
! 83, 0, 67, 1, 83, 0, 242, 240, 83, 0,
! 242, 1, 83, 0, 119, 67, 107, 83, 0, 35,
! 67, 113, 88, 215, 83, 0, 36, 67, 113, 88,
! 113, 88, 113, 83, 0, 37, 67, 215, 88, 215,
! 83, 0, 119, 68, 106, 90, 0, 119, 66, 104,
! 0, 119, 65, 104, 0, 119, 62, 0, 119, 63,
! 0, 9, 0, 121, 9, 0, 0, 124, 0, 124,
! 10, 0, 249, 250, 125, 0, 123, 0, 230, 0,
! 124, 123, 0, 123, 230, 0, 148, 127, 160, 84,
! 0, 149, 127, 161, 84, 0, 148, 84, 0, 149,
! 84, 0, 249, 250, 129, 0, 0, 167, 0, 146,
! 127, 160, 84, 0, 147, 127, 161, 84, 0, 146,
! 127, 183, 0, 147, 127, 186, 0, 153, 84, 0,
! 288, 129, 0, 7, 0, 130, 7, 0, 131, 7,
! 0, 130, 168, 0, 132, 7, 0, 133, 7, 0,
! 168, 0, 132, 168, 0, 155, 0, 134, 7, 0,
! 135, 7, 0, 134, 157, 0, 135, 157, 0, 130,
! 155, 0, 131, 155, 0, 156, 0, 134, 168, 0,
! 134, 158, 0, 135, 158, 0, 130, 156, 0, 131,
! 156, 0, 136, 7, 0, 137, 7, 0, 136, 157,
! 0, 137, 157, 0, 132, 155, 0, 133, 155, 0,
! 136, 168, 0, 136, 158, 0, 137, 158, 0, 132,
! 156, 0, 133, 156, 0, 5, 0, 138, 7, 0,
! 139, 7, 0, 130, 5, 0, 131, 5, 0, 138,
! 5, 0, 139, 5, 0, 138, 168, 0, 140, 7,
! 0, 141, 7, 0, 132, 5, 0, 133, 5, 0,
! 140, 5, 0, 141, 5, 0, 140, 168, 0, 142,
! 7, 0, 143, 7, 0, 142, 157, 0, 143, 157,
! 0, 138, 155, 0, 139, 155, 0, 134, 5, 0,
! 135, 5, 0, 142, 5, 0, 143, 5, 0, 142,
! 168, 0, 142, 158, 0, 143, 158, 0, 138, 156,
! 0, 139, 156, 0, 144, 7, 0, 145, 7, 0,
! 144, 157, 0, 145, 157, 0, 140, 155, 0, 141,
! 155, 0, 136, 5, 0, 137, 5, 0, 144, 5,
! 0, 145, 5, 0, 144, 168, 0, 144, 158, 0,
! 145, 158, 0, 140, 156, 0, 141, 156, 0, 134,
! 0, 135, 0, 136, 0, 137, 0, 142, 0, 143,
! 0, 144, 0, 145, 0, 130, 0, 131, 0, 132,
! 0, 133, 0, 138, 0, 139, 0, 140, 0, 141,
! 0, 134, 0, 135, 0, 142, 0, 143, 0, 130,
! 0, 131, 0, 138, 0, 139, 0, 134, 0, 135,
! 0, 136, 0, 137, 0, 130, 0, 131, 0, 132,
0, 133, 0, 134, 0, 135, 0, 136, 0, 137,
! 0, 130, 0, 131, 0, 132, 0, 133, 0, 130,
0, 131, 0, 132, 0, 133, 0, 134, 0, 135,
0, 136, 0, 137, 0, 138, 0, 139, 0, 140,
0, 141, 0, 142, 0, 143, 0, 144, 0, 145,
! 0, 0, 151, 0, 157, 0, 159, 0, 158, 0,
! 6, 0, 203, 0, 198, 0, 4, 0, 28, 67,
! 106, 83, 0, 28, 67, 215, 83, 0, 163, 0,
! 160, 88, 128, 163, 0, 165, 0, 161, 88, 128,
! 165, 0, 0, 27, 67, 121, 83, 0, 0, 189,
! 162, 167, 44, 164, 173, 0, 189, 162, 167, 0,
! 0, 194, 162, 167, 44, 166, 173, 0, 194, 162,
! 167, 0, 0, 168, 0, 169, 0, 168, 169, 0,
! 30, 67, 67, 170, 83, 83, 0, 171, 0, 170,
! 88, 171, 0, 0, 172, 0, 172, 67, 3, 83,
! 0, 172, 67, 3, 88, 108, 83, 0, 172, 67,
! 107, 83, 0, 104, 0, 5, 0, 6, 0, 7,
! 0, 113, 0, 0, 89, 174, 175, 85, 0, 1,
! 0, 0, 176, 204, 0, 177, 0, 176, 88, 177,
! 0, 181, 44, 179, 0, 182, 179, 0, 0, 104,
! 46, 178, 179, 0, 179, 0, 0, 89, 180, 175,
! 85, 0, 113, 0, 1, 0, 182, 0, 181, 182,
! 0, 66, 104, 0, 68, 113, 10, 113, 90, 0,
! 68, 113, 90, 0, 0, 0, 189, 184, 122, 185,
! 249, 250, 243, 0, 0, 0, 194, 187, 122, 188,
! 249, 250, 243, 0, 190, 0, 194, 0, 67, 167,
! 190, 83, 0, 190, 67, 283, 0, 190, 223, 0,
! 58, 154, 190, 0, 4, 0, 192, 0, 193, 0,
! 192, 67, 283, 0, 192, 223, 0, 4, 0, 193,
! 67, 283, 0, 193, 223, 0, 58, 154, 192, 0,
! 58, 154, 193, 0, 67, 167, 193, 83, 0, 194,
! 67, 283, 0, 67, 167, 194, 83, 0, 58, 154,
! 194, 0, 194, 223, 0, 3, 0, 13, 0, 13,
! 168, 0, 14, 0, 14, 168, 0, 12, 0, 12,
! 168, 0, 0, 195, 104, 89, 199, 206, 85, 167,
! 0, 195, 89, 206, 85, 167, 0, 0, 196, 104,
! 89, 200, 206, 85, 167, 0, 196, 89, 206, 85,
! 167, 0, 0, 197, 104, 89, 201, 213, 205, 85,
! 167, 0, 0, 197, 89, 202, 213, 205, 85, 167,
! 0, 195, 104, 0, 196, 104, 0, 197, 104, 0,
! 0, 88, 0, 0, 88, 0, 207, 0, 207, 208,
! 0, 0, 207, 208, 84, 0, 207, 84, 0, 150,
! 127, 209, 0, 150, 127, 249, 250, 0, 151, 127,
! 210, 0, 151, 0, 1, 0, 288, 208, 0, 211,
! 0, 209, 88, 128, 211, 0, 212, 0, 210, 88,
! 128, 212, 0, 249, 250, 189, 167, 0, 249, 250,
! 189, 46, 113, 167, 0, 249, 250, 46, 113, 167,
! 0, 249, 250, 194, 167, 0, 249, 250, 194, 46,
! 113, 167, 0, 249, 250, 46, 113, 167, 0, 214,
! 0, 213, 88, 214, 0, 1, 0, 104, 0, 104,
! 44, 113, 0, 0, 152, 216, 217, 0, 0, 219,
! 0, 0, 219, 0, 220, 168, 0, 221, 0, 220,
! 0, 222, 0, 58, 154, 220, 0, 58, 154, 0,
! 58, 154, 221, 0, 67, 167, 219, 83, 0, 222,
! 67, 273, 0, 222, 223, 0, 67, 273, 0, 223,
! 0, 68, 106, 90, 0, 68, 152, 106, 90, 0,
! 68, 90, 0, 68, 152, 90, 0, 68, 58, 90,
! 0, 68, 152, 58, 90, 0, 68, 5, 106, 90,
! 0, 68, 5, 152, 106, 90, 0, 68, 152, 5,
! 106, 90, 0, 225, 0, 226, 0, 227, 0, 228,
! 0, 253, 0, 225, 253, 0, 226, 253, 0, 227,
! 253, 0, 228, 253, 0, 126, 0, 225, 126, 0,
! 226, 126, 0, 228, 126, 0, 254, 0, 225, 254,
! 0, 226, 254, 0, 227, 254, 0, 228, 254, 0,
! 230, 0, 229, 230, 0, 225, 0, 226, 0, 227,
! 0, 228, 0, 1, 84, 0, 0, 0, 0, 0,
! 0, 236, 0, 237, 0, 236, 237, 0, 32, 287,
! 84, 0, 243, 0, 1, 243, 0, 89, 0, 85,
! 0, 231, 235, 241, 85, 232, 0, 224, 0, 1,
! 0, 67, 89, 0, 239, 240, 0, 245, 252, 0,
! 245, 1, 0, 0, 15, 246, 67, 106, 83, 0,
! 0, 18, 248, 252, 17, 0, 0, 0, 253, 0,
! 254, 251, 0, 233, 251, 234, 0, 249, 250, 265,
! 0, 249, 250, 266, 0, 0, 244, 16, 256, 252,
! 0, 244, 0, 244, 16, 1, 0, 0, 0, 17,
! 257, 67, 106, 83, 258, 252, 0, 247, 67, 106,
! 83, 84, 0, 247, 1, 0, 0, 0, 0, 0,
! 19, 259, 67, 264, 260, 268, 84, 261, 268, 83,
! 262, 252, 0, 0, 20, 67, 106, 83, 263, 252,
! 0, 268, 84, 0, 129, 0, 243, 0, 106, 84,
! 0, 233, 255, 234, 0, 23, 84, 0, 24, 84,
! 0, 25, 84, 0, 25, 106, 84, 0, 27, 267,
! 67, 106, 83, 84, 0, 27, 267, 67, 106, 46,
! 269, 83, 84, 0, 27, 267, 67, 106, 46, 269,
! 46, 269, 83, 84, 0, 27, 267, 67, 106, 46,
! 269, 46, 269, 46, 272, 83, 84, 0, 26, 104,
! 84, 0, 26, 58, 106, 84, 0, 84, 0, 21,
! 113, 46, 0, 21, 113, 10, 113, 46, 0, 22,
! 46, 0, 104, 249, 250, 46, 167, 0, 0, 7,
! 0, 0, 106, 0, 0, 270, 0, 271, 0, 270,
! 88, 271, 0, 9, 67, 106, 83, 0, 68, 104,
! 90, 9, 67, 106, 83, 0, 121, 0, 272, 88,
! 121, 0, 0, 167, 274, 275, 0, 278, 83, 0,
! 0, 0, 279, 84, 276, 167, 277, 275, 0, 1,
! 83, 0, 0, 10, 0, 279, 0, 279, 88, 10,
! 0, 281, 0, 279, 88, 280, 0, 146, 127, 191,
! 167, 0, 146, 127, 194, 167, 0, 146, 127, 218,
! 0, 147, 127, 194, 167, 0, 147, 127, 218, 0,
! 148, 282, 191, 167, 0, 148, 282, 194, 167, 0,
! 148, 282, 218, 0, 149, 282, 194, 167, 0, 149,
! 282, 218, 0, 127, 0, 0, 167, 284, 285, 0,
! 275, 0, 286, 83, 0, 3, 0, 286, 88, 3,
! 0, 104, 0, 287, 88, 104, 0, 31, 0
};
#endif
--- 248,481 ----
62, 67, 68, 69, 79, 84, 85, 86, 95, 99,
101, 103, 105, 107, 109, 111, 113, 115, 117, 119,
120, 122, 124, 128, 130, 133, 136, 139, 142, 145,
! 150, 153, 158, 161, 164, 166, 168, 170, 172, 177,
! 179, 183, 187, 191, 195, 199, 203, 207, 211, 215,
! 219, 223, 227, 228, 233, 234, 239, 240, 241, 249,
! 250, 256, 260, 264, 266, 268, 270, 272, 273, 281,
! 285, 289, 293, 297, 302, 309, 318, 325, 330, 334,
! 338, 341, 344, 346, 349, 350, 352, 355, 359, 361,
! 363, 366, 369, 374, 379, 382, 385, 389, 390, 392,
! 397, 402, 406, 410, 413, 416, 418, 421, 424, 427,
! 430, 433, 435, 438, 440, 443, 446, 449, 452, 455,
! 458, 460, 463, 466, 469, 472, 475, 478, 481, 484,
! 487, 490, 493, 496, 499, 502, 505, 508, 510, 513,
! 516, 519, 522, 525, 528, 531, 534, 537, 540, 543,
! 546, 549, 552, 555, 558, 561, 564, 567, 570, 573,
! 576, 579, 582, 585, 588, 591, 594, 597, 600, 603,
! 606, 609, 612, 615, 618, 621, 624, 627, 630, 633,
! 636, 639, 642, 644, 646, 648, 650, 652, 654, 656,
658, 660, 662, 664, 666, 668, 670, 672, 674, 676,
678, 680, 682, 684, 686, 688, 690, 692, 694, 696,
698, 700, 702, 704, 706, 708, 710, 712, 714, 716,
718, 720, 722, 724, 726, 728, 730, 732, 734, 736,
! 738, 740, 742, 744, 746, 748, 750, 752, 754, 755,
! 757, 759, 761, 763, 765, 767, 769, 771, 776, 781,
! 783, 788, 790, 795, 796, 801, 802, 809, 813, 814,
! 821, 825, 826, 828, 830, 833, 840, 842, 846, 847,
! 849, 854, 861, 866, 868, 870, 872, 874, 876, 877,
! 882, 884, 885, 888, 890, 894, 898, 901, 902, 907,
! 909, 910, 915, 917, 919, 921, 924, 927, 933, 937,
! 938, 939, 947, 948, 949, 957, 959, 961, 966, 970,
! 973, 977, 979, 981, 983, 987, 990, 992, 996, 999,
! 1003, 1007, 1012, 1016, 1021, 1025, 1028, 1030, 1032, 1035,
! 1037, 1040, 1042, 1045, 1046, 1054, 1060, 1061, 1069, 1075,
! 1076, 1085, 1086, 1094, 1097, 1100, 1103, 1104, 1106, 1107,
! 1109, 1111, 1114, 1115, 1119, 1122, 1126, 1131, 1135, 1137,
! 1139, 1142, 1144, 1149, 1151, 1156, 1161, 1168, 1174, 1179,
! 1186, 1192, 1194, 1198, 1200, 1202, 1206, 1207, 1211, 1212,
! 1214, 1215, 1217, 1220, 1222, 1224, 1226, 1230, 1233, 1237,
! 1242, 1246, 1249, 1252, 1254, 1258, 1263, 1266, 1270, 1274,
! 1279, 1284, 1290, 1296, 1298, 1300, 1302, 1304, 1306, 1309,
! 1312, 1315, 1318, 1320, 1323, 1326, 1329, 1331, 1334, 1337,
! 1340, 1343, 1345, 1348, 1350, 1352, 1354, 1356, 1359, 1360,
! 1361, 1362, 1363, 1364, 1366, 1368, 1371, 1375, 1377, 1380,
! 1382, 1384, 1390, 1392, 1394, 1397, 1400, 1403, 1406, 1407,
! 1413, 1414, 1419, 1420, 1421, 1423, 1426, 1430, 1434, 1438,
! 1439, 1444, 1446, 1450, 1451, 1452, 1460, 1466, 1469, 1470,
! 1471, 1472, 1473, 1486, 1487, 1494, 1497, 1499, 1501, 1504,
! 1508, 1511, 1514, 1517, 1521, 1528, 1537, 1548, 1561, 1565,
! 1570, 1572, 1576, 1582, 1585, 1591, 1592, 1594, 1595, 1597,
! 1598, 1600, 1602, 1606, 1611, 1619, 1621, 1625, 1626, 1630,
! 1633, 1634, 1635, 1642, 1645, 1646, 1648, 1650, 1654, 1656,
! 1660, 1665, 1670, 1674, 1679, 1683, 1688, 1693, 1697, 1702,
! 1706, 1708, 1709, 1713, 1715, 1718, 1720, 1724, 1726, 1730
};
static const short yyrhs[] = { -1,
92, 0, 0, 93, 95, 0, 0, 92, 94, 95,
0, 97, 0, 96, 0, 27, 67, 106, 83, 84,
! 0, 289, 95, 0, 128, 162, 84, 0, 148, 128,
! 162, 84, 0, 147, 128, 161, 84, 0, 154, 84,
0, 1, 84, 0, 1, 85, 0, 84, 0, 0,
! 0, 147, 128, 190, 98, 123, 99, 250, 251, 239,
! 0, 147, 128, 190, 1, 0, 0, 0, 148, 128,
! 195, 100, 123, 101, 250, 251, 239, 0, 148, 128,
! 195, 1, 0, 0, 0, 128, 195, 102, 123, 103,
! 250, 251, 239, 0, 128, 195, 1, 0, 3, 0,
4, 0, 51, 0, 57, 0, 56, 0, 62, 0,
63, 0, 86, 0, 87, 0, 108, 0, 0, 108,
! 0, 114, 0, 108, 88, 114, 0, 120, 0, 58,
! 113, 0, 289, 113, 0, 105, 113, 0, 48, 104,
! 0, 110, 109, 0, 110, 67, 216, 83, 0, 111,
! 109, 0, 111, 67, 216, 83, 0, 33, 113, 0,
! 34, 113, 0, 11, 0, 29, 0, 28, 0, 109,
! 0, 67, 216, 83, 113, 0, 113, 0, 114, 56,
! 114, 0, 114, 57, 114, 0, 114, 58, 114, 0,
! 114, 59, 114, 0, 114, 60, 114, 0, 114, 54,
! 114, 0, 114, 55, 114, 0, 114, 53, 114, 0,
! 114, 52, 114, 0, 114, 51, 114, 0, 114, 49,
! 114, 0, 114, 50, 114, 0, 0, 114, 48, 115,
! 114, 0, 0, 114, 47, 116, 114, 0, 0, 0,
! 114, 45, 117, 106, 46, 118, 114, 0, 0, 114,
! 45, 119, 46, 114, 0, 114, 44, 114, 0, 114,
! 43, 114, 0, 3, 0, 8, 0, 122, 0, 42,
! 0, 0, 67, 216, 83, 89, 121, 176, 85, 0,
! 67, 106, 83, 0, 67, 1, 83, 0, 243, 241,
! 83, 0, 243, 1, 83, 0, 120, 67, 107, 83,
! 0, 35, 67, 114, 88, 216, 83, 0, 36, 67,
! 114, 88, 114, 88, 114, 83, 0, 37, 67, 216,
! 88, 216, 83, 0, 120, 68, 106, 90, 0, 120,
! 66, 104, 0, 120, 65, 104, 0, 120, 62, 0,
! 120, 63, 0, 9, 0, 122, 9, 0, 0, 125,
! 0, 125, 10, 0, 250, 251, 126, 0, 124, 0,
! 231, 0, 125, 124, 0, 124, 231, 0, 149, 128,
! 161, 84, 0, 150, 128, 162, 84, 0, 149, 84,
! 0, 150, 84, 0, 250, 251, 130, 0, 0, 168,
! 0, 147, 128, 161, 84, 0, 148, 128, 162, 84,
! 0, 147, 128, 184, 0, 148, 128, 187, 0, 154,
! 84, 0, 289, 130, 0, 7, 0, 131, 7, 0,
! 132, 7, 0, 131, 169, 0, 133, 7, 0, 134,
! 7, 0, 169, 0, 133, 169, 0, 156, 0, 135,
! 7, 0, 136, 7, 0, 135, 158, 0, 136, 158,
! 0, 131, 156, 0, 132, 156, 0, 157, 0, 135,
! 169, 0, 135, 159, 0, 136, 159, 0, 131, 157,
! 0, 132, 157, 0, 137, 7, 0, 138, 7, 0,
! 137, 158, 0, 138, 158, 0, 133, 156, 0, 134,
! 156, 0, 137, 169, 0, 137, 159, 0, 138, 159,
! 0, 133, 157, 0, 134, 157, 0, 5, 0, 139,
! 7, 0, 140, 7, 0, 131, 5, 0, 132, 5,
! 0, 139, 5, 0, 140, 5, 0, 139, 169, 0,
! 141, 7, 0, 142, 7, 0, 133, 5, 0, 134,
! 5, 0, 141, 5, 0, 142, 5, 0, 141, 169,
! 0, 143, 7, 0, 144, 7, 0, 143, 158, 0,
! 144, 158, 0, 139, 156, 0, 140, 156, 0, 135,
! 5, 0, 136, 5, 0, 143, 5, 0, 144, 5,
! 0, 143, 169, 0, 143, 159, 0, 144, 159, 0,
! 139, 157, 0, 140, 157, 0, 145, 7, 0, 146,
! 7, 0, 145, 158, 0, 146, 158, 0, 141, 156,
! 0, 142, 156, 0, 137, 5, 0, 138, 5, 0,
! 145, 5, 0, 146, 5, 0, 145, 169, 0, 145,
! 159, 0, 146, 159, 0, 141, 157, 0, 142, 157,
! 0, 135, 0, 136, 0, 137, 0, 138, 0, 143,
! 0, 144, 0, 145, 0, 146, 0, 131, 0, 132,
! 0, 133, 0, 134, 0, 139, 0, 140, 0, 141,
! 0, 142, 0, 135, 0, 136, 0, 143, 0, 144,
! 0, 131, 0, 132, 0, 139, 0, 140, 0, 135,
! 0, 136, 0, 137, 0, 138, 0, 131, 0, 132,
0, 133, 0, 134, 0, 135, 0, 136, 0, 137,
! 0, 138, 0, 131, 0, 132, 0, 133, 0, 134,
0, 131, 0, 132, 0, 133, 0, 134, 0, 135,
0, 136, 0, 137, 0, 138, 0, 139, 0, 140,
0, 141, 0, 142, 0, 143, 0, 144, 0, 145,
! 0, 146, 0, 0, 152, 0, 158, 0, 160, 0,
! 159, 0, 6, 0, 204, 0, 199, 0, 4, 0,
! 112, 67, 106, 83, 0, 112, 67, 216, 83, 0,
! 164, 0, 161, 88, 129, 164, 0, 166, 0, 162,
! 88, 129, 166, 0, 0, 27, 67, 122, 83, 0,
! 0, 190, 163, 168, 44, 165, 174, 0, 190, 163,
! 168, 0, 0, 195, 163, 168, 44, 167, 174, 0,
! 195, 163, 168, 0, 0, 169, 0, 170, 0, 169,
! 170, 0, 30, 67, 67, 171, 83, 83, 0, 172,
! 0, 171, 88, 172, 0, 0, 173, 0, 173, 67,
! 3, 83, 0, 173, 67, 3, 88, 108, 83, 0,
! 173, 67, 107, 83, 0, 104, 0, 5, 0, 6,
! 0, 7, 0, 114, 0, 0, 89, 175, 176, 85,
! 0, 1, 0, 0, 177, 205, 0, 178, 0, 177,
! 88, 178, 0, 182, 44, 180, 0, 183, 180, 0,
! 0, 104, 46, 179, 180, 0, 180, 0, 0, 89,
! 181, 176, 85, 0, 114, 0, 1, 0, 183, 0,
! 182, 183, 0, 66, 104, 0, 68, 114, 10, 114,
! 90, 0, 68, 114, 90, 0, 0, 0, 190, 185,
! 123, 186, 250, 251, 244, 0, 0, 0, 195, 188,
! 123, 189, 250, 251, 244, 0, 191, 0, 195, 0,
! 67, 168, 191, 83, 0, 191, 67, 284, 0, 191,
! 224, 0, 58, 155, 191, 0, 4, 0, 193, 0,
! 194, 0, 193, 67, 284, 0, 193, 224, 0, 4,
! 0, 194, 67, 284, 0, 194, 224, 0, 58, 155,
! 193, 0, 58, 155, 194, 0, 67, 168, 194, 83,
! 0, 195, 67, 284, 0, 67, 168, 195, 83, 0,
! 58, 155, 195, 0, 195, 224, 0, 3, 0, 13,
! 0, 13, 169, 0, 14, 0, 14, 169, 0, 12,
! 0, 12, 169, 0, 0, 196, 104, 89, 200, 207,
! 85, 168, 0, 196, 89, 207, 85, 168, 0, 0,
! 197, 104, 89, 201, 207, 85, 168, 0, 197, 89,
! 207, 85, 168, 0, 0, 198, 104, 89, 202, 214,
! 206, 85, 168, 0, 0, 198, 89, 203, 214, 206,
! 85, 168, 0, 196, 104, 0, 197, 104, 0, 198,
! 104, 0, 0, 88, 0, 0, 88, 0, 208, 0,
! 208, 209, 0, 0, 208, 209, 84, 0, 208, 84,
! 0, 151, 128, 210, 0, 151, 128, 250, 251, 0,
! 152, 128, 211, 0, 152, 0, 1, 0, 289, 209,
! 0, 212, 0, 210, 88, 129, 212, 0, 213, 0,
! 211, 88, 129, 213, 0, 250, 251, 190, 168, 0,
! 250, 251, 190, 46, 114, 168, 0, 250, 251, 46,
! 114, 168, 0, 250, 251, 195, 168, 0, 250, 251,
! 195, 46, 114, 168, 0, 250, 251, 46, 114, 168,
! 0, 215, 0, 214, 88, 215, 0, 1, 0, 104,
! 0, 104, 44, 114, 0, 0, 153, 217, 218, 0,
! 0, 220, 0, 0, 220, 0, 221, 169, 0, 222,
! 0, 221, 0, 223, 0, 58, 155, 221, 0, 58,
! 155, 0, 58, 155, 222, 0, 67, 168, 220, 83,
! 0, 223, 67, 274, 0, 223, 224, 0, 67, 274,
! 0, 224, 0, 68, 106, 90, 0, 68, 153, 106,
! 90, 0, 68, 90, 0, 68, 153, 90, 0, 68,
! 58, 90, 0, 68, 153, 58, 90, 0, 68, 5,
! 106, 90, 0, 68, 5, 153, 106, 90, 0, 68,
! 153, 5, 106, 90, 0, 226, 0, 227, 0, 228,
! 0, 229, 0, 254, 0, 226, 254, 0, 227, 254,
! 0, 228, 254, 0, 229, 254, 0, 127, 0, 226,
! 127, 0, 227, 127, 0, 229, 127, 0, 255, 0,
! 226, 255, 0, 227, 255, 0, 228, 255, 0, 229,
! 255, 0, 231, 0, 230, 231, 0, 226, 0, 227,
! 0, 228, 0, 229, 0, 1, 84, 0, 0, 0,
! 0, 0, 0, 237, 0, 238, 0, 237, 238, 0,
! 32, 288, 84, 0, 244, 0, 1, 244, 0, 89,
! 0, 85, 0, 232, 236, 242, 85, 233, 0, 225,
! 0, 1, 0, 67, 89, 0, 240, 241, 0, 246,
! 253, 0, 246, 1, 0, 0, 15, 247, 67, 106,
! 83, 0, 0, 18, 249, 253, 17, 0, 0, 0,
! 254, 0, 255, 252, 0, 234, 252, 235, 0, 250,
! 251, 266, 0, 250, 251, 267, 0, 0, 245, 16,
! 257, 253, 0, 245, 0, 245, 16, 1, 0, 0,
! 0, 17, 258, 67, 106, 83, 259, 253, 0, 248,
! 67, 106, 83, 84, 0, 248, 1, 0, 0, 0,
! 0, 0, 19, 260, 67, 265, 261, 269, 84, 262,
! 269, 83, 263, 253, 0, 0, 20, 67, 106, 83,
! 264, 253, 0, 269, 84, 0, 130, 0, 244, 0,
! 106, 84, 0, 234, 256, 235, 0, 23, 84, 0,
! 24, 84, 0, 25, 84, 0, 25, 106, 84, 0,
! 27, 268, 67, 106, 83, 84, 0, 27, 268, 67,
! 106, 46, 270, 83, 84, 0, 27, 268, 67, 106,
! 46, 270, 46, 270, 83, 84, 0, 27, 268, 67,
! 106, 46, 270, 46, 270, 46, 273, 83, 84, 0,
! 26, 104, 84, 0, 26, 58, 106, 84, 0, 84,
! 0, 21, 114, 46, 0, 21, 114, 10, 114, 46,
! 0, 22, 46, 0, 104, 250, 251, 46, 168, 0,
! 0, 7, 0, 0, 106, 0, 0, 271, 0, 272,
! 0, 271, 88, 272, 0, 9, 67, 106, 83, 0,
! 68, 104, 90, 9, 67, 106, 83, 0, 122, 0,
! 273, 88, 122, 0, 0, 168, 275, 276, 0, 279,
! 83, 0, 0, 0, 280, 84, 277, 168, 278, 276,
! 0, 1, 83, 0, 0, 10, 0, 280, 0, 280,
! 88, 10, 0, 282, 0, 280, 88, 281, 0, 147,
! 128, 192, 168, 0, 147, 128, 195, 168, 0, 147,
! 128, 219, 0, 148, 128, 195, 168, 0, 148, 128,
! 219, 0, 149, 283, 192, 168, 0, 149, 283, 195,
! 168, 0, 149, 283, 219, 0, 150, 283, 195, 168,
! 0, 150, 283, 219, 0, 128, 0, 0, 168, 285,
! 286, 0, 276, 0, 287, 83, 0, 3, 0, 287,
! 88, 3, 0, 104, 0, 288, 88, 104, 0, 31,
! 0
};
#endif
*************** static const short yyrline[] = { 0,
*** 486,542 ****
360, 362, 368, 369, 374, 376, 382, 383, 388, 392,
394, 397, 399, 401, 406, 408, 410, 412, 416, 420,
423, 426, 429, 433, 435, 438, 441, 445, 462, 468,
! 471, 474, 477, 479, 483, 487, 491, 493, 497, 499,
! 501, 503, 505, 507, 509, 511, 513, 515, 517, 519,
! 521, 523, 527, 529, 533, 535, 538, 542, 544, 551,
! 554, 561, 571, 578, 579, 581, 583, 587, 596, 601,
! 603, 619, 626, 628, 631, 641, 651, 653, 657, 663,
! 665, 670, 672, 689, 691, 692, 702, 707, 709, 710,
! 711, 718, 721, 723, 726, 734, 743, 753, 758, 761,
! 763, 765, 767, 769, 825, 829, 832, 837, 843, 847,
! 852, 856, 861, 865, 868, 871, 874, 877, 880, 885,
! 889, 892, 895, 898, 901, 906, 910, 913, 916, 919,
! 922, 927, 931, 934, 937, 940, 945, 949, 952, 955,
! 961, 967, 973, 981, 987, 991, 994, 1000, 1006, 1012,
! 1020, 1026, 1030, 1033, 1036, 1039, 1042, 1045, 1051, 1057,
! 1063, 1071, 1075, 1078, 1081, 1084, 1089, 1093, 1096, 1099,
! 1102, 1105, 1108, 1114, 1120, 1126, 1134, 1138, 1141, 1144,
! 1147, 1153, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1164,
! 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1175, 1177, 1178,
! 1179, 1182, 1184, 1185, 1186, 1189, 1191, 1192, 1193, 1196,
! 1198, 1199, 1200, 1203, 1205, 1206, 1207, 1208, 1209, 1210,
! 1211, 1214, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
! 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1234, 1237, 1262,
! 1264, 1267, 1271, 1274, 1277, 1281, 1286, 1288, 1294, 1296,
! 1299, 1301, 1304, 1307, 1313, 1320, 1322, 1329, 1336, 1338,
! 1345, 1348, 1352, 1355, 1359, 1364, 1367, 1371, 1374, 1376,
! 1378, 1380, 1387, 1389, 1390, 1391, 1396, 1398, 1400, 1402,
! 1407, 1411, 1414, 1416, 1421, 1425, 1428, 1433, 1433, 1436,
! 1439, 1441, 1443, 1446, 1448, 1451, 1457, 1461, 1465, 1479,
! 1486, 1495, 1509, 1516, 1528, 1530, 1535, 1538, 1543, 1545,
! 1547, 1554, 1556, 1559, 1565, 1567, 1570, 1576, 1578, 1580,
! 1582, 1589, 1595, 1597, 1599, 1601, 1604, 1607, 1611, 1614,
! 1618, 1621, 1631, 1636, 1638, 1642, 1644, 1646, 1650, 1652,
! 1655, 1657, 1662, 1665, 1667, 1675, 1677, 1680, 1682, 1687,
! 1690, 1695, 1697, 1699, 1704, 1708, 1718, 1721, 1726, 1728,
! 1733, 1735, 1739, 1741, 1745, 1749, 1753, 1758, 1762, 1766,
! 1776, 1778, 1783, 1788, 1791, 1795, 1800, 1803, 1806, 1809,
! 1814, 1818, 1824, 1826, 1829, 1831, 1835, 1838, 1842, 1845,
! 1847, 1849, 1851, 1857, 1860, 1862, 1864, 1866, 1868, 1870,
! 1874, 1878, 1890, 1892, 1893, 1897, 1900, 1902, 1903, 1904,
! 1905, 1908, 1910, 1913, 1914, 1917, 1919, 1920, 1921, 1922,
! 1925, 1927, 1930, 1932, 1933, 1934, 1937, 1940, 1947, 1952,
! 1968, 1983, 1985, 1990, 1992, 1995, 2009, 2012, 2015, 2019,
! 2021, 2028, 2030, 2033, 2051, 2058, 2064, 2067, 2078, 2089,
! 2101, 2109, 2115, 2121, 2123, 2127, 2133, 2147, 2156, 2161,
! 2165, 2177, 2187, 2190, 2196, 2197, 2200, 2202, 2206, 2209,
! 2212, 2215, 2216, 2220, 2223, 2226, 2231, 2234, 2237, 2241,
! 2244, 2247, 2250, 2253, 2257, 2261, 2266, 2270, 2282, 2288,
! 2296, 2299, 2302, 2305, 2320, 2324, 2328, 2331, 2336, 2338,
! 2341, 2343, 2347, 2350, 2354, 2357, 2366, 2372, 2377, 2379,
! 2388, 2391, 2392, 2398, 2400, 2410, 2412, 2416, 2419, 2425,
! 2431, 2436, 2439, 2445, 2452, 2458, 2463, 2466, 2472, 2477,
! 2486, 2492, 2497, 2499, 2516, 2519, 2524, 2527, 2531
};
#endif
--- 487,543 ----
360, 362, 368, 369, 374, 376, 382, 383, 388, 392,
394, 397, 399, 401, 406, 408, 410, 412, 416, 420,
423, 426, 429, 433, 435, 438, 441, 445, 462, 468,
! 471, 474, 477, 479, 483, 487, 491, 495, 497, 501,
! 503, 505, 507, 509, 511, 513, 515, 517, 519, 521,
! 523, 525, 527, 531, 533, 537, 539, 542, 546, 548,
! 555, 558, 565, 575, 582, 583, 585, 587, 591, 600,
! 605, 607, 623, 630, 632, 635, 645, 655, 657, 661,
! 667, 669, 674, 676, 693, 695, 696, 706, 711, 713,
! 714, 715, 722, 725, 727, 730, 738, 747, 757, 762,
! 765, 767, 769, 771, 773, 829, 833, 836, 841, 847,
! 851, 856, 860, 865, 869, 872, 875, 878, 881, 884,
! 889, 893, 896, 899, 902, 905, 910, 914, 917, 920,
! 923, 926, 931, 935, 938, 941, 944, 949, 953, 956,
! 959, 965, 971, 977, 985, 991, 995, 998, 1004, 1010,
! 1016, 1024, 1030, 1034, 1037, 1040, 1043, 1046, 1049, 1055,
! 1061, 1067, 1075, 1079, 1082, 1085, 1088, 1093, 1097, 1100,
! 1103, 1106, 1109, 1112, 1118, 1124, 1130, 1138, 1142, 1145,
! 1148, 1151, 1157, 1159, 1160, 1161, 1162, 1163, 1164, 1165,
! 1168, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1179, 1181,
! 1182, 1183, 1186, 1188, 1189, 1190, 1193, 1195, 1196, 1197,
! 1200, 1202, 1203, 1204, 1207, 1209, 1210, 1211, 1212, 1213,
! 1214, 1215, 1218, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
! 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1238, 1241,
! 1266, 1268, 1271, 1275, 1278, 1281, 1285, 1290, 1292, 1298,
! 1300, 1303, 1305, 1308, 1311, 1317, 1324, 1326, 1333, 1340,
! 1342, 1349, 1352, 1356, 1359, 1363, 1368, 1371, 1375, 1378,
! 1380, 1382, 1384, 1391, 1393, 1394, 1395, 1400, 1402, 1404,
! 1406, 1411, 1415, 1418, 1420, 1425, 1429, 1432, 1437, 1438,
! 1441, 1444, 1446, 1448, 1451, 1453, 1456, 1462, 1466, 1470,
! 1484, 1491, 1500, 1514, 1521, 1533, 1535, 1540, 1543, 1548,
! 1550, 1552, 1559, 1561, 1564, 1570, 1572, 1575, 1581, 1583,
! 1585, 1587, 1594, 1600, 1602, 1604, 1606, 1609, 1612, 1616,
! 1619, 1623, 1626, 1636, 1641, 1643, 1647, 1649, 1651, 1655,
! 1657, 1660, 1662, 1667, 1670, 1672, 1680, 1682, 1685, 1687,
! 1692, 1695, 1700, 1702, 1704, 1709, 1713, 1723, 1726, 1731,
! 1733, 1738, 1740, 1744, 1746, 1750, 1754, 1758, 1763, 1767,
! 1771, 1781, 1783, 1788, 1793, 1796, 1800, 1805, 1808, 1811,
! 1814, 1819, 1823, 1829, 1831, 1834, 1836, 1840, 1843, 1847,
! 1850, 1852, 1854, 1856, 1862, 1865, 1867, 1869, 1871, 1873,
! 1875, 1879, 1883, 1895, 1897, 1898, 1902, 1905, 1907, 1908,
! 1909, 1910, 1913, 1915, 1918, 1919, 1922, 1924, 1925, 1926,
! 1927, 1930, 1932, 1935, 1937, 1938, 1939, 1942, 1945, 1952,
! 1957, 1973, 1988, 1990, 1995, 1997, 2000, 2014, 2017, 2020,
! 2024, 2026, 2033, 2035, 2038, 2056, 2063, 2069, 2072, 2083,
! 2094, 2106, 2114, 2120, 2126, 2128, 2132, 2138, 2152, 2161,
! 2166, 2170, 2182, 2192, 2195, 2201, 2202, 2205, 2207, 2211,
! 2214, 2217, 2220, 2221, 2225, 2228, 2231, 2236, 2239, 2242,
! 2246, 2249, 2252, 2255, 2258, 2262, 2266, 2271, 2275, 2287,
! 2293, 2301, 2304, 2307, 2310, 2325, 2329, 2333, 2336, 2341,
! 2343, 2346, 2348, 2352, 2355, 2359, 2362, 2371, 2377, 2382,
! 2384, 2393, 2396, 2397, 2403, 2405, 2415, 2417, 2421, 2424,
! 2430, 2436, 2441, 2444, 2450, 2457, 2463, 2468, 2471, 2477,
! 2482, 2491, 2497, 2502, 2504, 2521, 2524, 2529, 2532, 2536
};
#endif
*************** static const char * const yytname[] = {
*** 556,563 ****
"OBJECTNAME","CLASS","ALIAS","')'","';'","'}'","'~'","'!'","','","'{'","']'",
"program","extdefs","@1","@2","extdef","datadef","fndef","@3","@4","@5","@6",
"@7","@8","identifier","unop","expr","exprlist","nonnull_exprlist","unary_expr",
! "sizeof","alignof","cast_expr","expr_no_commas","@9","@10","@11","@12","@13",
! "primary","@14","string","old_style_parm_decls","lineno_datadecl","datadecls",
"datadecl","lineno_decl","setspecs","maybe_resetattrs","decl","declspecs_nosc_nots_nosa_noea",
"declspecs_nosc_nots_nosa_ea","declspecs_nosc_nots_sa_noea","declspecs_nosc_nots_sa_ea",
"declspecs_nosc_ts_nosa_noea","declspecs_nosc_ts_nosa_ea","declspecs_nosc_ts_sa_noea",
--- 557,564 ----
"OBJECTNAME","CLASS","ALIAS","')'","';'","'}'","'~'","'!'","','","'{'","']'",
"program","extdefs","@1","@2","extdef","datadef","fndef","@3","@4","@5","@6",
"@7","@8","identifier","unop","expr","exprlist","nonnull_exprlist","unary_expr",
! "sizeof","alignof","typeof","cast_expr","expr_no_commas","@9","@10","@11","@12",
! "@13","primary","@14","string","old_style_parm_decls","lineno_datadecl","datadecls",
"datadecl","lineno_decl","setspecs","maybe_resetattrs","decl","declspecs_nosc_nots_nosa_noea",
"declspecs_nosc_nots_nosa_ea","declspecs_nosc_nots_sa_noea","declspecs_nosc_nots_sa_ea",
"declspecs_nosc_ts_nosa_noea","declspecs_nosc_ts_nosa_ea","declspecs_nosc_ts_sa_noea",
*************** static const short yyr1[] = { 0,
*** 600,656 ****
97, 100, 101, 97, 97, 102, 103, 97, 97, 104,
104, 105, 105, 105, 105, 105, 105, 105, 106, 107,
107, 108, 108, 109, 109, 109, 109, 109, 109, 109,
! 109, 109, 109, 109, 110, 111, 112, 112, 113, 113,
! 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
! 113, 114, 113, 115, 113, 116, 117, 113, 118, 113,
! 113, 113, 119, 119, 119, 119, 120, 119, 119, 119,
! 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
! 119, 121, 121, 122, 122, 122, 123, 124, 124, 124,
! 124, 125, 125, 125, 125, 126, 127, 128, 129, 129,
! 129, 129, 129, 129, 130, 130, 130, 131, 132, 132,
! 133, 133, 134, 134, 134, 134, 134, 134, 134, 135,
! 135, 135, 135, 135, 135, 136, 136, 136, 136, 136,
! 136, 137, 137, 137, 137, 137, 138, 138, 138, 138,
! 138, 138, 138, 139, 140, 140, 140, 140, 140, 140,
! 141, 142, 142, 142, 142, 142, 142, 142, 142, 142,
! 142, 143, 143, 143, 143, 143, 144, 144, 144, 144,
! 144, 144, 144, 144, 144, 144, 145, 145, 145, 145,
! 145, 146, 146, 146, 146, 146, 146, 146, 146, 147,
! 147, 147, 147, 147, 147, 147, 147, 148, 148, 148,
! 148, 149, 149, 149, 149, 150, 150, 150, 150, 151,
! 151, 151, 151, 152, 152, 152, 152, 152, 152, 152,
! 152, 153, 153, 153, 153, 153, 153, 153, 153, 153,
! 153, 153, 153, 153, 153, 153, 153, 154, 154, 155,
! 155, 156, 157, 157, 158, 159, 159, 159, 160, 160,
! 161, 161, 162, 162, 164, 163, 163, 166, 165, 165,
! 167, 167, 168, 168, 169, 170, 170, 171, 171, 171,
! 171, 171, 172, 172, 172, 172, 173, 174, 173, 173,
! 175, 175, 176, 176, 177, 177, 178, 177, 177, 180,
! 179, 179, 179, 181, 181, 182, 182, 182, 184, 185,
! 183, 187, 188, 186, 189, 189, 190, 190, 190, 190,
! 190, 191, 191, 192, 192, 192, 193, 193, 193, 193,
! 193, 194, 194, 194, 194, 194, 195, 195, 196, 196,
! 197, 197, 199, 198, 198, 200, 198, 198, 201, 198,
! 202, 198, 203, 203, 203, 204, 204, 205, 205, 206,
! 206, 207, 207, 207, 208, 208, 208, 208, 208, 208,
! 209, 209, 210, 210, 211, 211, 211, 212, 212, 212,
! 213, 213, 213, 214, 214, 216, 215, 217, 217, 218,
! 218, 218, 219, 219, 220, 220, 221, 221, 222, 222,
! 222, 222, 222, 223, 223, 223, 223, 223, 223, 223,
! 223, 223, 224, 224, 224, 224, 225, 225, 225, 225,
! 225, 226, 226, 226, 226, 227, 227, 227, 227, 227,
! 228, 228, 229, 229, 229, 229, 230, 231, 232, 233,
! 234, 235, 235, 236, 236, 237, 238, 238, 239, 240,
! 240, 241, 241, 242, 243, 244, 244, 246, 245, 248,
! 247, 249, 250, 251, 251, 252, 253, 254, 256, 255,
! 255, 255, 257, 258, 255, 255, 255, 259, 260, 261,
! 262, 255, 263, 255, 264, 264, 265, 265, 265, 265,
! 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
! 266, 266, 266, 266, 267, 267, 268, 268, 269, 269,
! 270, 270, 271, 271, 272, 272, 274, 273, 275, 276,
! 277, 275, 275, 278, 278, 278, 278, 279, 279, 280,
! 280, 280, 280, 280, 281, 281, 281, 281, 281, 282,
! 284, 283, 285, 285, 286, 286, 287, 287, 288
};
static const short yyr2[] = { 0,
--- 601,657 ----
97, 100, 101, 97, 97, 102, 103, 97, 97, 104,
104, 105, 105, 105, 105, 105, 105, 105, 106, 107,
107, 108, 108, 109, 109, 109, 109, 109, 109, 109,
! 109, 109, 109, 109, 110, 111, 112, 113, 113, 114,
! 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
! 114, 114, 115, 114, 116, 114, 117, 118, 114, 119,
! 114, 114, 114, 120, 120, 120, 120, 121, 120, 120,
! 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
! 120, 120, 122, 122, 123, 123, 123, 124, 125, 125,
! 125, 125, 126, 126, 126, 126, 127, 128, 129, 130,
! 130, 130, 130, 130, 130, 131, 131, 131, 132, 133,
! 133, 134, 134, 135, 135, 135, 135, 135, 135, 135,
! 136, 136, 136, 136, 136, 136, 137, 137, 137, 137,
! 137, 137, 138, 138, 138, 138, 138, 139, 139, 139,
! 139, 139, 139, 139, 140, 141, 141, 141, 141, 141,
! 141, 142, 143, 143, 143, 143, 143, 143, 143, 143,
! 143, 143, 144, 144, 144, 144, 144, 145, 145, 145,
! 145, 145, 145, 145, 145, 145, 145, 146, 146, 146,
! 146, 146, 147, 147, 147, 147, 147, 147, 147, 147,
! 148, 148, 148, 148, 148, 148, 148, 148, 149, 149,
! 149, 149, 150, 150, 150, 150, 151, 151, 151, 151,
! 152, 152, 152, 152, 153, 153, 153, 153, 153, 153,
! 153, 153, 154, 154, 154, 154, 154, 154, 154, 154,
! 154, 154, 154, 154, 154, 154, 154, 154, 155, 155,
! 156, 156, 157, 158, 158, 159, 160, 160, 160, 161,
! 161, 162, 162, 163, 163, 165, 164, 164, 167, 166,
! 166, 168, 168, 169, 169, 170, 171, 171, 172, 172,
! 172, 172, 172, 173, 173, 173, 173, 174, 175, 174,
! 174, 176, 176, 177, 177, 178, 178, 179, 178, 178,
! 181, 180, 180, 180, 182, 182, 183, 183, 183, 185,
! 186, 184, 188, 189, 187, 190, 190, 191, 191, 191,
! 191, 191, 192, 192, 193, 193, 193, 194, 194, 194,
! 194, 194, 195, 195, 195, 195, 195, 196, 196, 197,
! 197, 198, 198, 200, 199, 199, 201, 199, 199, 202,
! 199, 203, 199, 204, 204, 204, 205, 205, 206, 206,
! 207, 207, 208, 208, 208, 209, 209, 209, 209, 209,
! 209, 210, 210, 211, 211, 212, 212, 212, 213, 213,
! 213, 214, 214, 214, 215, 215, 217, 216, 218, 218,
! 219, 219, 219, 220, 220, 221, 221, 222, 222, 223,
! 223, 223, 223, 223, 224, 224, 224, 224, 224, 224,
! 224, 224, 224, 225, 225, 225, 225, 226, 226, 226,
! 226, 226, 227, 227, 227, 227, 228, 228, 228, 228,
! 228, 229, 229, 230, 230, 230, 230, 231, 232, 233,
! 234, 235, 236, 236, 237, 237, 238, 239, 239, 240,
! 241, 241, 242, 242, 243, 244, 245, 245, 247, 246,
! 249, 248, 250, 251, 252, 252, 253, 254, 255, 257,
! 256, 256, 256, 258, 259, 256, 256, 256, 260, 261,
! 262, 263, 256, 264, 256, 265, 265, 266, 266, 266,
! 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
! 266, 267, 267, 267, 267, 268, 268, 269, 269, 270,
! 270, 271, 271, 272, 272, 273, 273, 275, 274, 276,
! 277, 278, 276, 276, 279, 279, 279, 279, 280, 280,
! 281, 281, 281, 281, 281, 282, 282, 282, 282, 282,
! 283, 285, 284, 286, 286, 287, 287, 288, 288, 289
};
static const short yyr2[] = { 0,
*************** static const short yyr2[] = { 0,
*** 659,1552 ****
4, 0, 0, 9, 4, 0, 0, 8, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 3, 1, 2, 2, 2, 2, 2, 4,
! 2, 4, 2, 2, 1, 1, 1, 4, 1, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
! 3, 0, 4, 0, 4, 0, 0, 7, 0, 5,
! 3, 3, 1, 1, 1, 1, 0, 7, 3, 3,
! 3, 3, 4, 6, 8, 6, 4, 3, 3, 2,
! 2, 1, 2, 0, 1, 2, 3, 1, 1, 2,
! 2, 4, 4, 2, 2, 3, 0, 1, 4, 4,
! 3, 3, 2, 2, 1, 2, 2, 2, 2, 2,
! 1, 2, 1, 2, 2, 2, 2, 2, 2, 1,
! 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
! 1, 1, 1, 1, 1, 1, 4, 4, 1, 4,
! 1, 4, 0, 4, 0, 6, 3, 0, 6, 3,
! 0, 1, 1, 2, 6, 1, 3, 0, 1, 4,
! 6, 4, 1, 1, 1, 1, 1, 0, 4, 1,
! 0, 2, 1, 3, 3, 2, 0, 4, 1, 0,
! 4, 1, 1, 1, 2, 2, 5, 3, 0, 0,
! 7, 0, 0, 7, 1, 1, 4, 3, 2, 3,
! 1, 1, 1, 3, 2, 1, 3, 2, 3, 3,
! 4, 3, 4, 3, 2, 1, 1, 2, 1, 2,
! 1, 2, 0, 7, 5, 0, 7, 5, 0, 8,
! 0, 7, 2, 2, 2, 0, 1, 0, 1, 1,
! 2, 0, 3, 2, 3, 4, 3, 1, 1, 2,
! 1, 4, 1, 4, 4, 6, 5, 4, 6, 5,
! 1, 3, 1, 1, 3, 0, 3, 0, 1, 0,
! 1, 2, 1, 1, 1, 3, 2, 3, 4, 3,
! 2, 2, 1, 3, 4, 2, 3, 3, 4, 4,
! 5, 5, 1, 1, 1, 1, 1, 2, 2, 2,
! 2, 1, 2, 2, 2, 1, 2, 2, 2, 2,
! 1, 2, 1, 1, 1, 1, 2, 0, 0, 0,
! 0, 0, 1, 1, 2, 3, 1, 2, 1, 1,
! 5, 1, 1, 2, 2, 2, 2, 0, 5, 0,
! 4, 0, 0, 1, 2, 3, 3, 3, 0, 4,
! 1, 3, 0, 0, 7, 5, 2, 0, 0, 0,
! 0, 12, 0, 6, 2, 1, 1, 2, 3, 2,
! 2, 2, 3, 6, 8, 10, 12, 3, 4, 1,
! 3, 5, 2, 5, 0, 1, 0, 1, 0, 1,
! 1, 3, 4, 7, 1, 3, 0, 3, 2, 0,
! 0, 6, 2, 0, 1, 1, 3, 1, 3, 4,
! 4, 3, 4, 3, 4, 4, 3, 4, 3, 1,
! 0, 3, 1, 2, 1, 3, 1, 3, 1
};
static const short yydefact[] = { 3,
! 5, 0, 0, 0, 266, 157, 263, 125, 351, 347,
! 349, 0, 0, 0, 559, 17, 4, 8, 7, 0,
! 210, 211, 212, 213, 202, 203, 204, 205, 214, 215,
! 216, 217, 206, 207, 208, 209, 117, 117, 0, 133,
! 140, 260, 262, 261, 131, 283, 0, 0, 0, 265,
! 264, 0, 6, 15, 16, 352, 348, 350, 0, 0,
! 0, 346, 258, 281, 0, 271, 0, 160, 126, 138,
! 144, 128, 161, 127, 139, 145, 167, 129, 150, 155,
! 132, 168, 130, 151, 156, 178, 134, 136, 142, 141,
! 179, 135, 137, 143, 193, 146, 148, 153, 152, 194,
! 147, 149, 154, 162, 158, 176, 185, 164, 163, 159,
! 177, 186, 169, 165, 191, 200, 171, 170, 166, 192,
! 201, 180, 172, 174, 183, 182, 181, 173, 175, 184,
! 195, 187, 189, 198, 197, 196, 188, 190, 199, 0,
! 0, 14, 284, 30, 31, 372, 363, 372, 364, 361,
! 365, 10, 83, 84, 102, 55, 56, 0, 0, 0,
! 0, 0, 86, 0, 32, 34, 33, 0, 35, 36,
! 0, 37, 38, 0, 0, 39, 57, 0, 0, 59,
! 42, 44, 85, 0, 0, 0, 238, 239, 240, 241,
! 234, 235, 236, 237, 396, 0, 288, 230, 231, 232,
! 233, 259, 0, 0, 282, 11, 281, 29, 0, 281,
! 0, 0, 281, 345, 331, 258, 281, 0, 269, 0,
! 325, 326, 0, 0, 0, 0, 353, 0, 356, 0,
! 359, 53, 54, 0, 0, 0, 48, 45, 0, 464,
! 0, 0, 47, 0, 0, 0, 49, 0, 51, 0,
! 0, 76, 74, 72, 0, 0, 0, 0, 0, 0,
! 0, 0, 0, 0, 0, 0, 100, 101, 0, 0,
! 40, 0, 103, 0, 460, 452, 0, 46, 267, 398,
! 268, 294, 295, 296, 293, 0, 286, 289, 344, 0,
! 0, 118, 0, 551, 342, 0, 0, 416, 0, 0,
! 0, 27, 0, 472, 109, 473, 280, 0, 0, 13,
! 281, 21, 0, 281, 281, 329, 12, 25, 0, 281,
! 379, 374, 230, 231, 232, 233, 226, 227, 228, 229,
! 117, 117, 371, 0, 372, 281, 372, 393, 394, 368,
! 391, 0, 0, 0, 0, 90, 89, 0, 9, 43,
! 0, 0, 82, 81, 0, 0, 0, 0, 70, 71,
! 69, 68, 67, 65, 66, 60, 61, 62, 63, 64,
! 99, 98, 0, 41, 0, 92, 0, 0, 453, 454,
! 91, 258, 281, 397, 399, 404, 403, 405, 413, 0,
! 288, 40, 343, 272, 273, 0, 0, 0, 0, 418,
! 414, 0, 0, 417, 0, 447, 472, 111, 106, 110,
! 0, 278, 330, 0, 0, 19, 277, 328, 23, 355,
! 472, 472, 373, 380, 0, 358, 0, 0, 369, 0,
! 368, 0, 0, 0, 87, 58, 50, 52, 0, 0,
! 75, 73, 93, 97, 557, 0, 463, 432, 462, 472,
! 472, 472, 472, 0, 441, 0, 473, 427, 436, 455,
! 407, 527, 412, 281, 411, 285, 287, 83, 0, 274,
! 0, 555, 535, 222, 223, 218, 219, 224, 225, 220,
! 221, 117, 117, 553, 0, 536, 538, 552, 0, 420,
! 0, 0, 419, 415, 473, 107, 117, 117, 0, 327,
! 270, 273, 472, 275, 472, 375, 381, 473, 377, 383,
! 473, 281, 281, 395, 392, 281, 0, 0, 0, 0,
! 0, 77, 80, 456, 0, 433, 428, 437, 434, 429,
! 438, 473, 430, 439, 435, 431, 440, 442, 449, 450,
! 406, 408, 0, 0, 527, 410, 290, 0, 292, 533,
! 550, 400, 400, 529, 530, 0, 554, 0, 421, 422,
! 0, 114, 0, 115, 0, 300, 298, 297, 279, 473,
! 0, 473, 281, 376, 281, 0, 354, 357, 362, 281,
! 94, 0, 96, 313, 83, 0, 0, 310, 0, 312,
! 0, 366, 303, 309, 0, 0, 0, 558, 450, 461,
! 266, 0, 0, 0, 0, 0, 0, 515, 510, 459,
! 472, 0, 116, 117, 117, 0, 0, 448, 497, 477,
! 478, 0, 409, 528, 0, 336, 258, 281, 281, 332,
! 333, 281, 547, 401, 404, 258, 281, 281, 549, 281,
! 537, 210, 211, 212, 213, 202, 203, 204, 205, 214,
! 215, 216, 217, 206, 207, 208, 209, 117, 117, 539,
! 556, 0, 28, 457, 0, 0, 0, 0, 276, 0,
! 472, 0, 281, 472, 0, 281, 360, 0, 316, 0,
! 0, 307, 88, 0, 302, 0, 315, 306, 78, 0,
! 513, 500, 501, 502, 0, 0, 0, 516, 0, 473,
! 498, 0, 0, 123, 468, 483, 470, 488, 0, 481,
! 0, 0, 451, 465, 124, 291, 407, 527, 545, 281,
! 335, 281, 338, 546, 402, 407, 527, 548, 531, 400,
! 400, 458, 112, 113, 0, 20, 24, 382, 473, 281,
! 0, 385, 384, 281, 0, 388, 95, 0, 318, 0,
! 0, 304, 305, 0, 511, 503, 0, 508, 0, 0,
! 0, 121, 319, 0, 122, 322, 0, 0, 450, 0,
! 0, 0, 467, 472, 466, 487, 0, 499, 339, 340,
! 0, 334, 337, 0, 281, 281, 542, 281, 544, 299,
! 0, 387, 281, 390, 281, 0, 311, 308, 0, 509,
! 0, 281, 119, 0, 120, 0, 0, 0, 0, 517,
! 0, 482, 450, 451, 474, 472, 0, 341, 532, 540,
! 541, 543, 386, 389, 317, 512, 519, 0, 514, 320,
! 323, 0, 0, 471, 518, 496, 489, 0, 493, 480,
! 476, 475, 0, 0, 0, 0, 520, 521, 504, 472,
! 472, 469, 484, 517, 495, 450, 486, 0, 0, 519,
! 0, 0, 473, 473, 450, 0, 494, 0, 0, 0,
! 505, 522, 0, 0, 485, 490, 523, 0, 0, 0,
! 321, 324, 517, 0, 525, 0, 506, 0, 0, 0,
! 0, 491, 524, 507, 526, 450, 492, 0, 0, 0
};
! static const short yydefgoto[] = { 898,
! 1, 2, 3, 17, 18, 19, 313, 503, 319, 505,
! 212, 407, 589, 174, 241, 373, 176, 177, 178, 179,
! 180, 181, 358, 357, 355, 597, 356, 182, 521, 183,
! 302, 303, 304, 496, 448, 20, 291, 613, 187, 188,
! 189, 190, 191, 192, 193, 194, 29, 30, 31, 32,
! 33, 34, 35, 36, 37, 38, 482, 483, 331, 202,
! 195, 39, 203, 40, 41, 42, 43, 44, 218, 65,
! 213, 219, 571, 66, 499, 292, 205, 46, 286, 287,
! 288, 569, 667, 591, 592, 593, 751, 594, 681, 595,
! 596, 762, 804, 850, 765, 806, 851, 502, 221, 629,
! 630, 631, 222, 47, 48, 49, 50, 335, 337, 342,
! 230, 51, 685, 430, 225, 226, 333, 506, 509, 507,
! 510, 340, 341, 196, 280, 384, 633, 634, 386, 387,
! 388, 214, 449, 450, 451, 452, 453, 454, 305, 276,
! 600, 774, 778, 378, 379, 380, 663, 618, 277, 456,
! 184, 664, 710, 711, 767, 712, 769, 306, 411, 814,
! 775, 815, 816, 713, 813, 768, 865, 770, 854, 883,
! 896, 856, 837, 620, 621, 699, 838, 846, 847, 848,
! 886, 463, 544, 484, 640, 784, 485, 486, 660, 487,
! 552, 295, 397, 488, 489, 446, 185
};
! static const short yypact[] = { 131,
! 137, 2099, 2099, 229,-32768,-32768,-32768,-32768, 129, 129,
! 129, 101, 123, 147,-32768,-32768,-32768,-32768,-32768, 263,
! 1218, 731, 1314, 941, 390, 303, 525, 827, 1631, 1037,
! 2396, 1360, 696, 917, 716, 1008,-32768,-32768, 138,-32768,
! -32768,-32768,-32768,-32768, 129,-32768, 83, 85, 107,-32768,
! -32768, 2099,-32768,-32768,-32768, 129, 129, 129, 2695, 2613,
! 165,-32768, 112, 129, 170,-32768, 914,-32768,-32768,-32768,
! -32768, 129,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! 129,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,-32768, 290,
! 263,-32768,-32768,-32768,-32768,-32768, 146,-32768, 149,-32768,
! 159,-32768,-32768,-32768,-32768,-32768,-32768, 2695, 2695, 205,
! 212, 214,-32768, 377,-32768,-32768,-32768, 2695,-32768,-32768,
! 1719,-32768,-32768, 2695, 204, 235,-32768, 2736, 2777,-32768,
! 3116, 1771, 317, 1480, 2695, 224, 1413, 859, 3041, 1050,
! 1230, 784, 1694, 1227,-32768, 249, 684, 136, 328, 219,
! 358,-32768, 263, 263, 129,-32768, 129,-32768, 307, 129,
! 2142, 357, 129,-32768,-32768, 112, 129, 257,-32768, 2080,
! 401, 454, 284, 2052, 293, 855,-32768, 306,-32768, 298,
! -32768,-32768,-32768, 2695, 2695, 3066,-32768,-32768, 305,-32768,
! 323, 346,-32768, 316, 2695, 1719,-32768, 1719,-32768, 2695,
! 2695, 393,-32768,-32768, 2695, 2695, 2695, 2695, 2695, 2695,
! 2695, 2695, 2695, 2695, 2695, 2695,-32768,-32768, 377, 377,
! 2695, 2695,-32768, 366,-32768, 409, 372,-32768,-32768, 425,
! -32768,-32768,-32768,-32768,-32768, 197,-32768, 399, 454, 215,
! 263,-32768, 470,-32768,-32768, 2613, 2245,-32768, 398, 2183,
! 445,-32768, 759, 65,-32768,-32768, 497, 290, 290,-32768,
! 129,-32768, 357, 129, 129,-32768,-32768,-32768, 357, 129,
! -32768,-32768, 1413, 859, 3041, 1050, 1230, 784, 1694, 1227,
! -32768, 330, 459, 1417,-32768, 129,-32768,-32768, 529, 488,
! -32768, 298, 2883, 2901, 490,-32768,-32768, 2486,-32768, 3116,
! 501, 503, 3116, 3116, 2695, 534, 2695, 2695, 2448, 3077,
! 2576, 2961, 1820, 818, 818, 452, 452,-32768,-32768,-32768,
! -32768,-32768, 515, 235, 513,-32768, 377, 1567, 409,-32768,
! -32768, 112, 129,-32768,-32768,-32768,-32768, 456,-32768, 522,
! 684, 2818,-32768,-32768, 209, 87, 1090, 516, 2695,-32768,
! -32768, 2695, 2286,-32768, 517,-32768,-32768,-32768,-32768,-32768,
! 2465,-32768, 401, 251, 290,-32768, 564,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768, 527,-32768, 528, 2695, 377, 530,
! 488, 3066, 2695, 3066,-32768,-32768, 532, 532, 576, 2695,
! 3145, 2208,-32768,-32768,-32768, 324, 445,-32768,-32768, 78,
! 116, 121, 134, 624,-32768, 542,-32768,-32768,-32768,-32768,
! 425, 425,-32768, 129,-32768,-32768,-32768, 339, 545,-32768,
! 549,-32768,-32768, 1797, 3070, 1146, 1600, 1998, 3095, 1185,
! 1614,-32768,-32768,-32768, 553, 347,-32768,-32768, 374,-32768,
! 552, 555,-32768,-32768,-32768,-32768, 563, 565, 1348,-32768,
! -32768, 626,-32768,-32768,-32768, 567,-32768,-32768, 569,-32768,
! -32768, 129, 129, 3116,-32768, 129, 566, 579, 2925, 581,
! 1784,-32768, 3132,-32768, 377,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2356,
! -32768,-32768, 586, 1207,-32768,-32768,-32768, 2695,-32768,-32768,
! -32768, 175, 325,-32768,-32768, 1520,-32768, 673,-32768,-32768,
! 76,-32768, 290,-32768, 263,-32768,-32768, 3116,-32768,-32768,
! 1348,-32768, 129, 343, 129, 431,-32768,-32768,-32768, 129,
! -32768, 2695,-32768,-32768, 632, 377, 2695,-32768, 633, 3116,
! 595, 593,-32768,-32768, 185, 1920, 2695,-32768, 2425,-32768,
! 646, 2695, 649, 612, 614, 2654, 158, 699,-32768,-32768,
! -32768, 623,-32768,-32768,-32768, 627, 482, 628,-32768,-32768,
! -32768, 2551,-32768,-32768, 407,-32768, 112, 129, 129, 468,
! 483, 238,-32768,-32768, 129, 112, 129, 238,-32768, 129,
! -32768, 1797, 3070, 2564, 3099, 1146, 1600, 1547, 1752, 1998,
! 3095, 3037, 3112, 1185, 1614, 1634, 1766,-32768,-32768,-32768,
! -32768, 625,-32768,-32768, 478, 479, 1784, 76,-32768, 76,
! -32768, 2695, 109,-32768, 2695, 418,-32768, 2943,-32768, 1406,
! 1784,-32768,-32768, 1852,-32768, 1988,-32768,-32768, 3132, 2863,
! -32768,-32768,-32768,-32768, 640, 2695, 641,-32768, 650,-32768,
! -32768, 290, 263,-32768,-32768,-32768,-32768,-32768, 660, 700,
! 1250, 97,-32768,-32768,-32768,-32768, 175, 349,-32768, 129,
! -32768, 129,-32768,-32768, 129, 325, 325,-32768,-32768, 175,
! 325,-32768,-32768,-32768, 662,-32768,-32768,-32768,-32768, 2980,
! 2695,-32768,-32768, 2980, 2695,-32768,-32768, 2695,-32768, 665,
! 1988,-32768,-32768, 2695,-32768,-32768, 674,-32768, 2695, 711,
! 484,-32768, 403, 487,-32768, 1087, 701, 703,-32768, 707,
! 2695, 1654,-32768,-32768,-32768,-32768, 2695,-32768, 468, 483,
! 466,-32768,-32768, 1207, 129, 238,-32768, 238,-32768,-32768,
! 343,-32768, 2980,-32768, 2980, 2839,-32768,-32768, 3098,-32768,
! 62, 129,-32768, 357,-32768, 357, 2695, 2695, 750, 2551,
! 694,-32768,-32768,-32768,-32768,-32768, 695,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768, 31, 697,-32768,-32768,
! -32768, 718, 719,-32768,-32768,-32768,-32768, 698,-32768,-32768,
! -32768,-32768, 710, 712, 377, 127, 715,-32768,-32768,-32768,
! -32768,-32768,-32768, 2695,-32768,-32768,-32768, 2695, 693, 31,
! 720, 31,-32768,-32768,-32768, 722,-32768, 730, 802, 163,
! -32768,-32768, 625, 625,-32768,-32768,-32768, 749, 470, 733,
! -32768,-32768, 2695, 2695, 317, 421,-32768, 740, 743, 744,
! 470,-32768,-32768,-32768, 317,-32768,-32768, 829, 830,-32768
};
static const short yypgoto[] = {-32768,
! -32768,-32768,-32768, 98,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768, 34,-32768, -59, 443, -259, 378,-32768,-32768,
! -53, 728,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -277,
! -310, 538,-32768,-32768, -97, 222, -283, -565, 2, 8,
! 39, 41, 21, 43, 45, 48, -375, -339, 288, 289,
! -317, -281, 291, 294, -488, -466, 427, 435,-32768, -177,
! -119, -519, -199, 429, 496, 480, 706,-32768, -510, -121,
! -218, 437,-32768, 591,-32768, 379, 4, 68,-32768, 463,
! -32768, 286,-32768, -411,-32768, 176,-32768, -526,-32768,-32768,
! 299,-32768,-32768,-32768,-32768,-32768,-32768, -132, 282, 154,
! 171, -124, 58,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768, 462, -114,-32768, 562,-32768,-32768, 230,
! 228, 568, 477, -95,-32768,-32768, -523, -262, -406, -429,
! -32768, 476,-32768,-32768,-32768,-32768,-32768,-32768, -242,-32768,
! -32768, -481, 91,-32768,-32768, 533, -541,-32768, 295,-32768,
! -32768, -514,-32768,-32768,-32768,-32768,-32768, 617, -388, 93,
! -685, -264, 20,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768, -745, 54,-32768, 55,
! -32768, 461,-32768, -506,-32768,-32768,-32768,-32768,-32768,-32768,
! 433, -296,-32768,-32768,-32768,-32768, 60
};
! #define YYLAST 3205
! static const short yytable[] = { 175,
! 186, 314, 416, 21, 21, 45, 45, 220, 419, 22,
! 22, 374, 56, 57, 58, 396, 308, 385, 418, 223,
! 616, 478, 25, 25, 72, 619, 81, 415, 90, 639,
! 99, 542, 108, 228, 117, 478, 126, 624, 135, 844,
! 23, 23, 24, 24, 26, 26, 27, 27, 332, 28,
! 28, 614, 665, 21, 541, 45, 715, 479, 617, 22,
! 408, 52, 52, 45, 198, -105, 45, 658, 540, 688,
! 199, 479, 25, 615, 409, 242, 662, 67, -443, 480,
! 147, 149, 151, 809, 619, 144, 145, 144, 145, 659,
! 23, 300, 24, 480, 26, 273, 27, 776, 845, 28,
! 53, 200, 616, 201, 232, 233, 561, 827, 866, 144,
! 145, 52, 143, 458, 238, 481, -444, 617, 8, 574,
! 243, -445, 576, 143, 143, 143, 736, 840, 737, 481,
! -1, 278, 374, 614, -446, 455, -2, 888, 14, 143,
! 345, 14, 69, 599, 828, 635, 635, 732, 143, 152,
! 351, 299, 352, -105, 741, 615, 332, 143, 14, 753,
! 144, 145, -423, 777, 610, 14, 143, 59, 478, 470,
! 867, 146, 860, 148, 45, 143, 399, 62, 626, 875,
! 650, 668, 461, 670, 143, 527, 530, 533, 536, 60,
! 72, 761, 81, 143, 90, 150, 99, 237, 224, 543,
! -424, 72, 143, 81, 479, -425, 787, 789, 879, 861,
! 897, 538, 375, 61, 45, 696, 651, 198, -426, 45,
! 425, 142, 427, 199, 798, 78, 480, 323, 686, 45,
! 285, 197, 627, 324, 227, 209, 398, 229, 654, 45,
! 405, 628, 211, 238, 836, 880, 327, 231, 14, 45,
! 586, 45, 587, 206, 200, 735, 201, 207, 140, 141,
! 289, 290, 481, 339, 325, 62, 326, 14, 328, 750,
! 329, 234, 143, 330, 655, 210, 211, 819, 235, 390,
! 236, 210, 211, 314, 391, 334, 244, 542, 625, 671,
! 616, 674, 62, 215, 436, 439, 542, 393, 338, 45,
! 144, 145, 371, 372, 210, 211, 279, 91, 7, 92,
! 541, 760, 54, 55, 9, 10, 11, 315, 211, 541,
! 63, 614, 245, 635, 635, 273, 72, 62, 81, 64,
! 90, 281, 99, 500, 74, 323, 518, 45, 520, 491,
! 310, 324, 492, 615, 311, 62, 215, 216, 395, 238,
! 791, 62, 526, 529, 327, 535, 217, 301, 881, 882,
! -472, -472, -472, -472, 83, 289, 290, 317, -472, -472,
! -472, 207, 325, 293, 326, 339, 328, 320, 329, 144,
! 145, 330, 636, 198, -472, 45, -247, 346, 672, 199,
! 336, 637, 211, 334, 86, 7, 87, 459, 474, 349,
! 216, 9, 10, 11, 475, 347, 627, 524, 478, 217,
! 445, 525, 474, -378, -378, 628, 211, 476, 475, 14,
! 200, 547, 201, 782, 285, 783, 548, 717, 348, 209,
! 555, 476, -273, 62, 556, 45, 726, 45, -79, 477,
! 377, 673, 204, 666, 479, -104, -273, 14, 376, 70,
! 75, 79, 84, 477, 381, 543, 557, 106, 111, 115,
! 120, 558, 339, 745, 543, 392, 480, 315, 211, 528,
! 531, 534, 537, -246, 873, 874, 675, 72, 155, 90,
! 612, 108, 382, 126, 210, 211, -273, 401, 63, 716,
! -273, 383, 211, 830, 245, 831, 705, 64, 706, 707,
! 708, 709, 481, 890, 88, 93, 97, 102, 891, 264,
! 265, 266, 124, 129, 133, 138, 71, 76, 80, 85,
! 210, 211, 464, 211, 107, 112, 116, 121, 406, 95,
! 7, 96, 722, 211, 720, 211, 9, 10, 11, 612,
! 412, 21, 423, 45, 314, 474, 695, 22, 818, 722,
! 211, 475, 421, 422, 14, 247, 249, 642, 598, 45,
! 25, 733, 734, 643, 476, 311, 207, 803, 278, 763,
! 805, 311, 428, 611, 207, 429, 646, 434, 23, 440,
! 24, 764, 26, 437, 27, 438, 477, 28, 294, 413,
! 414, 307, 780, 781, 644, 309, 645, 443, 647, 622,
! 648, 885, 444, 649, 466, 490, 494, 504, -248, 632,
! 638, 512, 513, 895, 516, 70, 75, 79, 84, 679,
! 435, 522, 395, 21, 301, 45, 539, 549, 198, 22,
! 45, 550, 611, 676, 199, 554, 757, 198, 725, 45,
! 697, 559, 25, 199, 560, 72, 562, 81, 564, 90,
! 580, 99, 209, 108, 573, 117, 575, 126, 673, 135,
! 23, 581, 24, 583, 26, 200, 27, 201, 623, 28,
! 88, 93, 97, 102, 200, 661, 201, -30, 682, 683,
! 684, 622, 71, 76, 80, 85, 144, 145, 282, 283,
! 284, -31, 417, 294, 691, 692, 316, 693, 420, 801,
! 122, 7, 123, 551, 551, 698, 701, 9, 10, 11,
! 704, 811, 275, 610, 426, 772, 759, 817, 563, 565,
! 131, 7, 132, 756, 758, 14, 771, 9, 10, 11,
! 89, 94, 98, 103, 5, 73, 7, 74, 125, 130,
! 134, 139, 9, 10, 11, 14, 790, 832, 833, 797,
! 835, 70, 75, 79, 84, 389, 802, 800, 13, 301,
! 766, 462, -108, -108, -108, -108, 834, 807, -108, 808,
! -108, -108, -108, 810, 289, 290, 839, 843, 858, -254,
! 849, 855, 869, 289, 290, 474, -108, 786, 788, 7,
! 92, 475, 143, 857, 835, 9, 10, 11, 868, -256,
! 852, 853, 862, 871, 476, 876, 88, 93, 97, 102,
! 878, 21, 877, 45, -243, 884, 887, 22, 71, 76,
! 80, 85, 892, 835, 889, 893, 477, 894, 899, 900,
! 25, 100, 7, 101, 469, 702, 703, 497, 9, 10,
! 11, 410, 545, 652, 653, 498, 656, -108, 23, 657,
! 24, 501, 26, 467, 27, 321, 669, 28, 5, 752,
! 7, 8, 5, 465, 7, 74, 9, 10, 11, 622,
! 9, 10, 11, 262, 263, 264, 265, 266, 859, 730,
! 731, 394, 13, 785, 14, 15, 13, 779, 316, 316,
! 577, 578, 517, 687, 579, 424, 89, 94, 98, 103,
! 738, 743, 70, 75, 841, 515, 106, 111, 842, 431,
! -249, 460, 714, 870, 208, 553, 872, -26, -26, -26,
! -26, 127, 7, 128, 546, -26, -26, -26, 9, 10,
! 11, 0, 0, 0, 0, 0, 389, 389, 322, -370,
! 209, -26, 0, -273, 5, 82, 7, 83, 0, 0,
! 0, 0, 9, 10, 11, 88, 93, -273, 677, 124,
! 129, 343, 344, 0, 0, 0, 0, 0, 13, 71,
! 76, 0, 350, 107, 112, 0, 0, 353, 354, 0,
! 210, 211, 359, 360, 361, 362, 363, 364, 365, 366,
! 367, 368, 369, 370, 457, 0, 0, -273, 0, 0,
! -255, -273, -26, 0, 0, 0, 718, 719, 0, 0,
! 724, 0, 136, 7, 137, 727, 728, 0, 729, 9,
! 10, 11, 0, 495, -245, 0, 0, 389, 389, 0,
! 0, 0, 89, 94, 98, 103, 0, 508, 511, 0,
! 5, 109, 7, 110, 0, 0, 0, 0, 9, 10,
! 11, 742, 0, 5, 746, 7, 83, 0, 0, 0,
! 0, 9, 10, 11, 13, 0, 457, 457, 532, 457,
! 70, 75, 79, 84, 0, 0, 0, 13, 106, 111,
! 115, 120, 0, 0, 441, 442, 0, 0, 0, 0,
! 471, -257, 472, 5, 6, 7, 8, 0, 294, 473,
! 294, 9, 10, 11, 0, 721, 723, 0, 0, 0,
! 0, 0, 0, 209, 0, 0, -273, 13, 792, 570,
! -251, 572, 794, 0, 0, 88, 93, 97, 102, 0,
! -273, 0, 0, 124, 129, 133, 138, 71, 76, 80,
! 85, 0, 0, 0, 0, 107, 112, 116, 121, 0,
! 86, 7, 87, 210, 211, 514, 0, 9, 10, 11,
! 519, 0, 0, 820, 821, 0, 822, 523, 0, 0,
! -273, 823, -534, 824, -273, 14, 0, 0, 0, 0,
! 829, 89, 94, 0, 0, 125, 130, 0, 0, 122,
! 7, 123, 389, 389, 0, 0, 9, 10, 11, 0,
! 0, 389, 389, 0, 0, 389, 389, 471, 0, 0,
! 5, 6, 7, 8, 14, 0, 473, 0, 9, 10,
! 11, 5, 68, 7, 69, 0, 568, 700, 0, 9,
! 10, 11, 7, 101, 13, 7, 87, 0, 9, 10,
! 11, 9, 10, 11, 0, 13, 0, 14, 590, 0,
! 773, 0, -450, -450, 721, 723, 723, -450, -450, 14,
! -450, 0, 0, 0, -450, 0, -450, -450, -450, -450,
! -450, -450, -450, -450, -450, -450, -450, 0, -450, 0,
! -450, 0, -450, -450, -450, -450, -450, 739, 0, -534,
! 511, -450, 0, 0, 0, 0, 0, -450, 568, 0,
! -450, -242, 0, 0, 0, -450, -450, -450, 0, 678,
! 0, -450, -450, 0, 680, 0, -450, 5, 77, 7,
! 78, 0, 0, 590, 689, 9, 10, 11, 0, 690,
! 0, 0, 0, -450, 0, -450, -450, 0, -450, 0,
! 0, 13, 0, 14, 0, 0, 0, 0, 566, 0,
! 153, 89, 94, 98, 103, 154, 155, 0, 156, 125,
! 130, 134, 139, 5, 118, 7, 119, 0, 0, 0,
! 0, 9, 10, 11, 0, 0, 157, 0, 15, 0,
! 158, 159, 160, 161, 162, 0, 0, 13, 0, 163,
! 532, 0, 0, 0, 590, 164, 0, -244, 165, 740,
! 0, 0, 744, 166, 167, 168, 0, 0, 590, 169,
! 170, 590, 0, 590, 171, 748, 5, 321, 7, 69,
! 5, 0, 7, 8, 9, 10, 11, 0, 9, 10,
! 11, 0, 532, 172, 173, 0, 567, 0, 0, 0,
! 13, 0, 14, -253, 13, 0, 14, 15, 250, 251,
! 252, 0, 253, 254, 255, 256, 257, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 863, 864, 793, 0,
! 0, 0, 795, 0, 0, 796, 0, 0, 590, 0,
! 274, 799, -448, -448, -448, -448, -448, -448, -448, 0,
! -448, -448, -448, -448, -448, 749, -448, -448, -448, -448,
! -448, -448, -448, -448, -448, -448, -448, -448, -448, -448,
! -448, -448, -448, -448, -448, -448, -448, 0, 0, 0,
! 0, -448, 0, 5, 6, 7, 8, -448, 0, 641,
! -448, 9, 10, 11, 0, -448, -448, -448, 0, 0,
! 0, -448, -448, 0, 0, 0, -448, 13, 0, 14,
! 0, 95, 7, 96, 0, 0, 0, 0, 9, 10,
! 11, 0, 0, -448, 275, -448, -448, 447, -448, -472,
! -472, -472, -472, -472, -472, -472, 14, -472, -472, -472,
! -472, -472, 0, -472, -472, -472, -472, -472, -472, -472,
! -472, -472, -472, -472, -472, -472, -472, -472, 0, -472,
! -472, -472, -472, -472, 91, 7, 92, 0, -472, 0,
! 0, 9, 10, 11, -472, 0, 0, -472, 127, 7,
! 128, 0, -472, -472, -472, 9, 10, 11, -472, -472,
! 0, 0, 0, -472, 5, 104, 7, 105, 131, 7,
! 132, 0, 9, 10, 11, 9, 10, 11, 0, 0,
! -472, 0, -472, -472, 812, -472, -479, -479, 13, 0,
! 14, -479, -479, 14, -479, 0, 0, 0, -479, 0,
! -479, -479, -479, -479, -479, -479, -479, -479, -479, -479,
! -479, 0, -479, 0, -479, 0, -479, -479, -479, -479,
! -479, 0, 0, 0, 0, -479, 0, 0, 0, 7,
! 96, -479, 0, 0, -479, 9, 10, 11, 0, -479,
! -479, -479, 0, 0, -250, -479, -479, 0, 0, 239,
! -479, 153, 5, 14, 7, 8, 154, 155, 0, 156,
! 9, 10, 11, 0, 0, 0, 0, -479, 0, -479,
! -479, 0, -479, 0, 0, 0, 13, 157, 14, 15,
! 0, 158, 159, 160, 161, 162, 100, 7, 101, 0,
! 163, 0, 0, 9, 10, 11, 164, 0, 0, 165,
! 136, 7, 137, 0, 166, 167, 168, 9, 10, 11,
! 169, 170, 0, 0, 584, 171, 585, 145, 0, 0,
! 0, 154, 155, 0, 156, 0, 0, 0, 0, 0,
! 5, 68, 7, 69, 172, 173, 0, 240, 9, 10,
! 11, 0, 157, 0, 15, 0, 158, 159, 160, 161,
! 162, 0, 0, 0, 13, 163, 14, 0, 0, 0,
! 0, 164, 267, 268, 165, 269, 270, 271, 272, 166,
! 167, 168, 0, 0, 0, 169, 170, 0, 0, 586,
! 171, 587, 584, 0, 585, 145, 0, 0, 0, 154,
! 155, 0, 156, 0, 0, 0, 0, 0, -301, 172,
! 173, 0, 588, 260, 261, 262, 263, 264, 265, 266,
! 157, 0, 15, 0, 158, 159, 160, 161, 162, 0,
! 0, 0, 0, 163, 0, 0, 0, 0, 0, 164,
! 0, 0, 165, 0, 0, 0, 0, 166, 167, 168,
! 0, 0, 0, 169, 170, 0, 0, 586, 171, 587,
! 584, 0, 153, 0, 0, 0, 0, 154, 155, 0,
! 156, 0, 0, 0, 0, 0, -367, 172, 173, 0,
! 588, 0, 0, 0, 0, 0, 0, 0, 157, 0,
! 15, 0, 158, 159, 160, 161, 162, 0, 0, 0,
! 0, 163, 0, -314, 0, 0, 0, 164, 0, 0,
! 165, 0, 0, 0, 0, 166, 167, 168, 0, 0,
! 0, 169, 170, 0, 0, -314, 171, -314, 584, 0,
! 153, 0, 0, 0, 0, 154, 155, 0, 156, 0,
! 0, 5, 104, 7, 105, 172, 173, 0, 588, 9,
! 10, 11, 0, 0, 0, 0, 157, 0, 15, 0,
! 158, 159, 160, 161, 162, 13, 0, 14, 0, 163,
! 0, 0, 0, 0, 0, 164, 0, 0, 165, 0,
! 0, 0, 0, 166, 167, 168, 0, 0, 0, 169,
! 170, 0, 318, 0, 171, -22, -22, -22, -22, 0,
! 0, 0, 0, -22, -22, -22, 0, 0, 0, 0,
! 0, 0, 0, 172, 173, 0, 588, 0, 209, -22,
! 312, -273, 0, -18, -18, -18, -18, 0, 0, 0,
! 0, -18, -18, -18, 0, -273, 0, 0, 0, 4,
! 0, -117, 5, 6, 7, 8, 209, -18, 0, -273,
! 9, 10, 11, 0, 0, 0, 0, 0, 210, 211,
! 0, 0, 0, -273, 0, 12, 13, 0, 14, 15,
! 0, 0, 0, 0, 0, -273, 0, 0, 0, -273,
! -22, 0, 0, 0, 153, 5, 296, 7, 8, 154,
! 155, 0, 156, 9, 10, 11, -117, 0, 0, 0,
! 0, 0, 0, -273, 0, -117, 0, -273, -18, 13,
! 157, 14, 15, 0, 158, 159, 160, 161, 162, 0,
! 0, 0, 16, 163, 0, 153, 0, 402, 0, 164,
! 154, 155, 165, 156, 0, 0, 0, 166, 167, 297,
! 0, 0, 0, 169, 170, 0, 0, 0, 171, 0,
! 0, 157, 0, 15, 0, 158, 159, 160, 161, 162,
! 0, 0, 0, 0, 163, 0, 0, 172, 173, 0,
! 164, 298, 0, 165, 0, 0, 0, 0, 166, 167,
! 403, 0, 0, 0, 169, 170, 0, 153, 0, 171,
! 0, 0, 154, 155, 0, 156, 255, 256, 257, 258,
! 259, 260, 261, 262, 263, 264, 265, 266, 172, 173,
! 0, 0, 404, 157, 0, 15, 0, 158, 159, 160,
! 161, 162, 0, 0, 0, 0, 163, 0, 153, 0,
! 0, 0, 164, 154, 155, 165, 156, 0, 0, 0,
! 166, 167, 168, 0, 0, 0, 169, 170, 0, 0,
! 0, 171, 0, 0, 157, 0, 15, 0, 158, 159,
! 160, 161, 162, 0, 0, 0, 0, 163, 0, 0,
! 172, 173, 0, 164, 400, 0, 165, 0, 0, 0,
! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0,
! 0, 0, 171, 0, 0, 0, 0, 0, 585, 601,
! 6, 7, 8, 154, 155, 0, 156, 9, 10, 11,
! 0, 172, 173, 0, 0, 493, 602, 603, 604, 605,
! 606, 607, 608, 13, 157, 14, 15, 0, 158, 159,
! 160, 161, 162, 0, 0, 0, 0, 163, 0, 5,
! 113, 7, 114, 164, 0, 0, 165, 9, 10, 11,
! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0,
! 0, 0, 171, 13, 0, 14, 0, 585, 145, 0,
! 0, 0, 154, 155, 0, 156, 0, 0, 0, 609,
! 0, 172, 173, 0, 610, 602, 603, 604, 605, 606,
! 607, 608, 0, 157, 0, 15, 0, 158, 159, 160,
! 161, 162, 0, 0, 0, 0, 163, 0, 5, 6,
! 7, 8, 164, 0, 0, 165, 9, 10, 11, -252,
! 166, 167, 168, 0, 0, 0, 169, 170, 153, 0,
! 0, 171, 13, 154, 155, 0, 156, 256, 257, 258,
! 259, 260, 261, 262, 263, 264, 265, 266, 609, 0,
! 172, 173, 0, 610, 157, 0, 15, 0, 158, 159,
! 160, 161, 162, 0, 0, 0, 0, 163, 0, 0,
! 0, 0, 0, 164, 0, 0, 165, 0, 0, 0,
! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0,
! 0, 0, 171, 153, 5, 6, 7, 8, 154, 155,
! 0, 156, 9, 10, 11, 0, 0, 5, 77, 7,
! 78, 172, 173, 0, 435, 9, 10, 11, 13, 157,
! 14, 15, 0, 158, 159, 160, 161, 162, 0, 0,
! 0, 13, 163, 14, 0, 0, 0, 0, 164, 0,
! 0, 165, 0, 0, 0, 0, 166, 167, 168, 0,
! 0, 0, 169, 170, 0, 153, 5, 171, 7, 8,
! 154, 155, 0, 156, 9, 10, 11, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 172, 173, 0, 0,
! 13, 157, 14, 15, 0, 158, 159, 160, 161, 162,
! 0, 0, 0, 0, 163, 0, 153, 0, 0, 0,
! 164, 154, 155, 165, 156, 0, 0, 0, 166, 167,
! 168, 0, 0, 0, 169, 170, 0, 0, 0, 171,
! 0, 0, 157, 0, 15, 0, 158, 159, 160, 161,
! 162, 0, 0, 0, 0, 163, 0, 153, 172, 173,
! 0, 164, 154, 155, 165, 156, 0, 0, 0, 166,
! 167, 168, 0, 0, 0, 169, 170, 0, 0, 0,
! 171, 0, 0, 157, 0, 15, 0, 158, 159, 160,
! 161, 162, 0, 0, 0, 0, 163, 694, 153, 172,
! 173, 0, 164, 154, 155, 165, 156, 0, 0, 0,
! 166, 167, 168, 0, 0, 0, 169, 170, 0, 0,
! 0, 171, 0, 0, 157, 0, 15, 0, 158, 159,
! 160, 161, 162, 0, 0, 0, 0, 163, 0, 153,
! 172, 173, 0, 164, 154, 155, 165, 156, 0, 0,
! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0,
! 0, 0, 246, 0, 0, 157, 0, 15, 0, 158,
! 159, 160, 161, 162, 0, 0, 0, 0, 163, 0,
! 468, 172, 173, 0, 164, 154, 155, 165, 156, 0,
! 0, 0, 166, 167, 168, 0, 0, 0, 169, 170,
! 0, 0, 0, 248, 0, 0, 157, 0, 15, 0,
! 158, 159, 160, 161, 162, 0, 0, 0, 0, 163,
! 0, 0, 172, 173, 0, 164, 0, 0, 165, 0,
! 0, 0, 754, 166, 167, 168, 0, 0, 0, 169,
! 170, 250, 251, 252, 171, 253, 254, 255, 256, 257,
! 258, 259, 260, 261, 262, 263, 264, 265, 266, 0,
! 0, 0, 0, 172, 173, 250, 251, 252, 755, 253,
! 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 0, 0, 250, 251, 252, 825, 253,
! 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 250, 251, 252, 0, 253, 254, 255,
256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 0, 0, 0, 0, 0, 0, 250, 251, 252,
! 432, 253, 254, 255, 256, 257, 258, 259, 260, 261,
! 262, 263, 264, 265, 266, 250, 251, 252, 433, 253,
254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 0, 0, 0, 0, 0, 0, 14,
! 0, 0, 582, 259, 260, 261, 262, 263, 264, 265,
! 266, 0, 250, 251, 252, 747, 253, 254, 255, 256,
! 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
! 5, 113, 7, 114, 5, 0, 7, 78, 9, 10,
! 11, 0, 9, 10, 11, 0, 0, 0, 0, 0,
! 0, 0, 0, 0, 13, 0, 14, 0, 13, 5,
! 14, 7, 8, 5, 73, 7, 74, 9, 10, 11,
0, 9, 10, 11, 0, 0, 0, 0, 0, 0,
! 0, 0, 0, 13, 0, 14, 0, 13, 5, 109,
! 7, 110, 5, 82, 7, 83, 9, 10, 11, 0,
! 9, 10, 11, 0, 0, 5, 118, 7, 119, 0,
! 0, 0, 13, 9, 10, 11, 13, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 0, 0, 13,
! 250, 251, 252, 826, 253, 254, 255, 256, 257, 258,
! 259, 260, 261, 262, 263, 264, 265, 266, 250, 251,
! 252, 0, 253, 254, 255, 256, 257, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 252, 0, 253, 254,
! 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
! 265, 266, 254, 255, 256, 257, 258, 259, 260, 261,
! 262, 263, 264, 265, 266
};
! static const short yycheck[] = { 59,
! 60, 220, 313, 2, 3, 2, 3, 140, 319, 2,
! 3, 271, 9, 10, 11, 293, 216, 280, 315, 141,
! 540, 397, 2, 3, 21, 540, 23, 311, 25, 553,
! 27, 461, 29, 148, 31, 411, 33, 544, 35, 9,
! 2, 3, 2, 3, 2, 3, 2, 3, 226, 2,
! 3, 540, 563, 52, 461, 52, 622, 397, 540, 52,
! 303, 2, 3, 60, 63, 1, 63, 556, 457, 596,
! 63, 411, 52, 540, 10, 171, 1, 20, 1, 397,
! 47, 48, 49, 769, 599, 3, 4, 3, 4, 556,
! 52, 211, 52, 411, 52, 9, 52, 1, 68, 52,
! 3, 63, 622, 63, 158, 159, 495, 46, 854, 3,
! 4, 52, 45, 378, 168, 397, 1, 599, 7, 508,
! 174, 1, 511, 56, 57, 58, 668, 813, 670, 411,
! 0, 185, 392, 622, 1, 378, 0, 883, 30, 72,
! 236, 30, 7, 532, 83, 552, 553, 662, 81, 52,
! 246, 211, 248, 89, 46, 622, 334, 90, 30, 686,
! 3, 4, 85, 67, 89, 30, 99, 67, 544, 83,
! 856, 89, 46, 89, 171, 108, 296, 3, 4, 865,
! 556, 570, 382, 572, 117, 450, 451, 452, 453, 67,
! 187, 702, 189, 126, 191, 89, 193, 164, 141, 462,
! 85, 198, 135, 200, 544, 85, 730, 731, 46, 83,
! 896, 454, 272, 67, 211, 58, 556, 216, 85, 216,
! 335, 84, 337, 216, 751, 7, 544, 226, 44, 226,
! 197, 67, 58, 226, 89, 27, 296, 89, 556, 236,
! 300, 67, 68, 297, 810, 83, 226, 89, 30, 246,
! 66, 248, 68, 84, 216, 667, 216, 88, 37, 38,
! 203, 204, 544, 230, 226, 3, 226, 30, 226, 681,
! 226, 67, 205, 226, 556, 67, 68, 784, 67, 83,
! 67, 67, 68, 502, 88, 226, 83, 717, 548, 573,
! 810, 575, 3, 4, 348, 355, 726, 83, 1, 296,
! 3, 4, 269, 270, 67, 68, 83, 5, 6, 7,
! 717, 700, 84, 85, 12, 13, 14, 67, 68, 726,
! 58, 810, 88, 730, 731, 9, 323, 3, 325, 67,
! 327, 83, 329, 83, 7, 334, 432, 334, 434, 399,
! 84, 334, 402, 810, 88, 3, 4, 58, 291, 403,
! 739, 3, 450, 451, 334, 453, 67, 1, 873, 874,
! 4, 5, 6, 7, 7, 308, 309, 84, 12, 13,
! 14, 88, 334, 67, 334, 342, 334, 85, 334, 3,
! 4, 334, 58, 382, 28, 382, 84, 83, 46, 382,
! 85, 67, 68, 334, 5, 6, 7, 378, 397, 84,
! 58, 12, 13, 14, 397, 83, 58, 84, 784, 67,
! 377, 88, 411, 84, 85, 67, 68, 397, 411, 30,
! 382, 83, 382, 720, 391, 722, 88, 627, 83, 27,
! 84, 411, 30, 3, 88, 432, 636, 434, 46, 397,
! 32, 574, 64, 565, 784, 89, 44, 30, 83, 21,
! 22, 23, 24, 411, 83, 718, 83, 29, 30, 31,
! 32, 88, 429, 46, 727, 67, 784, 67, 68, 450,
! 451, 452, 453, 84, 863, 864, 46, 474, 9, 476,
! 540, 478, 58, 480, 67, 68, 84, 90, 58, 83,
! 88, 67, 68, 804, 88, 806, 15, 67, 17, 18,
! 19, 20, 784, 83, 25, 26, 27, 28, 88, 58,
! 59, 60, 33, 34, 35, 36, 21, 22, 23, 24,
! 67, 68, 67, 68, 29, 30, 31, 32, 84, 5,
! 6, 7, 67, 68, 67, 68, 12, 13, 14, 599,
! 44, 540, 84, 540, 763, 544, 606, 540, 83, 67,
! 68, 544, 331, 332, 30, 178, 179, 556, 525, 556,
! 540, 84, 84, 556, 544, 88, 88, 84, 622, 702,
! 84, 88, 44, 540, 88, 88, 556, 88, 540, 46,
! 540, 703, 540, 83, 540, 83, 544, 540, 210, 308,
! 309, 213, 717, 718, 556, 217, 556, 83, 556, 540,
! 556, 879, 90, 556, 83, 90, 90, 44, 84, 552,
! 553, 85, 85, 891, 85, 187, 188, 189, 190, 586,
! 89, 46, 565, 622, 1, 622, 85, 83, 627, 622,
! 627, 83, 599, 576, 627, 83, 696, 636, 635, 636,
! 607, 90, 622, 636, 90, 642, 84, 644, 84, 646,
! 85, 648, 27, 650, 88, 652, 88, 654, 791, 656,
! 622, 83, 622, 83, 622, 627, 622, 627, 83, 622,
! 191, 192, 193, 194, 636, 3, 636, 46, 46, 85,
! 88, 622, 187, 188, 189, 190, 3, 4, 5, 6,
! 7, 46, 314, 315, 46, 84, 221, 84, 320, 759,
! 5, 6, 7, 482, 483, 7, 84, 12, 13, 14,
! 84, 771, 85, 89, 336, 16, 67, 777, 497, 498,
! 5, 6, 7, 84, 84, 30, 67, 12, 13, 14,
! 25, 26, 27, 28, 4, 5, 6, 7, 33, 34,
! 35, 36, 12, 13, 14, 30, 85, 807, 808, 85,
! 810, 323, 324, 325, 326, 280, 46, 84, 28, 1,
! 703, 383, 4, 5, 6, 7, 17, 67, 10, 67,
! 12, 13, 14, 67, 717, 718, 83, 83, 67, 84,
! 84, 84, 90, 726, 727, 784, 28, 730, 731, 6,
! 7, 784, 725, 84, 854, 12, 13, 14, 858, 84,
! 83, 83, 88, 84, 784, 84, 327, 328, 329, 330,
! 9, 810, 83, 810, 84, 67, 84, 810, 323, 324,
! 325, 326, 83, 883, 884, 83, 784, 84, 0, 0,
! 810, 5, 6, 7, 392, 614, 615, 411, 12, 13,
! 14, 304, 464, 556, 556, 411, 556, 89, 810, 556,
! 810, 415, 810, 391, 810, 1, 571, 810, 4, 684,
! 6, 7, 4, 388, 6, 7, 12, 13, 14, 810,
! 12, 13, 14, 56, 57, 58, 59, 60, 845, 658,
! 659, 291, 28, 730, 30, 31, 28, 717, 413, 414,
! 512, 513, 431, 595, 516, 334, 191, 192, 193, 194,
! 671, 674, 474, 475, 814, 429, 478, 479, 816, 342,
! 84, 379, 618, 860, 1, 483, 862, 4, 5, 6,
! 7, 5, 6, 7, 464, 12, 13, 14, 12, 13,
! 14, -1, -1, -1, -1, -1, 461, 462, 84, 85,
! 27, 28, -1, 30, 4, 5, 6, 7, -1, -1,
! -1, -1, 12, 13, 14, 476, 477, 44, 580, 480,
! 481, 234, 235, -1, -1, -1, -1, -1, 28, 474,
! 475, -1, 245, 478, 479, -1, -1, 250, 251, -1,
! 67, 68, 255, 256, 257, 258, 259, 260, 261, 262,
! 263, 264, 265, 266, 378, -1, -1, 84, -1, -1,
! 84, 88, 89, -1, -1, -1, 628, 629, -1, -1,
! 632, -1, 5, 6, 7, 637, 638, -1, 640, 12,
! 13, 14, -1, 407, 84, -1, -1, 552, 553, -1,
! -1, -1, 327, 328, 329, 330, -1, 421, 422, -1,
! 4, 5, 6, 7, -1, -1, -1, -1, 12, 13,
! 14, 673, -1, 4, 676, 6, 7, -1, -1, -1,
! -1, 12, 13, 14, 28, -1, 450, 451, 452, 453,
! 642, 643, 644, 645, -1, -1, -1, 28, 650, 651,
! 652, 653, -1, -1, 357, 358, -1, -1, -1, -1,
! 1, 84, 3, 4, 5, 6, 7, -1, 720, 10,
! 722, 12, 13, 14, -1, 630, 631, -1, -1, -1,
! -1, -1, -1, 27, -1, -1, 30, 28, 740, 503,
! 84, 505, 744, -1, -1, 646, 647, 648, 649, -1,
! 44, -1, -1, 654, 655, 656, 657, 642, 643, 644,
! 645, -1, -1, -1, -1, 650, 651, 652, 653, -1,
! 5, 6, 7, 67, 68, 428, -1, 12, 13, 14,
! 433, -1, -1, 785, 786, -1, 788, 440, -1, -1,
! 84, 793, 83, 795, 88, 30, -1, -1, -1, -1,
! 802, 476, 477, -1, -1, 480, 481, -1, -1, 5,
! 6, 7, 717, 718, -1, -1, 12, 13, 14, -1,
! -1, 726, 727, -1, -1, 730, 731, 1, -1, -1,
! 4, 5, 6, 7, 30, -1, 10, -1, 12, 13,
! 14, 4, 5, 6, 7, -1, 499, 611, -1, 12,
! 13, 14, 6, 7, 28, 6, 7, -1, 12, 13,
! 14, 12, 13, 14, -1, 28, -1, 30, 521, -1,
! 1, -1, 3, 4, 779, 780, 781, 8, 9, 30,
! 11, -1, -1, -1, 15, -1, 17, 18, 19, 20,
! 21, 22, 23, 24, 25, 26, 27, -1, 29, -1,
! 31, -1, 33, 34, 35, 36, 37, 671, -1, 83,
! 674, 42, -1, -1, -1, -1, -1, 48, 571, -1,
! 51, 84, -1, -1, -1, 56, 57, 58, -1, 582,
! -1, 62, 63, -1, 587, -1, 67, 4, 5, 6,
! 7, -1, -1, 596, 597, 12, 13, 14, -1, 602,
! -1, -1, -1, 84, -1, 86, 87, -1, 89, -1,
! -1, 28, -1, 30, -1, -1, -1, -1, 1, -1,
! 3, 646, 647, 648, 649, 8, 9, -1, 11, 654,
! 655, 656, 657, 4, 5, 6, 7, -1, -1, -1,
! -1, 12, 13, 14, -1, -1, 29, -1, 31, -1,
! 33, 34, 35, 36, 37, -1, -1, 28, -1, 42,
! 774, -1, -1, -1, 667, 48, -1, 84, 51, 672,
! -1, -1, 675, 56, 57, 58, -1, -1, 681, 62,
! 63, 684, -1, 686, 67, 10, 4, 1, 6, 7,
! 4, -1, 6, 7, 12, 13, 14, -1, 12, 13,
! 14, -1, 816, 86, 87, -1, 89, -1, -1, -1,
! 28, -1, 30, 84, 28, -1, 30, 31, 43, 44,
! 45, -1, 47, 48, 49, 50, 51, 52, 53, 54,
! 55, 56, 57, 58, 59, 60, 850, 851, 741, -1,
! -1, -1, 745, -1, -1, 748, -1, -1, 751, -1,
! 1, 754, 3, 4, 5, 6, 7, 8, 9, -1,
! 11, 12, 13, 14, 15, 90, 17, 18, 19, 20,
! 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
! 31, 32, 33, 34, 35, 36, 37, -1, -1, -1,
! -1, 42, -1, 4, 5, 6, 7, 48, -1, 10,
! 51, 12, 13, 14, -1, 56, 57, 58, -1, -1,
! -1, 62, 63, -1, -1, -1, 67, 28, -1, 30,
! -1, 5, 6, 7, -1, -1, -1, -1, 12, 13,
! 14, -1, -1, 84, 85, 86, 87, 1, 89, 3,
! 4, 5, 6, 7, 8, 9, 30, 11, 12, 13,
! 14, 15, -1, 17, 18, 19, 20, 21, 22, 23,
! 24, 25, 26, 27, 28, 29, 30, 31, -1, 33,
! 34, 35, 36, 37, 5, 6, 7, -1, 42, -1,
! -1, 12, 13, 14, 48, -1, -1, 51, 5, 6,
! 7, -1, 56, 57, 58, 12, 13, 14, 62, 63,
! -1, -1, -1, 67, 4, 5, 6, 7, 5, 6,
! 7, -1, 12, 13, 14, 12, 13, 14, -1, -1,
! 84, -1, 86, 87, 1, 89, 3, 4, 28, -1,
! 30, 8, 9, 30, 11, -1, -1, -1, 15, -1,
! 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
! 27, -1, 29, -1, 31, -1, 33, 34, 35, 36,
! 37, -1, -1, -1, -1, 42, -1, -1, -1, 6,
! 7, 48, -1, -1, 51, 12, 13, 14, -1, 56,
! 57, 58, -1, -1, 84, 62, 63, -1, -1, 1,
! 67, 3, 4, 30, 6, 7, 8, 9, -1, 11,
! 12, 13, 14, -1, -1, -1, -1, 84, -1, 86,
! 87, -1, 89, -1, -1, -1, 28, 29, 30, 31,
! -1, 33, 34, 35, 36, 37, 5, 6, 7, -1,
! 42, -1, -1, 12, 13, 14, 48, -1, -1, 51,
! 5, 6, 7, -1, 56, 57, 58, 12, 13, 14,
! 62, 63, -1, -1, 1, 67, 3, 4, -1, -1,
! -1, 8, 9, -1, 11, -1, -1, -1, -1, -1,
! 4, 5, 6, 7, 86, 87, -1, 89, 12, 13,
! 14, -1, 29, -1, 31, -1, 33, 34, 35, 36,
! 37, -1, -1, -1, 28, 42, 30, -1, -1, -1,
! -1, 48, 62, 63, 51, 65, 66, 67, 68, 56,
! 57, 58, -1, -1, -1, 62, 63, -1, -1, 66,
! 67, 68, 1, -1, 3, 4, -1, -1, -1, 8,
! 9, -1, 11, -1, -1, -1, -1, -1, 85, 86,
! 87, -1, 89, 54, 55, 56, 57, 58, 59, 60,
29, -1, 31, -1, 33, 34, 35, 36, 37, -1,
! -1, -1, -1, 42, -1, -1, -1, -1, -1, 48,
-1, -1, 51, -1, -1, -1, -1, 56, 57, 58,
-1, -1, -1, 62, 63, -1, -1, 66, 67, 68,
! 1, -1, 3, -1, -1, -1, -1, 8, 9, -1,
11, -1, -1, -1, -1, -1, 85, 86, 87, -1,
89, -1, -1, -1, -1, -1, -1, -1, 29, -1,
31, -1, 33, 34, 35, 36, 37, -1, -1, -1,
! -1, 42, -1, 44, -1, -1, -1, 48, -1, -1,
51, -1, -1, -1, -1, 56, 57, 58, -1, -1,
-1, 62, 63, -1, -1, 66, 67, 68, 1, -1,
3, -1, -1, -1, -1, 8, 9, -1, 11, -1,
! -1, 4, 5, 6, 7, 86, 87, -1, 89, 12,
! 13, 14, -1, -1, -1, -1, 29, -1, 31, -1,
! 33, 34, 35, 36, 37, 28, -1, 30, -1, 42,
! -1, -1, -1, -1, -1, 48, -1, -1, 51, -1,
-1, -1, -1, 56, 57, 58, -1, -1, -1, 62,
! 63, -1, 1, -1, 67, 4, 5, 6, 7, -1,
! -1, -1, -1, 12, 13, 14, -1, -1, -1, -1,
! -1, -1, -1, 86, 87, -1, 89, -1, 27, 28,
! 1, 30, -1, 4, 5, 6, 7, -1, -1, -1,
! -1, 12, 13, 14, -1, 44, -1, -1, -1, 1,
! -1, 3, 4, 5, 6, 7, 27, 28, -1, 30,
! 12, 13, 14, -1, -1, -1, -1, -1, 67, 68,
! -1, -1, -1, 44, -1, 27, 28, -1, 30, 31,
! -1, -1, -1, -1, -1, 84, -1, -1, -1, 88,
! 89, -1, -1, -1, 3, 4, 5, 6, 7, 8,
! 9, -1, 11, 12, 13, 14, 58, -1, -1, -1,
! -1, -1, -1, 84, -1, 67, -1, 88, 89, 28,
! 29, 30, 31, -1, 33, 34, 35, 36, 37, -1,
! -1, -1, 84, 42, -1, 3, -1, 5, -1, 48,
! 8, 9, 51, 11, -1, -1, -1, 56, 57, 58,
! -1, -1, -1, 62, 63, -1, -1, -1, 67, -1,
! -1, 29, -1, 31, -1, 33, 34, 35, 36, 37,
! -1, -1, -1, -1, 42, -1, -1, 86, 87, -1,
! 48, 90, -1, 51, -1, -1, -1, -1, 56, 57,
! 58, -1, -1, -1, 62, 63, -1, 3, -1, 67,
! -1, -1, 8, 9, -1, 11, 49, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, 86, 87,
! -1, -1, 90, 29, -1, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, -1, 3, -1,
! -1, -1, 48, 8, 9, 51, 11, -1, -1, -1,
! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1,
! -1, 67, -1, -1, 29, -1, 31, -1, 33, 34,
! 35, 36, 37, -1, -1, -1, -1, 42, -1, -1,
! 86, 87, -1, 48, 90, -1, 51, -1, -1, -1,
! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1,
! -1, -1, 67, -1, -1, -1, -1, -1, 3, 4,
! 5, 6, 7, 8, 9, -1, 11, 12, 13, 14,
! -1, 86, 87, -1, -1, 90, 21, 22, 23, 24,
! 25, 26, 27, 28, 29, 30, 31, -1, 33, 34,
! 35, 36, 37, -1, -1, -1, -1, 42, -1, 4,
! 5, 6, 7, 48, -1, -1, 51, 12, 13, 14,
! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1,
! -1, -1, 67, 28, -1, 30, -1, 3, 4, -1,
! -1, -1, 8, 9, -1, 11, -1, -1, -1, 84,
! -1, 86, 87, -1, 89, 21, 22, 23, 24, 25,
! 26, 27, -1, 29, -1, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, -1, 4, 5,
! 6, 7, 48, -1, -1, 51, 12, 13, 14, 84,
! 56, 57, 58, -1, -1, -1, 62, 63, 3, -1,
! -1, 67, 28, 8, 9, -1, 11, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, 84, -1,
! 86, 87, -1, 89, 29, -1, 31, -1, 33, 34,
! 35, 36, 37, -1, -1, -1, -1, 42, -1, -1,
-1, -1, -1, 48, -1, -1, 51, -1, -1, -1,
-1, 56, 57, 58, -1, -1, -1, 62, 63, -1,
-1, -1, 67, 3, 4, 5, 6, 7, 8, 9,
-1, 11, 12, 13, 14, -1, -1, 4, 5, 6,
7, 86, 87, -1, 89, 12, 13, 14, 28, 29,
30, 31, -1, 33, 34, 35, 36, 37, -1, -1,
! -1, 28, 42, 30, -1, -1, -1, -1, 48, -1,
! -1, 51, -1, -1, -1, -1, 56, 57, 58, -1,
! -1, -1, 62, 63, -1, 3, 4, 67, 6, 7,
! 8, 9, -1, 11, 12, 13, 14, 52, 53, 54,
! 55, 56, 57, 58, 59, 60, 86, 87, -1, -1,
! 28, 29, 30, 31, -1, 33, 34, 35, 36, 37,
! -1, -1, -1, -1, 42, -1, 3, -1, -1, -1,
48, 8, 9, 51, 11, -1, -1, -1, 56, 57,
58, -1, -1, -1, 62, 63, -1, -1, -1, 67,
-1, -1, 29, -1, 31, -1, 33, 34, 35, 36,
! 37, -1, -1, -1, -1, 42, -1, 3, 86, 87,
-1, 48, 8, 9, 51, 11, -1, -1, -1, 56,
57, 58, -1, -1, -1, 62, 63, -1, -1, -1,
67, -1, -1, 29, -1, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, 84, 3, 86,
87, -1, 48, 8, 9, 51, 11, -1, -1, -1,
56, 57, 58, -1, -1, -1, 62, 63, -1, -1,
-1, 67, -1, -1, 29, -1, 31, -1, 33, 34,
--- 660,1556 ----
4, 0, 0, 9, 4, 0, 0, 8, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 3, 1, 2, 2, 2, 2, 2, 4,
! 2, 4, 2, 2, 1, 1, 1, 1, 4, 1,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
! 3, 3, 0, 4, 0, 4, 0, 0, 7, 0,
! 5, 3, 3, 1, 1, 1, 1, 0, 7, 3,
! 3, 3, 3, 4, 6, 8, 6, 4, 3, 3,
! 2, 2, 1, 2, 0, 1, 2, 3, 1, 1,
! 2, 2, 4, 4, 2, 2, 3, 0, 1, 4,
! 4, 3, 3, 2, 2, 1, 2, 2, 2, 2,
! 2, 1, 2, 1, 2, 2, 2, 2, 2, 2,
! 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
! 1, 1, 1, 1, 1, 1, 1, 4, 4, 1,
! 4, 1, 4, 0, 4, 0, 6, 3, 0, 6,
! 3, 0, 1, 1, 2, 6, 1, 3, 0, 1,
! 4, 6, 4, 1, 1, 1, 1, 1, 0, 4,
! 1, 0, 2, 1, 3, 3, 2, 0, 4, 1,
! 0, 4, 1, 1, 1, 2, 2, 5, 3, 0,
! 0, 7, 0, 0, 7, 1, 1, 4, 3, 2,
! 3, 1, 1, 1, 3, 2, 1, 3, 2, 3,
! 3, 4, 3, 4, 3, 2, 1, 1, 2, 1,
! 2, 1, 2, 0, 7, 5, 0, 7, 5, 0,
! 8, 0, 7, 2, 2, 2, 0, 1, 0, 1,
! 1, 2, 0, 3, 2, 3, 4, 3, 1, 1,
! 2, 1, 4, 1, 4, 4, 6, 5, 4, 6,
! 5, 1, 3, 1, 1, 3, 0, 3, 0, 1,
! 0, 1, 2, 1, 1, 1, 3, 2, 3, 4,
! 3, 2, 2, 1, 3, 4, 2, 3, 3, 4,
! 4, 5, 5, 1, 1, 1, 1, 1, 2, 2,
! 2, 2, 1, 2, 2, 2, 1, 2, 2, 2,
! 2, 1, 2, 1, 1, 1, 1, 2, 0, 0,
! 0, 0, 0, 1, 1, 2, 3, 1, 2, 1,
! 1, 5, 1, 1, 2, 2, 2, 2, 0, 5,
! 0, 4, 0, 0, 1, 2, 3, 3, 3, 0,
! 4, 1, 3, 0, 0, 7, 5, 2, 0, 0,
! 0, 0, 12, 0, 6, 2, 1, 1, 2, 3,
! 2, 2, 2, 3, 6, 8, 10, 12, 3, 4,
! 1, 3, 5, 2, 5, 0, 1, 0, 1, 0,
! 1, 1, 3, 4, 7, 1, 3, 0, 3, 2,
! 0, 0, 6, 2, 0, 1, 1, 3, 1, 3,
! 4, 4, 3, 4, 3, 4, 4, 3, 4, 3,
! 1, 0, 3, 1, 2, 1, 3, 1, 3, 1
};
static const short yydefact[] = { 3,
! 5, 0, 0, 0, 267, 158, 264, 126, 352, 348,
! 350, 0, 57, 0, 560, 17, 4, 8, 7, 0,
! 0, 211, 212, 213, 214, 203, 204, 205, 206, 215,
! 216, 217, 218, 207, 208, 209, 210, 118, 118, 0,
! 134, 141, 261, 263, 262, 132, 284, 0, 0, 0,
! 266, 265, 0, 6, 15, 16, 353, 349, 351, 0,
! 0, 0, 347, 259, 282, 0, 272, 0, 161, 127,
! 139, 145, 129, 162, 128, 140, 146, 168, 130, 151,
! 156, 133, 169, 131, 152, 157, 179, 135, 137, 143,
! 142, 180, 136, 138, 144, 194, 147, 149, 154, 153,
! 195, 148, 150, 155, 163, 159, 177, 186, 165, 164,
! 160, 178, 187, 170, 166, 192, 201, 172, 171, 167,
! 193, 202, 181, 173, 175, 184, 183, 182, 174, 176,
! 185, 196, 188, 190, 199, 198, 197, 189, 191, 200,
! 0, 0, 14, 285, 30, 31, 373, 364, 373, 365,
! 362, 366, 10, 84, 85, 103, 55, 56, 0, 0,
! 0, 0, 0, 87, 0, 32, 34, 33, 0, 35,
! 36, 0, 37, 38, 0, 0, 39, 58, 0, 0,
! 60, 42, 44, 86, 0, 0, 289, 0, 239, 240,
! 241, 242, 235, 236, 237, 238, 397, 0, 231, 232,
! 233, 234, 260, 0, 0, 283, 11, 282, 29, 0,
! 282, 0, 0, 282, 346, 332, 259, 282, 0, 270,
! 0, 326, 327, 0, 0, 0, 0, 354, 0, 357,
! 0, 360, 53, 54, 0, 0, 0, 48, 45, 0,
! 465, 0, 0, 47, 0, 0, 0, 49, 0, 51,
! 0, 0, 77, 75, 73, 0, 0, 0, 0, 0,
! 0, 0, 0, 0, 0, 0, 0, 101, 102, 0,
! 0, 40, 0, 104, 0, 461, 453, 0, 46, 295,
! 296, 297, 294, 0, 287, 290, 268, 399, 269, 345,
! 0, 0, 119, 0, 552, 343, 0, 0, 417, 0,
! 0, 0, 27, 0, 473, 110, 474, 281, 0, 0,
! 13, 282, 21, 0, 282, 282, 330, 12, 25, 0,
! 282, 380, 375, 231, 232, 233, 234, 227, 228, 229,
! 230, 118, 118, 372, 0, 373, 282, 373, 394, 395,
! 369, 392, 0, 0, 0, 0, 91, 90, 0, 9,
! 43, 0, 0, 83, 82, 0, 0, 0, 0, 71,
! 72, 70, 69, 68, 66, 67, 61, 62, 63, 64,
! 65, 100, 99, 0, 41, 0, 93, 0, 0, 454,
! 455, 92, 0, 289, 40, 259, 282, 398, 400, 405,
! 404, 406, 414, 344, 273, 274, 0, 0, 0, 0,
! 419, 415, 0, 0, 418, 0, 448, 473, 112, 107,
! 111, 0, 279, 331, 0, 0, 19, 278, 329, 23,
! 356, 473, 473, 374, 381, 0, 359, 0, 0, 370,
! 0, 369, 0, 0, 0, 88, 59, 50, 52, 0,
! 0, 76, 74, 94, 98, 558, 0, 464, 433, 463,
! 473, 473, 473, 473, 0, 442, 0, 474, 428, 437,
! 456, 286, 288, 84, 0, 408, 528, 413, 282, 412,
! 275, 0, 556, 536, 223, 224, 219, 220, 225, 226,
! 221, 222, 118, 118, 554, 0, 537, 539, 553, 0,
! 421, 0, 0, 420, 416, 474, 108, 118, 118, 0,
! 328, 271, 274, 473, 276, 473, 376, 382, 474, 378,
! 384, 474, 282, 282, 396, 393, 282, 0, 0, 0,
! 0, 0, 78, 81, 457, 0, 434, 429, 438, 435,
! 430, 439, 474, 431, 440, 436, 432, 441, 443, 450,
! 451, 291, 0, 293, 407, 409, 0, 0, 528, 411,
! 534, 551, 401, 401, 530, 531, 0, 555, 0, 422,
! 423, 0, 115, 0, 116, 0, 301, 299, 298, 280,
! 474, 0, 474, 282, 377, 282, 0, 355, 358, 363,
! 282, 95, 0, 97, 314, 84, 0, 0, 311, 0,
! 313, 0, 367, 304, 310, 0, 0, 0, 559, 451,
! 462, 267, 0, 0, 0, 0, 0, 0, 516, 511,
! 460, 473, 0, 117, 118, 118, 0, 0, 449, 498,
! 478, 479, 0, 0, 410, 529, 337, 259, 282, 282,
! 333, 334, 282, 548, 402, 405, 259, 282, 282, 550,
! 282, 538, 211, 212, 213, 214, 203, 204, 205, 206,
! 215, 216, 217, 218, 207, 208, 209, 210, 118, 118,
! 540, 557, 0, 28, 458, 0, 0, 0, 0, 277,
! 0, 473, 0, 282, 473, 0, 282, 361, 0, 317,
! 0, 0, 308, 89, 0, 303, 0, 316, 307, 79,
! 0, 514, 501, 502, 503, 0, 0, 0, 517, 0,
! 474, 499, 0, 0, 124, 469, 484, 471, 489, 0,
! 482, 0, 0, 452, 466, 125, 292, 408, 528, 546,
! 282, 336, 282, 339, 547, 403, 408, 528, 549, 532,
! 401, 401, 459, 113, 114, 0, 20, 24, 383, 474,
! 282, 0, 386, 385, 282, 0, 389, 96, 0, 319,
! 0, 0, 305, 306, 0, 512, 504, 0, 509, 0,
! 0, 0, 122, 320, 0, 123, 323, 0, 0, 451,
! 0, 0, 0, 468, 473, 467, 488, 0, 500, 340,
! 341, 0, 335, 338, 0, 282, 282, 543, 282, 545,
! 300, 0, 388, 282, 391, 282, 0, 312, 309, 0,
! 510, 0, 282, 120, 0, 121, 0, 0, 0, 0,
! 518, 0, 483, 451, 452, 475, 473, 0, 342, 533,
! 541, 542, 544, 387, 390, 318, 513, 520, 0, 515,
! 321, 324, 0, 0, 472, 519, 497, 490, 0, 494,
! 481, 477, 476, 0, 0, 0, 0, 521, 522, 505,
! 473, 473, 470, 485, 518, 496, 451, 487, 0, 0,
! 520, 0, 0, 474, 474, 451, 0, 495, 0, 0,
! 0, 506, 523, 0, 0, 486, 491, 524, 0, 0,
! 0, 322, 325, 518, 0, 526, 0, 507, 0, 0,
! 0, 0, 492, 525, 508, 527, 451, 493, 0, 0,
! 0
};
! static const short yydefgoto[] = { 899,
! 1, 2, 3, 17, 18, 19, 314, 504, 320, 506,
! 213, 408, 590, 175, 242, 374, 177, 178, 179, 180,
! 20, 181, 182, 359, 358, 356, 598, 357, 183, 522,
! 184, 303, 304, 305, 497, 449, 21, 292, 614, 189,
! 190, 191, 192, 193, 194, 195, 196, 30, 31, 32,
! 33, 34, 35, 36, 37, 38, 39, 483, 484, 332,
! 203, 197, 40, 204, 41, 42, 43, 44, 45, 219,
! 66, 214, 220, 572, 67, 500, 293, 206, 47, 284,
! 285, 286, 570, 668, 592, 593, 594, 752, 595, 682,
! 596, 597, 763, 805, 851, 766, 807, 852, 503, 222,
! 630, 631, 632, 223, 48, 49, 50, 51, 336, 338,
! 343, 231, 52, 686, 431, 226, 227, 334, 507, 510,
! 508, 511, 341, 342, 198, 288, 388, 634, 635, 390,
! 391, 392, 215, 450, 451, 452, 453, 454, 455, 306,
! 277, 601, 775, 779, 379, 380, 381, 664, 619, 278,
! 457, 185, 665, 711, 712, 768, 713, 770, 307, 412,
! 815, 776, 816, 817, 714, 814, 769, 866, 771, 855,
! 884, 897, 857, 838, 621, 622, 700, 839, 847, 848,
! 849, 887, 468, 548, 485, 641, 785, 486, 487, 661,
! 488, 553, 296, 398, 489, 490, 447, 186
};
! static const short yypact[] = { 57,
! 92, 986, 986, 379,-32768,-32768,-32768,-32768, 109, 109,
! 109, 105,-32768, 123,-32768,-32768,-32768,-32768,-32768, 165,
! 316, 509, 1138, 1295, 1166, 311, 1055, 833, 1206, 1326,
! 1453, 1379, 1540, 1605, 1298, 1625, 1591,-32768,-32768, 63,
! -32768,-32768,-32768,-32768,-32768, 109,-32768, 71, 80, 125,
! -32768,-32768, 986,-32768,-32768,-32768, 109, 109, 109, 2684,
! 176, 2602,-32768, 129, 109, 203,-32768, 896,-32768,-32768,
! -32768,-32768, 109,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768, 109,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! 109,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 109,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 109,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 109,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768, 109,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768, 109,-32768,-32768,-32768,-32768,
! 206, 316,-32768,-32768,-32768,-32768,-32768, 42,-32768, 162,
! -32768, 189,-32768,-32768,-32768,-32768,-32768,-32768, 2684, 2684,
! 230, 238, 246,-32768, 483,-32768,-32768,-32768, 2684,-32768,
! -32768, 1797,-32768,-32768, 2684, 254, 270,-32768, 2725, 2766,
! -32768, 3099, 1053, 355, 1471, 2684, 908, 284, 2385, 3084,
! 2553, 3095, 690, 485, 732, 605,-32768, 295, 242, 373,
! 279, 409,-32768, 316, 316, 109,-32768, 109,-32768, 323,
! 109, 2131, 461, 109,-32768,-32768, 129, 109, 293,-32768,
! 1080, 504, 513, 304, 1045, 349, 489,-32768, 358,-32768,
! 542,-32768,-32768,-32768, 2684, 2684, 3026,-32768,-32768, 363,
! -32768, 369, 371,-32768, 387, 2684, 1797,-32768, 1797,-32768,
! 2684, 2684, 464,-32768,-32768, 2684, 2684, 2684, 2684, 2684,
! 2684, 2684, 2684, 2684, 2684, 2684, 2684,-32768,-32768, 483,
! 483, 2684, 2684,-32768, 405,-32768, 486, 424,-32768,-32768,
! -32768,-32768,-32768, 201,-32768, 457,-32768, 390,-32768, 513,
! 186, 316,-32768, 529,-32768,-32768, 2602, 2234,-32768, 466,
! 2172, 478,-32768, 356, 114,-32768,-32768, 532, 206, 206,
! -32768, 109,-32768, 461, 109, 109,-32768,-32768,-32768, 461,
! 109,-32768,-32768, 2385, 3084, 2553, 3095, 690, 485, 732,
! 605,-32768, 499, 502, 1413,-32768, 109,-32768,-32768, 546,
! 506,-32768, 542, 2872, 2890, 508,-32768,-32768, 2475,-32768,
! 3099, 517, 525, 3099, 3099, 2684, 568, 2684, 2684, 2437,
! 3062, 1208, 2564, 983, 879, 879, 288, 288,-32768,-32768,
! -32768,-32768,-32768, 555, 270, 551,-32768, 483, 1558, 486,
! -32768,-32768, 562, 908, 2807, 129, 109,-32768,-32768,-32768,
! -32768, 535,-32768,-32768,-32768, 99, 33, 1230, 557, 2684,
! -32768,-32768, 2684, 2275,-32768, 559,-32768,-32768,-32768,-32768,
! -32768, 2454,-32768, 504, 192, 206,-32768, 581,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768, 566,-32768, 570, 2684, 483,
! 572, 506, 3026, 2684, 3026,-32768,-32768, 564, 564, 616,
! 2684, 3128, 2197,-32768,-32768,-32768, 314, 478,-32768,-32768,
! 94, 98, 112, 132, 662,-32768, 580,-32768,-32768,-32768,
! -32768,-32768,-32768, 326, 585, 390, 390,-32768, 109,-32768,
! -32768, 588,-32768,-32768, 1709, 3030, 1194, 864, 1875, 3055,
! 1712, 989,-32768,-32768,-32768, 591, 338,-32768,-32768, 327,
! -32768, 586, 590,-32768,-32768,-32768,-32768, 598, 601, 1313,
! -32768,-32768, 659,-32768,-32768,-32768, 602,-32768,-32768, 603,
! -32768,-32768, 109, 109, 3099,-32768, 109, 604, 615, 2914,
! 627, 1862,-32768, 3115,-32768, 483,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! 2345,-32768, 2684,-32768,-32768,-32768, 628, 753,-32768,-32768,
! -32768,-32768, 383, 178,-32768,-32768, 945,-32768, 696,-32768,
! -32768, 69,-32768, 206,-32768, 316,-32768,-32768, 3099,-32768,
! -32768, 1313,-32768, 109, 253, 109, 362,-32768,-32768,-32768,
! 109,-32768, 2684,-32768,-32768, 671, 483, 2684,-32768, 684,
! 3099, 646, 644,-32768,-32768, 167, 1998, 2684,-32768, 2414,
! -32768, 687, 2684, 694, 652, 657, 2643, 141, 735,-32768,
! -32768,-32768, 663,-32768,-32768,-32768, 666, 704, 658,-32768,
! -32768,-32768, 2540, 352,-32768,-32768,-32768, 129, 109, 109,
! 538, 553, 158,-32768,-32768, 109, 129, 109, 158,-32768,
! 109,-32768, 1709, 3030, 2076, 3059, 1194, 864, 1772, 1536,
! 1875, 3055, 2144, 3072, 1712, 989, 1837, 1678,-32768,-32768,
! -32768,-32768, 672,-32768,-32768, 416, 421, 1862, 69,-32768,
! 69,-32768, 2684, 88,-32768, 2684, 329,-32768, 2932,-32768,
! 1228, 1862,-32768,-32768, 1930,-32768, 2066,-32768,-32768, 3115,
! 2852,-32768,-32768,-32768,-32768, 668, 2684, 680,-32768, 702,
! -32768,-32768, 206, 316,-32768,-32768,-32768,-32768,-32768, 705,
! 755, 1645, 118,-32768,-32768,-32768,-32768, 383, 336,-32768,
! 109,-32768, 109,-32768,-32768, 109, 178, 178,-32768,-32768,
! 383, 178,-32768,-32768,-32768, 693,-32768,-32768,-32768,-32768,
! 2969, 2684,-32768,-32768, 2969, 2684,-32768,-32768, 2684,-32768,
! 695, 2066,-32768,-32768, 2684,-32768,-32768, 703,-32768, 2684,
! 742, 469,-32768, 268, 475,-32768, 548, 722, 724,-32768,
! 726, 2684, 1732,-32768,-32768,-32768,-32768, 2684,-32768, 538,
! 553, 393,-32768,-32768, 753, 109, 158,-32768, 158,-32768,
! -32768, 253,-32768, 2969,-32768, 2969, 2828,-32768,-32768, 3081,
! -32768, 52, 109,-32768, 461,-32768, 461, 2684, 2684, 777,
! 2540, 713,-32768,-32768,-32768,-32768,-32768, 714,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 121, 720,-32768,
! -32768,-32768, 715, 723,-32768,-32768,-32768,-32768, 729,-32768,
! -32768,-32768,-32768, 731, 740, 483, 97, 728,-32768,-32768,
! -32768,-32768,-32768,-32768, 2684,-32768,-32768,-32768, 2684, 730,
! 121, 738, 121,-32768,-32768,-32768, 739,-32768, 749, 824,
! 155,-32768,-32768, 672, 672,-32768,-32768,-32768, 767, 529,
! 751,-32768,-32768, 2684, 2684, 355, 389,-32768, 759, 760,
! 764, 529,-32768,-32768,-32768, 355,-32768,-32768, 844, 851,
! -32768
};
static const short yypgoto[] = {-32768,
! -32768,-32768,-32768, 87,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768, 101,-32768, -60, 468, -253, 443,-32768,-32768,
! -32768, -82, 769,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
! -293, -299, 549,-32768,-32768, 78, 68, -282, -572, 7,
! 41, 38, 44, 1, 20, 47, 50, -364, -336, 299,
! 302, -330, -326, 303, 305, -496, -461, 454, 456,-32768,
! -161, -127, -503, -200, 503, 683, 748, 774,-32768, -532,
! -135, -210, 470,-32768, 589,-32768, 96, 3, 64,-32768,
! 500,-32768, 315,-32768, -420,-32768, 204,-32768, -533,-32768,
! -32768, 292,-32768,-32768,-32768,-32768,-32768,-32768, -133, 319,
! 160, 180, -85, 202,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768, 472, -94,-32768, 583,-32768,-32768,
! 233, 232, 573, 492, -84,-32768,-32768, -526, -272, -397,
! -442,-32768, 465,-32768,-32768,-32768,-32768,-32768,-32768, -268,
! -32768,-32768, -452, 104,-32768,-32768, 545, -343,-32768, 308,
! -32768,-32768, -521,-32768,-32768,-32768,-32768,-32768, 442, -395,
! 111, -689, -172, -150,-32768,-32768,-32768,-32768,-32768,-32768,
! -32768,-32768,-32768,-32768,-32768,-32768,-32768, -743, 84,-32768,
! 90,-32768, 487,-32768, -522,-32768,-32768,-32768,-32768,-32768,
! -32768, 476, -298,-32768,-32768,-32768,-32768, 56
};
! #define YYLAST 3188
! static const short yytable[] = { 176,
! 397, 188, 26, 26, 46, 46, 224, 221, 22, 22,
! 315, 57, 58, 59, 417, 389, 309, 419, 375, 620,
! 420, 27, 27, 546, 73, 626, 82, 640, 91, 416,
! 100, 666, 109, 479, 118, 409, 127, 617, 136, 24,
! 24, 274, 23, 23, 615, 25, 25, 479, 28, 28,
! 716, 29, 29, 26, 229, 46, -1, 53, 53, 22,
! 659, 480, 541, 689, 46, 333, 46, 481, 545, 663,
! 199, 482, 27, 145, 146, 480, 233, 234, 620, 616,
! 810, 481, 145, 146, 301, 482, 239, 243, 618, 54,
! 24, -2, 244, 23, -444, 660, 25, 828, -445, 28,
! 562, 201, 29, 279, 200, 141, 142, 202, 53, 144,
! 456, 867, -446, 575, -106, 471, 577, 14, 777, 617,
! 144, 144, 144, 410, 841, 210, 615, 145, 146, 845,
! 228, 375, -447, 742, 829, 8, 144, 600, 14, 153,
! 889, 733, 861, 145, 146, 144, 143, 618, 148, 150,
! 152, 300, 346, 754, 144, 636, 636, 611, 14, 147,
! 205, 616, 352, 144, 353, 211, 212, 868, 149, 400,
! 762, 60, 144, 333, 46, 669, 876, 671, -424, 862,
! 63, 144, -425, 479, 778, 466, 539, 14, 846, 61,
! 144, 73, 651, 82, 547, 91, -426, 100, 697, 144,
! 880, 73, -106, 82, 788, 790, 459, 898, 63, 216,
! 687, 480, 376, 151, 46, 239, -427, 481, 799, 46,
! 652, 482, 68, 199, 211, 212, 655, 328, 460, 46,
! 656, 62, 587, 324, 588, 637, 399, 881, 837, 46,
! 406, 426, 187, 428, 638, 212, 329, 736, 70, 46,
! 230, 46, 211, 212, 201, 63, 216, 200, 316, 212,
! 202, 751, 820, 217, 326, 238, 437, 325, 394, 144,
! 327, 14, 218, 330, 501, 546, 331, 232, 528, 531,
! 534, 537, 335, 383, 546, 79, 207, 283, 384, 624,
! 208, 672, 315, 675, 210, 440, 235, -274, 673, 46,
! 529, 532, 535, 538, 236, 761, 295, 617, 14, 308,
! 217, -274, 237, 310, 615, 87, 7, 88, 63, 218,
! 545, 239, 9, 10, 11, 737, 73, 738, 82, 545,
! 91, 340, 100, 636, 636, 328, 245, 46, 63, 492,
! 14, 324, 493, 225, 792, 265, 266, 267, 519, 616,
! 521, -274, 882, 883, 329, -274, 302, 246, 14, -109,
! -109, -109, -109, 274, 63, -109, 287, -109, -109, -109,
! 372, 373, 326, 64, 746, 325, 311, 289, 327, 75,
! 312, 330, 65, -109, 331, 63, 627, 318, 46, 294,
! 335, 208, 199, 628, -247, 211, 212, 525, 477, 422,
! 423, 526, 629, 212, 475, 290, 291, 676, 542, 558,
! 418, 295, 477, 543, 559, 84, 421, 478, 475, 64,
! 479, 556, 783, 201, 784, 557, 200, 718, 65, 202,
! 667, 478, 427, 321, 717, 46, 727, 46, 476, 246,
! 628, 674, 337, 340, -109, 347, 547, 386, 480, 629,
! 212, 348, 476, 349, 481, 547, 387, 212, 482, 723,
! 212, 302, 55, 56, -473, -473, -473, -473, 874, 875,
! 350, 891, -473, -473, -473, 819, 892, 73, 446, 91,
! 613, 109, 467, 127, 283, 145, 146, 377, -473, 322,
! 7, 93, 5, 396, 7, 8, 9, 10, 11, 734,
! 9, 10, 11, 312, 735, 831, 382, 832, 208, -80,
! 290, 291, 5, 69, 7, 70, 13, 378, 14, 15,
! 9, 10, 11, 385, 71, 76, 80, 85, 527, 530,
! 340, 536, 107, 112, 116, 121, 13, 156, 14, 613,
! 279, 26, 339, 46, 145, 146, 696, 22, 477, -105,
! 552, 552, 804, 315, 475, 402, 312, 647, 806, 46,
! 27, 407, 208, 643, 549, 564, 566, 478, 765, 764,
! 316, 212, 323, -371, 210, 413, 648, -274, 24, 211,
! 212, 23, -379, -379, 25, 424, 886, 28, 476, 429,
! 29, -274, -243, 430, 645, 435, 623, 644, 896, 438,
! 646, 469, 212, 649, 721, 212, 650, 439, 578, 579,
! 7, 102, 580, 441, 211, 212, 9, 10, 11, 723,
! 212, 248, 250, 26, 505, 46, 599, 414, 415, 22,
! 46, -274, 781, 782, 199, -274, 758, 444, 726, 46,
! 445, 612, 27, 199, 462, 73, 491, 82, 495, 91,
! 513, 100, 436, 109, 514, 118, 517, 127, 674, 136,
! 24, 523, 302, 23, 540, 201, 25, 544, 200, 28,
! 551, 202, 29, 555, 201, 560, 678, 200, 623, 561,
! 202, 563, 703, 704, 565, 210, 317, 680, 581, 574,
! 576, 71, 76, 80, 85, 7, 88, 582, 662, 802,
! 612, 9, 10, 11, 72, 77, 81, 86, 698, 584,
! 625, 812, 108, 113, 117, 122, -30, 818, 706, 14,
! 707, 708, 709, 710, 719, 720, 731, 732, 725, 683,
! 684, 685, -31, 728, 729, 693, 730, 7, 97, 692,
! 694, 699, 276, 9, 10, 11, 702, 833, 834, 705,
! 836, 757, 393, 472, 633, 639, 5, 6, 7, 8,
! 611, 14, 474, 759, 9, 10, 11, 396, 760, 743,
! 773, 772, 747, 89, 94, 98, 103, 791, 677, 798,
! 13, 125, 130, 134, 139, 477, 801, 803, 808, 144,
! 809, 475, 811, 835, 836, 840, 844, 853, 869, 90,
! 95, 99, 104, 850, 478, 854, 859, 126, 131, 135,
! 140, 26, 856, 46, 858, 863, 295, 22, 295, 870,
! 458, 872, 877, 836, 890, 476, 71, 76, 80, 85,
! 27, 878, 879, 885, 888, -535, 793, 96, 7, 97,
! 795, 893, 894, 900, 9, 10, 11, 895, 24, 496,
! 901, 23, 465, 411, 25, 653, 470, 28, 654, 657,
! 29, 658, 14, 509, 512, 498, 623, 499, 92, 7,
! 93, 72, 77, 81, 86, 9, 10, 11, 317, 317,
! 395, 821, 822, 463, 823, 502, 670, 688, 753, 824,
! 786, 825, 458, 458, 533, 458, 209, 780, 830, -26,
! -26, -26, -26, 518, 739, 767, 744, -26, -26, -26,
! 145, 146, 280, 281, 282, 432, -249, 425, 842, 290,
! 291, 516, 210, -26, 461, -274, 715, 843, 290, 291,
! 393, 393, 787, 789, 263, 264, 265, 266, 267, -274,
! 89, 94, 98, 103, 871, 571, 860, 573, 5, 6,
! 7, 8, 873, 0, 642, 550, 9, 10, 11, 554,
! 0, 0, 211, 212, 0, 0, 90, 95, 99, 104,
! 0, 0, 13, 0, 14, 0, 0, 71, 76, -274,
! 0, 107, 112, -274, -26, 0, 4, 0, -118, 5,
! 6, 7, 8, 128, 7, 129, 0, 9, 10, 11,
! 9, 10, 11, 344, 345, 0, 72, 77, 81, 86,
! 0, 0, 12, 13, 351, 14, 15, 393, 393, 354,
! 355, 0, 0, 0, 360, 361, 362, 363, 364, 365,
! 366, 367, 368, 369, 370, 371, 261, 262, 263, 264,
! 265, 266, 267, -118, 0, 319, 0, 0, -22, -22,
! -22, -22, -118, 701, 0, 0, -22, -22, -22, 92,
! 7, 93, 0, 0, 0, 0, 9, 10, 11, 16,
! 0, 210, -22, 0, -274, 89, 94, 98, 103, 0,
! 313, 0, 0, -18, -18, -18, -18, 0, -274, 0,
! 0, -18, -18, -18, 0, 722, 724, 0, 0, 0,
! 0, 90, 95, 99, 104, 0, 210, -18, 0, -274,
! 0, 211, 212, 740, 268, 269, 512, 270, 271, 272,
! 273, 0, 0, -274, 0, 0, 442, 443, -274, 0,
! 0, 0, -274, -22, 0, 0, 0, 0, -248, 0,
! 0, 5, 74, 7, 75, 71, 76, 80, 85, 9,
! 10, 11, 0, 107, 112, 116, 121, 72, 77, 0,
! 0, 108, 113, -274, 0, 13, 0, -274, -18, 5,
! 83, 7, 84, 0, 0, 0, 0, 9, 10, 11,
! 0, 0, 393, 393, 0, 0, 0, 0, 0, 0,
! 0, 393, 393, 13, 0, 393, 393, 515, 87, 7,
! 88, 0, 520, 0, 0, 9, 10, 11, 0, 524,
! 101, 7, 102, 0, 0, 0, 533, 9, 10, 11,
! 0, -244, 0, 14, 89, 94, 0, 0, 125, 130,
! 472, 0, 473, 5, 6, 7, 8, 749, 0, 474,
! 0, 9, 10, 11, 722, 724, 724, 0, 0, -246,
! 90, 95, 0, 0, 126, 131, 0, 13, 533, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 569, 0,
! 251, 252, 253, 0, 254, 255, 256, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 0, -250,
! 591, 0, 864, 865, 0, 0, 0, 0, 5, 78,
! 7, 79, 128, 7, 129, 0, 9, 10, 11, 9,
! 10, 11, -535, 567, 0, 154, 0, 750, 0, 0,
! 155, 156, 13, 157, 14, 72, 77, 81, 86, 5,
! 105, 7, 106, 108, 113, 117, 122, 9, 10, 11,
! 569, 158, 0, 15, 0, 159, 160, 161, 162, 163,
! 0, 679, 0, 13, 164, 14, 681, 0, 0, 0,
! 165, 0, 0, 166, 0, 591, 690, 0, 167, 168,
! 169, 691, 0, 0, 170, 171, 0, 0, -245, 172,
! 0, -256, 5, 114, 7, 115, 0, 0, 0, 0,
! 9, 10, 11, 0, 89, 94, 98, 103, 173, 174,
! 0, 568, 125, 130, 134, 139, 13, 0, 14, -251,
! 0, 0, 0, 322, 0, 0, 5, 0, 7, 8,
! 90, 95, 99, 104, 9, 10, 11, 0, 126, 131,
! 135, 140, 0, 0, 0, 0, 591, 0, 0, 0,
! 13, 741, 14, 15, 745, 0, 0, 0, 0, 0,
! 591, 0, 0, 591, 0, 591, 5, 110, 7, 111,
! 0, 0, -253, 0, 9, 10, 11, 0, 0, 0,
! 0, 275, 0, -449, -449, -449, -449, -449, -449, -449,
! 13, -449, -449, -449, -449, -449, 0, -449, -449, -449,
! -449, -449, -449, -449, -449, -449, -449, -449, -449, -449,
! -449, -449, -449, -449, -449, -449, -449, -449, 0, 0,
! 794, 0, -449, 0, 796, 0, 0, 797, -449, 0,
! 591, -449, 0, 800, 0, 0, -449, -449, -449, 0,
! 0, 0, -449, -449, 0, 0, -252, -449, 0, 0,
! 101, 7, 102, 5, 119, 7, 120, 9, 10, 11,
! 0, 9, 10, 11, -449, 276, -449, -449, 448, -449,
! -473, -473, -473, -473, -473, -473, -473, 13, -473, -473,
! -473, -473, -473, 0, -473, -473, -473, -473, -473, -473,
! -473, -473, -473, -473, -473, -473, -473, -473, -473, 0,
! -473, -473, -473, -473, -473, 137, 7, 138, 0, -473,
! 0, 0, 9, 10, 11, -473, 0, 0, -473, 123,
! 7, 124, 0, -473, -473, -473, 9, 10, 11, -473,
! -473, 0, 0, -254, -473, 0, 0, 0, 0, 132,
! 7, 133, 0, 0, 14, 0, 9, 10, 11, 0,
! 0, -473, 0, -473, -473, 774, -473, -451, -451, 0,
! 0, 0, -451, -451, 14, -451, 0, 0, 0, -451,
! 0, -451, -451, -451, -451, -451, -451, -451, -451, -451,
! -451, -451, 0, -451, -258, -451, 0, -451, -451, -451,
! -451, -451, 137, 7, 138, 0, -451, 0, -255, 9,
! 10, 11, -451, 0, 0, -451, 0, 0, 0, 0,
! -451, -451, -451, 0, 0, 0, -451, -451, -257, 0,
! 0, -451, 5, 69, 7, 70, 123, 7, 124, 0,
! 9, 10, 11, 9, 10, 11, 0, 0, -451, 0,
! -451, -451, 813, -451, -480, -480, 13, 0, 14, -480,
! -480, 14, -480, 0, 0, 0, -480, 0, -480, -480,
! -480, -480, -480, -480, -480, -480, -480, -480, -480, 0,
! -480, 0, -480, 0, -480, -480, -480, -480, -480, 0,
! 0, 0, 0, -480, 0, 0, 96, 7, 97, -480,
! 0, 0, -480, 9, 10, 11, 0, -480, -480, -480,
! 0, 0, 0, -480, -480, 0, 0, 240, -480, 154,
! 5, 14, 7, 8, 155, 156, 0, 157, 9, 10,
! 11, 0, 0, 0, 0, -480, 0, -480, -480, 0,
! -480, 0, 0, 0, 13, 158, 14, 15, 0, 159,
! 160, 161, 162, 163, 0, 0, 0, 0, 164, 0,
! 0, 132, 7, 133, 165, 0, 0, 166, 9, 10,
! 11, 0, 167, 168, 169, 0, 0, 0, 170, 171,
! 0, 0, 585, 172, 586, 146, 14, 0, 0, 155,
! 156, 0, 157, 0, 0, 0, 0, 0, 5, 105,
! 7, 106, 173, 174, 0, 241, 9, 10, 11, 0,
! 158, 0, 15, 0, 159, 160, 161, 162, 163, 0,
! 0, 0, 13, 164, 14, 0, 0, 0, 0, 165,
! 0, 0, 166, 0, 0, 0, 0, 167, 168, 169,
! 0, 0, 0, 170, 171, 0, 0, 587, 172, 588,
! 585, 0, 586, 146, 0, 0, 0, 155, 156, 0,
! 157, 0, 0, 0, 0, 0, -302, 173, 174, 0,
! 589, 0, 0, 0, 0, 0, 0, 0, 158, 0,
! 15, 0, 159, 160, 161, 162, 163, 0, 0, 0,
! 0, 164, 0, 0, 0, 0, 0, 165, 0, 0,
! 166, 0, 0, 0, 0, 167, 168, 169, 0, 0,
! 0, 170, 171, 0, 0, 587, 172, 588, 585, 0,
! 154, 0, 0, 0, 0, 155, 156, 0, 157, 0,
! 0, 0, 0, 0, -368, 173, 174, 0, 589, 0,
! 0, 0, 0, 0, 0, 0, 158, 0, 15, 0,
! 159, 160, 161, 162, 163, 0, 0, 0, 0, 164,
! 0, -315, 0, 0, 0, 165, 0, 0, 166, 0,
! 0, 0, 0, 167, 168, 169, 0, 0, 0, 170,
! 171, 0, 0, -315, 172, -315, 585, 0, 154, 0,
! 0, 0, 0, 155, 156, 0, 157, 0, 0, 5,
! 78, 7, 79, 173, 174, 0, 589, 9, 10, 11,
! 0, 0, 0, 0, 158, 0, 15, 0, 159, 160,
! 161, 162, 163, 13, 0, 14, 0, 164, 0, 0,
! 0, 0, 0, 165, 0, 0, 166, 0, 0, 0,
! 0, 167, 168, 169, 0, 0, 0, 170, 171, 0,
! 0, 0, 172, 154, 5, 297, 7, 8, 155, 156,
! 0, 157, 9, 10, 11, 0, 0, 5, 114, 7,
! 115, 173, 174, 0, 589, 9, 10, 11, 13, 158,
! 14, 15, 0, 159, 160, 161, 162, 163, 0, 0,
! 0, 13, 164, 14, 154, 0, 403, 0, 165, 155,
! 156, 166, 157, 0, 0, 0, 167, 168, 298, 0,
! 0, 0, 170, 171, 0, 0, 0, 172, 0, 0,
! 158, 0, 15, 0, 159, 160, 161, 162, 163, 0,
! 0, 0, 0, 164, 0, 0, 173, 174, 0, 165,
! 299, 0, 166, 0, 0, 0, 0, 167, 168, 404,
! 0, 0, 0, 170, 171, 0, 154, 0, 172, 0,
! 0, 155, 156, 0, 157, 256, 257, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 267, 173, 174, 0,
! 0, 405, 158, 0, 15, 0, 159, 160, 161, 162,
! 163, 0, 0, 0, 0, 164, 0, 154, 0, 0,
! 0, 165, 155, 156, 166, 157, 0, 0, 0, 167,
! 168, 169, 0, 0, 0, 170, 171, 0, 0, 0,
! 172, 0, 0, 158, 0, 15, 0, 159, 160, 161,
! 162, 163, 0, 0, 0, 0, 164, 0, 0, 173,
! 174, 0, 165, 401, 0, 166, 0, 0, 0, 0,
! 167, 168, 169, 0, 0, 0, 170, 171, 0, 0,
! 0, 172, 0, 0, 0, 0, 0, 586, 602, 6,
! 7, 8, 155, 156, 0, 157, 9, 10, 11, 0,
! 173, 174, 0, 0, 494, 603, 604, 605, 606, 607,
! 608, 609, 13, 158, 14, 15, 0, 159, 160, 161,
! 162, 163, 0, 0, 0, 0, 164, 0, 5, 0,
! 7, 70, 165, 0, 0, 166, 9, 10, 11, 0,
! 167, 168, 169, 0, 0, 0, 170, 171, 0, 0,
! 0, 172, 13, 0, 14, 0, 586, 146, 0, 0,
! 0, 155, 156, 0, 157, 0, 0, 0, 610, 0,
! 173, 174, 0, 611, 603, 604, 605, 606, 607, 608,
! 609, 0, 158, 0, 15, 0, 159, 160, 161, 162,
! 163, 0, 0, 0, 0, 164, 0, 5, 6, 7,
! 8, 165, 0, 0, 166, 9, 10, 11, 0, 167,
! 168, 169, 0, 0, 0, 170, 171, 154, 0, 0,
! 172, 13, 155, 156, 0, 157, 257, 258, 259, 260,
! 261, 262, 263, 264, 265, 266, 267, 610, 0, 173,
! 174, 0, 611, 158, 0, 15, 0, 159, 160, 161,
! 162, 163, 0, 0, 0, 0, 164, 0, 0, 0,
! 0, 0, 165, 0, 0, 166, 0, 0, 0, 0,
! 167, 168, 169, 0, 0, 0, 170, 171, 0, 0,
! 0, 172, 154, 5, 6, 7, 8, 155, 156, 0,
! 157, 9, 10, 11, 0, 0, 5, 0, 7, 79,
! 173, 174, 0, 436, 9, 10, 11, 13, 158, 14,
! 15, 0, 159, 160, 161, 162, 163, 0, 0, 0,
! 13, 164, 14, 0, 0, 0, 0, 165, 0, 0,
! 166, 0, 0, 0, 0, 167, 168, 169, 0, 0,
! 0, 170, 171, 0, 154, 5, 172, 7, 8, 155,
! 156, 0, 157, 9, 10, 11, 260, 261, 262, 263,
! 264, 265, 266, 267, 0, 173, 174, 0, 0, 13,
! 158, 14, 15, 0, 159, 160, 161, 162, 163, 0,
! 0, 0, 0, 164, 0, 154, 0, 0, 0, 165,
! 155, 156, 166, 157, 0, 0, 0, 167, 168, 169,
! 0, 0, 0, 170, 171, 0, 0, 0, 172, 0,
! 0, 158, 0, 15, 0, 159, 160, 161, 162, 163,
! 0, 0, 0, 0, 164, 0, 154, 173, 174, 0,
! 165, 155, 156, 166, 157, 0, 0, 0, 167, 168,
! 169, 0, 0, 0, 170, 171, 0, 0, 0, 172,
! 0, 0, 158, 0, 15, 0, 159, 160, 161, 162,
! 163, 0, 0, 0, 0, 164, 695, 154, 173, 174,
! 0, 165, 155, 156, 166, 157, 0, 0, 0, 167,
! 168, 169, 0, 0, 0, 170, 171, 0, 0, 0,
! 172, 0, 0, 158, 0, 15, 0, 159, 160, 161,
! 162, 163, 0, 0, 0, 0, 164, 0, 154, 173,
! 174, 0, 165, 155, 156, 166, 157, 0, 0, 0,
! 167, 168, 169, 0, 0, 0, 170, 171, 0, 0,
! 0, 247, 0, 0, 158, 0, 15, 0, 159, 160,
! 161, 162, 163, 0, 0, 0, 0, 164, 0, 464,
! 173, 174, 0, 165, 155, 156, 166, 157, 0, 0,
! 0, 167, 168, 169, 0, 0, 0, 170, 171, 0,
! 0, 0, 249, 0, 0, 158, 0, 15, 0, 159,
! 160, 161, 162, 163, 0, 0, 0, 0, 164, 0,
! 0, 173, 174, 0, 165, 0, 0, 166, 0, 0,
! 0, 755, 167, 168, 169, 0, 0, 0, 170, 171,
! 251, 252, 253, 172, 254, 255, 256, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267, 0, 0,
! 0, 0, 173, 174, 251, 252, 253, 756, 254, 255,
256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 0, 0, 251, 252, 253, 826, 254, 255,
! 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 251, 252, 253, 0, 254, 255, 256, 257,
! 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
! 0, 0, 0, 0, 0, 0, 251, 252, 253, 433,
254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
! 264, 265, 266, 267, 251, 252, 253, 434, 254, 255,
! 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 0, 0, 0, 0, 0, 0, 14, 0,
! 0, 583, 0, 0, 0, 0, 0, 0, 0, 0,
! 0, 251, 252, 253, 748, 254, 255, 256, 257, 258,
! 259, 260, 261, 262, 263, 264, 265, 266, 267, 5,
! 0, 7, 8, 5, 74, 7, 75, 9, 10, 11,
0, 9, 10, 11, 0, 0, 0, 0, 0, 0,
! 0, 0, 0, 13, 0, 14, 0, 13, 5, 110,
! 7, 111, 5, 83, 7, 84, 9, 10, 11, 0,
! 9, 10, 11, 0, 0, 5, 119, 7, 120, 0,
! 0, 0, 13, 9, 10, 11, 13, 5, 0, 7,
! 75, 0, 0, 0, 0, 9, 10, 11, 5, 13,
! 7, 84, 0, 0, 0, 0, 9, 10, 11, 0,
! 0, 13, 258, 259, 260, 261, 262, 263, 264, 265,
! 266, 267, 13, 251, 252, 253, 827, 254, 255, 256,
! 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
! 267, 251, 252, 253, 0, 254, 255, 256, 257, 258,
! 259, 260, 261, 262, 263, 264, 265, 266, 267, 253,
! 0, 254, 255, 256, 257, 258, 259, 260, 261, 262,
! 263, 264, 265, 266, 267, 255, 256, 257, 258, 259,
! 260, 261, 262, 263, 264, 265, 266, 267
};
! static const short yycheck[] = { 60,
! 294, 62, 2, 3, 2, 3, 142, 141, 2, 3,
! 221, 9, 10, 11, 314, 288, 217, 316, 272, 541,
! 320, 2, 3, 466, 22, 548, 24, 554, 26, 312,
! 28, 564, 30, 398, 32, 304, 34, 541, 36, 2,
! 3, 9, 2, 3, 541, 2, 3, 412, 2, 3,
! 623, 2, 3, 53, 149, 53, 0, 2, 3, 53,
! 557, 398, 458, 597, 62, 227, 64, 398, 466, 1,
! 64, 398, 53, 3, 4, 412, 159, 160, 600, 541,
! 770, 412, 3, 4, 212, 412, 169, 172, 541, 3,
! 53, 0, 175, 53, 1, 557, 53, 46, 1, 53,
! 496, 64, 53, 186, 64, 38, 39, 64, 53, 46,
! 379, 855, 1, 509, 1, 83, 512, 30, 1, 623,
! 57, 58, 59, 10, 814, 27, 623, 3, 4, 9,
! 89, 385, 1, 46, 83, 7, 73, 533, 30, 53,
! 884, 663, 46, 3, 4, 82, 84, 600, 48, 49,
! 50, 212, 237, 687, 91, 553, 554, 89, 30, 89,
! 65, 623, 247, 100, 249, 67, 68, 857, 89, 297,
! 703, 67, 109, 335, 172, 571, 866, 573, 85, 83,
! 3, 118, 85, 548, 67, 386, 455, 30, 68, 67,
! 127, 189, 557, 191, 467, 193, 85, 195, 58, 136,
! 46, 199, 89, 201, 731, 732, 379, 897, 3, 4,
! 44, 548, 273, 89, 212, 298, 85, 548, 752, 217,
! 557, 548, 21, 217, 67, 68, 557, 227, 379, 227,
! 557, 67, 66, 227, 68, 58, 297, 83, 811, 237,
! 301, 336, 67, 338, 67, 68, 227, 668, 7, 247,
! 89, 249, 67, 68, 217, 3, 4, 217, 67, 68,
! 217, 682, 785, 58, 227, 165, 349, 227, 83, 206,
! 227, 30, 67, 227, 83, 718, 227, 89, 451, 452,
! 453, 454, 227, 83, 727, 7, 84, 187, 88, 543,
! 88, 574, 503, 576, 27, 356, 67, 30, 46, 297,
! 451, 452, 453, 454, 67, 701, 211, 811, 30, 214,
! 58, 44, 67, 218, 811, 5, 6, 7, 3, 67,
! 718, 404, 12, 13, 14, 669, 324, 671, 326, 727,
! 328, 231, 330, 731, 732, 335, 83, 335, 3, 400,
! 30, 335, 403, 142, 740, 58, 59, 60, 433, 811,
! 435, 84, 874, 875, 335, 88, 1, 88, 30, 4,
! 5, 6, 7, 9, 3, 10, 83, 12, 13, 14,
! 270, 271, 335, 58, 46, 335, 84, 83, 335, 7,
! 88, 335, 67, 28, 335, 3, 4, 84, 386, 67,
! 335, 88, 386, 58, 84, 67, 68, 84, 398, 332,
! 333, 88, 67, 68, 398, 204, 205, 46, 83, 83,
! 315, 316, 412, 88, 88, 7, 321, 398, 412, 58,
! 785, 84, 721, 386, 723, 88, 386, 628, 67, 386,
! 566, 412, 337, 85, 83, 433, 637, 435, 398, 88,
! 58, 575, 85, 343, 89, 83, 719, 58, 785, 67,
! 68, 83, 412, 83, 785, 728, 67, 68, 785, 67,
! 68, 1, 84, 85, 4, 5, 6, 7, 864, 865,
! 84, 83, 12, 13, 14, 83, 88, 475, 378, 477,
! 541, 479, 387, 481, 384, 3, 4, 83, 28, 1,
! 6, 7, 4, 292, 6, 7, 12, 13, 14, 84,
! 12, 13, 14, 88, 84, 805, 83, 807, 88, 46,
! 309, 310, 4, 5, 6, 7, 28, 32, 30, 31,
! 12, 13, 14, 67, 22, 23, 24, 25, 451, 452,
! 430, 454, 30, 31, 32, 33, 28, 9, 30, 600,
! 623, 541, 1, 541, 3, 4, 607, 541, 548, 89,
! 483, 484, 84, 764, 548, 90, 88, 557, 84, 557,
! 541, 84, 88, 557, 469, 498, 499, 548, 704, 703,
! 67, 68, 84, 85, 27, 44, 557, 30, 541, 67,
! 68, 541, 84, 85, 541, 84, 880, 541, 548, 44,
! 541, 44, 84, 88, 557, 88, 541, 557, 892, 83,
! 557, 67, 68, 557, 67, 68, 557, 83, 513, 514,
! 6, 7, 517, 46, 67, 68, 12, 13, 14, 67,
! 68, 179, 180, 623, 44, 623, 526, 309, 310, 623,
! 628, 84, 718, 719, 628, 88, 697, 83, 636, 637,
! 90, 541, 623, 637, 83, 643, 90, 645, 90, 647,
! 85, 649, 89, 651, 85, 653, 85, 655, 792, 657,
! 623, 46, 1, 623, 85, 628, 623, 83, 628, 623,
! 83, 628, 623, 83, 637, 90, 581, 637, 623, 90,
! 637, 84, 615, 616, 84, 27, 222, 587, 85, 88,
! 88, 189, 190, 191, 192, 6, 7, 83, 3, 760,
! 600, 12, 13, 14, 22, 23, 24, 25, 608, 83,
! 83, 772, 30, 31, 32, 33, 46, 778, 15, 30,
! 17, 18, 19, 20, 629, 630, 659, 660, 633, 46,
! 85, 88, 46, 638, 639, 84, 641, 6, 7, 46,
! 84, 7, 85, 12, 13, 14, 84, 808, 809, 84,
! 811, 84, 288, 1, 553, 554, 4, 5, 6, 7,
! 89, 30, 10, 84, 12, 13, 14, 566, 67, 674,
! 16, 67, 677, 26, 27, 28, 29, 85, 577, 85,
! 28, 34, 35, 36, 37, 785, 84, 46, 67, 726,
! 67, 785, 67, 17, 855, 83, 83, 83, 859, 26,
! 27, 28, 29, 84, 785, 83, 67, 34, 35, 36,
! 37, 811, 84, 811, 84, 88, 721, 811, 723, 90,
! 379, 84, 84, 884, 885, 785, 324, 325, 326, 327,
! 811, 83, 9, 67, 84, 83, 741, 5, 6, 7,
! 745, 83, 83, 0, 12, 13, 14, 84, 811, 408,
! 0, 811, 385, 305, 811, 557, 392, 811, 557, 557,
! 811, 557, 30, 422, 423, 412, 811, 412, 5, 6,
! 7, 189, 190, 191, 192, 12, 13, 14, 414, 415,
! 292, 786, 787, 384, 789, 416, 572, 596, 685, 794,
! 731, 796, 451, 452, 453, 454, 1, 718, 803, 4,
! 5, 6, 7, 432, 672, 704, 675, 12, 13, 14,
! 3, 4, 5, 6, 7, 343, 84, 335, 815, 718,
! 719, 430, 27, 28, 380, 30, 619, 817, 727, 728,
! 466, 467, 731, 732, 56, 57, 58, 59, 60, 44,
! 193, 194, 195, 196, 861, 504, 846, 506, 4, 5,
! 6, 7, 863, -1, 10, 469, 12, 13, 14, 484,
! -1, -1, 67, 68, -1, -1, 193, 194, 195, 196,
! -1, -1, 28, -1, 30, -1, -1, 475, 476, 84,
! -1, 479, 480, 88, 89, -1, 1, -1, 3, 4,
! 5, 6, 7, 5, 6, 7, -1, 12, 13, 14,
! 12, 13, 14, 235, 236, -1, 324, 325, 326, 327,
! -1, -1, 27, 28, 246, 30, 31, 553, 554, 251,
! 252, -1, -1, -1, 256, 257, 258, 259, 260, 261,
! 262, 263, 264, 265, 266, 267, 54, 55, 56, 57,
! 58, 59, 60, 58, -1, 1, -1, -1, 4, 5,
! 6, 7, 67, 612, -1, -1, 12, 13, 14, 5,
! 6, 7, -1, -1, -1, -1, 12, 13, 14, 84,
! -1, 27, 28, -1, 30, 328, 329, 330, 331, -1,
! 1, -1, -1, 4, 5, 6, 7, -1, 44, -1,
! -1, 12, 13, 14, -1, 631, 632, -1, -1, -1,
! -1, 328, 329, 330, 331, -1, 27, 28, -1, 30,
! -1, 67, 68, 672, 62, 63, 675, 65, 66, 67,
! 68, -1, -1, 44, -1, -1, 358, 359, 84, -1,
! -1, -1, 88, 89, -1, -1, -1, -1, 84, -1,
! -1, 4, 5, 6, 7, 643, 644, 645, 646, 12,
! 13, 14, -1, 651, 652, 653, 654, 475, 476, -1,
! -1, 479, 480, 84, -1, 28, -1, 88, 89, 4,
! 5, 6, 7, -1, -1, -1, -1, 12, 13, 14,
! -1, -1, 718, 719, -1, -1, -1, -1, -1, -1,
! -1, 727, 728, 28, -1, 731, 732, 429, 5, 6,
! 7, -1, 434, -1, -1, 12, 13, 14, -1, 441,
! 5, 6, 7, -1, -1, -1, 775, 12, 13, 14,
! -1, 84, -1, 30, 477, 478, -1, -1, 481, 482,
! 1, -1, 3, 4, 5, 6, 7, 10, -1, 10,
! -1, 12, 13, 14, 780, 781, 782, -1, -1, 84,
! 477, 478, -1, -1, 481, 482, -1, 28, 817, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, 500, -1,
! 43, 44, 45, -1, 47, 48, 49, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, -1, 84,
! 522, -1, 851, 852, -1, -1, -1, -1, 4, 5,
! 6, 7, 5, 6, 7, -1, 12, 13, 14, 12,
! 13, 14, 83, 1, -1, 3, -1, 90, -1, -1,
! 8, 9, 28, 11, 30, 643, 644, 645, 646, 4,
! 5, 6, 7, 651, 652, 653, 654, 12, 13, 14,
! 572, 29, -1, 31, -1, 33, 34, 35, 36, 37,
! -1, 583, -1, 28, 42, 30, 588, -1, -1, -1,
! 48, -1, -1, 51, -1, 597, 598, -1, 56, 57,
! 58, 603, -1, -1, 62, 63, -1, -1, 84, 67,
! -1, 84, 4, 5, 6, 7, -1, -1, -1, -1,
! 12, 13, 14, -1, 647, 648, 649, 650, 86, 87,
! -1, 89, 655, 656, 657, 658, 28, -1, 30, 84,
! -1, -1, -1, 1, -1, -1, 4, -1, 6, 7,
! 647, 648, 649, 650, 12, 13, 14, -1, 655, 656,
! 657, 658, -1, -1, -1, -1, 668, -1, -1, -1,
! 28, 673, 30, 31, 676, -1, -1, -1, -1, -1,
! 682, -1, -1, 685, -1, 687, 4, 5, 6, 7,
! -1, -1, 84, -1, 12, 13, 14, -1, -1, -1,
! -1, 1, -1, 3, 4, 5, 6, 7, 8, 9,
! 28, 11, 12, 13, 14, 15, -1, 17, 18, 19,
! 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
! 30, 31, 32, 33, 34, 35, 36, 37, -1, -1,
! 742, -1, 42, -1, 746, -1, -1, 749, 48, -1,
! 752, 51, -1, 755, -1, -1, 56, 57, 58, -1,
! -1, -1, 62, 63, -1, -1, 84, 67, -1, -1,
! 5, 6, 7, 4, 5, 6, 7, 12, 13, 14,
! -1, 12, 13, 14, 84, 85, 86, 87, 1, 89,
! 3, 4, 5, 6, 7, 8, 9, 28, 11, 12,
! 13, 14, 15, -1, 17, 18, 19, 20, 21, 22,
! 23, 24, 25, 26, 27, 28, 29, 30, 31, -1,
! 33, 34, 35, 36, 37, 5, 6, 7, -1, 42,
! -1, -1, 12, 13, 14, 48, -1, -1, 51, 5,
! 6, 7, -1, 56, 57, 58, 12, 13, 14, 62,
! 63, -1, -1, 84, 67, -1, -1, -1, -1, 5,
! 6, 7, -1, -1, 30, -1, 12, 13, 14, -1,
! -1, 84, -1, 86, 87, 1, 89, 3, 4, -1,
! -1, -1, 8, 9, 30, 11, -1, -1, -1, 15,
! -1, 17, 18, 19, 20, 21, 22, 23, 24, 25,
! 26, 27, -1, 29, 84, 31, -1, 33, 34, 35,
! 36, 37, 5, 6, 7, -1, 42, -1, 84, 12,
! 13, 14, 48, -1, -1, 51, -1, -1, -1, -1,
! 56, 57, 58, -1, -1, -1, 62, 63, 84, -1,
! -1, 67, 4, 5, 6, 7, 5, 6, 7, -1,
! 12, 13, 14, 12, 13, 14, -1, -1, 84, -1,
! 86, 87, 1, 89, 3, 4, 28, -1, 30, 8,
! 9, 30, 11, -1, -1, -1, 15, -1, 17, 18,
! 19, 20, 21, 22, 23, 24, 25, 26, 27, -1,
29, -1, 31, -1, 33, 34, 35, 36, 37, -1,
! -1, -1, -1, 42, -1, -1, 5, 6, 7, 48,
! -1, -1, 51, 12, 13, 14, -1, 56, 57, 58,
! -1, -1, -1, 62, 63, -1, -1, 1, 67, 3,
! 4, 30, 6, 7, 8, 9, -1, 11, 12, 13,
! 14, -1, -1, -1, -1, 84, -1, 86, 87, -1,
! 89, -1, -1, -1, 28, 29, 30, 31, -1, 33,
! 34, 35, 36, 37, -1, -1, -1, -1, 42, -1,
! -1, 5, 6, 7, 48, -1, -1, 51, 12, 13,
! 14, -1, 56, 57, 58, -1, -1, -1, 62, 63,
! -1, -1, 1, 67, 3, 4, 30, -1, -1, 8,
! 9, -1, 11, -1, -1, -1, -1, -1, 4, 5,
! 6, 7, 86, 87, -1, 89, 12, 13, 14, -1,
! 29, -1, 31, -1, 33, 34, 35, 36, 37, -1,
! -1, -1, 28, 42, 30, -1, -1, -1, -1, 48,
-1, -1, 51, -1, -1, -1, -1, 56, 57, 58,
-1, -1, -1, 62, 63, -1, -1, 66, 67, 68,
! 1, -1, 3, 4, -1, -1, -1, 8, 9, -1,
11, -1, -1, -1, -1, -1, 85, 86, 87, -1,
89, -1, -1, -1, -1, -1, -1, -1, 29, -1,
31, -1, 33, 34, 35, 36, 37, -1, -1, -1,
! -1, 42, -1, -1, -1, -1, -1, 48, -1, -1,
51, -1, -1, -1, -1, 56, 57, 58, -1, -1,
-1, 62, 63, -1, -1, 66, 67, 68, 1, -1,
3, -1, -1, -1, -1, 8, 9, -1, 11, -1,
! -1, -1, -1, -1, 85, 86, 87, -1, 89, -1,
! -1, -1, -1, -1, -1, -1, 29, -1, 31, -1,
! 33, 34, 35, 36, 37, -1, -1, -1, -1, 42,
! -1, 44, -1, -1, -1, 48, -1, -1, 51, -1,
-1, -1, -1, 56, 57, 58, -1, -1, -1, 62,
! 63, -1, -1, 66, 67, 68, 1, -1, 3, -1,
! -1, -1, -1, 8, 9, -1, 11, -1, -1, 4,
! 5, 6, 7, 86, 87, -1, 89, 12, 13, 14,
! -1, -1, -1, -1, 29, -1, 31, -1, 33, 34,
! 35, 36, 37, 28, -1, 30, -1, 42, -1, -1,
-1, -1, -1, 48, -1, -1, 51, -1, -1, -1,
-1, 56, 57, 58, -1, -1, -1, 62, 63, -1,
-1, -1, 67, 3, 4, 5, 6, 7, 8, 9,
-1, 11, 12, 13, 14, -1, -1, 4, 5, 6,
7, 86, 87, -1, 89, 12, 13, 14, 28, 29,
30, 31, -1, 33, 34, 35, 36, 37, -1, -1,
! -1, 28, 42, 30, 3, -1, 5, -1, 48, 8,
! 9, 51, 11, -1, -1, -1, 56, 57, 58, -1,
! -1, -1, 62, 63, -1, -1, -1, 67, -1, -1,
! 29, -1, 31, -1, 33, 34, 35, 36, 37, -1,
! -1, -1, -1, 42, -1, -1, 86, 87, -1, 48,
! 90, -1, 51, -1, -1, -1, -1, 56, 57, 58,
! -1, -1, -1, 62, 63, -1, 3, -1, 67, -1,
! -1, 8, 9, -1, 11, 49, 50, 51, 52, 53,
! 54, 55, 56, 57, 58, 59, 60, 86, 87, -1,
! -1, 90, 29, -1, 31, -1, 33, 34, 35, 36,
! 37, -1, -1, -1, -1, 42, -1, 3, -1, -1,
! -1, 48, 8, 9, 51, 11, -1, -1, -1, 56,
! 57, 58, -1, -1, -1, 62, 63, -1, -1, -1,
! 67, -1, -1, 29, -1, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, -1, -1, 86,
! 87, -1, 48, 90, -1, 51, -1, -1, -1, -1,
! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1,
! -1, 67, -1, -1, -1, -1, -1, 3, 4, 5,
! 6, 7, 8, 9, -1, 11, 12, 13, 14, -1,
! 86, 87, -1, -1, 90, 21, 22, 23, 24, 25,
! 26, 27, 28, 29, 30, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, -1, 4, -1,
! 6, 7, 48, -1, -1, 51, 12, 13, 14, -1,
! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1,
! -1, 67, 28, -1, 30, -1, 3, 4, -1, -1,
! -1, 8, 9, -1, 11, -1, -1, -1, 84, -1,
! 86, 87, -1, 89, 21, 22, 23, 24, 25, 26,
! 27, -1, 29, -1, 31, -1, 33, 34, 35, 36,
! 37, -1, -1, -1, -1, 42, -1, 4, 5, 6,
! 7, 48, -1, -1, 51, 12, 13, 14, -1, 56,
! 57, 58, -1, -1, -1, 62, 63, 3, -1, -1,
! 67, 28, 8, 9, -1, 11, 50, 51, 52, 53,
! 54, 55, 56, 57, 58, 59, 60, 84, -1, 86,
! 87, -1, 89, 29, -1, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, -1, -1, -1,
! -1, -1, 48, -1, -1, 51, -1, -1, -1, -1,
! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1,
! -1, 67, 3, 4, 5, 6, 7, 8, 9, -1,
! 11, 12, 13, 14, -1, -1, 4, -1, 6, 7,
! 86, 87, -1, 89, 12, 13, 14, 28, 29, 30,
! 31, -1, 33, 34, 35, 36, 37, -1, -1, -1,
! 28, 42, 30, -1, -1, -1, -1, 48, -1, -1,
! 51, -1, -1, -1, -1, 56, 57, 58, -1, -1,
! -1, 62, 63, -1, 3, 4, 67, 6, 7, 8,
! 9, -1, 11, 12, 13, 14, 53, 54, 55, 56,
! 57, 58, 59, 60, -1, 86, 87, -1, -1, 28,
! 29, 30, 31, -1, 33, 34, 35, 36, 37, -1,
! -1, -1, -1, 42, -1, 3, -1, -1, -1, 48,
! 8, 9, 51, 11, -1, -1, -1, 56, 57, 58,
! -1, -1, -1, 62, 63, -1, -1, -1, 67, -1,
! -1, 29, -1, 31, -1, 33, 34, 35, 36, 37,
! -1, -1, -1, -1, 42, -1, 3, 86, 87, -1,
48, 8, 9, 51, 11, -1, -1, -1, 56, 57,
58, -1, -1, -1, 62, 63, -1, -1, -1, 67,
-1, -1, 29, -1, 31, -1, 33, 34, 35, 36,
! 37, -1, -1, -1, -1, 42, 84, 3, 86, 87,
-1, 48, 8, 9, 51, 11, -1, -1, -1, 56,
57, 58, -1, -1, -1, 62, 63, -1, -1, -1,
67, -1, -1, 29, -1, 31, -1, 33, 34, 35,
! 36, 37, -1, -1, -1, -1, 42, -1, 3, 86,
87, -1, 48, 8, 9, 51, 11, -1, -1, -1,
56, 57, 58, -1, -1, -1, 62, 63, -1, -1,
-1, 67, -1, -1, 29, -1, 31, -1, 33, 34,
*************** static const short yycheck[] = { 59,
*** 1555,1599 ****
-1, 56, 57, 58, -1, -1, -1, 62, 63, -1,
-1, -1, 67, -1, -1, 29, -1, 31, -1, 33,
34, 35, 36, 37, -1, -1, -1, -1, 42, -1,
! 3, 86, 87, -1, 48, 8, 9, 51, 11, -1,
! -1, -1, 56, 57, 58, -1, -1, -1, 62, 63,
! -1, -1, -1, 67, -1, -1, 29, -1, 31, -1,
! 33, 34, 35, 36, 37, -1, -1, -1, -1, 42,
! -1, -1, 86, 87, -1, 48, -1, -1, 51, -1,
! -1, -1, 10, 56, 57, 58, -1, -1, -1, 62,
! 63, 43, 44, 45, 67, 47, 48, 49, 50, 51,
! 52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
! -1, -1, -1, 86, 87, 43, 44, 45, 46, 47,
! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, -1, -1, 43, 44, 45, 90, 47,
! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, 43, 44, 45, -1, 47, 48, 49,
! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
! 60, -1, -1, -1, -1, -1, -1, 43, 44, 45,
! 88, 47, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60, 43, 44, 45, 88, 47,
! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
! 58, 59, 60, -1, -1, -1, -1, -1, -1, 30,
! -1, -1, 88, 53, 54, 55, 56, 57, 58, 59,
! 60, -1, 43, 44, 45, 83, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
! 4, 5, 6, 7, 4, -1, 6, 7, 12, 13,
! 14, -1, 12, 13, 14, -1, -1, -1, -1, -1,
! -1, -1, -1, -1, 28, -1, 30, -1, 28, 4,
! 30, 6, 7, 4, 5, 6, 7, 12, 13, 14,
-1, 12, 13, 14, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 28, -1, 30, -1, 28, 4, 5,
6, 7, 4, 5, 6, 7, 12, 13, 14, -1,
12, 13, 14, -1, -1, 4, 5, 6, 7, -1,
! -1, -1, 28, 12, 13, 14, 28, 51, 52, 53,
! 54, 55, 56, 57, 58, 59, 60, -1, -1, 28,
! 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, 43, 44,
! 45, -1, 47, 48, 49, 50, 51, 52, 53, 54,
! 55, 56, 57, 58, 59, 60, 45, -1, 47, 48,
! 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60
};
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/lib/bison.simple"
--- 1559,1598 ----
-1, 56, 57, 58, -1, -1, -1, 62, 63, -1,
-1, -1, 67, -1, -1, 29, -1, 31, -1, 33,
34, 35, 36, 37, -1, -1, -1, -1, 42, -1,
! -1, 86, 87, -1, 48, -1, -1, 51, -1, -1,
! -1, 10, 56, 57, 58, -1, -1, -1, 62, 63,
! 43, 44, 45, 67, 47, 48, 49, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60, -1, -1,
! -1, -1, 86, 87, 43, 44, 45, 46, 47, 48,
! 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, -1, -1, 43, 44, 45, 90, 47, 48,
! 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, 43, 44, 45, -1, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
! -1, -1, -1, -1, -1, -1, 43, 44, 45, 88,
! 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
! 57, 58, 59, 60, 43, 44, 45, 88, 47, 48,
! 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, -1, -1, -1, -1, -1, -1, 30, -1,
! -1, 88, -1, -1, -1, -1, -1, -1, -1, -1,
! -1, 43, 44, 45, 83, 47, 48, 49, 50, 51,
! 52, 53, 54, 55, 56, 57, 58, 59, 60, 4,
! -1, 6, 7, 4, 5, 6, 7, 12, 13, 14,
-1, 12, 13, 14, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 28, -1, 30, -1, 28, 4, 5,
6, 7, 4, 5, 6, 7, 12, 13, 14, -1,
12, 13, 14, -1, -1, 4, 5, 6, 7, -1,
! -1, -1, 28, 12, 13, 14, 28, 4, -1, 6,
! 7, -1, -1, -1, -1, 12, 13, 14, 4, 28,
! 6, 7, -1, -1, -1, -1, 12, 13, 14, -1,
! -1, 28, 51, 52, 53, 54, 55, 56, 57, 58,
! 59, 60, 28, 43, 44, 45, 46, 47, 48, 49,
! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
! 60, 43, 44, 45, -1, 47, 48, 49, 50, 51,
! 52, 53, 54, 55, 56, 57, 58, 59, 60, 45,
! -1, 47, 48, 49, 50, 51, 52, 53, 54, 55,
! 56, 57, 58, 59, 60, 48, 49, 50, 51, 52,
! 53, 54, 55, 56, 57, 58, 59, 60
};
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/lib/bison.simple"
*************** case 56:
*** 2374,2468 ****
#line 488 "c-parse.y"
{ skip_evaluation++; ;
break;}
! case 58:
! #line 494 "c-parse.y"
! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
! case 60:
! #line 500 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 61:
! #line 502 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 62:
! #line 504 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 63:
! #line 506 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 64:
! #line 508 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 65:
! #line 510 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 66:
! #line 512 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 67:
! #line 514 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 68:
! #line 516 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 69:
! #line 518 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 70:
! #line 520 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 71:
! #line 522 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 72:
! #line 524 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
break;}
! case 73:
! #line 527 "c-parse.y"
{ skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 74:
! #line 530 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
break;}
! case 75:
! #line 533 "c-parse.y"
{ skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 76:
! #line 536 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
break;}
! case 77:
! #line 539 "c-parse.y"
{ skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
- (yyvsp[-4].ttype == boolean_false_node)); ;
break;}
! case 78:
! #line 542 "c-parse.y"
{ skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 79:
! #line 545 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
--- 2373,2471 ----
#line 488 "c-parse.y"
{ skip_evaluation++; ;
break;}
! case 57:
! #line 492 "c-parse.y"
! { skip_evaluation++; ;
break;}
! case 59:
! #line 498 "c-parse.y"
! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 61:
! #line 504 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 62:
! #line 506 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 63:
! #line 508 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 64:
! #line 510 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 65:
! #line 512 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 66:
! #line 514 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 67:
! #line 516 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 68:
! #line 518 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 69:
! #line 520 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 70:
! #line 522 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 71:
! #line 524 "c-parse.y"
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 72:
! #line 526 "c-parse.y"
! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
! break;}
! case 73:
! #line 528 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
break;}
! case 74:
! #line 531 "c-parse.y"
{ skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 75:
! #line 534 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
break;}
! case 76:
! #line 537 "c-parse.y"
{ skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 77:
! #line 540 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
break;}
! case 78:
! #line 543 "c-parse.y"
{ skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
- (yyvsp[-4].ttype == boolean_false_node)); ;
break;}
! case 79:
! #line 546 "c-parse.y"
{ skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 80:
! #line 549 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
/* Make sure first operand is calculated only once. */
*************** case 79:
*** 2470,2482 ****
yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
break;}
! case 80:
! #line 552 "c-parse.y"
{ skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 81:
! #line 555 "c-parse.y"
{ char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
--- 2473,2485 ----
yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype));
skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
break;}
! case 81:
! #line 556 "c-parse.y"
{ skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
! case 82:
! #line 559 "c-parse.y"
{ char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
*************** case 81:
*** 2484,2491 ****
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR);
;
break;}
! case 82:
! #line 562 "c-parse.y"
{ char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
/* This inhibits warnings in truthvalue_conversion. */
--- 2487,2494 ----
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR);
;
break;}
! case 83:
! #line 566 "c-parse.y"
{ char class;
yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
/* This inhibits warnings in truthvalue_conversion. */
*************** case 82:
*** 2494,2523 ****
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK);
;
break;}
! case 83:
! #line 573 "c-parse.y"
{
if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '(');
;
break;}
! case 85:
! #line 580 "c-parse.y"
{ yyval.ttype = combine_strings (yyvsp[0].ttype); ;
break;}
! case 86:
! #line 582 "c-parse.y"
{ yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ;
break;}
! case 87:
! #line 584 "c-parse.y"
{ start_init (NULL_TREE, NULL, 0);
yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
really_start_incremental_init (yyvsp[-2].ttype); ;
break;}
! case 88:
! #line 588 "c-parse.y"
{ tree constructor = pop_init_level (0);
tree type = yyvsp[-5].ttype;
finish_init ();
--- 2497,2526 ----
C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK);
;
break;}
! case 84:
! #line 577 "c-parse.y"
{
if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '(');
;
break;}
! case 86:
! #line 584 "c-parse.y"
{ yyval.ttype = combine_strings (yyvsp[0].ttype); ;
break;}
! case 87:
! #line 586 "c-parse.y"
{ yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ;
break;}
! case 88:
! #line 588 "c-parse.y"
{ start_init (NULL_TREE, NULL, 0);
yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
really_start_incremental_init (yyvsp[-2].ttype); ;
break;}
! case 89:
! #line 592 "c-parse.y"
{ tree constructor = pop_init_level (0);
tree type = yyvsp[-5].ttype;
finish_init ();
*************** case 88:
*** 2527,2545 ****
yyval.ttype = build_compound_literal (type, constructor);
;
break;}
! case 89:
! #line 597 "c-parse.y"
{ char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
yyval.ttype = yyvsp[-1].ttype; ;
break;}
! case 90:
! #line 602 "c-parse.y"
{ yyval.ttype = error_mark_node; ;
break;}
! case 91:
! #line 604 "c-parse.y"
{ tree saved_last_tree;
if (pedantic)
--- 2530,2548 ----
yyval.ttype = build_compound_literal (type, constructor);
;
break;}
! case 90:
! #line 601 "c-parse.y"
{ char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
if (IS_EXPR_CODE_CLASS (class))
C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
yyval.ttype = yyvsp[-1].ttype; ;
break;}
! case 91:
! #line 606 "c-parse.y"
{ yyval.ttype = error_mark_node; ;
break;}
! case 92:
! #line 608 "c-parse.y"
{ tree saved_last_tree;
if (pedantic)
*************** case 91:
*** 2556,2563 ****
TREE_SIDE_EFFECTS (yyval.ttype) = 1;
;
break;}
! case 92:
! #line 620 "c-parse.y"
{
pop_label_level ();
last_tree = COMPOUND_BODY (yyvsp[-2].ttype);
--- 2559,2566 ----
TREE_SIDE_EFFECTS (yyval.ttype) = 1;
;
break;}
! case 93:
! #line 624 "c-parse.y"
{
pop_label_level ();
last_tree = COMPOUND_BODY (yyvsp[-2].ttype);
*************** case 92:
*** 2565,2580 ****
yyval.ttype = error_mark_node;
;
break;}
! case 93:
! #line 627 "c-parse.y"
{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 94:
! #line 629 "c-parse.y"
{ yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ;
break;}
! case 95:
! #line 632 "c-parse.y"
{
tree c;
--- 2568,2583 ----
yyval.ttype = error_mark_node;
;
break;}
! case 94:
! #line 631 "c-parse.y"
{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 95:
! #line 633 "c-parse.y"
{ yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ;
break;}
! case 96:
! #line 636 "c-parse.y"
{
tree c;
*************** case 95:
*** 2585,2592 ****
yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype;
;
break;}
! case 96:
! #line 642 "c-parse.y"
{
tree e1, e2;
--- 2588,2595 ----
yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype;
;
break;}
! case 97:
! #line 646 "c-parse.y"
{
tree e1, e2;
*************** case 96:
*** 2597,2630 ****
? build_int_2 (1, 0) : build_int_2 (0, 0);
;
break;}
! case 97:
! #line 652 "c-parse.y"
{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 98:
! #line 654 "c-parse.y"
{
yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
;
break;}
! case 99:
! #line 658 "c-parse.y"
{
tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
;
break;}
! case 100:
! #line 664 "c-parse.y"
{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
break;}
! case 101:
! #line 666 "c-parse.y"
{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
break;}
! case 103:
! #line 673 "c-parse.y"
{
static int last_lineno = 0;
static const char *last_input_filename = 0;
--- 2600,2633 ----
? build_int_2 (1, 0) : build_int_2 (0, 0);
;
break;}
! case 98:
! #line 656 "c-parse.y"
{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 99:
! #line 658 "c-parse.y"
{
yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
;
break;}
! case 100:
! #line 662 "c-parse.y"
{
tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
;
break;}
! case 101:
! #line 668 "c-parse.y"
{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
break;}
! case 102:
! #line 670 "c-parse.y"
{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
break;}
! case 104:
! #line 677 "c-parse.y"
{
static int last_lineno = 0;
static const char *last_input_filename = 0;
*************** case 103:
*** 2639,3010 ****
}
;
break;}
! case 106:
! #line 694 "c-parse.y"
{ c_mark_varargs ();
if (pedantic)
pedwarn ("ISO C does not permit use of `varargs.h'"); ;
break;}
! case 107:
! #line 704 "c-parse.y"
{ ;
break;}
- case 112:
- #line 720 "c-parse.y"
- { POP_DECLSPEC_STACK; ;
- break;}
case 113:
! #line 722 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 114:
! #line 724 "c-parse.y"
{ shadow_tag_warned (yyvsp[-1].ttype, 1);
pedwarn ("empty declaration"); ;
break;}
! case 115:
! #line 727 "c-parse.y"
{ pedwarn ("empty declaration"); ;
break;}
! case 116:
! #line 736 "c-parse.y"
{ ;
break;}
! case 117:
! #line 744 "c-parse.y"
{ pending_xref_error ();
PUSH_DECLSPEC_STACK;
split_specs_attrs (yyvsp[0].ttype,
¤t_declspecs, &prefix_attributes);
all_prefix_attributes = prefix_attributes; ;
break;}
- case 118:
- #line 755 "c-parse.y"
- { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;
- break;}
case 119:
! #line 760 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
break;}
case 120:
! #line 762 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 121:
! #line 764 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 122:
! #line 766 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 123:
! #line 768 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); ;
break;}
case 124:
! #line 770 "c-parse.y"
! { RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
break;}
case 125:
! #line 827 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 126:
! #line 830 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 127:
! #line 833 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 128:
! #line 839 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 129:
! #line 845 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 130:
! #line 848 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 131:
! #line 854 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE);
TREE_STATIC (yyval.ttype) = 0; ;
break;}
! case 132:
! #line 857 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
- case 133:
- #line 863 "c-parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
- TREE_STATIC (yyval.ttype) = 1; ;
- break;}
case 134:
! #line 866 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 135:
! #line 869 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 136:
! #line 872 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 137:
! #line 875 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 138:
! #line 878 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 139:
! #line 881 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 140:
! #line 887 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 141:
! #line 890 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 142:
! #line 893 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 143:
! #line 896 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 144:
! #line 899 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 145:
! #line 902 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 146:
! #line 908 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 147:
! #line 911 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 148:
! #line 914 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 149:
! #line 917 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 150:
! #line 920 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 151:
! #line 923 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 152:
! #line 929 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
! break;}
! case 153:
! #line 932 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 154:
! #line 935 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 155:
! #line 938 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 156:
! #line 941 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 157:
! #line 947 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
TREE_STATIC (yyval.ttype) = 0; ;
break;}
! case 158:
! #line 950 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 159:
! #line 953 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 160:
! #line 956 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 161:
! #line 962 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 162:
! #line 968 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 163:
! #line 974 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 164:
! #line 983 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 165:
! #line 989 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 166:
! #line 992 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 167:
! #line 995 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 168:
! #line 1001 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 169:
! #line 1007 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 170:
! #line 1013 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 171:
! #line 1022 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
- case 172:
- #line 1028 "c-parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
- TREE_STATIC (yyval.ttype) = 1; ;
- break;}
case 173:
! #line 1031 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 174:
! #line 1034 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 175:
! #line 1037 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 176:
! #line 1040 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 177:
! #line 1043 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 178:
! #line 1046 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! warning ("`%s' is not at beginning of declaration",
! IDENTIFIER_POINTER (yyvsp[0].ttype));
! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 179:
! #line 1052 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
--- 2642,3005 ----
}
;
break;}
! case 107:
! #line 698 "c-parse.y"
{ c_mark_varargs ();
if (pedantic)
pedwarn ("ISO C does not permit use of `varargs.h'"); ;
break;}
! case 108:
! #line 708 "c-parse.y"
{ ;
break;}
case 113:
! #line 724 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 114:
! #line 726 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
! break;}
! case 115:
! #line 728 "c-parse.y"
{ shadow_tag_warned (yyvsp[-1].ttype, 1);
pedwarn ("empty declaration"); ;
break;}
! case 116:
! #line 731 "c-parse.y"
{ pedwarn ("empty declaration"); ;
break;}
! case 117:
! #line 740 "c-parse.y"
{ ;
break;}
! case 118:
! #line 748 "c-parse.y"
{ pending_xref_error ();
PUSH_DECLSPEC_STACK;
split_specs_attrs (yyvsp[0].ttype,
¤t_declspecs, &prefix_attributes);
all_prefix_attributes = prefix_attributes; ;
break;}
case 119:
! #line 759 "c-parse.y"
! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;
break;}
case 120:
! #line 764 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 121:
! #line 766 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 122:
! #line 768 "c-parse.y"
{ POP_DECLSPEC_STACK; ;
break;}
case 123:
! #line 770 "c-parse.y"
! { POP_DECLSPEC_STACK; ;
break;}
case 124:
! #line 772 "c-parse.y"
! { shadow_tag (yyvsp[-1].ttype); ;
break;}
case 125:
! #line 774 "c-parse.y"
! { RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
break;}
case 126:
! #line 831 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 127:
! #line 834 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 128:
! #line 837 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 129:
! #line 843 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 130:
! #line 849 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 131:
! #line 852 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 132:
! #line 858 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE);
TREE_STATIC (yyval.ttype) = 0; ;
break;}
! case 133:
! #line 861 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 134:
! #line 867 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 135:
! #line 870 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 136:
! #line 873 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 137:
! #line 876 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 138:
! #line 879 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 139:
! #line 882 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 140:
! #line 885 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 141:
! #line 891 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 142:
! #line 894 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 143:
! #line 897 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 144:
! #line 900 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 145:
! #line 903 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 146:
! #line 906 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 147:
! #line 912 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 148:
! #line 915 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 149:
! #line 918 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 150:
! #line 921 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 151:
! #line 924 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 152:
! #line 927 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
+ case 153:
+ #line 933 "c-parse.y"
+ { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
+ TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
+ break;}
case 154:
! #line 936 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 155:
! #line 939 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 156:
! #line 942 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 157:
! #line 945 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
! break;}
! case 158:
! #line 951 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
TREE_STATIC (yyval.ttype) = 0; ;
break;}
! case 159:
! #line 954 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 160:
! #line 957 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 161:
! #line 960 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 162:
! #line 966 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 163:
! #line 972 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 164:
! #line 978 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 165:
! #line 987 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 166:
! #line 993 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 167:
! #line 996 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 168:
! #line 999 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 169:
! #line 1005 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 170:
! #line 1011 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 171:
! #line 1017 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
! case 172:
! #line 1026 "c-parse.y"
{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 173:
! #line 1032 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 174:
! #line 1035 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 175:
! #line 1038 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 176:
! #line 1041 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 177:
! #line 1044 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 178:
! #line 1047 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 179:
! #line 1050 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
*************** case 179:
*** 3012,3018 ****
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 180:
! #line 1058 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
--- 3007,3013 ----
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 180:
! #line 1056 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
*************** case 180:
*** 3020,3026 ****
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 181:
! #line 1064 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
--- 3015,3021 ----
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 181:
! #line 1062 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
*************** case 181:
*** 3028,3097 ****
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 182:
! #line 1073 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 183:
! #line 1076 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 184:
! #line 1079 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 185:
! #line 1082 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 186:
! #line 1085 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 187:
! #line 1091 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 188:
! #line 1094 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 189:
! #line 1097 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 190:
! #line 1100 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 191:
! #line 1103 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 192:
! #line 1106 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 193:
! #line 1109 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! warning ("`%s' is not at beginning of declaration",
! IDENTIFIER_POINTER (yyvsp[0].ttype));
! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 194:
! #line 1115 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
--- 3023,3092 ----
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 182:
! #line 1068 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! warning ("`%s' is not at beginning of declaration",
! IDENTIFIER_POINTER (yyvsp[0].ttype));
! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 183:
! #line 1077 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 184:
! #line 1080 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 185:
! #line 1083 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 186:
! #line 1086 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 187:
! #line 1089 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 188:
! #line 1095 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 189:
! #line 1098 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 190:
! #line 1101 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 191:
! #line 1104 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 192:
! #line 1107 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 193:
! #line 1110 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 194:
! #line 1113 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
*************** case 194:
*** 3099,3105 ****
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 195:
! #line 1121 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
--- 3094,3100 ----
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 195:
! #line 1119 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
*************** case 195:
*** 3107,3113 ****
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 196:
! #line 1127 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
--- 3102,3108 ----
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 196:
! #line 1125 "c-parse.y"
{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER (yyvsp[0].ttype));
*************** case 196:
*** 3115,3324 ****
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 197:
! #line 1136 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 198:
! #line 1139 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 199:
! #line 1142 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 200:
! #line 1145 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 201:
! #line 1148 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 258:
! #line 1236 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 259:
! #line 1238 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
! case 263:
! #line 1273 "c-parse.y"
{ OBJC_NEED_RAW_IDENTIFIER (1); ;
break;}
! case 266:
! #line 1283 "c-parse.y"
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
yyval.ttype = lookup_name (yyvsp[0].ttype); ;
break;}
- case 267:
- #line 1287 "c-parse.y"
- { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
- break;}
case 268:
! #line 1289 "c-parse.y"
! { yyval.ttype = groktypename (yyvsp[-1].ttype); ;
break;}
! case 273:
! #line 1306 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 274:
! #line 1308 "c-parse.y"
{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
yyval.ttype = yyvsp[-1].ttype;
;
break;}
! case 275:
! #line 1315 "c-parse.y"
{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
break;}
! case 276:
! #line 1320 "c-parse.y"
{ finish_init ();
finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
break;}
! case 277:
! #line 1323 "c-parse.y"
{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
;
break;}
! case 278:
! #line 1331 "c-parse.y"
{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
break;}
! case 279:
! #line 1336 "c-parse.y"
{ finish_init ();
finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
break;}
! case 280:
! #line 1339 "c-parse.y"
{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
break;}
- case 281:
- #line 1347 "c-parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
case 282:
! #line 1349 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 283:
! #line 1354 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 284:
! #line 1356 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 285:
! #line 1361 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;
break;}
case 286:
! #line 1366 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 287:
! #line 1368 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 288:
! #line 1373 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 289:
! #line 1375 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 290:
! #line 1377 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
break;}
case 291:
! #line 1379 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
break;}
case 292:
! #line 1381 "c-parse.y"
{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 298:
! #line 1399 "c-parse.y"
{ really_start_incremental_init (NULL_TREE); ;
break;}
! case 299:
! #line 1401 "c-parse.y"
{ yyval.ttype = pop_init_level (0); ;
break;}
! case 300:
! #line 1403 "c-parse.y"
{ yyval.ttype = error_mark_node; ;
break;}
! case 301:
! #line 1409 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids empty initializer braces"); ;
break;}
! case 305:
! #line 1423 "c-parse.y"
{ if (pedantic && ! flag_isoc99)
pedwarn ("ISO C89 forbids specifying subobject to initialize"); ;
break;}
! case 306:
! #line 1426 "c-parse.y"
{ if (pedantic)
pedwarn ("obsolete use of designated initializer without `='"); ;
break;}
! case 307:
! #line 1429 "c-parse.y"
{ set_init_label (yyvsp[-1].ttype);
if (pedantic)
pedwarn ("obsolete use of designated initializer with `:'"); ;
break;}
! case 310:
! #line 1438 "c-parse.y"
! { push_init_level (0); ;
break;}
case 311:
! #line 1440 "c-parse.y"
! { process_init_element (pop_init_level (0)); ;
break;}
case 312:
! #line 1442 "c-parse.y"
! { process_init_element (yyvsp[0].ttype); ;
break;}
! case 316:
! #line 1453 "c-parse.y"
! { set_init_label (yyvsp[0].ttype); ;
break;}
case 317:
#line 1458 "c-parse.y"
{ set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype);
if (pedantic)
pedwarn ("ISO C forbids specifying range of elements to initialize"); ;
break;}
- case 318:
- #line 1462 "c-parse.y"
- { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
- break;}
case 319:
#line 1467 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids nested functions");
--- 3110,3331 ----
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 197:
! #line 1131 "c-parse.y"
! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
! warning ("`%s' is not at beginning of declaration",
! IDENTIFIER_POINTER (yyvsp[0].ttype));
! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 198:
! #line 1140 "c-parse.y"
! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
break;}
case 199:
! #line 1143 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 200:
! #line 1146 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 201:
! #line 1149 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
TREE_STATIC (yyval.ttype) = 1; ;
break;}
! case 202:
! #line 1152 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
! TREE_STATIC (yyval.ttype) = 1; ;
break;}
case 259:
! #line 1240 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 260:
! #line 1242 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
! case 264:
! #line 1277 "c-parse.y"
{ OBJC_NEED_RAW_IDENTIFIER (1); ;
break;}
! case 267:
! #line 1287 "c-parse.y"
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
yyval.ttype = lookup_name (yyvsp[0].ttype); ;
break;}
case 268:
! #line 1291 "c-parse.y"
! { skip_evaluation--; yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
break;}
! case 269:
! #line 1293 "c-parse.y"
! { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ;
break;}
case 274:
! #line 1310 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
! break;}
! case 275:
! #line 1312 "c-parse.y"
{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
yyval.ttype = yyvsp[-1].ttype;
;
break;}
! case 276:
! #line 1319 "c-parse.y"
{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
break;}
! case 277:
! #line 1324 "c-parse.y"
{ finish_init ();
finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
break;}
! case 278:
! #line 1327 "c-parse.y"
{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
finish_decl (d, NULL_TREE, yyvsp[-1].ttype);
;
break;}
! case 279:
! #line 1335 "c-parse.y"
{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
chainon (yyvsp[-1].ttype, all_prefix_attributes));
start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
break;}
! case 280:
! #line 1340 "c-parse.y"
{ finish_init ();
finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
break;}
! case 281:
! #line 1343 "c-parse.y"
{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
chainon (yyvsp[0].ttype, all_prefix_attributes));
finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
break;}
case 282:
! #line 1351 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 283:
! #line 1353 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 284:
! #line 1358 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 285:
! #line 1360 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 286:
! #line 1365 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype; ;
break;}
case 287:
! #line 1370 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 288:
! #line 1372 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 289:
! #line 1377 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 290:
! #line 1379 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 291:
! #line 1381 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
break;}
case 292:
! #line 1383 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
! break;}
! case 293:
! #line 1385 "c-parse.y"
{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 299:
! #line 1403 "c-parse.y"
{ really_start_incremental_init (NULL_TREE); ;
break;}
! case 300:
! #line 1405 "c-parse.y"
{ yyval.ttype = pop_init_level (0); ;
break;}
! case 301:
! #line 1407 "c-parse.y"
{ yyval.ttype = error_mark_node; ;
break;}
! case 302:
! #line 1413 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids empty initializer braces"); ;
break;}
! case 306:
! #line 1427 "c-parse.y"
{ if (pedantic && ! flag_isoc99)
pedwarn ("ISO C89 forbids specifying subobject to initialize"); ;
break;}
! case 307:
! #line 1430 "c-parse.y"
{ if (pedantic)
pedwarn ("obsolete use of designated initializer without `='"); ;
break;}
! case 308:
! #line 1433 "c-parse.y"
{ set_init_label (yyvsp[-1].ttype);
if (pedantic)
pedwarn ("obsolete use of designated initializer with `:'"); ;
break;}
! case 309:
! #line 1437 "c-parse.y"
! {;
break;}
case 311:
! #line 1443 "c-parse.y"
! { push_init_level (0); ;
break;}
case 312:
! #line 1445 "c-parse.y"
! { process_init_element (pop_init_level (0)); ;
break;}
! case 313:
! #line 1447 "c-parse.y"
! { process_init_element (yyvsp[0].ttype); ;
break;}
case 317:
#line 1458 "c-parse.y"
+ { set_init_label (yyvsp[0].ttype); ;
+ break;}
+ case 318:
+ #line 1463 "c-parse.y"
{ set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype);
if (pedantic)
pedwarn ("ISO C forbids specifying range of elements to initialize"); ;
break;}
case 319:
#line 1467 "c-parse.y"
+ { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
+ break;}
+ case 320:
+ #line 1472 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids nested functions");
*************** case 319:
*** 3331,3342 ****
}
;
break;}
! case 320:
! #line 1479 "c-parse.y"
{ store_parm_decls (); ;
break;}
! case 321:
! #line 1487 "c-parse.y"
{ tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
--- 3338,3349 ----
}
;
break;}
! case 321:
! #line 1484 "c-parse.y"
{ store_parm_decls (); ;
break;}
! case 322:
! #line 1492 "c-parse.y"
{ tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
*************** case 321:
*** 3344,3351 ****
pop_function_context ();
add_decl_stmt (decl); ;
break;}
! case 322:
! #line 1497 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids nested functions");
--- 3351,3358 ----
pop_function_context ();
add_decl_stmt (decl); ;
break;}
! case 323:
! #line 1502 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids nested functions");
*************** case 322:
*** 3358,3369 ****
}
;
break;}
! case 323:
! #line 1509 "c-parse.y"
{ store_parm_decls (); ;
break;}
! case 324:
! #line 1517 "c-parse.y"
{ tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
--- 3365,3376 ----
}
;
break;}
! case 324:
! #line 1514 "c-parse.y"
{ store_parm_decls (); ;
break;}
! case 325:
! #line 1522 "c-parse.y"
{ tree decl = current_function_decl;
DECL_SOURCE_FILE (decl) = yyvsp[-2].filename;
DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno;
*************** case 324:
*** 3371,3558 ****
pop_function_context ();
add_decl_stmt (decl); ;
break;}
- case 327:
- #line 1537 "c-parse.y"
- { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
- break;}
case 328:
! #line 1539 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 329:
#line 1544 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
break;}
case 330:
! #line 1546 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
! case 334:
! #line 1561 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 335:
#line 1566 "c-parse.y"
- { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
- break;}
- case 337:
- #line 1572 "c-parse.y"
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 338:
#line 1577 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
break;}
case 339:
! #line 1579 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 340:
! #line 1581 "c-parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 341:
! #line 1583 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 342:
! #line 1591 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 343:
#line 1596 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 344:
! #line 1598 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 345:
! #line 1600 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
break;}
! case 347:
! #line 1606 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 348:
! #line 1608 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 349:
#line 1613 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 350:
! #line 1615 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 351:
#line 1620 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 352:
! #line 1622 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 353:
! #line 1633 "c-parse.y"
{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
/* Start scope of tag before parsing components. */
;
break;}
! case 354:
! #line 1637 "c-parse.y"
{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
break;}
! case 355:
! #line 1639 "c-parse.y"
{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
;
break;}
! case 356:
! #line 1643 "c-parse.y"
{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
break;}
! case 357:
! #line 1645 "c-parse.y"
{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
break;}
! case 358:
! #line 1647 "c-parse.y"
{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
;
break;}
! case 359:
! #line 1651 "c-parse.y"
{ yyval.ttype = start_enum (yyvsp[-1].ttype); ;
break;}
! case 360:
! #line 1653 "c-parse.y"
{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ;
break;}
! case 361:
! #line 1656 "c-parse.y"
{ yyval.ttype = start_enum (NULL_TREE); ;
break;}
! case 362:
! #line 1658 "c-parse.y"
{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
break;}
! case 363:
! #line 1664 "c-parse.y"
{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
break;}
! case 364:
! #line 1666 "c-parse.y"
{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
break;}
! case 365:
! #line 1668 "c-parse.y"
{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
/* In ISO C, enumerated types can be referred to
only if already defined. */
if (pedantic && !COMPLETE_TYPE_P (yyval.ttype))
pedwarn ("ISO C forbids forward references to `enum' types"); ;
break;}
! case 369:
! #line 1683 "c-parse.y"
{ if (pedantic && ! flag_isoc99)
pedwarn ("comma at end of enumerator list"); ;
break;}
! case 370:
! #line 1689 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
! case 371:
! #line 1691 "c-parse.y"
{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
pedwarn ("no semicolon at end of struct or union"); ;
break;}
! case 372:
! #line 1696 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 373:
! #line 1698 "c-parse.y"
{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
break;}
! case 374:
! #line 1700 "c-parse.y"
{ if (pedantic)
pedwarn ("extra semicolon in struct or union specified"); ;
break;}
! case 375:
! #line 1706 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 376:
! #line 1709 "c-parse.y"
{
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
--- 3378,3565 ----
pop_function_context ();
add_decl_stmt (decl); ;
break;}
case 328:
! #line 1542 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 329:
#line 1544 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 330:
! #line 1549 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
break;}
! case 331:
! #line 1551 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 335:
#line 1566 "c-parse.y"
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
+ case 336:
+ #line 1571 "c-parse.y"
+ { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
+ break;}
case 338:
#line 1577 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 339:
! #line 1582 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
break;}
case 340:
! #line 1584 "c-parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 341:
! #line 1586 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 342:
! #line 1588 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 343:
#line 1596 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 344:
! #line 1601 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 345:
! #line 1603 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
! case 346:
! #line 1605 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
break;}
case 348:
! #line 1611 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 349:
#line 1613 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 350:
! #line 1618 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 351:
#line 1620 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
break;}
case 352:
! #line 1625 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 353:
! #line 1627 "c-parse.y"
! { yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 354:
! #line 1638 "c-parse.y"
{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
/* Start scope of tag before parsing components. */
;
break;}
! case 355:
! #line 1642 "c-parse.y"
{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
break;}
! case 356:
! #line 1644 "c-parse.y"
{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
;
break;}
! case 357:
! #line 1648 "c-parse.y"
{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
break;}
! case 358:
! #line 1650 "c-parse.y"
{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
break;}
! case 359:
! #line 1652 "c-parse.y"
{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
;
break;}
! case 360:
! #line 1656 "c-parse.y"
{ yyval.ttype = start_enum (yyvsp[-1].ttype); ;
break;}
! case 361:
! #line 1658 "c-parse.y"
{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ;
break;}
! case 362:
! #line 1661 "c-parse.y"
{ yyval.ttype = start_enum (NULL_TREE); ;
break;}
! case 363:
! #line 1663 "c-parse.y"
{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
break;}
! case 364:
! #line 1669 "c-parse.y"
{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
break;}
! case 365:
! #line 1671 "c-parse.y"
{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
break;}
! case 366:
! #line 1673 "c-parse.y"
{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
/* In ISO C, enumerated types can be referred to
only if already defined. */
if (pedantic && !COMPLETE_TYPE_P (yyval.ttype))
pedwarn ("ISO C forbids forward references to `enum' types"); ;
break;}
! case 370:
! #line 1688 "c-parse.y"
{ if (pedantic && ! flag_isoc99)
pedwarn ("comma at end of enumerator list"); ;
break;}
! case 371:
! #line 1694 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
! case 372:
! #line 1696 "c-parse.y"
{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
pedwarn ("no semicolon at end of struct or union"); ;
break;}
! case 373:
! #line 1701 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 374:
! #line 1703 "c-parse.y"
{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
break;}
! case 375:
! #line 1705 "c-parse.y"
{ if (pedantic)
pedwarn ("extra semicolon in struct or union specified"); ;
break;}
! case 376:
! #line 1711 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 377:
! #line 1714 "c-parse.y"
{
/* Support for unnamed structs or unions as members of
structs or unions (which is [a] useful and [b] supports
*************** case 376:
*** 3563,3775 ****
yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; ;
break;}
! case 377:
! #line 1719 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 378:
! #line 1722 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
shadow_tag(yyvsp[0].ttype);
yyval.ttype = NULL_TREE; ;
break;}
! case 379:
! #line 1727 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 380:
! #line 1729 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
break;}
! case 382:
! #line 1736 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;
! break;}
! case 384:
! #line 1742 "c-parse.y"
{ yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
case 385:
#line 1747 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 386:
! #line 1751 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 387:
! #line 1754 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 388:
! #line 1760 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 389:
! #line 1764 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 390:
! #line 1767 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 392:
! #line 1779 "c-parse.y"
{ if (yyvsp[-2].ttype == error_mark_node)
yyval.ttype = yyvsp[-2].ttype;
else
yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
break;}
- case 393:
- #line 1784 "c-parse.y"
- { yyval.ttype = error_mark_node; ;
- break;}
case 394:
! #line 1790 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 395:
! #line 1792 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 396:
#line 1797 "c-parse.y"
! { pending_xref_error ();
! yyval.ttype = yyvsp[0].ttype; ;
break;}
case 397:
! #line 1800 "c-parse.y"
! { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 398:
#line 1805 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 400:
! #line 1811 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
NULL_TREE),
all_prefix_attributes); ;
break;}
! case 401:
! #line 1815 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[0].ttype),
all_prefix_attributes); ;
break;}
! case 402:
! #line 1819 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes)); ;
break;}
- case 406:
- #line 1832 "c-parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
case 407:
#line 1837 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 408:
! #line 1839 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 409:
#line 1844 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 410:
! #line 1846 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 411:
! #line 1848 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ;
break;}
case 412:
! #line 1850 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 413:
! #line 1852 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ;
break;}
case 414:
! #line 1859 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, NULL_TREE, 0, 0); ;
break;}
case 415:
! #line 1861 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ;
break;}
case 416:
! #line 1863 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, NULL_TREE, 0, 0); ;
break;}
case 417:
! #line 1865 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ;
break;}
case 418:
! #line 1867 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, NULL_TREE, 0, 1); ;
break;}
case 419:
! #line 1869 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ;
break;}
case 420:
! #line 1871 "c-parse.y"
{ if (C_RID_CODE (yyvsp[-2].ttype) != RID_STATIC)
error ("storage class specifier in array declarator");
yyval.ttype = build_array_declarator (yyvsp[-1].ttype, NULL_TREE, 1, 0); ;
break;}
! case 421:
! #line 1875 "c-parse.y"
{ if (C_RID_CODE (yyvsp[-3].ttype) != RID_STATIC)
error ("storage class specifier in array declarator");
yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ;
break;}
! case 422:
! #line 1879 "c-parse.y"
{ if (C_RID_CODE (yyvsp[-2].ttype) != RID_STATIC)
error ("storage class specifier in array declarator");
yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ;
break;}
! case 425:
! #line 1894 "c-parse.y"
{
pedwarn ("deprecated use of label at end of compound statement");
;
break;}
! case 433:
! #line 1911 "c-parse.y"
{ if (pedantic && !flag_isoc99)
pedwarn ("ISO C89 forbids mixed declarations and code"); ;
break;}
! case 448:
! #line 1941 "c-parse.y"
{ pushlevel (0);
clear_last_expr ();
add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
;
break;}
- case 449:
- #line 1948 "c-parse.y"
- { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ;
- break;}
case 450:
#line 1953 "c-parse.y"
{ if (flag_isoc99)
{
yyval.ttype = c_begin_compound_stmt ();
--- 3570,3782 ----
yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE);
POP_DECLSPEC_STACK; ;
break;}
! case 378:
! #line 1724 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 379:
! #line 1727 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids member declarations with no members");
shadow_tag(yyvsp[0].ttype);
yyval.ttype = NULL_TREE; ;
break;}
! case 380:
! #line 1732 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 381:
! #line 1734 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ;
break;}
! case 383:
! #line 1741 "c-parse.y"
{ yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;
break;}
case 385:
#line 1747 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 386:
+ #line 1752 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 387:
! #line 1756 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 388:
! #line 1759 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 389:
! #line 1765 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 390:
! #line 1769 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 391:
! #line 1772 "c-parse.y"
{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
break;}
! case 393:
! #line 1784 "c-parse.y"
{ if (yyvsp[-2].ttype == error_mark_node)
yyval.ttype = yyvsp[-2].ttype;
else
yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
break;}
case 394:
! #line 1789 "c-parse.y"
! { yyval.ttype = error_mark_node; ;
break;}
case 395:
! #line 1795 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 396:
#line 1797 "c-parse.y"
! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 397:
! #line 1802 "c-parse.y"
! { pending_xref_error ();
! yyval.ttype = yyvsp[0].ttype; ;
break;}
case 398:
#line 1805 "c-parse.y"
+ { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+ break;}
+ case 399:
+ #line 1810 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 401:
! #line 1816 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
NULL_TREE),
all_prefix_attributes); ;
break;}
! case 402:
! #line 1820 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[0].ttype),
all_prefix_attributes); ;
break;}
! case 403:
! #line 1824 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes)); ;
break;}
case 407:
#line 1837 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 408:
! #line 1842 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 409:
#line 1844 "c-parse.y"
! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 410:
! #line 1849 "c-parse.y"
! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;
break;}
case 411:
! #line 1851 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 412:
! #line 1853 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ;
break;}
case 413:
! #line 1855 "c-parse.y"
! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
break;}
case 414:
! #line 1857 "c-parse.y"
! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ;
break;}
case 415:
! #line 1864 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, NULL_TREE, 0, 0); ;
break;}
case 416:
! #line 1866 "c-parse.y"
! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ;
break;}
case 417:
! #line 1868 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, NULL_TREE, 0, 0); ;
break;}
case 418:
! #line 1870 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ;
break;}
case 419:
! #line 1872 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, NULL_TREE, 0, 1); ;
break;}
case 420:
! #line 1874 "c-parse.y"
! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ;
! break;}
! case 421:
! #line 1876 "c-parse.y"
{ if (C_RID_CODE (yyvsp[-2].ttype) != RID_STATIC)
error ("storage class specifier in array declarator");
yyval.ttype = build_array_declarator (yyvsp[-1].ttype, NULL_TREE, 1, 0); ;
break;}
! case 422:
! #line 1880 "c-parse.y"
{ if (C_RID_CODE (yyvsp[-3].ttype) != RID_STATIC)
error ("storage class specifier in array declarator");
yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ;
break;}
! case 423:
! #line 1884 "c-parse.y"
{ if (C_RID_CODE (yyvsp[-2].ttype) != RID_STATIC)
error ("storage class specifier in array declarator");
yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ;
break;}
! case 426:
! #line 1899 "c-parse.y"
{
pedwarn ("deprecated use of label at end of compound statement");
;
break;}
! case 434:
! #line 1916 "c-parse.y"
{ if (pedantic && !flag_isoc99)
pedwarn ("ISO C89 forbids mixed declarations and code"); ;
break;}
! case 449:
! #line 1946 "c-parse.y"
{ pushlevel (0);
clear_last_expr ();
add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
;
break;}
case 450:
#line 1953 "c-parse.y"
+ { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ;
+ break;}
+ case 451:
+ #line 1958 "c-parse.y"
{ if (flag_isoc99)
{
yyval.ttype = c_begin_compound_stmt ();
*************** case 450:
*** 3781,3788 ****
yyval.ttype = NULL_TREE;
;
break;}
! case 451:
! #line 1969 "c-parse.y"
{ if (flag_isoc99)
{
tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
--- 3788,3795 ----
yyval.ttype = NULL_TREE;
;
break;}
! case 452:
! #line 1974 "c-parse.y"
{ if (flag_isoc99)
{
tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
*************** case 451:
*** 3794,3806 ****
else
yyval.ttype = NULL_TREE; ;
break;}
! case 453:
! #line 1986 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids label declarations"); ;
break;}
! case 456:
! #line 1997 "c-parse.y"
{ tree link;
for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
--- 3801,3813 ----
else
yyval.ttype = NULL_TREE; ;
break;}
! case 454:
! #line 1991 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids label declarations"); ;
break;}
! case 457:
! #line 2002 "c-parse.y"
{ tree link;
for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
*************** case 456:
*** 3810,3837 ****
}
;
break;}
! case 457:
! #line 2011 "c-parse.y"
{;
break;}
! case 459:
! #line 2015 "c-parse.y"
{ compstmt_count++;
yyval.ttype = c_begin_compound_stmt (); ;
break;}
! case 460:
! #line 2020 "c-parse.y"
{ yyval.ttype = convert (void_type_node, integer_zero_node); ;
break;}
! case 461:
! #line 2022 "c-parse.y"
{ yyval.ttype = poplevel (kept_level_p (), 1, 0);
SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype))
= SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype))
= yyval.ttype; ;
break;}
! case 464:
! #line 2035 "c-parse.y"
{ if (current_function_decl == 0)
{
error ("braced-group within expression allowed only inside a function");
--- 3817,3844 ----
}
;
break;}
! case 458:
! #line 2016 "c-parse.y"
{;
break;}
! case 460:
! #line 2020 "c-parse.y"
{ compstmt_count++;
yyval.ttype = c_begin_compound_stmt (); ;
break;}
! case 461:
! #line 2025 "c-parse.y"
{ yyval.ttype = convert (void_type_node, integer_zero_node); ;
break;}
! case 462:
! #line 2027 "c-parse.y"
{ yyval.ttype = poplevel (kept_level_p (), 1, 0);
SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype))
= SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype))
= yyval.ttype; ;
break;}
! case 465:
! #line 2040 "c-parse.y"
{ if (current_function_decl == 0)
{
error ("braced-group within expression allowed only inside a function");
*************** case 464:
*** 3847,3876 ****
yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
;
break;}
! case 465:
! #line 2052 "c-parse.y"
{ RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype));
last_expr_type = NULL_TREE;
yyval.ttype = yyvsp[-1].ttype; ;
break;}
! case 466:
! #line 2060 "c-parse.y"
{ c_finish_then (); ;
break;}
! case 468:
! #line 2077 "c-parse.y"
{ yyval.ttype = c_begin_if_stmt (); ;
break;}
! case 469:
! #line 2079 "c-parse.y"
{ c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype),
compstmt_count,yyvsp[-3].ttype);
yyval.itype = stmt_count;
if_stmt_file = yyvsp[-7].filename;
if_stmt_line = yyvsp[-6].lineno; ;
break;}
! case 470:
! #line 2091 "c-parse.y"
{ stmt_count++;
compstmt_count++;
yyval.ttype
--- 3854,3883 ----
yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree));
;
break;}
! case 466:
! #line 2057 "c-parse.y"
{ RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype));
last_expr_type = NULL_TREE;
yyval.ttype = yyvsp[-1].ttype; ;
break;}
! case 467:
! #line 2065 "c-parse.y"
{ c_finish_then (); ;
break;}
! case 469:
! #line 2082 "c-parse.y"
{ yyval.ttype = c_begin_if_stmt (); ;
break;}
! case 470:
! #line 2084 "c-parse.y"
{ c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype),
compstmt_count,yyvsp[-3].ttype);
yyval.itype = stmt_count;
if_stmt_file = yyvsp[-7].filename;
if_stmt_line = yyvsp[-6].lineno; ;
break;}
! case 471:
! #line 2096 "c-parse.y"
{ stmt_count++;
compstmt_count++;
yyval.ttype
*************** case 470:
*** 3882,3911 ****
RTL-generation time. */
DO_COND (yyval.ttype) = error_mark_node; ;
break;}
! case 471:
! #line 2102 "c-parse.y"
{ yyval.ttype = yyvsp[-2].ttype;
RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ;
break;}
! case 472:
! #line 2110 "c-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.filename = input_filename; ;
break;}
! case 473:
! #line 2116 "c-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.lineno = lineno; ;
break;}
! case 476:
! #line 2129 "c-parse.y"
{ if (flag_isoc99)
RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ;
break;}
! case 477:
! #line 2135 "c-parse.y"
{ if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
--- 3889,3918 ----
RTL-generation time. */
DO_COND (yyval.ttype) = error_mark_node; ;
break;}
! case 472:
! #line 2107 "c-parse.y"
{ yyval.ttype = yyvsp[-2].ttype;
RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ;
break;}
! case 473:
! #line 2115 "c-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.filename = input_filename; ;
break;}
! case 474:
! #line 2121 "c-parse.y"
{ if (yychar == YYEMPTY)
yychar = YYLEX;
yyval.lineno = lineno; ;
break;}
! case 477:
! #line 2134 "c-parse.y"
{ if (flag_isoc99)
RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ;
break;}
! case 478:
! #line 2140 "c-parse.y"
{ if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
*************** case 477:
*** 3917,3944 ****
}
;
break;}
! case 478:
! #line 2149 "c-parse.y"
{ if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
}
;
break;}
! case 479:
! #line 2158 "c-parse.y"
{ c_expand_start_else ();
yyvsp[-1].itype = stmt_count; ;
break;}
! case 480:
! #line 2161 "c-parse.y"
{ c_finish_else ();
c_expand_end_cond ();
if (extra_warnings && stmt_count == yyvsp[-3].itype)
warning ("empty body in an else-statement"); ;
break;}
! case 481:
! #line 2166 "c-parse.y"
{ c_expand_end_cond ();
/* This warning is here instead of in simple_if, because we
do not want a warning if an empty if is followed by an
--- 3924,3951 ----
}
;
break;}
! case 479:
! #line 2154 "c-parse.y"
{ if (yyvsp[0].ttype)
{
STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno;
}
;
break;}
! case 480:
! #line 2163 "c-parse.y"
{ c_expand_start_else ();
yyvsp[-1].itype = stmt_count; ;
break;}
! case 481:
! #line 2166 "c-parse.y"
{ c_finish_else ();
c_expand_end_cond ();
if (extra_warnings && stmt_count == yyvsp[-3].itype)
warning ("empty body in an else-statement"); ;
break;}
! case 482:
! #line 2171 "c-parse.y"
{ c_expand_end_cond ();
/* This warning is here instead of in simple_if, because we
do not want a warning if an empty if is followed by an
*************** case 481:
*** 3948,4079 ****
warning_with_file_and_line (if_stmt_file, if_stmt_line,
"empty body in an if-statement"); ;
break;}
! case 482:
! #line 2178 "c-parse.y"
{ c_expand_end_cond (); ;
break;}
! case 483:
! #line 2188 "c-parse.y"
{ stmt_count++;
yyval.ttype = c_begin_while_stmt (); ;
break;}
! case 484:
! #line 2191 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (yyvsp[-1].ttype);
c_finish_while_stmt_cond (truthvalue_conversion (yyvsp[-1].ttype),
yyvsp[-3].ttype);
yyval.ttype = add_stmt (yyvsp[-3].ttype); ;
break;}
! case 485:
! #line 2196 "c-parse.y"
{ RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ;
break;}
! case 486:
! #line 2199 "c-parse.y"
{ DO_COND (yyvsp[-4].ttype) = truthvalue_conversion (yyvsp[-2].ttype); ;
break;}
! case 487:
! #line 2201 "c-parse.y"
{ ;
break;}
! case 488:
! #line 2203 "c-parse.y"
{ yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
NULL_TREE, NULL_TREE);
add_stmt (yyval.ttype); ;
break;}
! case 489:
! #line 2207 "c-parse.y"
{ stmt_count++;
RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ;
break;}
! case 490:
! #line 2210 "c-parse.y"
{ if (yyvsp[-1].ttype)
FOR_COND (yyvsp[-5].ttype) = truthvalue_conversion (yyvsp[-1].ttype); ;
break;}
! case 491:
! #line 2213 "c-parse.y"
{ FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ;
break;}
! case 492:
! #line 2215 "c-parse.y"
{ RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ;
break;}
! case 493:
! #line 2217 "c-parse.y"
{ stmt_count++;
yyval.ttype = c_start_case (yyvsp[-1].ttype); ;
break;}
- case 494:
- #line 2220 "c-parse.y"
- { c_finish_case (); ;
- break;}
case 495:
#line 2225 "c-parse.y"
! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ;
break;}
case 496:
! #line 2227 "c-parse.y"
! { check_for_loop_decls (); ;
break;}
case 497:
! #line 2233 "c-parse.y"
! { stmt_count++; yyval.ttype = yyvsp[0].ttype; ;
break;}
case 498:
! #line 2235 "c-parse.y"
{ stmt_count++;
yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ;
break;}
! case 499:
! #line 2238 "c-parse.y"
{ if (flag_isoc99)
RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype));
yyval.ttype = NULL_TREE; ;
break;}
- case 500:
- #line 2242 "c-parse.y"
- { stmt_count++;
- yyval.ttype = add_stmt (build_break_stmt ()); ;
- break;}
case 501:
! #line 2245 "c-parse.y"
{ stmt_count++;
! yyval.ttype = add_stmt (build_continue_stmt ()); ;
break;}
case 502:
! #line 2248 "c-parse.y"
{ stmt_count++;
! yyval.ttype = c_expand_return (NULL_TREE); ;
break;}
case 503:
! #line 2251 "c-parse.y"
{ stmt_count++;
! yyval.ttype = c_expand_return (yyvsp[-1].ttype); ;
break;}
case 504:
! #line 2254 "c-parse.y"
{ stmt_count++;
! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ;
break;}
case 505:
! #line 2258 "c-parse.y"
{ stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ;
break;}
case 506:
#line 2263 "c-parse.y"
{ stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
break;}
case 507:
#line 2268 "c-parse.y"
{ stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
break;}
case 508:
! #line 2271 "c-parse.y"
{ tree decl;
stmt_count++;
decl = lookup_label (yyvsp[-1].ttype);
--- 3955,4086 ----
warning_with_file_and_line (if_stmt_file, if_stmt_line,
"empty body in an if-statement"); ;
break;}
! case 483:
! #line 2183 "c-parse.y"
{ c_expand_end_cond (); ;
break;}
! case 484:
! #line 2193 "c-parse.y"
{ stmt_count++;
yyval.ttype = c_begin_while_stmt (); ;
break;}
! case 485:
! #line 2196 "c-parse.y"
{ yyvsp[-1].ttype = truthvalue_conversion (yyvsp[-1].ttype);
c_finish_while_stmt_cond (truthvalue_conversion (yyvsp[-1].ttype),
yyvsp[-3].ttype);
yyval.ttype = add_stmt (yyvsp[-3].ttype); ;
break;}
! case 486:
! #line 2201 "c-parse.y"
{ RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ;
break;}
! case 487:
! #line 2204 "c-parse.y"
{ DO_COND (yyvsp[-4].ttype) = truthvalue_conversion (yyvsp[-2].ttype); ;
break;}
! case 488:
! #line 2206 "c-parse.y"
{ ;
break;}
! case 489:
! #line 2208 "c-parse.y"
{ yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
NULL_TREE, NULL_TREE);
add_stmt (yyval.ttype); ;
break;}
! case 490:
! #line 2212 "c-parse.y"
{ stmt_count++;
RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ;
break;}
! case 491:
! #line 2215 "c-parse.y"
{ if (yyvsp[-1].ttype)
FOR_COND (yyvsp[-5].ttype) = truthvalue_conversion (yyvsp[-1].ttype); ;
break;}
! case 492:
! #line 2218 "c-parse.y"
{ FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ;
break;}
! case 493:
! #line 2220 "c-parse.y"
{ RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ;
break;}
! case 494:
! #line 2222 "c-parse.y"
{ stmt_count++;
yyval.ttype = c_start_case (yyvsp[-1].ttype); ;
break;}
case 495:
#line 2225 "c-parse.y"
! { c_finish_case (); ;
break;}
case 496:
! #line 2230 "c-parse.y"
! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ;
break;}
case 497:
! #line 2232 "c-parse.y"
! { check_for_loop_decls (); ;
break;}
case 498:
! #line 2238 "c-parse.y"
! { stmt_count++; yyval.ttype = yyvsp[0].ttype; ;
! break;}
! case 499:
! #line 2240 "c-parse.y"
{ stmt_count++;
yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ;
break;}
! case 500:
! #line 2243 "c-parse.y"
{ if (flag_isoc99)
RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype));
yyval.ttype = NULL_TREE; ;
break;}
case 501:
! #line 2247 "c-parse.y"
{ stmt_count++;
! yyval.ttype = add_stmt (build_break_stmt ()); ;
break;}
case 502:
! #line 2250 "c-parse.y"
{ stmt_count++;
! yyval.ttype = add_stmt (build_continue_stmt ()); ;
break;}
case 503:
! #line 2253 "c-parse.y"
{ stmt_count++;
! yyval.ttype = c_expand_return (NULL_TREE); ;
break;}
case 504:
! #line 2256 "c-parse.y"
{ stmt_count++;
! yyval.ttype = c_expand_return (yyvsp[-1].ttype); ;
break;}
case 505:
! #line 2259 "c-parse.y"
{ stmt_count++;
! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ;
break;}
case 506:
#line 2263 "c-parse.y"
{ stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ;
break;}
case 507:
#line 2268 "c-parse.y"
{ stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
break;}
case 508:
! #line 2273 "c-parse.y"
! { stmt_count++;
! yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
! break;}
! case 509:
! #line 2276 "c-parse.y"
{ tree decl;
stmt_count++;
decl = lookup_label (yyvsp[-1].ttype);
*************** case 508:
*** 4086,4120 ****
yyval.ttype = NULL_TREE;
;
break;}
! case 509:
! #line 2283 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids `goto *expr;'");
stmt_count++;
yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype);
yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ;
break;}
! case 510:
! #line 2289 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 511:
! #line 2297 "c-parse.y"
{ stmt_count++;
yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ;
break;}
! case 512:
! #line 2300 "c-parse.y"
{ stmt_count++;
yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 513:
! #line 2303 "c-parse.y"
{ stmt_count++;
yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;
break;}
! case 514:
! #line 2306 "c-parse.y"
{ tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype);
stmt_count++;
if (label)
--- 4093,4127 ----
yyval.ttype = NULL_TREE;
;
break;}
! case 510:
! #line 2288 "c-parse.y"
{ if (pedantic)
pedwarn ("ISO C forbids `goto *expr;'");
stmt_count++;
yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype);
yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ;
break;}
! case 511:
! #line 2294 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 512:
! #line 2302 "c-parse.y"
{ stmt_count++;
yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ;
break;}
! case 513:
! #line 2305 "c-parse.y"
{ stmt_count++;
yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
! case 514:
! #line 2308 "c-parse.y"
{ stmt_count++;
yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;
break;}
! case 515:
! #line 2311 "c-parse.y"
{ tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype);
stmt_count++;
if (label)
*************** case 514:
*** 4126,4182 ****
yyval.ttype = NULL_TREE;
;
break;}
! case 515:
! #line 2322 "c-parse.y"
{ emit_line_note (input_filename, lineno);
yyval.ttype = NULL_TREE; ;
break;}
- case 516:
- #line 2325 "c-parse.y"
- { emit_line_note (input_filename, lineno); ;
- break;}
case 517:
#line 2330 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
! case 519:
! #line 2337 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 522:
! #line 2344 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 523:
#line 2349 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
break;}
case 524:
! #line 2351 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
break;}
case 525:
#line 2356 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
break;}
case 526:
! #line 2358 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
break;}
case 527:
! #line 2368 "c-parse.y"
{ pushlevel (0);
clear_parm_order ();
declare_parm_level (0); ;
break;}
! case 528:
! #line 2372 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
poplevel (0, 0, 0); ;
break;}
! case 530:
! #line 2380 "c-parse.y"
{ tree parm;
if (pedantic)
pedwarn ("ISO C forbids forward parameter declarations");
--- 4133,4189 ----
yyval.ttype = NULL_TREE;
;
break;}
! case 516:
! #line 2327 "c-parse.y"
{ emit_line_note (input_filename, lineno);
yyval.ttype = NULL_TREE; ;
break;}
case 517:
#line 2330 "c-parse.y"
! { emit_line_note (input_filename, lineno); ;
break;}
! case 518:
! #line 2335 "c-parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
! case 520:
! #line 2342 "c-parse.y"
! { yyval.ttype = NULL_TREE; ;
break;}
case 523:
#line 2349 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 524:
! #line 2354 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
break;}
case 525:
#line 2356 "c-parse.y"
! { yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ;
break;}
case 526:
! #line 2361 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
break;}
case 527:
! #line 2363 "c-parse.y"
! { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
! break;}
! case 528:
! #line 2373 "c-parse.y"
{ pushlevel (0);
clear_parm_order ();
declare_parm_level (0); ;
break;}
! case 529:
! #line 2377 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
poplevel (0, 0, 0); ;
break;}
! case 531:
! #line 2385 "c-parse.y"
{ tree parm;
if (pedantic)
pedwarn ("ISO C forbids forward parameter declarations");
*************** case 530:
*** 4185,4209 ****
TREE_ASM_WRITTEN (parm) = 1;
clear_parm_order (); ;
break;}
! case 531:
! #line 2388 "c-parse.y"
{ /* Dummy action so attributes are in known place
on parser stack. */ ;
break;}
! case 532:
! #line 2391 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
! case 533:
! #line 2393 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
break;}
! case 534:
! #line 2399 "c-parse.y"
{ yyval.ttype = get_parm_info (0); ;
break;}
! case 535:
! #line 2401 "c-parse.y"
{ yyval.ttype = get_parm_info (0);
/* Gcc used to allow this as an extension. However, it does
not work for all targets, and thus has been disabled.
--- 4192,4216 ----
TREE_ASM_WRITTEN (parm) = 1;
clear_parm_order (); ;
break;}
! case 532:
! #line 2393 "c-parse.y"
{ /* Dummy action so attributes are in known place
on parser stack. */ ;
break;}
! case 533:
! #line 2396 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
! case 534:
! #line 2398 "c-parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
break;}
! case 535:
! #line 2404 "c-parse.y"
{ yyval.ttype = get_parm_info (0); ;
break;}
! case 536:
! #line 2406 "c-parse.y"
{ yyval.ttype = get_parm_info (0);
/* Gcc used to allow this as an extension. However, it does
not work for all targets, and thus has been disabled.
*************** case 535:
*** 4214,4316 ****
error ("ISO C requires a named argument before `...'");
;
break;}
- case 536:
- #line 2411 "c-parse.y"
- { yyval.ttype = get_parm_info (1); ;
- break;}
case 537:
! #line 2413 "c-parse.y"
! { yyval.ttype = get_parm_info (0); ;
break;}
case 538:
#line 2418 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); ;
break;}
case 539:
! #line 2420 "c-parse.y"
{ push_parm_decl (yyvsp[0].ttype); ;
break;}
case 540:
! #line 2427 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 541:
! #line 2432 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 542:
! #line 2437 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 543:
! #line 2440 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 544:
! #line 2446 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 545:
! #line 2454 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 546:
! #line 2459 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 547:
! #line 2464 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 548:
! #line 2467 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 549:
! #line 2473 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 550:
! #line 2479 "c-parse.y"
{ prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
all_prefix_attributes = prefix_attributes; ;
break;}
! case 551:
! #line 2488 "c-parse.y"
{ pushlevel (0);
clear_parm_order ();
declare_parm_level (1); ;
break;}
! case 552:
! #line 2492 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
poplevel (0, 0, 0); ;
break;}
! case 554:
! #line 2500 "c-parse.y"
{ tree t;
for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
if (TREE_VALUE (t) == NULL_TREE)
--- 4221,4323 ----
error ("ISO C requires a named argument before `...'");
;
break;}
case 537:
! #line 2416 "c-parse.y"
! { yyval.ttype = get_parm_info (1); ;
break;}
case 538:
#line 2418 "c-parse.y"
! { yyval.ttype = get_parm_info (0); ;
break;}
case 539:
! #line 2423 "c-parse.y"
{ push_parm_decl (yyvsp[0].ttype); ;
break;}
case 540:
! #line 2425 "c-parse.y"
! { push_parm_decl (yyvsp[0].ttype); ;
! break;}
! case 541:
! #line 2432 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 542:
! #line 2437 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 543:
! #line 2442 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 544:
! #line 2445 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 545:
! #line 2451 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 546:
! #line 2459 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 547:
! #line 2464 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 548:
! #line 2469 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 549:
! #line 2472 "c-parse.y"
{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
yyvsp[-1].ttype),
chainon (yyvsp[0].ttype, all_prefix_attributes));
POP_DECLSPEC_STACK; ;
break;}
! case 550:
! #line 2478 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
POP_DECLSPEC_STACK; ;
break;}
! case 551:
! #line 2484 "c-parse.y"
{ prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
all_prefix_attributes = prefix_attributes; ;
break;}
! case 552:
! #line 2493 "c-parse.y"
{ pushlevel (0);
clear_parm_order ();
declare_parm_level (1); ;
break;}
! case 553:
! #line 2497 "c-parse.y"
{ yyval.ttype = yyvsp[0].ttype;
parmlist_tags_warning ();
poplevel (0, 0, 0); ;
break;}
! case 555:
! #line 2505 "c-parse.y"
{ tree t;
for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
if (TREE_VALUE (t) == NULL_TREE)
*************** case 554:
*** 4325,4348 ****
YYERROR1;
;
break;}
- case 555:
- #line 2518 "c-parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
case 556:
! #line 2520 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
break;}
case 557:
! #line 2526 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 558:
! #line 2528 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
break;}
case 559:
#line 2533 "c-parse.y"
{ yyval.ttype = SAVE_WARN_FLAGS();
pedantic = 0;
warn_pointer_arith = 0;
--- 4332,4355 ----
YYERROR1;
;
break;}
case 556:
! #line 2523 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 557:
! #line 2525 "c-parse.y"
! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
break;}
case 558:
! #line 2531 "c-parse.y"
! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 559:
#line 2533 "c-parse.y"
+ { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
+ break;}
+ case 560:
+ #line 2538 "c-parse.y"
{ yyval.ttype = SAVE_WARN_FLAGS();
pedantic = 0;
warn_pointer_arith = 0;
*************** yyerrhandle:
*** 4570,4576 ****
}
return 1;
}
! #line 2539 "c-parse.y"
/* yylex() is a thin wrapper around c_lex(), all it does is translate
--- 4577,4583 ----
}
return 1;
}
! #line 2544 "c-parse.y"
/* yylex() is a thin wrapper around c_lex(), all it does is translate
diff -Nrc3pad gcc-3.2/gcc/c-parse.in gcc-3.2.1/gcc/c-parse.in
*** gcc-3.2/gcc/c-parse.in Tue Apr 16 22:05:54 2002
--- gcc-3.2.1/gcc/c-parse.in Mon Oct 21 18:37:41 2002
*************** alignof:
*** 534,539 ****
--- 534,543 ----
ALIGNOF { skip_evaluation++; }
;
+ typeof:
+ TYPEOF { skip_evaluation++; }
+ ;
+
cast_expr:
unary_expr
| '(' typename ')' cast_expr %prec UNARY
*************** ifobjc
*** 1376,1385 ****
| non_empty_protocolrefs
{ $$ = get_object_reference ($1); }
end ifobjc
! | TYPEOF '(' expr ')'
! { $$ = TREE_TYPE ($3); }
! | TYPEOF '(' typename ')'
! { $$ = groktypename ($3); }
;
/* typespec_nonreserved_attr does not exist. */
--- 1380,1389 ----
| non_empty_protocolrefs
{ $$ = get_object_reference ($1); }
end ifobjc
! | typeof '(' expr ')'
! { skip_evaluation--; $$ = TREE_TYPE ($3); }
! | typeof '(' typename ')'
! { skip_evaluation--; $$ = groktypename ($3); }
;
/* typespec_nonreserved_attr does not exist. */
*************** initelt:
*** 1523,1528 ****
--- 1527,1533 ----
if (pedantic)
pedwarn ("obsolete use of designated initializer with `:'"); }
initval
+ {}
| initval
;
*************** classdecl:
*** 2696,2707 ****
--- 2701,2714 ----
{
objc_declare_class ($2);
}
+ ;
aliasdecl:
ALIAS identifier identifier ';'
{
objc_declare_alias ($2, $3);
}
+ ;
classdef:
INTERFACE identifier protocolrefs '{'
diff -Nrc3pad gcc-3.2/gcc/c-parse.y gcc-3.2.1/gcc/c-parse.y
*** gcc-3.2/gcc/c-parse.y Wed Aug 14 09:32:35 2002
--- gcc-3.2.1/gcc/c-parse.y Tue Nov 19 18:13:17 2002
*************** alignof:
*** 488,493 ****
--- 488,497 ----
ALIGNOF { skip_evaluation++; }
;
+ typeof:
+ TYPEOF { skip_evaluation++; }
+ ;
+
cast_expr:
unary_expr
| '(' typename ')' cast_expr %prec UNARY
*************** typespec_nonreserved_nonattr:
*** 1283,1292 ****
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
$$ = lookup_name ($1); }
! | TYPEOF '(' expr ')'
! { $$ = TREE_TYPE ($3); }
! | TYPEOF '(' typename ')'
! { $$ = groktypename ($3); }
;
/* typespec_nonreserved_attr does not exist. */
--- 1287,1296 ----
{ /* For a typedef name, record the meaning, not the name.
In case of `foo foo, bar;'. */
$$ = lookup_name ($1); }
! | typeof '(' expr ')'
! { skip_evaluation--; $$ = TREE_TYPE ($3); }
! | typeof '(' typename ')'
! { skip_evaluation--; $$ = groktypename ($3); }
;
/* typespec_nonreserved_attr does not exist. */
*************** initelt:
*** 1430,1435 ****
--- 1434,1440 ----
if (pedantic)
pedwarn ("obsolete use of designated initializer with `:'"); }
initval
+ {}
| initval
;
diff -Nrc3pad gcc-3.2/gcc/c-tree.h gcc-3.2.1/gcc/c-tree.h
*** gcc-3.2/gcc/c-tree.h Thu Mar 28 18:49:58 2002
--- gcc-3.2.1/gcc/c-tree.h Sun Sep 1 20:11:07 2002
*************** extern int current_function_returns_null
*** 287,297 ****
extern int current_function_returns_abnormally;
- /* Nonzero means the expression being parsed will never be evaluated.
- This is a count, since unevaluated expressions can nest. */
-
- extern int skip_evaluation;
-
/* Nonzero means `$' can be in an identifier. */
extern int dollars_in_ident;
--- 287,292 ----
diff -Nrc3pad gcc-3.2/gcc/c-typeck.c gcc-3.2.1/gcc/c-typeck.c
*** gcc-3.2/gcc/c-typeck.c Fri Mar 22 01:53:39 2002
--- gcc-3.2.1/gcc/c-typeck.c Sun Sep 1 20:11:07 2002
*************** build_external_ref (id, fun)
*** 1493,1499 ****
if (TREE_TYPE (ref) == error_mark_node)
return error_mark_node;
! assemble_external (ref);
TREE_USED (ref) = 1;
if (TREE_CODE (ref) == CONST_DECL)
--- 1493,1500 ----
if (TREE_TYPE (ref) == error_mark_node)
return error_mark_node;
! if (!skip_evaluation)
! assemble_external (ref);
TREE_USED (ref) = 1;
if (TREE_CODE (ref) == CONST_DECL)
diff -Nrc3pad gcc-3.2/gcc/calls.c gcc-3.2.1/gcc/calls.c
*** gcc-3.2/gcc/calls.c Thu Apr 4 23:28:47 2002
--- gcc-3.2.1/gcc/calls.c Fri Nov 8 22:12:37 2002
*************** Software Foundation, 59 Temple Place - S
*** 46,54 ****
--- 46,56 ----
#ifdef PUSH_ROUNDING
+ #ifndef PUSH_ARGS_REVERSED
#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
#define PUSH_ARGS_REVERSED PUSH_ARGS
#endif
+ #endif
#endif
*************** expand_call (exp, target, ignore)
*** 2708,2713 ****
--- 2710,2721 ----
if (pass == 0)
{
argblock = virtual_incoming_args_rtx;
+ argblock
+ #ifdef STACK_GROWS_DOWNWARD
+ = plus_constant (argblock, current_function_pretend_args_size);
+ #else
+ = plus_constant (argblock, -current_function_pretend_args_size);
+ #endif
stored_args_map = sbitmap_alloc (args_size.constant);
sbitmap_zero (stored_args_map);
}
*************** emit_library_call_value_1 (retval, orgfu
*** 3666,3671 ****
--- 3674,3687 ----
#endif
;
+ /* If this was a CONST function, it is now PURE since
+ it now reads memory. */
+ if (flags & ECF_CONST)
+ {
+ flags &= ~ECF_CONST;
+ flags |= ECF_PURE;
+ }
+
if (GET_MODE (val) == MEM && ! must_copy)
slot = val;
else if (must_copy)
*************** store_one_arg (arg, argblock, flags, var
*** 4268,4274 ****
struct arg_data *arg;
rtx argblock;
int flags;
! int variable_size ATTRIBUTE_UNUSED;
int reg_parm_stack_space;
{
tree pval = arg->tree_value;
--- 4284,4290 ----
struct arg_data *arg;
rtx argblock;
int flags;
! int variable_size;
int reg_parm_stack_space;
{
tree pval = arg->tree_value;
*************** store_one_arg (arg, argblock, flags, var
*** 4343,4356 ****
emit_move_insn (arg->save_area, stack_area);
}
}
}
- /* Now that we have saved any slots that will be overwritten by this
- store, mark all slots this store will use. We must do this before
- we actually expand the argument since the expansion itself may
- trigger library calls which might need to use the same stack slot. */
- if (argblock && ! variable_size && arg->stack)
- for (i = lower_bound; i < upper_bound; i++)
- stack_usage_map[i] = 1;
}
/* If this isn't going to be placed on both the stack and in registers,
--- 4359,4380 ----
emit_move_insn (arg->save_area, stack_area);
}
}
+
+ /* Now that we have saved any slots that will be overwritten
+ by this store, mark all slots this store will use. We
+ must do this before we actually expand the argument since
+ the expansion itself may trigger library calls which might
+ need to use the same stack slot. We only do it if we can't
+ pass all arguments to a library call in registers. */
+ if (arg->partial)
+ {
+ for (i = lower_bound; i < upper_bound; i++)
+ stack_usage_map[i] = 1;
+
+ /* Set it so that we don't do it again. */
+ variable_size = 1;
+ }
}
}
/* If this isn't going to be placed on both the stack and in registers,
*************** store_one_arg (arg, argblock, flags, var
*** 4491,4497 ****
emit_push_insn for BLKmode is careful to avoid it. */
excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
+ partial * UNITS_PER_WORD);
! size_rtx = expr_size (pval);
}
if ((flags & ECF_SIBCALL) && GET_CODE (arg->value) == MEM)
--- 4515,4522 ----
emit_push_insn for BLKmode is careful to avoid it. */
excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
+ partial * UNITS_PER_WORD);
! size_rtx = expand_expr (size_in_bytes (TREE_TYPE (pval)),
! NULL_RTX, TYPE_MODE (sizetype), 0);
}
if ((flags & ECF_SIBCALL) && GET_CODE (arg->value) == MEM)
*************** store_one_arg (arg, argblock, flags, var
*** 4577,4582 ****
--- 4602,4612 ----
arg->value = arg->stack_slot;
}
+ if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL)
+ && argblock && ! variable_size && arg->stack)
+ for (i = lower_bound; i < upper_bound; i++)
+ stack_usage_map[i] = 1;
+
/* Once we have pushed something, pops can't safely
be deferred during the rest of the arguments. */
NO_DEFER_POP;
diff -Nrc3pad gcc-3.2/gcc/cfganal.c gcc-3.2.1/gcc/cfganal.c
*** gcc-3.2/gcc/cfganal.c Fri Feb 8 00:35:15 2002
--- gcc-3.2.1/gcc/cfganal.c Thu Nov 7 00:22:48 2002
*************** static void flow_dfs_compute_reverse_fin
*** 56,62 ****
--- 56,86 ----
static void remove_fake_successors PARAMS ((basic_block));
static bool need_fake_edge_p PARAMS ((rtx));
static bool keep_with_call_p PARAMS ((rtx));
+ static bool flow_active_insn_p PARAMS ((rtx));
+ /* Like active_insn_p, except keep the return value clobber around
+ even after reload. */
+
+ static bool
+ flow_active_insn_p (insn)
+ rtx insn;
+ {
+ if (active_insn_p (insn))
+ return true;
+
+ /* A clobber of the function return value exists for buggy
+ programs that fail to return a value. It's effect is to
+ keep the return value from being live across the entire
+ function. If we allow it to be skipped, we introduce the
+ possibility for register livetime aborts. */
+ if (GET_CODE (PATTERN (insn)) == CLOBBER
+ && GET_CODE (XEXP (PATTERN (insn), 0)) == REG
+ && REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))
+ return true;
+
+ return false;
+ }
+
/* Return true if the block has no effect and only forwards control flow to
its single destination. */
*************** forwarder_block_p (bb)
*** 71,82 ****
return false;
for (insn = bb->head; insn != bb->end; insn = NEXT_INSN (insn))
! if (INSN_P (insn) && active_insn_p (insn))
return false;
return (!INSN_P (insn)
|| (GET_CODE (insn) == JUMP_INSN && simplejump_p (insn))
! || !active_insn_p (insn));
}
/* Return nonzero if we can reach target from src by falling through. */
--- 95,106 ----
return false;
for (insn = bb->head; insn != bb->end; insn = NEXT_INSN (insn))
! if (INSN_P (insn) && flow_active_insn_p (insn))
return false;
return (!INSN_P (insn)
|| (GET_CODE (insn) == JUMP_INSN && simplejump_p (insn))
! || !flow_active_insn_p (insn));
}
/* Return nonzero if we can reach target from src by falling through. */
diff -Nrc3pad gcc-3.2/gcc/cfgcleanup.c gcc-3.2.1/gcc/cfgcleanup.c
*** gcc-3.2/gcc/cfgcleanup.c Mon Jun 10 21:39:45 2002
--- gcc-3.2.1/gcc/cfgcleanup.c Sat Nov 16 01:55:47 2002
*************** try_optimize_cfg (mode)
*** 1638,1644 ****
/* If the jump insn has side effects,
we can't kill the edge. */
&& (GET_CODE (b->end) != JUMP_INSN
! || onlyjump_p (b->end))
&& merge_blocks (s, b, c, mode))
changed_here = true;
--- 1638,1645 ----
/* If the jump insn has side effects,
we can't kill the edge. */
&& (GET_CODE (b->end) != JUMP_INSN
! || (onlyjump_p (b->end)
! && !tablejump_p (b->end)))
&& merge_blocks (s, b, c, mode))
changed_here = true;
diff -Nrc3pad gcc-3.2/gcc/cfgrtl.c gcc-3.2.1/gcc/cfgrtl.c
*** gcc-3.2/gcc/cfgrtl.c Mon Jul 15 16:19:38 2002
--- gcc-3.2.1/gcc/cfgrtl.c Mon Nov 11 03:35:59 2002
*************** try_redirect_by_replacing_jump (e, targe
*** 665,670 ****
--- 665,671 ----
edge tmp;
rtx set;
int fallthru = 0;
+ rtx table;
/* Verify that all targets will be TARGET. */
for (tmp = src->succ; tmp; tmp = tmp->succ_next)
*************** try_redirect_by_replacing_jump (e, targe
*** 674,679 ****
--- 675,687 ----
if (tmp || !onlyjump_p (insn))
return false;
+ if (reload_completed && JUMP_LABEL (insn)
+ && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX
+ && GET_CODE (table) == JUMP_INSN
+ && (GET_CODE (PATTERN (table)) == ADDR_VEC
+ || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
+ return false;
+
/* Avoid removing branch with side effects. */
set = single_set (insn);
if (!set || side_effects_p (set))
diff -Nrc3pad gcc-3.2/gcc/collect2.c gcc-3.2.1/gcc/collect2.c
*** gcc-3.2/gcc/collect2.c Tue Feb 5 16:33:31 2002
--- gcc-3.2.1/gcc/collect2.c Fri Aug 16 18:03:06 2002
*************** is_ctor_dtor (s)
*** 577,582 ****
--- 577,591 ----
const char *orig_s = s;
static const struct names special[] = {
+ #ifndef NO_DOLLAR_IN_LABEL
+ { "GLOBAL__I$", sizeof ("GLOBAL__I$")-1, 1, 0 },
+ { "GLOBAL__D$", sizeof ("GLOBAL__D$")-1, 2, 0 },
+ #else
+ #ifndef NO_DOT_IN_LABEL
+ { "GLOBAL__I.", sizeof ("GLOBAL__I.")-1, 1, 0 },
+ { "GLOBAL__D.", sizeof ("GLOBAL__D.")-1, 2, 0 },
+ #endif /* NO_DOT_IN_LABEL */
+ #endif /* NO_DOLLAR_IN_LABEL */
{ "GLOBAL__I_", sizeof ("GLOBAL__I_")-1, 1, 0 },
{ "GLOBAL__D_", sizeof ("GLOBAL__D_")-1, 2, 0 },
{ "GLOBAL__F_", sizeof ("GLOBAL__F_")-1, 5, 0 },
diff -Nrc3pad gcc-3.2/gcc/config/alpha/alpha.md gcc-3.2.1/gcc/config/alpha/alpha.md
*** gcc-3.2/gcc/config/alpha/alpha.md Wed Apr 10 05:14:55 2002
--- gcc-3.2.1/gcc/config/alpha/alpha.md Sun Sep 8 05:30:19 2002
*************** fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi
*** 2374,2380 ****
(define_expand "abstf2"
[(parallel [(set (match_operand:TF 0 "register_operand" "")
! (neg:TF (match_operand:TF 1 "reg_or_fp0_operand" "")))
(use (match_dup 2))])]
"TARGET_HAS_XFLOATING_LIBS"
{
--- 2374,2380 ----
(define_expand "abstf2"
[(parallel [(set (match_operand:TF 0 "register_operand" "")
! (abs:TF (match_operand:TF 1 "reg_or_fp0_operand" "")))
(use (match_dup 2))])]
"TARGET_HAS_XFLOATING_LIBS"
{
diff -Nrc3pad gcc-3.2/gcc/config/arm/arm.c gcc-3.2.1/gcc/config/arm/arm.c
*** gcc-3.2/gcc/config/arm/arm.c Sun Jul 21 12:09:02 2002
--- gcc-3.2.1/gcc/config/arm/arm.c Fri Nov 1 14:40:23 2002
*************** use_return_insn (iscond)
*** 890,895 ****
--- 890,896 ----
{
int regno;
unsigned int func_type;
+ unsigned long saved_int_regs;
/* Never use a return instruction before reload has run. */
if (!reload_completed)
*************** use_return_insn (iscond)
*** 912,934 ****
&& !frame_pointer_needed))
return 0;
/* Can't be done if interworking with Thumb, and any registers have been
! stacked. Similarly, on StrongARM, conditional returns are expensive
! if they aren't taken and registers have been stacked. */
! if (iscond && arm_is_strong && frame_pointer_needed)
return 0;
!
! if ((iscond && arm_is_strong)
! || TARGET_INTERWORK)
{
! for (regno = 0; regno <= LAST_ARM_REGNUM; regno++)
! if (regs_ever_live[regno] && !call_used_regs[regno])
! return 0;
if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
return 0;
}
!
/* Can't be done if any of the FPU regs are pushed,
since this also requires an insn. */
if (TARGET_HARD_FLOAT)
--- 913,943 ----
&& !frame_pointer_needed))
return 0;
+ saved_int_regs = arm_compute_save_reg_mask ();
+
/* Can't be done if interworking with Thumb, and any registers have been
! stacked. */
! if (TARGET_INTERWORK && saved_int_regs != 0)
return 0;
!
! /* On StrongARM, conditional returns are expensive if they aren't
! taken and multiple registers have been stacked. */
! if (iscond && arm_is_strong)
{
! /* Conditional return when just the LR is stored is a simple
! conditional-load instruction, that's not expensive. */
! if (saved_int_regs != 0 && saved_int_regs != (1 << LR_REGNUM))
! return 0;
if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
return 0;
}
!
! /* If there are saved registers but the LR isn't saved, then we need
! two instructions for the return. */
! if (saved_int_regs && !(saved_int_regs & (1 << LR_REGNUM)))
! return 0;
!
/* Can't be done if any of the FPU regs are pushed,
since this also requires an insn. */
if (TARGET_HARD_FLOAT)
diff -Nrc3pad gcc-3.2/gcc/config/arm/arm.h gcc-3.2.1/gcc/config/arm/arm.h
*** gcc-3.2/gcc/config/arm/arm.h Wed Mar 13 05:35:51 2002
--- gcc-3.2.1/gcc/config/arm/arm.h Mon Sep 30 11:54:00 2002
*************** enum reg_class
*** 1093,1106 ****
/* The class value for index registers, and the one for base regs. */
#define INDEX_REG_CLASS (TARGET_THUMB ? LO_REGS : GENERAL_REGS)
! #define BASE_REG_CLASS (TARGET_THUMB ? BASE_REGS : GENERAL_REGS)
! /* For the Thumb the high registers cannot be used as base
! registers when addressing quanitities in QI or HI mode. */
#define MODE_BASE_REG_CLASS(MODE) \
! (TARGET_ARM ? BASE_REGS : \
! (((MODE) == QImode || (MODE) == HImode || (MODE) == VOIDmode) \
! ? LO_REGS : BASE_REGS))
/* When SMALL_REGISTER_CLASSES is nonzero, the compiler allows
registers explicitly used in the rtl to be used as spill registers
--- 1093,1108 ----
/* The class value for index registers, and the one for base regs. */
#define INDEX_REG_CLASS (TARGET_THUMB ? LO_REGS : GENERAL_REGS)
! #define BASE_REG_CLASS (TARGET_THUMB ? LO_REGS : GENERAL_REGS)
! /* For the Thumb the high registers cannot be used as base registers
! when addressing quanitities in QI or HI mode; if we don't know the
! mode, then we must be conservative. After reload we must also be
! conservative, since we can't support SP+reg addressing, and we
! can't fix up any bad substitutions. */
#define MODE_BASE_REG_CLASS(MODE) \
! (TARGET_ARM ? GENERAL_REGS : \
! (((MODE) == SImode && !reload_completed) ? BASE_REGS : LO_REGS))
/* When SMALL_REGISTER_CLASSES is nonzero, the compiler allows
registers explicitly used in the rtl to be used as spill registers
diff -Nrc3pad gcc-3.2/gcc/config/arm/arm.md gcc-3.2.1/gcc/config/arm/arm.md
*** gcc-3.2/gcc/config/arm/arm.md Sun Jul 21 12:09:03 2002
--- gcc-3.2.1/gcc/config/arm/arm.md Fri Sep 20 14:01:24 2002
***************
*** 1837,1843 ****
(match_operand:SI 1 "s_register_operand" "r")
(match_operand:SI 2 "const_int_operand" "n")
(match_operand:SI 3 "const_int_operand" "n"))
! (const_int 0)))]
"TARGET_ARM
&& (INTVAL (operands[3]) >= 0 && INTVAL (operands[3]) < 32
&& INTVAL (operands[2]) > 0
--- 1837,1844 ----
(match_operand:SI 1 "s_register_operand" "r")
(match_operand:SI 2 "const_int_operand" "n")
(match_operand:SI 3 "const_int_operand" "n"))
! (const_int 0)))
! (clobber (reg:CC CC_REGNUM))]
"TARGET_ARM
&& (INTVAL (operands[3]) >= 0 && INTVAL (operands[3]) < 32
&& INTVAL (operands[2]) > 0
***************
*** 8947,8953 ****
[(set (match_operand:SI 0 "s_register_operand" "=r")
(sign_extract:SI (match_operand:SI 1 "s_register_operand" "r")
(const_int 1)
! (match_operand:SI 2 "const_int_operand" "n")))]
"TARGET_ARM"
"*
operands[2] = GEN_INT (1 << INTVAL (operands[2]));
--- 8948,8955 ----
[(set (match_operand:SI 0 "s_register_operand" "=r")
(sign_extract:SI (match_operand:SI 1 "s_register_operand" "r")
(const_int 1)
! (match_operand:SI 2 "const_int_operand" "n")))
! (clobber (reg:CC CC_REGNUM))]
"TARGET_ARM"
"*
operands[2] = GEN_INT (1 << INTVAL (operands[2]));
***************
*** 8963,8969 ****
(not:SI
(sign_extract:SI (match_operand:SI 1 "s_register_operand" "r")
(const_int 1)
! (match_operand:SI 2 "const_int_operand" "n"))))]
"TARGET_ARM"
"*
operands[2] = GEN_INT (1 << INTVAL (operands[2]));
--- 8965,8972 ----
(not:SI
(sign_extract:SI (match_operand:SI 1 "s_register_operand" "r")
(const_int 1)
! (match_operand:SI 2 "const_int_operand" "n"))))
! (clobber (reg:CC CC_REGNUM))]
"TARGET_ARM"
"*
operands[2] = GEN_INT (1 << INTVAL (operands[2]));
diff -Nrc3pad gcc-3.2/gcc/config/avr/avr.md gcc-3.2.1/gcc/config/avr/avr.md
*** gcc-3.2/gcc/config/avr/avr.md Thu Mar 21 22:14:07 2002
--- gcc-3.2.1/gcc/config/avr/avr.md Sun Sep 1 18:46:20 2002
***************
*** 1,7 ****
;; -*- Mode: Scheme -*-
;; Machine description for GNU compiler,
;; for ATMEL AVR micro controllers.
! ;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
;; Contributed by Denis Chertykov (denisc@overta.ru)
;; This file is part of GNU CC.
--- 1,7 ----
;; -*- Mode: Scheme -*-
;; Machine description for GNU compiler,
;; for ATMEL AVR micro controllers.
! ;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
;; Contributed by Denis Chertykov (denisc@overta.ru)
;; This file is part of GNU CC.
***************
*** 2250,2255 ****
--- 2250,2256 ----
&& test_hard_reg_class (LD_REGS, operands[1]))"
"*
{
+ CC_STATUS_INIT;
if (test_hard_reg_class (ADDW_REGS, operands[0]))
output_asm_insn (AS2 (sbiw,%0,1) CR_TAB
AS2 (sbc,%C0,__zero_reg__) CR_TAB
***************
*** 2288,2293 ****
--- 2289,2295 ----
&& test_hard_reg_class (LD_REGS, operands[1]))"
"*
{
+ CC_STATUS_INIT;
if (test_hard_reg_class (ADDW_REGS, operands[0]))
output_asm_insn (AS2 (sbiw,%0,1), operands);
else
***************
*** 2319,2324 ****
--- 2321,2329 ----
"test_hard_reg_class (LD_REGS, operands[0])"
"*
{
+ CC_STATUS_INIT;
+ cc_status.value1 = operands[0];
+ cc_status.flags |= CC_OVERFLOW_UNUSABLE;
output_asm_insn (AS2 (subi,%A0,1), operands);
switch (avr_jump_mode (operands[1],insn))
{
diff -Nrc3pad gcc-3.2/gcc/config/i386/i386.c gcc-3.2.1/gcc/config/i386/i386.c
*** gcc-3.2/gcc/config/i386/i386.c Wed Aug 7 18:10:57 2002
--- gcc-3.2.1/gcc/config/i386/i386.c Thu Oct 31 18:39:32 2002
*************** struct processor_costs athlon_cost = {
*** 284,308 ****
8, /* "large" insn */
9, /* MOVE_RATIO */
4, /* cost for loading QImode using movzbl */
! {4, 5, 4}, /* cost of loading integer registers
in QImode, HImode and SImode.
Relative to reg-reg move (2). */
! {2, 3, 2}, /* cost of storing integer registers */
4, /* cost of reg,reg fld/fst */
! {6, 6, 20}, /* cost of loading fp registers
in SFmode, DFmode and XFmode */
! {4, 4, 16}, /* cost of loading integer registers */
2, /* cost of moving MMX register */
! {2, 2}, /* cost of loading MMX registers
in SImode and DImode */
! {2, 2}, /* cost of storing MMX registers
in SImode and DImode */
2, /* cost of moving SSE register */
! {2, 2, 8}, /* cost of loading SSE registers
in SImode, DImode and TImode */
! {2, 2, 8}, /* cost of storing SSE registers
in SImode, DImode and TImode */
! 6, /* MMX or SSE register to integer */
64, /* size of prefetch block */
6, /* number of parallel prefetches */
};
--- 284,308 ----
8, /* "large" insn */
9, /* MOVE_RATIO */
4, /* cost for loading QImode using movzbl */
! {3, 4, 3}, /* cost of loading integer registers
in QImode, HImode and SImode.
Relative to reg-reg move (2). */
! {3, 4, 3}, /* cost of storing integer registers */
4, /* cost of reg,reg fld/fst */
! {4, 4, 12}, /* cost of loading fp registers
in SFmode, DFmode and XFmode */
! {6, 6, 8}, /* cost of loading integer registers */
2, /* cost of moving MMX register */
! {4, 4}, /* cost of loading MMX registers
in SImode and DImode */
! {4, 4}, /* cost of storing MMX registers
in SImode and DImode */
2, /* cost of moving SSE register */
! {4, 4, 6}, /* cost of loading SSE registers
in SImode, DImode and TImode */
! {4, 4, 5}, /* cost of storing SSE registers
in SImode, DImode and TImode */
! 5, /* MMX or SSE register to integer */
64, /* size of prefetch block */
6, /* number of parallel prefetches */
};
*************** override_options ()
*** 906,911 ****
--- 906,932 ----
int const pta_size = sizeof (processor_alias_table) / sizeof (struct pta);
+ /* Set the default values for switches whose default depends on TARGET_64BIT
+ in case they weren't overwriten by command line options. */
+ if (TARGET_64BIT)
+ {
+ if (flag_omit_frame_pointer == 2)
+ flag_omit_frame_pointer = 1;
+ if (flag_asynchronous_unwind_tables == 2)
+ flag_asynchronous_unwind_tables = 1;
+ if (flag_pcc_struct_return == 2)
+ flag_pcc_struct_return = 0;
+ }
+ else
+ {
+ if (flag_omit_frame_pointer == 2)
+ flag_omit_frame_pointer = 0;
+ if (flag_asynchronous_unwind_tables == 2)
+ flag_asynchronous_unwind_tables = 0;
+ if (flag_pcc_struct_return == 2)
+ flag_pcc_struct_return = 1;
+ }
+
#ifdef SUBTARGET_OVERRIDE_OPTIONS
SUBTARGET_OVERRIDE_OPTIONS;
#endif
*************** optimization_options (level, size)
*** 1213,1225 ****
if (level > 1)
flag_schedule_insns = 0;
#endif
! if (TARGET_64BIT && optimize >= 1)
! flag_omit_frame_pointer = 1;
! if (TARGET_64BIT)
! {
! flag_pcc_struct_return = 0;
! flag_asynchronous_unwind_tables = 1;
! }
}
/* Table of valid machine attributes. */
--- 1234,1247 ----
if (level > 1)
flag_schedule_insns = 0;
#endif
! /* The default values of these switches depend on the TARGET_64BIT
! that is not known at this moment. Mark these values with 2 and
! let user the to override these. In case there is no command line option
! specifying them, we will set the defaults in override_options. */
! if (optimize >= 1)
! flag_omit_frame_pointer = 2;
! flag_pcc_struct_return = 2;
! flag_asynchronous_unwind_tables = 2;
}
/* Table of valid machine attributes. */
*************** classify_argument (mode, type, classes,
*** 1649,1655 ****
{
int bytes =
(mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode);
! int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
if (type && AGGREGATE_TYPE_P (type))
{
--- 1671,1681 ----
{
int bytes =
(mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode);
! int words = (bytes + (bit_offset % 64) / 8 + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
!
! /* Variable sized structures are always passed on the stack. */
! if (mode == BLKmode && type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
! return 0;
if (type && AGGREGATE_TYPE_P (type))
{
*************** q_regs_operand (op, mode)
*** 3206,3212 ****
return 0;
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
! return QI_REG_P (op);
}
/* Return true if op is a NON_Q_REGS class register. */
--- 3232,3238 ----
return 0;
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
! return ANY_QI_REG_P (op);
}
/* Return true if op is a NON_Q_REGS class register. */
*************** print_operand_address (file, addr)
*** 6123,6129 ****
int scale;
if (! ix86_decompose_address (addr, &parts))
! abort ();
base = parts.base;
index = parts.index;
--- 6149,6158 ----
int scale;
if (! ix86_decompose_address (addr, &parts))
! {
! output_operand_lossage ("Wrong address expression or operand constraint");
! return;
! }
base = parts.base;
index = parts.index;
*************** ix86_expand_vector_move (mode, operands)
*** 6855,6862 ****
/* Make operand1 a register if it isn't already. */
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], mode)
! && !register_operand (operands[1], mode)
! && operands[1] != CONST0_RTX (mode))
{
rtx temp = force_reg (GET_MODE (operands[1]), operands[1]);
emit_move_insn (operands[0], temp);
--- 6884,6890 ----
/* Make operand1 a register if it isn't already. */
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], mode)
! && !register_operand (operands[1], mode))
{
rtx temp = force_reg (GET_MODE (operands[1]), operands[1]);
emit_move_insn (operands[0], temp);
*************** ix86_expand_int_movcc (operands)
*** 8237,8243 ****
clob = gen_rtx_CLOBBER (VOIDmode, clob);
tmp = gen_rtx_SET (VOIDmode, out, tmp);
! tmp = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, tmp, clob));
emit_insn (tmp);
}
else
--- 8265,8271 ----
clob = gen_rtx_CLOBBER (VOIDmode, clob);
tmp = gen_rtx_SET (VOIDmode, out, tmp);
! tmp = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, copy_rtx (tmp), clob));
emit_insn (tmp);
}
else
*************** static const struct builtin_description
*** 10954,10967 ****
{ MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 },
{ MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 },
{ MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 },
- { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgtss", IX86_BUILTIN_CMPGTSS, LT, 1 },
- { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgess", IX86_BUILTIN_CMPGESS, LE, 1 },
{ MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 },
{ MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 },
{ MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 },
{ MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 },
- { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngtss", IX86_BUILTIN_CMPNGTSS, LT, 1 },
- { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngess", IX86_BUILTIN_CMPNGESS, LE, 1 },
{ MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 },
{ MASK_SSE, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 },
--- 10982,10991 ----
*************** ix86_register_move_cost (mode, class1, c
*** 12355,12371 ****
enum reg_class class1, class2;
{
/* In case we require secondary memory, compute cost of the store followed
! by load. In case of copying from general_purpose_register we may emit
! multiple stores followed by single load causing memory size mismatch
! stall. Count this as arbitarily high cost of 20. */
if (ix86_secondary_memory_needed (class1, class2, mode, 0))
{
! int add_cost = 0;
if (CLASS_MAX_NREGS (class1, mode) > CLASS_MAX_NREGS (class2, mode))
! add_cost = 20;
! return (MEMORY_MOVE_COST (mode, class1, 0)
! + MEMORY_MOVE_COST (mode, class2, 1) + add_cost);
}
/* Moves between SSE/MMX and integer unit are expensive. */
if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2)
|| SSE_CLASS_P (class1) != SSE_CLASS_P (class2))
--- 12379,12411 ----
enum reg_class class1, class2;
{
/* In case we require secondary memory, compute cost of the store followed
! by load. In order to avoid bad register allocation choices, we need
! for this to be *at least* as high as the symmetric MEMORY_MOVE_COST. */
!
if (ix86_secondary_memory_needed (class1, class2, mode, 0))
{
! int cost = 1;
!
! cost += MAX (MEMORY_MOVE_COST (mode, class1, 0),
! MEMORY_MOVE_COST (mode, class1, 1));
! cost += MAX (MEMORY_MOVE_COST (mode, class2, 0),
! MEMORY_MOVE_COST (mode, class2, 1));
!
! /* In case of copying from general_purpose_register we may emit multiple
! stores followed by single load causing memory size mismatch stall.
! Count this as arbitarily high cost of 20. */
if (CLASS_MAX_NREGS (class1, mode) > CLASS_MAX_NREGS (class2, mode))
! cost += 20;
!
! /* In the case of FP/MMX moves, the registers actually overlap, and we
! have to switch modes in order to treat them differently. */
! if ((MMX_CLASS_P (class1) && MAYBE_FLOAT_CLASS_P (class2))
! || (MMX_CLASS_P (class2) && MAYBE_FLOAT_CLASS_P (class1)))
! cost += 20;
!
! return cost;
}
+
/* Moves between SSE/MMX and integer unit are expensive. */
if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2)
|| SSE_CLASS_P (class1) != SSE_CLASS_P (class2))
diff -Nrc3pad gcc-3.2/gcc/config/i386/i386.h gcc-3.2.1/gcc/config/i386/i386.h
*** gcc-3.2/gcc/config/i386/i386.h Mon Jul 15 06:54:36 2002
--- gcc-3.2.1/gcc/config/i386/i386.h Thu Nov 7 17:46:18 2002
*************** extern int ix86_arch;
*** 584,592 ****
%{march=pentium-mmx:-D__i586 -D__i586__ -D__pentium -D__pentium__ \
-D__pentium__mmx__ \
%{!mcpu*:-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__}}\
! %{march=pentiumpro|march=i686:-D__i686 -D__i686__ \
-D__pentiumpro -D__pentiumpro__ \
%{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}\
%{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}\
%{march=k6-2:-D__k6 -D__k6__ -D__k6_2__ \
%{!mcpu*:-D__tune_k6__ -D__tune_k6_2__ }}\
--- 584,596 ----
%{march=pentium-mmx:-D__i586 -D__i586__ -D__pentium -D__pentium__ \
-D__pentium__mmx__ \
%{!mcpu*:-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__}}\
! %{march=pentiumpro|march=i686|march=pentium2|march=pentium3:-D__i686 -D__i686__ \
-D__pentiumpro -D__pentiumpro__ \
%{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}\
+ %{march=march=pentium2|march=pentium3: -D__pentium2 -D__pentium2__\
+ %{!mcpu*:-D__tune_pentium2__ }}\
+ %{march=pentium3: -D__pentium3 -D__pentium3__\
+ %{!mcpu*:-D__tune_pentium3__ }}\
%{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}\
%{march=k6-2:-D__k6 -D__k6__ -D__k6_2__ \
%{!mcpu*:-D__tune_k6__ -D__tune_k6_2__ }}\
*************** extern int ix86_arch;
*** 601,607 ****
%{m386|mcpu=i386:-D__tune_i386__ }\
%{m486|mcpu=i486:-D__tune_i486__ }\
%{mpentium|mcpu=pentium|mcpu=i586|mcpu=pentium-mmx:-D__tune_i586__ -D__tune_pentium__ }\
! %{mpentiumpro|mcpu=pentiumpro|mcpu=i686|cpu=pentium2|cpu=pentium3:-D__tune_i686__ \
-D__tune_pentiumpro__ }\
%{mcpu=k6|mcpu=k6-2|mcpu=k6-3:-D__tune_k6__ }\
%{mcpu=athlon|mcpu=athlon-tbird|mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\
--- 605,611 ----
%{m386|mcpu=i386:-D__tune_i386__ }\
%{m486|mcpu=i486:-D__tune_i486__ }\
%{mpentium|mcpu=pentium|mcpu=i586|mcpu=pentium-mmx:-D__tune_i586__ -D__tune_pentium__ }\
! %{mpentiumpro|mcpu=pentiumpro|mcpu=i686|mcpu=pentium2|mcpu=pentium3:-D__tune_i686__ \
-D__tune_pentiumpro__ }\
%{mcpu=k6|mcpu=k6-2|mcpu=k6-3:-D__tune_k6__ }\
%{mcpu=athlon|mcpu=athlon-tbird|mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\
*************** extern int ix86_arch;
*** 609,625 ****
%{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\
-D__tune_athlon_sse__ }\
%{mcpu=pentium4:-D__tune_pentium4__ }\
! %{march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4:\
-D__SSE__ }\
%{march=pentium-mmx|march=k6|march=k6-2|march=k6-3\
|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
! |march=athlon-mp|march=pentium2|march=pentium3|march=pentium4: -D__MMX__ }\
%{march=k6-2|march=k6-3\
|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
! |march=athlon-mp: -D__3dNOW__ }\
%{march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
|march=athlon-mp: -D__3dNOW_A__ }\
! %{march=pentium4: -D__SSE2__ }\
%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}"
#ifndef CPP_CPU_SPEC
--- 613,629 ----
%{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\
-D__tune_athlon_sse__ }\
%{mcpu=pentium4:-D__tune_pentium4__ }\
! %{march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4|msse|msse2:\
-D__SSE__ }\
%{march=pentium-mmx|march=k6|march=k6-2|march=k6-3\
|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
! |march=athlon-mp|march=pentium2|march=pentium3|march=pentium4|mmx|msse|m3dnow: -D__MMX__ }\
%{march=k6-2|march=k6-3\
|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
! |march=athlon-mp|m3dnow: -D__3dNOW__ }\
%{march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
|march=athlon-mp: -D__3dNOW_A__ }\
! %{march=pentium4|msse2: -D__SSE2__ }\
%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}"
#ifndef CPP_CPU_SPEC
*************** extern int ix86_arch;
*** 756,763 ****
#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \
(ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)
! /* Allocation boundary for the code of a function. */
! #define FUNCTION_BOUNDARY 16
/* Alignment of field after `int : 0' in a structure. */
--- 760,770 ----
#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \
(ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)
! /* Minimum allocation boundary for the code of a function. */
! #define FUNCTION_BOUNDARY 8
!
! /* C++ stores the virtual bit in the lowest bit of function pointers. */
! #define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn
/* Alignment of field after `int : 0' in a structure. */
*************** enum reg_class
*** 1581,1586 ****
--- 1588,1597 ----
#define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS)
+ /* We want the stack and args grow in opposite directions, even if
+ PUSH_ARGS is 0. */
+ #define PUSH_ARGS_REVERSED 1
+
/* Offset of first parameter from the argument pointer register value. */
#define FIRST_PARM_OFFSET(FNDECL) 0
*************** enum ix86_builtins
*** 2053,2065 ****
IX86_BUILTIN_CMPEQSS,
IX86_BUILTIN_CMPLTSS,
IX86_BUILTIN_CMPLESS,
- IX86_BUILTIN_CMPGTSS,
- IX86_BUILTIN_CMPGESS,
IX86_BUILTIN_CMPNEQSS,
IX86_BUILTIN_CMPNLTSS,
IX86_BUILTIN_CMPNLESS,
- IX86_BUILTIN_CMPNGTSS,
- IX86_BUILTIN_CMPNGESS,
IX86_BUILTIN_CMPORDSS,
IX86_BUILTIN_CMPUNORDSS,
IX86_BUILTIN_CMPNESS,
--- 2064,2072 ----
*************** extern int const svr4_dbx_register_map[F
*** 2871,2883 ****
It need not be very fast code. */
#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
! asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)])
/* This is how to output an insn to pop a register from the stack.
It need not be very fast code. */
#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
! asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)])
/* This is how to output an element of a case-vector that is absolute. */
--- 2878,2902 ----
It need not be very fast code. */
#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
! do { \
! if (TARGET_64BIT) \
! asm_fprintf ((FILE), "\tpush{q}\t%%r%s\n", \
! reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \
! else \
! asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]); \
! } while (0)
/* This is how to output an insn to pop a register from the stack.
It need not be very fast code. */
#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
! do { \
! if (TARGET_64BIT) \
! asm_fprintf ((FILE), "\tpop{q}\t%%r%s\n", \
! reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \
! else \
! asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]); \
! } while (0)
/* This is how to output an element of a case-vector that is absolute. */
diff -Nrc3pad gcc-3.2/gcc/config/i386/i386.md gcc-3.2.1/gcc/config/i386/i386.md
*** gcc-3.2/gcc/config/i386/i386.md Mon Jul 15 06:54:36 2002
--- gcc-3.2.1/gcc/config/i386/i386.md Thu Oct 24 17:11:54 2002
***************
*** 5311,5317 ****
(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0")
(match_operand:DI 2 "general_operand" "roiF,riF")))
(clobber (reg:CC 17))]
! "!TARGET_64BIT"
"#")
(define_split
--- 5311,5317 ----
(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0")
(match_operand:DI 2 "general_operand" "roiF,riF")))
(clobber (reg:CC 17))]
! "!TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)"
"#")
(define_split
***************
*** 6940,6946 ****
(minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0")
(match_operand:DI 2 "general_operand" "roiF,riF")))
(clobber (reg:CC 17))]
! "!TARGET_64BIT"
"#")
(define_split
--- 6940,6946 ----
(minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0")
(match_operand:DI 2 "general_operand" "roiF,riF")))
(clobber (reg:CC 17))]
! "!TARGET_64BIT && ix86_binary_operator_ok (MINUS, DImode, operands)"
"#")
(define_split
***************
*** 19783,19789 ****
[(set_attr "type" "mmx")])
(define_expand "prefetch"
! [(prefetch (match_operand:SI 0 "address_operand" "")
(match_operand:SI 1 "const_int_operand" "")
(match_operand:SI 2 "const_int_operand" ""))]
"TARGET_PREFETCH_SSE || TARGET_3DNOW"
--- 19783,19789 ----
[(set_attr "type" "mmx")])
(define_expand "prefetch"
! [(prefetch (match_operand 0 "address_operand" "")
(match_operand:SI 1 "const_int_operand" "")
(match_operand:SI 2 "const_int_operand" ""))]
"TARGET_PREFETCH_SSE || TARGET_3DNOW"
***************
*** 19795,19800 ****
--- 19795,19802 ----
abort ();
if (locality < 0 || locality > 3)
abort ();
+ if (GET_MODE (operands[0]) != Pmode && GET_MODE (operands[0]) != VOIDmode)
+ abort ();
/* Use 3dNOW prefetch in case we are asking for write prefetch not
suported by SSE counterpart or the SSE prefetch is not available
***************
*** 19810,19816 ****
[(prefetch (match_operand:SI 0 "address_operand" "p")
(const_int 0)
(match_operand:SI 1 "const_int_operand" ""))]
! "TARGET_PREFETCH_SSE"
{
static const char * const patterns[4] = {
"prefetchnta\t%a0", "prefetcht2\t%a0", "prefetcht1\t%a0", "prefetcht0\t%a0"
--- 19812,19837 ----
[(prefetch (match_operand:SI 0 "address_operand" "p")
(const_int 0)
(match_operand:SI 1 "const_int_operand" ""))]
! "TARGET_PREFETCH_SSE && !TARGET_64BIT"
! {
! static const char * const patterns[4] = {
! "prefetchnta\t%a0", "prefetcht2\t%a0", "prefetcht1\t%a0", "prefetcht0\t%a0"
! };
!
! int locality = INTVAL (operands[1]);
! if (locality < 0 || locality > 3)
! abort ();
!
! return patterns[locality];
! }
! [(set_attr "type" "sse")
! (set_attr "memory" "none")])
!
! (define_insn "*prefetch_sse_rex"
! [(prefetch (match_operand:DI 0 "address_operand" "p")
! (const_int 0)
! (match_operand:SI 1 "const_int_operand" ""))]
! "TARGET_PREFETCH_SSE && TARGET_64BIT"
{
static const char * const patterns[4] = {
"prefetchnta\t%a0", "prefetcht2\t%a0", "prefetcht1\t%a0", "prefetcht0\t%a0"
***************
*** 19828,19834 ****
[(prefetch (match_operand:SI 0 "address_operand" "p")
(match_operand:SI 1 "const_int_operand" "n")
(const_int 3))]
! "TARGET_3DNOW"
{
if (INTVAL (operands[1]) == 0)
return "prefetch\t%a0";
--- 19849,19869 ----
[(prefetch (match_operand:SI 0 "address_operand" "p")
(match_operand:SI 1 "const_int_operand" "n")
(const_int 3))]
! "TARGET_3DNOW && !TARGET_64BIT"
! {
! if (INTVAL (operands[1]) == 0)
! return "prefetch\t%a0";
! else
! return "prefetchw\t%a0";
! }
! [(set_attr "type" "mmx")
! (set_attr "memory" "none")])
!
! (define_insn "*prefetch_3dnow_rex"
! [(prefetch (match_operand:DI 0 "address_operand" "p")
! (match_operand:SI 1 "const_int_operand" "n")
! (const_int 3))]
! "TARGET_3DNOW && TARGET_64BIT"
{
if (INTVAL (operands[1]) == 0)
return "prefetch\t%a0";
diff -Nrc3pad gcc-3.2/gcc/config/i386/linux64.h gcc-3.2.1/gcc/config/i386/linux64.h
*** gcc-3.2/gcc/config/i386/linux64.h Fri Jun 21 07:04:46 2002
--- gcc-3.2.1/gcc/config/i386/linux64.h Sun Oct 27 09:24:50 2002
*************** Boston, MA 02111-1307, USA. */
*** 30,35 ****
--- 30,41 ----
#undef CPP_SPEC
#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} %{!m32:-D__LONG_MAX__=9223372036854775807L}"
+ /* The svr4 ABI for the i386 says that records and unions are returned
+ in memory. In the 64bit compilation we will turn this flag off in
+ override_options, as we never do pcc_struct_return scheme on this target. */
+ #undef DEFAULT_PCC_STRUCT_RETURN
+ #define DEFAULT_PCC_STRUCT_RETURN 1
+
/* Provide a LINK_SPEC. 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
*************** Boston, MA 02111-1307, USA. */
*** 50,70 ****
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
! "%{m32:%{!shared: \
! %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
! %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} \
! crti.o%s %{static:crtbeginT.o%s}\
! %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}} \
! %{!m32:%{!shared: \
! %{pg:/usr/lib64/gcrt1.o%s} %{!pg:%{p:/usr/lib64/gcrt1.o%s} \
! %{!p:%{profile:/usr/lib64/gcrt1.o%s} %{!profile:/usr/lib64/crt1.o%s}}}}\
! /usr/lib64/crti.o%s %{static:crtbeginT.o%s} \
! %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}}"
#undef ENDFILE_SPEC
! #define ENDFILE_SPEC "\
! %{m32:%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s} \
! %{!m32:%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib64/crtn.o%s}"
#define MULTILIB_DEFAULTS { "m64" }
--- 56,69 ----
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
! "%{!shared: \
! %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
! %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} \
! crti.o%s %{static:crtbeginT.o%s} \
! %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
#undef ENDFILE_SPEC
! #define ENDFILE_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
#define MULTILIB_DEFAULTS { "m64" }
diff -Nrc3pad gcc-3.2/gcc/config/i386/mmintrin.h gcc-3.2.1/gcc/config/i386/mmintrin.h
*** gcc-3.2/gcc/config/i386/mmintrin.h Tue Aug 6 18:30:43 2002
--- gcc-3.2.1/gcc/config/i386/mmintrin.h Sat Oct 19 13:51:34 2002
***************
*** 31,37 ****
#define _MMINTRIN_H_INCLUDED
/* The data type intended for user use. */
! typedef unsigned long long __m64 __attribute__ ((__aligned__ (8)));
/* Internal data types for implementing the intrinsics. */
typedef int __v2si __attribute__ ((__mode__ (__V2SI__)));
--- 31,37 ----
#define _MMINTRIN_H_INCLUDED
/* The data type intended for user use. */
! typedef int __m64 __attribute__ ((__mode__ (__V2SI__)));
/* Internal data types for implementing the intrinsics. */
typedef int __v2si __attribute__ ((__mode__ (__V2SI__)));
*************** _mm_empty (void)
*** 49,62 ****
static __inline __m64
_mm_cvtsi32_si64 (int __i)
{
! return (unsigned int) __i;
}
/* Convert the lower 32 bits of the __m64 object into an integer. */
static __inline int
_mm_cvtsi64_si32 (__m64 __i)
{
! return __i;
}
/* Pack the four 16-bit values from M1 into the lower four 8-bit values of
--- 49,64 ----
static __inline __m64
_mm_cvtsi32_si64 (int __i)
{
! long long __tmp = (unsigned int)__i;
! return (__m64) __tmp;
}
/* Convert the lower 32 bits of the __m64 object into an integer. */
static __inline int
_mm_cvtsi64_si32 (__m64 __i)
{
! long long __tmp = (long long)__i;
! return __tmp;
}
/* Pack the four 16-bit values from M1 into the lower four 8-bit values of
*************** _mm_mullo_pi16 (__m64 __m1, __m64 __m2)
*** 269,275 ****
static __inline __m64
_mm_sll_pi16 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psllw ((__v4hi)__m, __count);
}
static __inline __m64
--- 271,277 ----
static __inline __m64
_mm_sll_pi16 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psllw ((__v4hi)__m, (long long)__count);
}
static __inline __m64
*************** _mm_slli_pi16 (__m64 __m, int __count)
*** 282,288 ****
static __inline __m64
_mm_sll_pi32 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_pslld ((__v2si)__m, __count);
}
static __inline __m64
--- 284,290 ----
static __inline __m64
_mm_sll_pi32 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_pslld ((__v2si)__m, (long long)__count);
}
static __inline __m64
*************** _mm_slli_pi32 (__m64 __m, int __count)
*** 293,314 ****
/* Shift the 64-bit value in M left by COUNT. */
static __inline __m64
! _mm_sll_pi64 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psllq (__m, __count);
}
static __inline __m64
! _mm_slli_pi64 (__m64 __m, int __count)
{
! return (__m64) __builtin_ia32_psllq (__m, __count);
}
/* Shift four 16-bit values in M right by COUNT; shift in the sign bit. */
static __inline __m64
_mm_sra_pi16 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psraw ((__v4hi)__m, __count);
}
static __inline __m64
--- 295,316 ----
/* Shift the 64-bit value in M left by COUNT. */
static __inline __m64
! _mm_sll_si64 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count);
}
static __inline __m64
! _mm_slli_si64 (__m64 __m, int __count)
{
! return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count);
}
/* Shift four 16-bit values in M right by COUNT; shift in the sign bit. */
static __inline __m64
_mm_sra_pi16 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psraw ((__v4hi)__m, (long long)__count);
}
static __inline __m64
*************** _mm_srai_pi16 (__m64 __m, int __count)
*** 321,327 ****
static __inline __m64
_mm_sra_pi32 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrad ((__v2si)__m, __count);
}
static __inline __m64
--- 323,329 ----
static __inline __m64
_mm_sra_pi32 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrad ((__v2si)__m, (long long)__count);
}
static __inline __m64
*************** _mm_srai_pi32 (__m64 __m, int __count)
*** 334,340 ****
static __inline __m64
_mm_srl_pi16 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, __count);
}
static __inline __m64
--- 336,342 ----
static __inline __m64
_mm_srl_pi16 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, (long long)__count);
}
static __inline __m64
*************** _mm_srli_pi16 (__m64 __m, int __count)
*** 347,353 ****
static __inline __m64
_mm_srl_pi32 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrld ((__v2si)__m, __count);
}
static __inline __m64
--- 349,355 ----
static __inline __m64
_mm_srl_pi32 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrld ((__v2si)__m, (long long)__count);
}
static __inline __m64
*************** _mm_srli_pi32 (__m64 __m, int __count)
*** 358,379 ****
/* Shift the 64-bit value in M left by COUNT; shift in zeros. */
static __inline __m64
! _mm_srl_pi64 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrlq (__m, __count);
}
static __inline __m64
! _mm_srli_pi64 (__m64 __m, int __count)
{
! return (__m64) __builtin_ia32_psrlq (__m, __count);
}
/* Bit-wise AND the 64-bit values in M1 and M2. */
static __inline __m64
_mm_and_si64 (__m64 __m1, __m64 __m2)
{
! return __builtin_ia32_pand (__m1, __m2);
}
/* Bit-wise complement the 64-bit value in M1 and bit-wise AND it with the
--- 360,381 ----
/* Shift the 64-bit value in M left by COUNT; shift in zeros. */
static __inline __m64
! _mm_srl_si64 (__m64 __m, __m64 __count)
{
! return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count);
}
static __inline __m64
! _mm_srli_si64 (__m64 __m, int __count)
{
! return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count);
}
/* Bit-wise AND the 64-bit values in M1 and M2. */
static __inline __m64
_mm_and_si64 (__m64 __m1, __m64 __m2)
{
! return (__m64) __builtin_ia32_pand ((long long)__m1, (long long)__m2);
}
/* Bit-wise complement the 64-bit value in M1 and bit-wise AND it with the
*************** _mm_and_si64 (__m64 __m1, __m64 __m2)
*** 381,401 ****
static __inline __m64
_mm_andnot_si64 (__m64 __m1, __m64 __m2)
{
! return __builtin_ia32_pandn (__m1, __m2);
}
/* Bit-wise inclusive OR the 64-bit values in M1 and M2. */
static __inline __m64
_mm_or_si64 (__m64 __m1, __m64 __m2)
{
! return __builtin_ia32_por (__m1, __m2);
}
/* Bit-wise exclusive OR the 64-bit values in M1 and M2. */
static __inline __m64
_mm_xor_si64 (__m64 __m1, __m64 __m2)
{
! return __builtin_ia32_pxor (__m1, __m2);
}
/* Compare eight 8-bit values. The result of the comparison is 0xFF if the
--- 383,403 ----
static __inline __m64
_mm_andnot_si64 (__m64 __m1, __m64 __m2)
{
! return (__m64) __builtin_ia32_pandn ((long long)__m1, (long long)__m2);
}
/* Bit-wise inclusive OR the 64-bit values in M1 and M2. */
static __inline __m64
_mm_or_si64 (__m64 __m1, __m64 __m2)
{
! return (__m64)__builtin_ia32_por ((long long)__m1, (long long)__m2);
}
/* Bit-wise exclusive OR the 64-bit values in M1 and M2. */
static __inline __m64
_mm_xor_si64 (__m64 __m1, __m64 __m2)
{
! return (__m64)__builtin_ia32_pxor ((long long)__m1, (long long)__m2);
}
/* Compare eight 8-bit values. The result of the comparison is 0xFF if the
*************** _mm_cmpgt_pi32 (__m64 __m1, __m64 __m2)
*** 444,450 ****
static __inline __m64
_mm_setzero_si64 (void)
{
! return __builtin_ia32_mmx_zero ();
}
/* Creates a vector of two 32-bit values; I0 is least significant. */
--- 446,452 ----
static __inline __m64
_mm_setzero_si64 (void)
{
! return (__m64)__builtin_ia32_mmx_zero ();
}
/* Creates a vector of two 32-bit values; I0 is least significant. */
diff -Nrc3pad gcc-3.2/gcc/config/i386/t-linux64 gcc-3.2.1/gcc/config/i386/t-linux64
*** gcc-3.2/gcc/config/i386/t-linux64 Wed May 8 23:23:20 2002
--- gcc-3.2.1/gcc/config/i386/t-linux64 Sat Oct 5 21:32:08 2002
*************** SHLIB_MAPFILES = $(srcdir)/libgcc-std.ve
*** 6,15 ****
MULTILIB_OPTIONS = m64/m32
MULTILIB_DIRNAMES = 64 32
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
-
- SHLIB_SLIBDIR_SUFFIXES = 64:64 32:
--- 6,14 ----
MULTILIB_OPTIONS = m64/m32
MULTILIB_DIRNAMES = 64 32
+ MULTILIB_OSDIRNAMES = ../lib64 ../lib
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
diff -Nrc3pad gcc-3.2/gcc/config/i386/winnt.c gcc-3.2.1/gcc/config/i386/winnt.c
*** gcc-3.2/gcc/config/i386/winnt.c Mon Dec 3 19:13:32 2001
--- gcc-3.2.1/gcc/config/i386/winnt.c Mon Sep 16 22:24:43 2002
*************** ix86_handle_dll_attribute (node, name, a
*** 76,81 ****
--- 76,90 ----
}
}
+ /* `extern' needn't be specified with dllimport.
+ Specify `extern' now and hope for the best. Sigh. */
+ else if (TREE_CODE (*node) == VAR_DECL
+ && is_attribute_p ("dllimport", name))
+ {
+ DECL_EXTERNAL (*node) = 1;
+ TREE_PUBLIC (*node) = 1;
+ }
+
return NULL_TREE;
}
*************** i386_pe_mark_dllimport (decl)
*** 300,315 ****
return;
}
- /* `extern' needn't be specified with dllimport.
- Specify `extern' now and hope for the best. Sigh. */
- if (TREE_CODE (decl) == VAR_DECL
- /* ??? Is this test for vtables needed? */
- && !DECL_VIRTUAL_P (decl))
- {
- DECL_EXTERNAL (decl) = 1;
- TREE_PUBLIC (decl) = 1;
- }
-
newname = alloca (strlen (oldname) + 11);
sprintf (newname, "@i._imp__%s", oldname);
--- 309,314 ----
diff -Nrc3pad gcc-3.2/gcc/config/i386/xmmintrin.h gcc-3.2.1/gcc/config/i386/xmmintrin.h
*** gcc-3.2/gcc/config/i386/xmmintrin.h Sat Jan 12 10:05:28 2002
--- gcc-3.2.1/gcc/config/i386/xmmintrin.h Sun Oct 27 09:28:12 2002
*************** _mm_cmple_ss (__m128 __A, __m128 __B)
*** 245,257 ****
static __inline __m128
_mm_cmpgt_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_cmpgtss ((__v4sf)__A, (__v4sf)__B);
}
static __inline __m128
_mm_cmpge_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_cmpgess ((__v4sf)__A, (__v4sf)__B);
}
static __inline __m128
--- 245,265 ----
static __inline __m128
_mm_cmpgt_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_movss ((__v4sf) __A,
! (__v4sf)
! __builtin_ia32_cmpltss ((__v4sf) __B,
! (__v4sf)
! __A));
}
static __inline __m128
_mm_cmpge_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_movss ((__v4sf) __A,
! (__v4sf)
! __builtin_ia32_cmpless ((__v4sf) __B,
! (__v4sf)
! __A));
}
static __inline __m128
*************** _mm_cmpnle_ss (__m128 __A, __m128 __B)
*** 275,287 ****
static __inline __m128
_mm_cmpngt_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_cmpngtss ((__v4sf)__A, (__v4sf)__B);
}
static __inline __m128
_mm_cmpnge_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_cmpngess ((__v4sf)__A, (__v4sf)__B);
}
static __inline __m128
--- 283,303 ----
static __inline __m128
_mm_cmpngt_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_movss ((__v4sf) __A,
! (__v4sf)
! __builtin_ia32_cmpnltss ((__v4sf) __B,
! (__v4sf)
! __A));
}
static __inline __m128
_mm_cmpnge_ss (__m128 __A, __m128 __B)
{
! return (__m128) __builtin_ia32_movss ((__v4sf) __A,
! (__v4sf)
! __builtin_ia32_cmpnless ((__v4sf) __B,
! (__v4sf)
! __A));
}
static __inline __m128
*************** _mm_prefetch (void *__P, enum _mm_hint _
*** 1017,1023 ****
static __inline void
_mm_stream_pi (__m64 *__P, __m64 __A)
{
! __builtin_ia32_movntq (__P, __A);
}
/* Likewise. The address must be 16-byte aligned. */
--- 1033,1039 ----
static __inline void
_mm_stream_pi (__m64 *__P, __m64 __A)
{
! __builtin_ia32_movntq (__P, (long long)__A);
}
/* Likewise. The address must be 16-byte aligned. */
*************** _mm_pause (void)
*** 1049,1056 ****
do { \
__v4sf __r0 = (row0), __r1 = (row1), __r2 = (row2), __r3 = (row3); \
__v4sf __t0 = __builtin_ia32_shufps (__r0, __r1, 0x44); \
! __v4sf __t1 = __builtin_ia32_shufps (__r0, __r1, 0xEE); \
! __v4sf __t2 = __builtin_ia32_shufps (__r2, __r3, 0x44); \
__v4sf __t3 = __builtin_ia32_shufps (__r2, __r3, 0xEE); \
(row0) = __builtin_ia32_shufps (__t0, __t1, 0x88); \
(row1) = __builtin_ia32_shufps (__t0, __t1, 0xDD); \
--- 1065,1072 ----
do { \
__v4sf __r0 = (row0), __r1 = (row1), __r2 = (row2), __r3 = (row3); \
__v4sf __t0 = __builtin_ia32_shufps (__r0, __r1, 0x44); \
! __v4sf __t2 = __builtin_ia32_shufps (__r0, __r1, 0xEE); \
! __v4sf __t1 = __builtin_ia32_shufps (__r2, __r3, 0x44); \
__v4sf __t3 = __builtin_ia32_shufps (__r2, __r3, 0xEE); \
(row0) = __builtin_ia32_shufps (__t0, __t1, 0x88); \
(row1) = __builtin_ia32_shufps (__t0, __t1, 0xDD); \
diff -Nrc3pad gcc-3.2/gcc/config/m68hc11/m68hc11.md gcc-3.2.1/gcc/config/m68hc11/m68hc11.md
*** gcc-3.2/gcc/config/m68hc11/m68hc11.md Fri Jul 12 20:43:54 2002
--- gcc-3.2.1/gcc/config/m68hc11/m68hc11.md Sat Sep 14 12:06:58 2002
***************
*** 651,657 ****
")
(define_insn "movdi_internal"
! [(set (match_operand:DI 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u")
(match_operand:DI 1 "general_operand" "K,iU,iU,!u,mi,!u,!mu"))
(clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
""
--- 651,657 ----
")
(define_insn "movdi_internal"
! [(set (match_operand:DI 0 "nonimmediate_operand" "=ou,U,!u,U,m,m,!u")
(match_operand:DI 1 "general_operand" "K,iU,iU,!u,mi,!u,!mu"))
(clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
""
***************
*** 687,693 ****
")
(define_insn "movdf_internal"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u")
(match_operand:DF 1 "general_operand" "G,iU,iU,!u,mi,!u,!mu"))
(clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
""
--- 687,693 ----
")
(define_insn "movdf_internal"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=ou,U,!u,U,m,m,!u")
(match_operand:DF 1 "general_operand" "G,iU,iU,!u,mi,!u,!mu"))
(clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
""
***************
*** 732,738 ****
")
(define_insn "movsi_internal"
! [(set (match_operand:SI 0 "nonimmediate_operand" "=uS,mu,?D,m,?D,?u,?u,!u,D")
(match_operand:SI 1 "general_operand" "K,imu,im,?D,!u,?D,mi,!u,!D"))
(clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
""
--- 732,738 ----
")
(define_insn "movsi_internal"
! [(set (match_operand:SI 0 "nonimmediate_operand" "=ou,mu,?D,m,?D,?u,?u,!u,D")
(match_operand:SI 1 "general_operand" "K,imu,im,?D,!u,?D,mi,!u,!D"))
(clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
""
***************
*** 768,774 ****
")
(define_insn "movsf_internal"
! [(set (match_operand:SF 0 "nonimmediate_operand" "=S!u,m,D,m,D,!u,!u,!u,D")
(match_operand:SF 1 "general_operand" "G,im,im,D,!u,D,mi,!u,!D"))
(clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
""
--- 768,774 ----
")
(define_insn "movsf_internal"
! [(set (match_operand:SF 0 "nonimmediate_operand" "=o!u,m,D,m,D,!u,!u,!u,D")
(match_operand:SF 1 "general_operand" "G,im,im,D,!u,D,mi,!u,!D"))
(clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
""
diff -Nrc3pad gcc-3.2/gcc/config/m68k/t-crtstuff gcc-3.2.1/gcc/config/m68k/t-crtstuff
*** gcc-3.2/gcc/config/m68k/t-crtstuff Tue Sep 14 09:52:09 1999
--- gcc-3.2.1/gcc/config/m68k/t-crtstuff Mon Nov 11 06:01:39 2002
***************
*** 1,11 ****
- # from ../t-svr4
- EXTRA_PARTS=crtbegin.o crtend.o crti.o crtn.o
-
# Add flags here as required.
CRTSTUFF_T_CFLAGS =
# Assemble startup files.
! crti.o: $(srcdir)/config/m68k/crti.s $(GCC_PASSES)
! $(GCC_FOR_TARGET) -c -o crti.o $(srcdir)/config/m68k/crti.s
! crtn.o: $(srcdir)/config/m68k/crtn.s $(GCC_PASSES)
! $(GCC_FOR_TARGET) -c -o crtn.o $(srcdir)/config/m68k/crtn.s
--- 1,8 ----
# Add flags here as required.
CRTSTUFF_T_CFLAGS =
# Assemble startup files.
! $(T)crti.o: $(srcdir)/config/m68k/crti.s $(GCC_PASSES)
! $(GCC_FOR_TARGET) -c -o $(T)crti.o $(srcdir)/config/m68k/crti.s
! $(T)crtn.o: $(srcdir)/config/m68k/crtn.s $(GCC_PASSES)
! $(GCC_FOR_TARGET) -c -o $(T)crtn.o $(srcdir)/config/m68k/crtn.s
diff -Nrc3pad gcc-3.2/gcc/config/mips/mips.md gcc-3.2.1/gcc/config/mips/mips.md
*** gcc-3.2/gcc/config/mips/mips.md Wed Apr 24 17:40:50 2002
--- gcc-3.2.1/gcc/config/mips/mips.md Mon Nov 11 05:57:14 2002
*************** move\\t%0,%z4\\n\\
*** 4882,4888 ****
if ((INTVAL (offset) & 7) == 0
&& (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx))
! return \"sd\\t%1,%0\";
return \"usd\\t%z1,%0\";
}"
--- 4882,4888 ----
if ((INTVAL (offset) & 7) == 0
&& (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx))
! return \"sd\\t%z1,%0\";
return \"usd\\t%z1,%0\";
}"
diff -Nrc3pad gcc-3.2/gcc/config/mips/t-iris6 gcc-3.2.1/gcc/config/mips/t-iris6
*** gcc-3.2/gcc/config/mips/t-iris6 Fri May 10 15:22:05 2002
--- gcc-3.2.1/gcc/config/mips/t-iris6 Tue Nov 12 11:14:07 2002
***************
*** 4,9 ****
--- 4,10 ----
MULTILIB_OPTIONS=mabi=n32/mabi=64
MULTILIB_DIRNAMES=
MULTILIB_MATCHES=
+ MULTILIB_OSDIRNAMES=. mabi=64
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
*************** SHLIB_NAME = @shlib_dir@@shlib_so_name@.
*** 22,28 ****
SHLIB_MAP = @shlib_map_file@
SHLIB_OBJS = @shlib_objs@
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
- SHLIB_SLIBDIR_SUFFIXES = mabi=64:/mabi=64 mabi=n32:
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-Wl,-soname,$(SHLIB_SONAME) \
--- 23,28 ----
diff -Nrc3pad gcc-3.2/gcc/config/rs6000/linux64.h gcc-3.2.1/gcc/config/rs6000/linux64.h
*** gcc-3.2/gcc/config/rs6000/linux64.h Thu Aug 8 17:52:40 2002
--- gcc-3.2.1/gcc/config/rs6000/linux64.h Sat Sep 14 00:26:39 2002
*************** Boston, MA 02111-1307, USA. */
*** 37,42 ****
--- 37,48 ----
#undef ASM_DEFAULT_SPEC
#define ASM_DEFAULT_SPEC "-mppc64"
+ #undef ASM_SPEC
+ #define ASM_SPEC "%{.s: %{mregnames} %{mno-regnames}} \
+ %{.S: %{mregnames} %{mno-regnames}} \
+ %{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} \
+ %{v:-V} %{Qy:} %{!Qn:-Qy} -a64 %(asm_cpu) %{Wa,*:%*}"
+
/* 64-bit PowerPC Linux always has a TOC. */
#undef TARGET_NO_TOC
#define TARGET_NO_TOC 0
*************** Boston, MA 02111-1307, USA. */
*** 65,70 ****
--- 71,77 ----
#define USER_LABEL_PREFIX ""
/* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints. */
+ #undef ADJUST_FIELD_ALIGN
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
(TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \
? get_inner_array_type (FIELD) \
*************** do \
*** 327,329 ****
--- 334,382 ----
sym_lineno += 1; \
} \
while (0)
+
+ /* Similarly, we want the function code label here. */
+ #define DBX_OUTPUT_BRAC(FILE, NAME, BRAC) \
+ do \
+ { \
+ const char *flab; \
+ fprintf (FILE, "%s%d,0,0,", ASM_STABN_OP, BRAC); \
+ assemble_name (FILE, NAME); \
+ putc ('-', FILE); \
+ if (current_function_func_begin_label != NULL_TREE) \
+ flab = IDENTIFIER_POINTER (current_function_func_begin_label); \
+ else \
+ { \
+ putc ('.', FILE); \
+ flab = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
+ } \
+ assemble_name (FILE, flab); \
+ putc ('\n', FILE); \
+ } \
+ while (0)
+
+ #define DBX_OUTPUT_LBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_LBRAC)
+ #define DBX_OUTPUT_RBRAC(FILE, NAME) DBX_OUTPUT_BRAC (FILE, NAME, N_RBRAC)
+
+ /* Another case where we want the dot name. */
+ #define DBX_OUTPUT_NFUN(FILE, LSCOPE, DECL) \
+ do \
+ { \
+ fprintf (FILE, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN); \
+ assemble_name (FILE, LSCOPE); \
+ fputs ("-.", FILE); \
+ assemble_name (FILE, XSTR (XEXP (DECL_RTL (DECL), 0), 0)); \
+ putc ('\n', FILE); \
+ } \
+ while (0)
+
+ /* Override sysv4.h as these are ABI_V4 only. */
+ #undef ASM_OUTPUT_REG_PUSH
+ #undef ASM_OUTPUT_REG_POP
+
+ /* Select a format to encode pointers in exception handling data. CODE
+ is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
+ true if the symbol may be affected by dynamic relocations. */
+ #undef ASM_PREFERRED_EH_DATA_FORMAT
+ #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
+ (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_udata8)
diff -Nrc3pad gcc-3.2/gcc/config/rs6000/rs6000.c gcc-3.2.1/gcc/config/rs6000/rs6000.c
*** gcc-3.2/gcc/config/rs6000/rs6000.c Thu Aug 8 14:51:47 2002
--- gcc-3.2.1/gcc/config/rs6000/rs6000.c Thu Nov 7 07:04:20 2002
*************** static int rs6000_sr_alias_set;
*** 120,126 ****
static void rs6000_add_gc_roots PARAMS ((void));
static int num_insns_constant_wide PARAMS ((HOST_WIDE_INT));
- static rtx expand_block_move_mem PARAMS ((enum machine_mode, rtx, rtx));
static void validate_condition_mode
PARAMS ((enum rtx_code, enum machine_mode));
static rtx rs6000_generate_compare PARAMS ((enum rtx_code));
--- 120,125 ----
*************** rs6000_legitimate_address (mode, x, reg_
*** 2012,2017 ****
--- 2011,2017 ----
if (LEGITIMATE_INDIRECT_ADDRESS_P (x, reg_ok_strict))
return 1;
if ((GET_CODE (x) == PRE_INC || GET_CODE (x) == PRE_DEC)
+ && !ALTIVEC_VECTOR_MODE (mode)
&& TARGET_UPDATE
&& LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (x, 0), reg_ok_strict))
return 1;
*************** altivec_init_builtins (void)
*** 4909,4929 ****
}
- /* Generate a memory reference for expand_block_move, copying volatile,
- and other bits from an original memory reference. */
-
- static rtx
- expand_block_move_mem (mode, addr, orig_mem)
- enum machine_mode mode;
- rtx addr;
- rtx orig_mem;
- {
- rtx mem = gen_rtx_MEM (mode, addr);
-
- MEM_COPY_ATTRIBUTES (mem, orig_mem);
- return mem;
- }
-
/* Expand a block move operation, and return 1 if successful. Return 0
if we should let the compiler generate normal code.
--- 4909,4914 ----
*************** expand_block_move (operands)
*** 4946,4959 ****
int align;
int bytes;
int offset;
- int num_reg;
- int i;
- rtx src_reg;
- rtx dest_reg;
- rtx src_addr;
- rtx dest_addr;
- rtx tmp_reg;
- rtx stores[MAX_MOVE_REG];
int move_bytes;
/* If this is not a fixed size move, just call memcpy */
--- 4931,4936 ----
*************** expand_block_move (operands)
*** 4975,4988 ****
if (bytes > (TARGET_POWERPC64 ? 64 : 32))
return 0;
- /* Move the address into scratch registers. */
- dest_reg = copy_addr_to_reg (XEXP (orig_dest, 0));
- src_reg = copy_addr_to_reg (XEXP (orig_src, 0));
-
if (TARGET_STRING) /* string instructions are available */
{
! for ( ; bytes > 0; bytes -= move_bytes)
{
if (bytes > 24 /* move up to 32 bytes at a time */
&& ! fixed_regs[5]
&& ! fixed_regs[6]
--- 4952,4968 ----
if (bytes > (TARGET_POWERPC64 ? 64 : 32))
return 0;
if (TARGET_STRING) /* string instructions are available */
{
! for (offset = 0; bytes > 0; offset += move_bytes, bytes -= move_bytes)
{
+ union {
+ rtx (*movstrsi) PARAMS ((rtx, rtx, rtx, rtx));
+ rtx (*mov) PARAMS ((rtx, rtx));
+ } gen_func;
+ enum machine_mode mode = BLKmode;
+ rtx src, dest;
+
if (bytes > 24 /* move up to 32 bytes at a time */
&& ! fixed_regs[5]
&& ! fixed_regs[6]
*************** expand_block_move (operands)
*** 4994,5008 ****
&& ! fixed_regs[12])
{
move_bytes = (bytes > 32) ? 32 : bytes;
! emit_insn (gen_movstrsi_8reg (expand_block_move_mem (BLKmode,
! dest_reg,
! orig_dest),
! expand_block_move_mem (BLKmode,
! src_reg,
! orig_src),
! GEN_INT ((move_bytes == 32)
! ? 0 : move_bytes),
! align_rtx));
}
else if (bytes > 16 /* move up to 24 bytes at a time */
&& ! fixed_regs[5]
--- 4974,4980 ----
&& ! fixed_regs[12])
{
move_bytes = (bytes > 32) ? 32 : bytes;
! gen_func.movstrsi = gen_movstrsi_8reg;
}
else if (bytes > 16 /* move up to 24 bytes at a time */
&& ! fixed_regs[5]
*************** expand_block_move (operands)
*** 5013,5026 ****
&& ! fixed_regs[10])
{
move_bytes = (bytes > 24) ? 24 : bytes;
! emit_insn (gen_movstrsi_6reg (expand_block_move_mem (BLKmode,
! dest_reg,
! orig_dest),
! expand_block_move_mem (BLKmode,
! src_reg,
! orig_src),
! GEN_INT (move_bytes),
! align_rtx));
}
else if (bytes > 8 /* move up to 16 bytes at a time */
&& ! fixed_regs[5]
--- 4985,4991 ----
&& ! fixed_regs[10])
{
move_bytes = (bytes > 24) ? 24 : bytes;
! gen_func.movstrsi = gen_movstrsi_6reg;
}
else if (bytes > 8 /* move up to 16 bytes at a time */
&& ! fixed_regs[5]
*************** expand_block_move (operands)
*** 5029,5042 ****
&& ! fixed_regs[8])
{
move_bytes = (bytes > 16) ? 16 : bytes;
! emit_insn (gen_movstrsi_4reg (expand_block_move_mem (BLKmode,
! dest_reg,
! orig_dest),
! expand_block_move_mem (BLKmode,
! src_reg,
! orig_src),
! GEN_INT (move_bytes),
! align_rtx));
}
else if (bytes >= 8 && TARGET_POWERPC64
/* 64-bit loads and stores require word-aligned
--- 4994,5000 ----
&& ! fixed_regs[8])
{
move_bytes = (bytes > 16) ? 16 : bytes;
! gen_func.movstrsi = gen_movstrsi_4reg;
}
else if (bytes >= 8 && TARGET_POWERPC64
/* 64-bit loads and stores require word-aligned
*************** expand_block_move (operands)
*** 5044,5151 ****
&& (align >= 8 || (! STRICT_ALIGNMENT && align >= 4)))
{
move_bytes = 8;
! tmp_reg = gen_reg_rtx (DImode);
! emit_move_insn (tmp_reg,
! expand_block_move_mem (DImode,
! src_reg, orig_src));
! emit_move_insn (expand_block_move_mem (DImode,
! dest_reg, orig_dest),
! tmp_reg);
}
else if (bytes > 4 && !TARGET_POWERPC64)
{ /* move up to 8 bytes at a time */
move_bytes = (bytes > 8) ? 8 : bytes;
! emit_insn (gen_movstrsi_2reg (expand_block_move_mem (BLKmode,
! dest_reg,
! orig_dest),
! expand_block_move_mem (BLKmode,
! src_reg,
! orig_src),
! GEN_INT (move_bytes),
! align_rtx));
}
else if (bytes >= 4 && (align >= 4 || ! STRICT_ALIGNMENT))
{ /* move 4 bytes */
move_bytes = 4;
! tmp_reg = gen_reg_rtx (SImode);
! emit_move_insn (tmp_reg,
! expand_block_move_mem (SImode,
! src_reg, orig_src));
! emit_move_insn (expand_block_move_mem (SImode,
! dest_reg, orig_dest),
! tmp_reg);
}
else if (bytes == 2 && (align >= 2 || ! STRICT_ALIGNMENT))
{ /* move 2 bytes */
move_bytes = 2;
! tmp_reg = gen_reg_rtx (HImode);
! emit_move_insn (tmp_reg,
! expand_block_move_mem (HImode,
! src_reg, orig_src));
! emit_move_insn (expand_block_move_mem (HImode,
! dest_reg, orig_dest),
! tmp_reg);
}
else if (bytes == 1) /* move 1 byte */
{
move_bytes = 1;
! tmp_reg = gen_reg_rtx (QImode);
! emit_move_insn (tmp_reg,
! expand_block_move_mem (QImode,
! src_reg, orig_src));
! emit_move_insn (expand_block_move_mem (QImode,
! dest_reg, orig_dest),
! tmp_reg);
}
else
{ /* move up to 4 bytes at a time */
move_bytes = (bytes > 4) ? 4 : bytes;
! emit_insn (gen_movstrsi_1reg (expand_block_move_mem (BLKmode,
! dest_reg,
! orig_dest),
! expand_block_move_mem (BLKmode,
! src_reg,
! orig_src),
! GEN_INT (move_bytes),
! align_rtx));
}
! if (bytes > move_bytes)
{
! if (! TARGET_POWERPC64)
{
! emit_insn (gen_addsi3 (src_reg, src_reg,
! GEN_INT (move_bytes)));
! emit_insn (gen_addsi3 (dest_reg, dest_reg,
! GEN_INT (move_bytes)));
}
! else
{
! emit_insn (gen_adddi3 (src_reg, src_reg,
! GEN_INT (move_bytes)));
! emit_insn (gen_adddi3 (dest_reg, dest_reg,
! GEN_INT (move_bytes)));
}
}
}
}
else /* string instructions not available */
{
! num_reg = offset = 0;
! for ( ; bytes > 0; (bytes -= move_bytes), (offset += move_bytes))
{
! /* Calculate the correct offset for src/dest */
! if (offset == 0)
! {
! src_addr = src_reg;
! dest_addr = dest_reg;
! }
! else
! {
! src_addr = plus_constant (src_reg, offset);
! dest_addr = plus_constant (dest_reg, offset);
! }
/* Generate the appropriate load and store, saving the stores
for later. */
--- 5002,5085 ----
&& (align >= 8 || (! STRICT_ALIGNMENT && align >= 4)))
{
move_bytes = 8;
! mode = DImode;
! gen_func.mov = gen_movdi;
}
else if (bytes > 4 && !TARGET_POWERPC64)
{ /* move up to 8 bytes at a time */
move_bytes = (bytes > 8) ? 8 : bytes;
! gen_func.movstrsi = gen_movstrsi_2reg;
}
else if (bytes >= 4 && (align >= 4 || ! STRICT_ALIGNMENT))
{ /* move 4 bytes */
move_bytes = 4;
! mode = SImode;
! gen_func.mov = gen_movsi;
}
else if (bytes == 2 && (align >= 2 || ! STRICT_ALIGNMENT))
{ /* move 2 bytes */
move_bytes = 2;
! mode = HImode;
! gen_func.mov = gen_movhi;
}
else if (bytes == 1) /* move 1 byte */
{
move_bytes = 1;
! mode = QImode;
! gen_func.mov = gen_movqi;
}
else
{ /* move up to 4 bytes at a time */
move_bytes = (bytes > 4) ? 4 : bytes;
! gen_func.movstrsi = gen_movstrsi_1reg;
}
! src = adjust_address (orig_src, mode, offset);
! dest = adjust_address (orig_dest, mode, offset);
!
! if (mode == BLKmode)
{
! /* Move the address into scratch registers. The movstrsi
! patterns require zero offset. */
! if (!REG_P (XEXP (src, 0)))
{
! rtx src_reg = copy_addr_to_reg (XEXP (src, 0));
! src = replace_equiv_address (src, src_reg);
}
! set_mem_size (src, GEN_INT (move_bytes));
!
! if (!REG_P (XEXP (dest, 0)))
{
! rtx dest_reg = copy_addr_to_reg (XEXP (dest, 0));
! dest = replace_equiv_address (dest, dest_reg);
}
+ set_mem_size (dest, GEN_INT (move_bytes));
+
+ emit_insn ((*gen_func.movstrsi) (dest, src,
+ GEN_INT (move_bytes & 31),
+ align_rtx));
+ }
+ else
+ {
+ rtx tmp_reg = gen_reg_rtx (mode);
+
+ emit_insn ((*gen_func.mov) (tmp_reg, src));
+ emit_insn ((*gen_func.mov) (dest, tmp_reg));
}
}
}
else /* string instructions not available */
{
! rtx stores[MAX_MOVE_REG];
! int num_reg = 0;
! int i;
!
! for (offset = 0; bytes > 0; offset += move_bytes, bytes -= move_bytes)
{
! rtx (*gen_mov_func) PARAMS ((rtx, rtx));
! enum machine_mode mode;
! rtx src, dest, tmp_reg;
/* Generate the appropriate load and store, saving the stores
for later. */
*************** expand_block_move (operands)
*** 5155,5210 ****
&& (align >= 8 || (! STRICT_ALIGNMENT && align >= 4)))
{
move_bytes = 8;
! tmp_reg = gen_reg_rtx (DImode);
! emit_insn (gen_movdi (tmp_reg,
! expand_block_move_mem (DImode,
! src_addr,
! orig_src)));
! stores[num_reg++] = gen_movdi (expand_block_move_mem (DImode,
! dest_addr,
! orig_dest),
! tmp_reg);
}
else if (bytes >= 4 && (align >= 4 || ! STRICT_ALIGNMENT))
{
move_bytes = 4;
! tmp_reg = gen_reg_rtx (SImode);
! emit_insn (gen_movsi (tmp_reg,
! expand_block_move_mem (SImode,
! src_addr,
! orig_src)));
! stores[num_reg++] = gen_movsi (expand_block_move_mem (SImode,
! dest_addr,
! orig_dest),
! tmp_reg);
}
else if (bytes >= 2 && (align >= 2 || ! STRICT_ALIGNMENT))
{
move_bytes = 2;
! tmp_reg = gen_reg_rtx (HImode);
! emit_insn (gen_movhi (tmp_reg,
! expand_block_move_mem (HImode,
! src_addr,
! orig_src)));
! stores[num_reg++] = gen_movhi (expand_block_move_mem (HImode,
! dest_addr,
! orig_dest),
! tmp_reg);
}
else
{
move_bytes = 1;
! tmp_reg = gen_reg_rtx (QImode);
! emit_insn (gen_movqi (tmp_reg,
! expand_block_move_mem (QImode,
! src_addr,
! orig_src)));
! stores[num_reg++] = gen_movqi (expand_block_move_mem (QImode,
! dest_addr,
! orig_dest),
! tmp_reg);
}
if (num_reg >= MAX_MOVE_REG)
{
for (i = 0; i < num_reg; i++)
--- 5089,5123 ----
&& (align >= 8 || (! STRICT_ALIGNMENT && align >= 4)))
{
move_bytes = 8;
! mode = DImode;
! gen_mov_func = gen_movdi;
}
else if (bytes >= 4 && (align >= 4 || ! STRICT_ALIGNMENT))
{
move_bytes = 4;
! mode = SImode;
! gen_mov_func = gen_movsi;
}
else if (bytes >= 2 && (align >= 2 || ! STRICT_ALIGNMENT))
{
move_bytes = 2;
! mode = HImode;
! gen_mov_func = gen_movhi;
}
else
{
move_bytes = 1;
! mode = QImode;
! gen_mov_func = gen_movqi;
}
+ src = adjust_address (orig_src, mode, offset);
+ dest = adjust_address (orig_dest, mode, offset);
+ tmp_reg = gen_reg_rtx (mode);
+
+ emit_insn ((*gen_mov_func) (tmp_reg, src));
+ stores[num_reg++] = (*gen_mov_func) (dest, tmp_reg);
+
if (num_reg >= MAX_MOVE_REG)
{
for (i = 0; i < num_reg; i++)
*************** rs6000_reverse_condition (mode, code)
*** 7008,7014 ****
{
/* Reversal of FP compares takes care -- an ordered compare
becomes an unordered compare and vice versa. */
! if (mode == CCFPmode)
return reverse_condition_maybe_unordered (code);
else
return reverse_condition (code);
--- 6921,6927 ----
{
/* Reversal of FP compares takes care -- an ordered compare
becomes an unordered compare and vice versa. */
! if (mode == CCFPmode && !flag_unsafe_math_optimizations)
return reverse_condition_maybe_unordered (code);
else
return reverse_condition (code);
*************** output_cbranch (op, label, reversed, ins
*** 7161,7167 ****
reverse_condition_maybe_unordered here always but this
makes the resulting assembler clearer. */
if (really_reversed)
! code = rs6000_reverse_condition (mode, code);
switch (code)
{
--- 7074,7087 ----
reverse_condition_maybe_unordered here always but this
makes the resulting assembler clearer. */
if (really_reversed)
! {
! /* Reversal of FP compares takes care -- an ordered compare
! becomes an unordered compare and vice versa. */
! if (mode == CCFPmode)
! code = reverse_condition_maybe_unordered (code);
! else
! code = reverse_condition (code);
! }
switch (code)
{
*************** first_reg_to_save ()
*** 7434,7486 ****
|| (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
break;
- if (current_function_profile)
- {
- /* AIX must save/restore every register that contains a parameter
- before/after the .__mcount call plus an additional register
- for the static chain, if needed; use registers from 30 down to 22
- to do this. */
- if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
- {
- int last_parm_reg, profile_first_reg;
-
- /* Figure out last used parameter register. The proper thing
- to do is to walk incoming args of the function. A function
- might have live parameter registers even if it has no
- incoming args. */
- for (last_parm_reg = 10;
- last_parm_reg > 2 && ! regs_ever_live [last_parm_reg];
- last_parm_reg--)
- ;
-
- /* Calculate first reg for saving parameter registers
- and static chain.
- Skip reg 31 which may contain the frame pointer. */
- profile_first_reg = (33 - last_parm_reg
- - (current_function_needs_context ? 1 : 0));
- #if TARGET_MACHO
- /* Need to skip another reg to account for R31 being PICBASE
- (when flag_pic is set) or R30 being used as the frame
- pointer (when flag_pic is not set). */
- --profile_first_reg;
- #endif
- /* Do not save frame pointer if no parameters needs to be saved. */
- if (profile_first_reg == 31)
- profile_first_reg = 32;
-
- if (first_reg > profile_first_reg)
- first_reg = profile_first_reg;
- }
-
- /* SVR4 may need one register to preserve the static chain. */
- else if (current_function_needs_context)
- {
- /* Skip reg 31 which may contain the frame pointer. */
- if (first_reg > 30)
- first_reg = 30;
- }
- }
-
#if TARGET_MACHO
if (flag_pic && current_function_uses_pic_offset_table &&
(first_reg > RS6000_PIC_OFFSET_TABLE_REGNUM))
--- 7354,7359 ----
*************** rs6000_emit_load_toc_table (fromprolog)
*** 8124,8214 ****
rtx dest;
dest = gen_rtx_REG (Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
! if (TARGET_ELF && DEFAULT_ABI != ABI_AIX)
{
! if (DEFAULT_ABI == ABI_V4 && flag_pic == 1)
{
! rtx temp = (fromprolog
! ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
! : gen_reg_rtx (Pmode));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_pic_si (temp)));
! rs6000_maybe_dead (emit_move_insn (dest, temp));
}
- else if (flag_pic == 2)
- {
- char buf[30];
- rtx tempLR = (fromprolog
- ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
- : gen_reg_rtx (Pmode));
- rtx temp0 = (fromprolog
- ? gen_rtx_REG (Pmode, 0)
- : gen_reg_rtx (Pmode));
- rtx symF;
! /* possibly create the toc section */
! if (! toc_initialized)
! {
! toc_section ();
! function_section (current_function_decl);
! }
!
! if (fromprolog)
! {
! rtx symL;
!
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
! symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
! symL = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1 (tempLR,
! symF)));
! rs6000_maybe_dead (emit_move_insn (dest, tempLR));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_2 (temp0, dest,
! symL,
! symF)));
! }
! else
! {
! rtx tocsym;
! static int reload_toc_labelno = 0;
! tocsym = gen_rtx_SYMBOL_REF (Pmode, toc_label_name);
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCG", reload_toc_labelno++);
! symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1b (tempLR,
! symF,
! tocsym)));
! rs6000_maybe_dead (emit_move_insn (dest, tempLR));
! rs6000_maybe_dead (emit_move_insn (temp0,
! gen_rtx_MEM (Pmode, dest)));
! }
! rs6000_maybe_dead (emit_insn (gen_addsi3 (dest, temp0, dest)));
! }
! else if (flag_pic == 0 && TARGET_MINIMAL_TOC)
! {
! /* This is for AIX code running in non-PIC ELF. */
! char buf[30];
! rtx realsym;
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
! realsym = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
!
! rs6000_maybe_dead (emit_insn (gen_elf_high (dest, realsym)));
! rs6000_maybe_dead (emit_insn (gen_elf_low (dest, dest, realsym)));
}
! else
! abort ();
}
! else
{
if (TARGET_32BIT)
! rs6000_maybe_dead (emit_insn (gen_load_toc_aix_si (dest)));
else
! rs6000_maybe_dead (emit_insn (gen_load_toc_aix_di (dest)));
}
}
int
--- 7997,8084 ----
rtx dest;
dest = gen_rtx_REG (Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
! if (TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 1)
{
! rtx temp = (fromprolog
! ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
! : gen_reg_rtx (Pmode));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_pic_si (temp)));
! rs6000_maybe_dead (emit_move_insn (dest, temp));
! }
! else if (TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2)
! {
! char buf[30];
! rtx tempLR = (fromprolog
! ? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
! : gen_reg_rtx (Pmode));
! rtx temp0 = (fromprolog
! ? gen_rtx_REG (Pmode, 0)
! : gen_reg_rtx (Pmode));
! rtx symF;
!
! /* possibly create the toc section */
! if (! toc_initialized)
{
! toc_section ();
! function_section (current_function_decl);
}
! if (fromprolog)
! {
! rtx symL;
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
! symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
! symL = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1 (tempLR,
! symF)));
! rs6000_maybe_dead (emit_move_insn (dest, tempLR));
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_2 (temp0, dest,
! symL,
! symF)));
! }
! else
! {
! rtx tocsym;
! static int reload_toc_labelno = 0;
! tocsym = gen_rtx_SYMBOL_REF (Pmode, toc_label_name);
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCG", reload_toc_labelno++);
! symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
!
! rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1b (tempLR,
! symF,
! tocsym)));
! rs6000_maybe_dead (emit_move_insn (dest, tempLR));
! rs6000_maybe_dead (emit_move_insn (temp0,
! gen_rtx_MEM (Pmode, dest)));
}
! rs6000_maybe_dead (emit_insn (gen_addsi3 (dest, temp0, dest)));
}
! else if (TARGET_ELF && !TARGET_AIX && flag_pic == 0 && TARGET_MINIMAL_TOC)
! {
! /* This is for AIX code running in non-PIC ELF32. */
! char buf[30];
! rtx realsym;
! ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
! realsym = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
!
! rs6000_maybe_dead (emit_insn (gen_elf_high (dest, realsym)));
! rs6000_maybe_dead (emit_insn (gen_elf_low (dest, dest, realsym)));
! }
! else if (DEFAULT_ABI == ABI_AIX)
{
if (TARGET_32BIT)
! rs6000_maybe_dead (emit_insn (gen_load_toc_aix_si (dest)));
else
! rs6000_maybe_dead (emit_insn (gen_load_toc_aix_di (dest)));
}
+ else
+ abort ();
}
int
*************** output_mi_thunk (file, thunk_fndecl, del
*** 9735,9757 ****
fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, delta);
}
/* Large constants that can be done by one addis instruction. */
! else if ((delta & 0xffff) == 0 && num_insns_constant_wide (delta) == 1)
asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg,
delta >> 16);
/* 32-bit constants that can be done by an add and addis instruction. */
! else if (TARGET_32BIT || num_insns_constant_wide (delta) == 1)
{
/* Break into two pieces, propagating the sign bit from the low
word to the upper word. */
! int delta_high = delta >> 16;
! int delta_low = delta & 0xffff;
! if ((delta_low & 0x8000) != 0)
! {
! delta_high++;
! delta_low = (delta_low ^ 0x8000) - 0x8000; /* sign extend */
! }
asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg,
delta_high);
--- 9605,9626 ----
fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, delta);
}
+ /* 64-bit constants. If "int" is 32 bits, we'll never hit this abort. */
+ else if (TARGET_64BIT && (delta < -2147483647 - 1 || delta > 2147483647))
+ abort ();
+
/* Large constants that can be done by one addis instruction. */
! else if ((delta & 0xffff) == 0)
asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg,
delta >> 16);
/* 32-bit constants that can be done by an add and addis instruction. */
! else
{
/* Break into two pieces, propagating the sign bit from the low
word to the upper word. */
! int delta_low = ((delta & 0xffff) ^ 0x8000) - 0x8000;
! int delta_high = (delta - delta_low) >> 16;
asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg,
delta_high);
*************** output_mi_thunk (file, thunk_fndecl, del
*** 9762,9771 ****
fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, delta_low);
}
- /* 64-bit constants, fixme */
- else
- abort ();
-
/* Get the prefix in front of the names. */
switch (DEFAULT_ABI)
{
--- 9631,9636 ----
*************** output_mi_thunk (file, thunk_fndecl, del
*** 9821,9827 ****
}
assemble_name (file, fname);
putc ('\n', file);
! text_section ();
if (TARGET_MINIMAL_TOC)
asm_fprintf (file, (TARGET_32BIT)
? "\t{l|lwz} %s,%s(%s)\n" : "\tld %s,%s(%s)\n", r12,
--- 9686,9695 ----
}
assemble_name (file, fname);
putc ('\n', file);
! if (TARGET_ELF)
! function_section (current_function_decl);
! else
! text_section ();
if (TARGET_MINIMAL_TOC)
asm_fprintf (file, (TARGET_32BIT)
? "\t{l|lwz} %s,%s(%s)\n" : "\tld %s,%s(%s)\n", r12,
*************** output_toc (file, x, labelno, mode)
*** 10240,10247 ****
abort ();/* It would be easy to make this work, but it doesn't now. */
if (POINTER_SIZE > GET_MODE_BITSIZE (mode))
! lshift_double (low, high, POINTER_SIZE - GET_MODE_BITSIZE (mode),
! POINTER_SIZE, &low, &high, 0);
if (TARGET_64BIT)
{
--- 10108,10124 ----
abort ();/* It would be easy to make this work, but it doesn't now. */
if (POINTER_SIZE > GET_MODE_BITSIZE (mode))
! {
! #if HOST_BITS_PER_WIDE_INT == 32
! lshift_double (low, high, POINTER_SIZE - GET_MODE_BITSIZE (mode),
! POINTER_SIZE, &low, &high, 0);
! #else
! low |= high << 32;
! low <<= POINTER_SIZE - GET_MODE_BITSIZE (mode);
! high = (HOST_WIDE_INT) low >> 32;
! low &= 0xffffffff;
! #endif
! }
if (TARGET_64BIT)
{
*************** rs6000_gen_section_name (buf, filename,
*** 10459,10468 ****
void
output_profile_hook (labelno)
! int labelno;
{
if (DEFAULT_ABI == ABI_AIX)
{
char buf[30];
const char *label_name;
rtx fun;
--- 10336,10348 ----
void
output_profile_hook (labelno)
! int labelno ATTRIBUTE_UNUSED;
{
if (DEFAULT_ABI == ABI_AIX)
{
+ #ifdef NO_PROFILE_COUNTERS
+ emit_library_call (init_one_libfunc (RS6000_MCOUNT), 0, VOIDmode, 0);
+ #else
char buf[30];
const char *label_name;
rtx fun;
*************** output_profile_hook (labelno)
*** 10473,10478 ****
--- 10353,10359 ----
emit_library_call (init_one_libfunc (RS6000_MCOUNT), 0, VOIDmode, 1,
fun, Pmode);
+ #endif
}
else if (DEFAULT_ABI == ABI_DARWIN)
{
*************** output_function_profiler (file, labelno)
*** 10506,10511 ****
--- 10387,10393 ----
int labelno;
{
char buf[100];
+ int save_lr = 8;
ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
switch (DEFAULT_ABI)
*************** output_function_profiler (file, labelno)
*** 10514,10526 ****
abort ();
case ABI_V4:
case ABI_AIX_NODESC:
fprintf (file, "\tmflr %s\n", reg_names[0]);
if (flag_pic == 1)
{
fputs ("\tbl _GLOBAL_OFFSET_TABLE_@local-4\n", file);
! asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
! reg_names[0], reg_names[1]);
asm_fprintf (file, "\tmflr %s\n", reg_names[12]);
asm_fprintf (file, "\t{l|lwz} %s,", reg_names[0]);
assemble_name (file, buf);
--- 10396,10416 ----
abort ();
case ABI_V4:
+ save_lr = 4;
+ /* Fall through. */
+
case ABI_AIX_NODESC:
+ if (!TARGET_32BIT)
+ {
+ warning ("no profiling of 64-bit code for this ABI");
+ return;
+ }
fprintf (file, "\tmflr %s\n", reg_names[0]);
if (flag_pic == 1)
{
fputs ("\tbl _GLOBAL_OFFSET_TABLE_@local-4\n", file);
! asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
! reg_names[0], save_lr, reg_names[1]);
asm_fprintf (file, "\tmflr %s\n", reg_names[12]);
asm_fprintf (file, "\t{l|lwz} %s,", reg_names[0]);
assemble_name (file, buf);
*************** output_function_profiler (file, labelno)
*** 10528,10535 ****
}
else if (flag_pic > 1)
{
! asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
! reg_names[0], reg_names[1]);
/* Now, we need to get the address of the label. */
fputs ("\tbl 1f\n\t.long ", file);
assemble_name (file, buf);
--- 10418,10425 ----
}
else if (flag_pic > 1)
{
! asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
! reg_names[0], save_lr, reg_names[1]);
/* Now, we need to get the address of the label. */
fputs ("\tbl 1f\n\t.long ", file);
assemble_name (file, buf);
*************** output_function_profiler (file, labelno)
*** 10545,10571 ****
asm_fprintf (file, "\t{liu|lis} %s,", reg_names[12]);
assemble_name (file, buf);
fputs ("@ha\n", file);
! asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
! reg_names[0], reg_names[1]);
asm_fprintf (file, "\t{cal|la} %s,", reg_names[0]);
assemble_name (file, buf);
asm_fprintf (file, "@l(%s)\n", reg_names[12]);
}
! if (current_function_needs_context)
! asm_fprintf (file, "\tmr %s,%s\n",
! reg_names[30], reg_names[STATIC_CHAIN_REGNUM]);
! fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
! if (current_function_needs_context)
! asm_fprintf (file, "\tmr %s,%s\n",
! reg_names[STATIC_CHAIN_REGNUM], reg_names[30]);
break;
case ABI_AIX:
case ABI_DARWIN:
/* Don't do anything, done in output_profile_hook (). */
break;
-
}
}
--- 10435,10466 ----
asm_fprintf (file, "\t{liu|lis} %s,", reg_names[12]);
assemble_name (file, buf);
fputs ("@ha\n", file);
! asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
! reg_names[0], save_lr, reg_names[1]);
asm_fprintf (file, "\t{cal|la} %s,", reg_names[0]);
assemble_name (file, buf);
asm_fprintf (file, "@l(%s)\n", reg_names[12]);
}
! if (current_function_needs_context && DEFAULT_ABI == ABI_AIX_NODESC)
! {
! asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
! reg_names[STATIC_CHAIN_REGNUM],
! 12, reg_names[1]);
! fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
! asm_fprintf (file, "\t{l|lwz} %s,%d(%s)\n",
! reg_names[STATIC_CHAIN_REGNUM],
! 12, reg_names[1]);
! }
! else
! /* ABI_V4 saves the static chain reg with ASM_OUTPUT_REG_PUSH. */
! fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
break;
case ABI_AIX:
case ABI_DARWIN:
/* Don't do anything, done in output_profile_hook (). */
break;
}
}
*************** rs6000_select_section (decl, reloc)
*** 10886,10903 ****
if (TREE_CODE (decl) == STRING_CST)
readonly = ! flag_writable_strings;
else if (TREE_CODE (decl) == VAR_DECL)
! readonly = (! (flag_pic && reloc)
&& TREE_READONLY (decl)
&& ! TREE_SIDE_EFFECTS (decl)
&& DECL_INITIAL (decl)
&& DECL_INITIAL (decl) != error_mark_node
&& TREE_CONSTANT (DECL_INITIAL (decl)));
else if (TREE_CODE (decl) == CONSTRUCTOR)
! readonly = (! (flag_pic && reloc)
&& ! TREE_SIDE_EFFECTS (decl)
&& TREE_CONSTANT (decl));
else
! readonly = 1;
if (needs_sdata && rs6000_sdata != SDATA_EABI)
readonly = 0;
--- 10781,10799 ----
if (TREE_CODE (decl) == STRING_CST)
readonly = ! flag_writable_strings;
else if (TREE_CODE (decl) == VAR_DECL)
! readonly = (! ((flag_pic || DEFAULT_ABI == ABI_AIX) && reloc)
&& TREE_READONLY (decl)
&& ! TREE_SIDE_EFFECTS (decl)
&& DECL_INITIAL (decl)
&& DECL_INITIAL (decl) != error_mark_node
&& TREE_CONSTANT (DECL_INITIAL (decl)));
else if (TREE_CODE (decl) == CONSTRUCTOR)
! readonly = (! ((flag_pic || DEFAULT_ABI == ABI_AIX) && reloc)
&& ! TREE_SIDE_EFFECTS (decl)
&& TREE_CONSTANT (decl));
else
! readonly = ! ((flag_pic || DEFAULT_ABI == ABI_AIX) && reloc);
!
if (needs_sdata && rs6000_sdata != SDATA_EABI)
readonly = 0;
*************** rs6000_unique_section (decl, reloc)
*** 10942,10955 ****
int needs_sdata;
int size;
- readonly = 1;
if (TREE_CODE (decl) == STRING_CST)
readonly = ! flag_writable_strings;
else if (TREE_CODE (decl) == VAR_DECL)
! readonly = (! (flag_pic && reloc)
&& TREE_READONLY (decl)
&& ! TREE_SIDE_EFFECTS (decl)
&& TREE_CONSTANT (DECL_INITIAL (decl)));
size = int_size_in_bytes (TREE_TYPE (decl));
needs_sdata = (size > 0
--- 10838,10852 ----
int needs_sdata;
int size;
if (TREE_CODE (decl) == STRING_CST)
readonly = ! flag_writable_strings;
else if (TREE_CODE (decl) == VAR_DECL)
! readonly = (! ((flag_pic || DEFAULT_ABI == ABI_AIX) && reloc)
&& TREE_READONLY (decl)
&& ! TREE_SIDE_EFFECTS (decl)
&& TREE_CONSTANT (DECL_INITIAL (decl)));
+ else
+ readonly = ! ((flag_pic || DEFAULT_ABI == ABI_AIX) && reloc);
size = int_size_in_bytes (TREE_TYPE (decl));
needs_sdata = (size > 0
diff -Nrc3pad gcc-3.2/gcc/config/rs6000/rs6000.md gcc-3.2.1/gcc/config/rs6000/rs6000.md
*** gcc-3.2/gcc/config/rs6000/rs6000.md Mon Jul 15 05:29:43 2002
--- gcc-3.2.1/gcc/config/rs6000/rs6000.md Mon Oct 7 04:21:05 2002
***************
*** 9641,9647 ****
[(set (match_operand:SI 0 "register_operand" "=l")
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1)] 7)]
! "TARGET_ELF && flag_pic == 2"
"bl %1\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "4")])
--- 9641,9647 ----
[(set (match_operand:SI 0 "register_operand" "=l")
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1)] 7)]
! "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
"bl %1\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "4")])
***************
*** 9650,9666 ****
[(set (match_operand:SI 0 "register_operand" "=l")
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1) (match_operand 2 "immediate_operand" "s")] 6)]
! "TARGET_ELF && flag_pic == 2"
"bl %1\\n\\t.long %2-%1+4\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "8")])
(define_insn "load_toc_v4_PIC_2"
[(set (match_operand:SI 0 "register_operand" "=r")
! (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r")
(minus:SI (match_operand:SI 2 "immediate_operand" "s")
(match_operand:SI 3 "immediate_operand" "s")))))]
! "TARGET_ELF && flag_pic == 2"
"{l|lwz} %0,%2-%3(%1)"
[(set_attr "type" "load")])
--- 9650,9666 ----
[(set (match_operand:SI 0 "register_operand" "=l")
(match_operand:SI 1 "immediate_operand" "s"))
(unspec [(match_dup 1) (match_operand 2 "immediate_operand" "s")] 6)]
! "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
"bl %1\\n\\t.long %2-%1+4\\n%1:"
[(set_attr "type" "branch")
(set_attr "length" "8")])
(define_insn "load_toc_v4_PIC_2"
[(set (match_operand:SI 0 "register_operand" "=r")
! (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "b")
(minus:SI (match_operand:SI 2 "immediate_operand" "s")
(match_operand:SI 3 "immediate_operand" "s")))))]
! "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
"{l|lwz} %0,%2-%3(%1)"
[(set_attr "type" "load")])
***************
*** 11253,11267 ****
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "r,O"))
! (match_operand:SI 3 "gpc_reg_operand" "r,r")))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"TARGET_POWER"
"@
! doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
! {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
--- 11253,11266 ----
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
(plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "r,O"))
! (match_operand:SI 3 "gpc_reg_operand" "r,r")))]
"TARGET_POWER"
"@
! doz %0,%2,%1\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3
! {srai|srawi} %0,%1,31\;{sf|subfc} %0,%1,%0\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 11292,11337 ****
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
(plus:SI (le:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_short_operand" "r,O,r,O"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
! (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r,&r,&r"))]
"TARGET_POWER"
"@
! doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
! {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze.|addze.} %0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "12,12,16,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"TARGET_POWER && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 11291,11333 ----
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
(plus:SI (le:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_short_operand" "r,O,r,O"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r,&r,&r")
! (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER"
"@
! doz %0,%2,%1\;{sfi|subfic} %0,%0,0\;{aze.|addze.} %0,%3
! {srai|srawi} %0,%1,31\;{sf|subfc} %0,%1,%0\;{aze.|addze.} %0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "12,12,16,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER && reload_completed"
! [(set (match_dup 0)
(plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 11481,11517 ****
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
! (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"! TARGET_POWERPC64"
"@
! {sf%I2|subf%I2c} %4,%1,%2\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "8,12")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 11477,11510 ----
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
! (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64"
"@
! {sf%I2|subf%I2c} %0,%1,%2\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "8,12")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 11525,11538 ****
[(set_attr "length" "12")])
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(and:SI (neg:SI
(leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "rI")))
! (match_operand:SI 3 "gpc_reg_operand" "r")))
! (clobber (match_scratch:SI 4 "=&r"))]
"! TARGET_POWERPC64"
! "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4"
[(set_attr "length" "12")])
(define_insn ""
--- 11518,11530 ----
[(set_attr "length" "12")])
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
(and:SI (neg:SI
(leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "rI")))
! (match_operand:SI 3 "gpc_reg_operand" "r")))]
"! TARGET_POWERPC64"
! "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 11562,11595 ****
(clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
! (and:SI (neg:SI (leu:SI (match_dup 1)
! (match_dup 2)))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,?y")
(compare:CC
(and:SI (neg:SI
(leu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI")))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"! TARGET_POWERPC64"
"@
! {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(and:SI (neg:SI
(leu:SI (match_operand:SI 1 "gpc_reg_operand" "")
--- 11554,11585 ----
(clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2)))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(and:SI (neg:SI
(leu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI")))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))]
"! TARGET_POWERPC64"
"@
! {sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;andc. %0,%3,%0
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(and:SI (neg:SI
(leu:SI (match_operand:SI 1 "gpc_reg_operand" "")
***************
*** 11597,11609 ****
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 11587,11598 ----
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
! (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2)))
! (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 11648,11660 ****
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "rI"))
! (match_operand:SI 3 "gpc_reg_operand" "r")))
! (clobber (match_scratch:SI 4 "=&r"))]
"TARGET_POWER"
! "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
--- 11637,11648 ----
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
(plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "rI"))
! (match_operand:SI 3 "gpc_reg_operand" "r")))]
"TARGET_POWER"
! "doz%I2 %0,%1,%2\;{ai|addic} %0,%0,-1\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 11683,11726 ****
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
(plus:SI (lt:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
! (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"TARGET_POWER"
"@
! doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"TARGET_POWER && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 11671,11711 ----
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
(plus:SI (lt:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
! (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER"
"@
! doz%I2 %0,%1,%2\;{ai|addic} %0,%0,-1\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER && reload_completed"
! [(set (match_dup 0)
(plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 11815,11860 ****
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
(plus:SI (ltu:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P,r,P"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
! (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r,&r,&r"))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3
! {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "12,12,16,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_neg_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 11800,11842 ----
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
(plus:SI (ltu:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P,r,P"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r,&r,&r")
! (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;{sf.|subfc.} %0,%0,%3
! {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;{sf.|subfc.} %0,%0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "12,12,16,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_neg_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 11905,11925 ****
(clobber (match_scratch:SI 3 ""))]
"TARGET_POWER && reload_completed"
[(parallel [(set (match_dup 0)
! (ge:SI (match_dup 1) (match_dup 2)))
! (clobber (match_dup 3))])
(set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "rI"))
! (match_operand:SI 3 "gpc_reg_operand" "r")))
! (clobber (match_scratch:SI 4 "=&r"))]
"TARGET_POWER"
! "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
--- 11887,11906 ----
(clobber (match_scratch:SI 3 ""))]
"TARGET_POWER && reload_completed"
[(parallel [(set (match_dup 0)
! (ge:SI (match_dup 1) (match_dup 2)))
! (clobber (match_dup 3))])
(set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
(plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "rI"))
! (match_operand:SI 3 "gpc_reg_operand" "r")))]
"TARGET_POWER"
! "doz%I2 %0,%1,%2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 11948,11991 ****
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
(plus:SI (ge:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
! (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"TARGET_POWER"
"@
! doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"TARGET_POWER && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 11929,11969 ----
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
(plus:SI (ge:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "rI,rI"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
! (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER"
"@
! doz%I2 %0,%1,%2\;{sfi|subfic} %0,%0,0\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER && reload_completed"
! [(set (match_dup 0)
(plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 12130,12168 ****
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P,r,P"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
! (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r,&r,&r"))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %4,%2,%1\;{aze.|addze.} %0,%3
! {ai|addic} %4,%1,%n2\;{aze.|addze.} %0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "8,8,12,12")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_neg_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 12108,12143 ----
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P,r,P"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r,&r,&r")
! (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %0,%2,%1\;{aze.|addze.} %0,%3
! {ai|addic} %0,%1,%n2\;{aze.|addze.} %0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "8,8,12,12")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_neg_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 12178,12193 ****
[(set_attr "length" "12")])
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(and:SI (neg:SI
(geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
! (match_operand:SI 3 "gpc_reg_operand" "r,r")))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4
! {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4"
[(set_attr "length" "12")])
(define_insn ""
--- 12153,12167 ----
[(set_attr "length" "12")])
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
(and:SI (neg:SI
(geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
! (match_operand:SI 3 "gpc_reg_operand" "r,r")))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0
! {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 12219,12254 ****
(clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
! (and:SI (neg:SI (geu:SI (match_dup 1)
! (match_dup 2)))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(and:SI (neg:SI
(geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P,r,P")))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
! (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r,&r,&r"))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4
! {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4
#
#"
[(set_attr "type" "compare")
(set_attr "length" "12,12,16,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(and:SI (neg:SI
(geu:SI (match_operand:SI 1 "gpc_reg_operand" "")
--- 12193,12226 ----
(clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
! (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2)))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(and:SI (neg:SI
(geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_neg_short_operand" "r,P,r,P")))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r,&r,&r")
! (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))]
"! TARGET_POWERPC64"
"@
! {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;andc. %0,%3,%0
! {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;andc. %0,%3,%0
#
#"
[(set_attr "type" "compare")
(set_attr "length" "12,12,16,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(and:SI (neg:SI
(geu:SI (match_operand:SI 1 "gpc_reg_operand" "")
***************
*** 12256,12268 ****
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 12228,12238 ----
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 12394,12406 ****
[(set_attr "length" "12")])
(define_insn ""
! [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
(plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
(const_int 0))
! (match_operand:DI 2 "gpc_reg_operand" "r")))
! (clobber (match_scratch:DI 3 "=&r"))]
"TARGET_POWERPC64"
! "addc %3,%1,%1\;subfe %3,%1,%3\;addze %0,%2"
[(set_attr "length" "12")])
(define_insn ""
--- 12364,12375 ----
[(set_attr "length" "12")])
(define_insn ""
! [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
(plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
(const_int 0))
! (match_operand:DI 2 "gpc_reg_operand" "r")))]
"TARGET_POWERPC64"
! "addc %0,%1,%1\;subfe %0,%1,%0\;addze %0,%2"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 12461,12552 ****
"TARGET_POWERPC64 && reload_completed"
[(set (match_dup 3)
(plus:DI (gt:DI (match_dup 1) (const_int 0))
! (match_dup 2)))
(set (match_dup 0)
(compare:CC (match_dup 3)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(const_int 0))
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
! (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
! (clobber (match_scratch:SI 3 "=&r,&r"))]
"! TARGET_POWERPC64"
"@
! {a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze.|addze.} %0,%2
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
(const_int 0))
(match_operand:SI 2 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
! (clobber (match_scratch:SI 3 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
! (clobber (match_dup 3))])
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(const_int 0))
(match_operand:DI 2 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
! (plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))
! (clobber (match_scratch:DI 3 "=&r,&r"))]
"TARGET_POWERPC64"
"@
! addc %3,%1,%1\;subfe %3,%1,%3\;addze. %0,%2
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "")
(const_int 0))
(match_operand:DI 2 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
! (plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))
! (clobber (match_scratch:DI 3 ""))]
"TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))
! (clobber (match_dup 3))])
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "r"))
! (match_operand:SI 3 "gpc_reg_operand" "r")))
! (clobber (match_scratch:SI 4 "=&r"))]
"TARGET_POWER"
! "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
--- 12430,12514 ----
"TARGET_POWERPC64 && reload_completed"
[(set (match_dup 3)
(plus:DI (gt:DI (match_dup 1) (const_int 0))
! (match_dup 2)))
(set (match_dup 0)
(compare:CC (match_dup 3)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(const_int 0))
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
! (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))]
"! TARGET_POWERPC64"
"@
! {a|addc} %0,%1,%1\;{sfe|subfe} %0,%1,%0\;{aze.|addze.} %0,%2
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
(const_int 0))
(match_operand:SI 2 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
! (set (match_dup 3)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(const_int 0))
(match_operand:DI 2 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r")
! (plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))]
"TARGET_POWERPC64"
"@
! addc %0,%1,%1\;subfe %0,%1,%0\;addze. %0,%2
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "")
(const_int 0))
(match_operand:DI 2 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
! (plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))]
"TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))
! (set (match_dup 3)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_short_operand" "r"))
! (match_operand:SI 3 "gpc_reg_operand" "r")))]
"TARGET_POWER"
! "doz %0,%2,%1\;{ai|addic} %0,%0,-1\;{aze|addze} %0,%3"
[(set_attr "length" "12")])
(define_insn ""
***************
*** 12574,12618 ****
(clobber (match_scratch:SI 4 ""))]
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
! (plus:SI (gt:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "r,r"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
! (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r"))]
"TARGET_POWER"
"@
! doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"TARGET_POWER && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 12536,12576 ----
(clobber (match_scratch:SI 4 ""))]
"TARGET_POWER && reload_completed"
[(set (match_dup 4)
! (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,?y")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "reg_or_short_operand" "r,r"))
(match_operand:SI 3 "gpc_reg_operand" "r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
! (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER"
"@
! doz %0,%2,%1\;{ai|addic} %0,%0,-1\;{aze.|addze.} %0,%3
#"
[(set_attr "type" "compare")
(set_attr "length" "12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWER && reload_completed"
! [(set (match_dup 0)
(plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
***************
*** 12731,12745 ****
[(set_attr "length" "8,12")])
(define_insn ""
! [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
(plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(match_operand:DI 2 "reg_or_short_operand" "I,rI"))
! (match_operand:DI 3 "reg_or_short_operand" "r,rI")))
! (clobber (match_scratch:DI 4 "=&r,&r"))]
"TARGET_POWERPC64"
"@
! addic %4,%1,%k2\;addze %0,%3
! subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subf%I3c %0,%4,%3"
[(set_attr "length" "8,12")])
(define_insn ""
--- 12689,12702 ----
[(set_attr "length" "8,12")])
(define_insn ""
! [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r")
(plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(match_operand:DI 2 "reg_or_short_operand" "I,rI"))
! (match_operand:DI 3 "reg_or_short_operand" "r,rI")))]
"TARGET_POWERPC64"
"@
! addic %0,%1,%k2\;addze %0,%3
! subf%I2c %0,%1,%2\;subfe %0,%0,%0\;subf%I3c %0,%0,%3"
[(set_attr "length" "8,12")])
(define_insn ""
***************
*** 12770,12776 ****
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
(plus:SI (gtu:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
--- 12727,12733 ----
"! TARGET_POWERPC64 && reload_completed"
[(set (match_dup 4)
(plus:SI (gtu:SI (match_dup 1) (match_dup 2))
! (match_dup 3)))
(set (match_dup 0)
(compare:CC (match_dup 4)
(const_int 0)))]
***************
*** 12811,12887 ****
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_short_operand" "I,r,I,r"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
! (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 "=&r,&r,&r,&r"))]
"! TARGET_POWERPC64"
"@
! {ai|addic} %4,%1,%k2\;{aze.|addze.} %0,%3
! {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "8,12,12,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:SI 4 ""))]
"! TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:DI 2 "reg_or_short_operand" "I,r,I,r"))
(match_operand:DI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
! (plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:DI 4 "=&r,&r,&r,&r"))]
"TARGET_POWERPC64"
"@
! addic %4,%1,%k2\;addze. %0,%3
! subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subfc. %0,%4,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "8,12,12,16")])
(define_split
! [(set (match_operand:CC 5 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "")
(match_operand:DI 2 "reg_or_short_operand" ""))
(match_operand:DI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
! (plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_scratch:DI 4 ""))]
"TARGET_POWERPC64 && reload_completed"
! [(parallel [(set (match_dup 0)
(plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (clobber (match_dup 4))])
! (set (match_dup 5)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
--- 12768,12838 ----
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:SI 2 "reg_or_short_operand" "I,r,I,r"))
(match_operand:SI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r,&r,&r")
! (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64"
"@
! {ai|addic} %0,%1,%k2\;{aze.|addze.} %0,%3
! {sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;{sf.|subfc.} %0,%0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "8,12,12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_short_operand" ""))
(match_operand:SI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "")
! (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"! TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
(define_insn ""
! [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,?y,?y")
(compare:CC
(plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,r,r")
(match_operand:DI 2 "reg_or_short_operand" "I,r,I,r"))
(match_operand:DI 3 "gpc_reg_operand" "r,r,r,r"))
(const_int 0)))
! (set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,&r,&r")
! (plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWERPC64"
"@
! addic %0,%1,%k2\;addze. %0,%3
! subf%I2c %0,%1,%2\;subfe %0,%0,%0\;subfc. %0,%0,%3
#
#"
[(set_attr "type" "compare")
(set_attr "length" "8,12,12,16")])
(define_split
! [(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
(plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "")
(match_operand:DI 2 "reg_or_short_operand" ""))
(match_operand:DI 3 "gpc_reg_operand" ""))
(const_int 0)))
(set (match_operand:DI 0 "gpc_reg_operand" "")
! (plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
"TARGET_POWERPC64 && reload_completed"
! [(set (match_dup 0)
(plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))
! (set (match_dup 4)
(compare:CC (match_dup 0)
(const_int 0)))]
"")
diff -Nrc3pad gcc-3.2/gcc/config/rs6000/sysv4.h gcc-3.2.1/gcc/config/rs6000/sysv4.h
*** gcc-3.2/gcc/config/rs6000/sysv4.h Thu Aug 8 17:52:40 2002
--- gcc-3.2.1/gcc/config/rs6000/sysv4.h Fri Sep 13 06:53:05 2002
*************** do { \
*** 770,775 ****
--- 770,807 ----
ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
} while (0)
+ /* This is how to output code to push a register on the stack.
+ 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 { \
+ if (DEFAULT_ABI == ABI_V4) \
+ asm_fprintf (FILE, \
+ (TARGET_32BIT \
+ ? "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n" \
+ : "\tstdu %s,-32(%s)\n\tstd %s,24(%s)\n"), \
+ reg_names[1], reg_names[1], reg_names[REGNO], \
+ reg_names[1]); \
+ } while (0)
+
+ /* This is how to output an insn to pop a register from the stack.
+ It need not be very fast code. */
+
+ #define ASM_OUTPUT_REG_POP(FILE, REGNO) \
+ do { \
+ if (DEFAULT_ABI == ABI_V4) \
+ asm_fprintf (FILE, \
+ (TARGET_32BIT \
+ ? "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n" \
+ : "\tld %s,24(%s)\n\t{ai|addic} %s,%s,32\n"), \
+ reg_names[REGNO], reg_names[1], reg_names[1], \
+ reg_names[1]); \
+ } while (0)
+
/* Switch Recognition by gcc.c. Add -G xx support. */
/* Override svr4.h definition. */
diff -Nrc3pad gcc-3.2/gcc/config/s390/s390.md gcc-3.2.1/gcc/config/s390/s390.md
*** gcc-3.2/gcc/config/s390/s390.md Tue Jun 11 14:49:17 2002
--- gcc-3.2.1/gcc/config/s390/s390.md Wed Oct 23 10:46:00 2002
***************
*** 957,963 ****
ldr\\t%0,%1
ld\\t%0,%1
std\\t%1,%0"
! [(set_attr "op_type" "RR,RXE,RXE,RR,RX,RX")
(set_attr "atype" "reg,mem,mem,reg,mem,mem")])
(define_insn "*movdi_31"
--- 957,963 ----
ldr\\t%0,%1
ld\\t%0,%1
std\\t%1,%0"
! [(set_attr "op_type" "RRE,RXE,RXE,RR,RX,RX")
(set_attr "atype" "reg,mem,mem,reg,mem,mem")])
(define_insn "*movdi_31"
***************
*** 1240,1246 ****
lgr\\t%0,%1
lg\\t%0,%1
stg\\t%1,%0"
! [(set_attr "op_type" "RR,RX,RX,RR,RXE,RXE")
(set_attr "atype" "reg,mem,mem,reg,mem,mem")])
(define_insn "*movdf_31"
--- 1240,1246 ----
lgr\\t%0,%1
lg\\t%0,%1
stg\\t%1,%0"
! [(set_attr "op_type" "RR,RX,RX,RRE,RXE,RXE")
(set_attr "atype" "reg,mem,mem,reg,mem,mem")])
(define_insn "*movdf_31"
***************
*** 2111,2125 ****
reg1 = gen_reg_rtx (DImode);
}
- if (! CONSTANT_P (len))
- len = force_reg (Pmode, len);
-
/* Load up the address+length pairs. */
emit_move_insn (gen_highpart (Pmode, reg0), addr0);
! emit_move_insn (gen_lowpart (Pmode, reg0), len);
emit_move_insn (gen_highpart (Pmode, reg1), addr1);
! emit_move_insn (gen_lowpart (Pmode, reg1), len);
/* Compare! */
if (TARGET_64BIT)
--- 2111,2122 ----
reg1 = gen_reg_rtx (DImode);
}
/* Load up the address+length pairs. */
emit_move_insn (gen_highpart (Pmode, reg0), addr0);
! convert_move (gen_lowpart (Pmode, reg0), len, 1);
emit_move_insn (gen_highpart (Pmode, reg1), addr1);
! convert_move (gen_lowpart (Pmode, reg1), len, 1);
/* Compare! */
if (TARGET_64BIT)
***************
*** 3226,3231 ****
--- 3223,3241 ----
[(set_attr "op_type" "RR,RI,RX")
(set_attr "atype" "reg,reg,mem")])
+ (define_insn "*addsi3_inv"
+ [(set (match_operand:SI 0 "register_operand" "=d,d,d")
+ (plus:SI (match_operand:SI 1 "general_operand" "%d,K,m")
+ (match_operand:SI 2 "register_operand" "0,0,0")))
+ (clobber (reg:CC 33))]
+ ""
+ "@
+ ar\\t%0,%1
+ ahi\\t%0,%h1
+ a\\t%0,%1"
+ [(set_attr "op_type" "RR,RI,RX")
+ (set_attr "atype" "reg,reg,mem")])
+
(define_insn "*la_31"
[(set (match_operand:SI 0 "register_operand" "=d")
(match_operand:QI 1 "address_operand" "p"))]
***************
*** 5462,5468 ****
"@
srlg\\t%0,%1,%c2
srlg\\t%0,%1,0(%2)"
! [(set_attr "op_type" "RS,RS")])
;
; lshrsi3 instruction pattern(s).
--- 5472,5478 ----
"@
srlg\\t%0,%1,%c2
srlg\\t%0,%1,0(%2)"
! [(set_attr "op_type" "RSE,RSE")])
;
; lshrsi3 instruction pattern(s).
diff -Nrc3pad gcc-3.2/gcc/config/sparc/freebsd.h gcc-3.2.1/gcc/config/sparc/freebsd.h
*** gcc-3.2/gcc/config/sparc/freebsd.h Mon Apr 8 17:17:18 2002
--- gcc-3.2.1/gcc/config/sparc/freebsd.h Wed Nov 6 21:30:59 2002
*************** You should have received a copy of the G
*** 18,28 ****
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
! /* FreeBSD needs's the platform name (sparc64) defined. */
#undef CPP_CPU64_DEFAULT_SPEC
! #define CPP_CPU64_DEFAULT_SPEC "-D__sparc64__ -D__sparc_v9__"
#undef CPP_PREDEFINES
#define CPP_PREDEFINES FBSD_CPP_PREDEFINES
--- 18,30 ----
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
! /* FreeBSD needs the platform name (sparc64) defined.
! Emacs needs to know if the arch is 64 or 32-bits. */
#undef CPP_CPU64_DEFAULT_SPEC
! #define CPP_CPU64_DEFAULT_SPEC "-D__sparc64__ -D__sparc_v9__ -D__arch64__"
+ /* Because we include sparc/sysv4.h. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES FBSD_CPP_PREDEFINES
*************** the Free Software Foundation, 675 Mass A
*** 99,104 ****
--- 101,131 ----
#undef SPARC_DEFAULT_CMODEL
#define SPARC_DEFAULT_CMODEL CM_MEDLOW
+ #define TRANSFER_FROM_TRAMPOLINE \
+ static int need_enable_exec_stack; \
+ static void check_enabling(void) __attribute__ ((constructor)); \
+ static void check_enabling(void) \
+ { \
+ extern int sysctlbyname(const char *, void *, size_t *, void *, size_t);\
+ int prot = 0; \
+ size_t len = sizeof(prot); \
+ \
+ sysctlbyname ("kern.stackprot", &prot, &len, NULL, 0); \
+ if (prot != 7) \
+ need_enable_exec_stack = 1; \
+ } \
+ extern void __enable_execute_stack (void *); \
+ void __enable_execute_stack (void *addr) \
+ { \
+ if (!need_enable_exec_stack) \
+ return; \
+ else { \
+ /* 7 is PROT_READ | PROT_WRITE | PROT_EXEC */ \
+ if (mprotect (addr, TRAMPOLINE_SIZE, 7) < 0) \
+ perror ("mprotect of trampoline code"); \
+ } \
+ }
+
/************************[ Assembler stuff ]********************************/
diff -Nrc3pad gcc-3.2/gcc/config/sparc/linux64.h gcc-3.2.1/gcc/config/sparc/linux64.h
*** gcc-3.2/gcc/config/sparc/linux64.h Mon Apr 29 04:09:50 2002
--- gcc-3.2.1/gcc/config/sparc/linux64.h Sat Oct 5 21:32:10 2002
***************
*** 1,5 ****
/* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF.
! Copyright 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
Contributed by David S. Miller (davem@caip.rutgers.edu)
This file is part of GNU CC.
--- 1,5 ----
/* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF.
! Copyright 1996, 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
Contributed by David S. Miller (davem@caip.rutgers.edu)
This file is part of GNU CC.
*************** Boston, MA 02111-1307, USA. */
*** 56,93 ****
#undef STARTFILE_SPEC
! #define STARTFILE_SPEC32 \
! "%{!shared: \
! %{pg:/usr/lib/gcrt1.o%s} %{!pg:%{/usr/lib/p:gcrt1.o%s} %{!p:/usr/lib/crt1.o%s}}}\
! /usr/lib/crti.o%s %{static:crtbeginT.o%s}\
! %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
!
! #define STARTFILE_SPEC64 \
"%{!shared: \
! %{pg:/usr/lib64/gcrt1.o%s} %{!pg:%{p:/usr/lib64/gcrt1.o%s} %{!p:/usr/lib64/crt1.o%s}}}\
! /usr/lib64/crti.o%s %{static:crtbeginT.o%s}\
%{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
- #ifdef SPARC_BI_ARCH
-
- #if DEFAULT_ARCH32_P
- #define STARTFILE_SPEC "\
- %{m32:" STARTFILE_SPEC32 "} \
- %{m64:" STARTFILE_SPEC64 "} \
- %{!m32:%{!m64:" STARTFILE_SPEC32 "}}"
- #else
- #define STARTFILE_SPEC "\
- %{m32:" STARTFILE_SPEC32 "} \
- %{m64:" STARTFILE_SPEC64 "} \
- %{!m32:%{!m64:" STARTFILE_SPEC64 "}}"
- #endif
-
- #else
-
- #define STARTFILE_SPEC STARTFILE_SPEC64
-
- #endif
-
/* 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
--- 56,67 ----
#undef STARTFILE_SPEC
! #define STARTFILE_SPEC \
"%{!shared: \
! %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
! crti.o%s %{static:crtbeginT.o%s}\
%{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
/* 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
*************** Boston, MA 02111-1307, USA. */
*** 96,131 ****
#undef ENDFILE_SPEC
! #define ENDFILE_SPEC32 \
! "%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib/crtn.o%s"
!
! #define ENDFILE_SPEC64 \
! "%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib64/crtn.o%s"
!
! #define ENDFILE_SPEC_COMMON \
! "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
!
! #ifdef SPARC_BI_ARCH
!
! #if DEFAULT_ARCH32_P
! #define ENDFILE_SPEC "\
! %{m32:" ENDFILE_SPEC32 "} \
! %{m64:" ENDFILE_SPEC64 "} \
! %{!m32:%{!m64:" ENDFILE_SPEC32 "}} " \
! ENDFILE_SPEC_COMMON
! #else
! #define ENDFILE_SPEC "\
! %{m32:" ENDFILE_SPEC32 "} \
! %{m64:" ENDFILE_SPEC64 "} \
! %{!m32:%{!m64:" ENDFILE_SPEC64 "}} " \
! ENDFILE_SPEC_COMMON
! #endif
!
! #else
!
! #define ENDFILE_SPEC ENDFILE_SPEC64 " " ENDFILE_SPEC_COMMON
!
! #endif
/* The GNU C++ standard library requires that these macros be defined. */
#undef CPLUSPLUS_CPP_SPEC
--- 70,78 ----
#undef ENDFILE_SPEC
! #define ENDFILE_SPEC \
! "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s\
! %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
/* The GNU C++ standard library requires that these macros be defined. */
#undef CPLUSPLUS_CPP_SPEC
diff -Nrc3pad gcc-3.2/gcc/config/sparc/sol2-bi.h gcc-3.2.1/gcc/config/sparc/sol2-bi.h
*** gcc-3.2/gcc/config/sparc/sol2-bi.h Mon Apr 22 19:53:42 2002
--- gcc-3.2.1/gcc/config/sparc/sol2-bi.h Sat Oct 5 21:32:10 2002
***************
*** 72,101 ****
%{!mcpu*:%(asm_cpu_default)} \
"
- #define STARTFILE_SPEC32 "\
- %{ansi:values-Xc.o%s} \
- %{!ansi: \
- %{traditional:values-Xt.o%s} \
- %{!traditional:values-Xa.o%s}}"
-
- #define STARTFILE_SPEC64 "\
- %{ansi:/usr/lib/sparcv9/values-Xc.o%s} \
- %{!ansi: \
- %{traditional:/usr/lib/sparcv9/values-Xt.o%s} \
- %{!traditional:/usr/lib/sparcv9/values-Xa.o%s}}"
-
- #if DEFAULT_ARCH32_P
- #define STARTFILE_ARCH_SPEC "\
- %{m32:" STARTFILE_SPEC32 "} \
- %{m64:" STARTFILE_SPEC64 "} \
- %{!m32:%{!m64:" STARTFILE_SPEC32 "}}"
- #else
- #define STARTFILE_ARCH_SPEC "\
- %{m32:" STARTFILE_SPEC32 "} \
- %{m64:" STARTFILE_SPEC64 "} \
- %{!m32:%{!m64:" STARTFILE_SPEC64 "}}"
- #endif
-
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{!shared: \
%{!symbolic: \
--- 72,77 ----
***************
*** 103,109 ****
%{!p: \
%{pg:gcrt1.o%s gmon.o%s} \
%{!pg:crt1.o%s}}}} \
! crti.o%s " STARTFILE_ARCH_SPEC " \
crtbegin.o%s"
#undef CPP_CPU_DEFAULT_SPEC
--- 79,88 ----
%{!p: \
%{pg:gcrt1.o%s gmon.o%s} \
%{!pg:crt1.o%s}}}} \
! crti.o%s \
! %{ansi:values-Xc.o%s} \
! %{!ansi: %{traditional:values-Xt.o%s} \
! %{!traditional:values-Xa.o%s}} \
crtbegin.o%s"
#undef CPP_CPU_DEFAULT_SPEC
diff -Nrc3pad gcc-3.2/gcc/config/sparc/sparc.c gcc-3.2.1/gcc/config/sparc/sparc.c
*** gcc-3.2/gcc/config/sparc/sparc.c Sun May 26 02:42:21 2002
--- gcc-3.2.1/gcc/config/sparc/sparc.c Thu Sep 26 10:20:03 2002
*************** set_extends (insn)
*** 8650,8656 ****
return INTVAL (op1) >= 0;
return (GET_CODE (op1) == REG && sparc_check_64 (op1, insn) == 1);
}
- case ASHIFT:
case LSHIFTRT:
return GET_MODE (SET_SRC (pat)) == SImode;
/* Positive integers leave the high bits zero. */
--- 8650,8655 ----
diff -Nrc3pad gcc-3.2/gcc/config/sparc/sparc.md gcc-3.2.1/gcc/config/sparc/sparc.md
*** gcc-3.2/gcc/config/sparc/sparc.md Sun May 5 21:45:02 2002
--- gcc-3.2.1/gcc/config/sparc/sparc.md Wed Oct 2 03:47:05 2002
***************
*** 2517,2523 ****
;
}")
! ;; Be careful, fmovd does not exist when !arch64.
;; We match MEM moves directly when we have correct even
;; numbered registers, but fall into splits otherwise.
;; The constraint ordering here is really important to
--- 2517,2523 ----
;
}")
! ;; Be careful, fmovd does not exist when !v9.
;; We match MEM moves directly when we have correct even
;; numbered registers, but fall into splits otherwise.
;; The constraint ordering here is really important to
***************
*** 2531,2539 ****
(define_insn "*movdi_insn_sp32_v9"
[(set (match_operand:DI 0 "nonimmediate_operand"
! "=T,o,T,U,o,r,r,r,?T,?f,?f,?o,?f")
(match_operand:DI 1 "input_operand"
! " J,J,U,T,r,o,i,r, f, T, o, f, f"))]
"! TARGET_ARCH64 && TARGET_V9
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"@
--- 2531,2539 ----
(define_insn "*movdi_insn_sp32_v9"
[(set (match_operand:DI 0 "nonimmediate_operand"
! "=T,o,T,U,o,r,r,r,?T,?f,?f,?o,?f,?e,?e,?W")
(match_operand:DI 1 "input_operand"
! " J,J,U,T,r,o,i,r, f, T, o, f, f, e, W, e"))]
"! TARGET_ARCH64 && TARGET_V9
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"@
***************
*** 2549,2557 ****
ldd\\t%1, %0
#
#
! #"
! [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,*")
! (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,2")])
(define_insn "*movdi_insn_sp32"
[(set (match_operand:DI 0 "nonimmediate_operand"
--- 2549,2561 ----
ldd\\t%1, %0
#
#
! #
! fmovd\\t%1, %0
! ldd\\t%1, %0
! std\\t%1, %0"
! [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,*,fpmove,fpload,fpstore")
! (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,2,*,*,*")
! (set_attr "fptype" "*,*,*,*,*,*,*,*,*,*,*,*,*,double,*,*")])
(define_insn "*movdi_insn_sp32"
[(set (match_operand:DI 0 "nonimmediate_operand"
***************
*** 2861,2867 ****
(define_split
[(set (match_operand:DI 0 "register_operand" "")
(match_operand:DI 1 "const_double_operand" ""))]
! "! TARGET_ARCH64 && reload_completed"
[(clobber (const_int 0))]
"
{
--- 2865,2878 ----
(define_split
[(set (match_operand:DI 0 "register_operand" "")
(match_operand:DI 1 "const_double_operand" ""))]
! "reload_completed
! && (! TARGET_V9
! || (! TARGET_ARCH64
! && ((GET_CODE (operands[0]) == REG
! && REGNO (operands[0]) < 32)
! || (GET_CODE (operands[0]) == SUBREG
! && GET_CODE (SUBREG_REG (operands[0])) == REG
! && REGNO (SUBREG_REG (operands[0])) < 32))))"
[(clobber (const_int 0))]
"
{
diff -Nrc3pad gcc-3.2/gcc/config/sparc/t-linux64 gcc-3.2.1/gcc/config/sparc/t-linux64
*** gcc-3.2/gcc/config/sparc/t-linux64 Fri Jun 21 11:25:58 2002
--- gcc-3.2.1/gcc/config/sparc/t-linux64 Tue Oct 8 21:58:53 2002
***************
*** 1,8 ****
! MULTILIB_OPTIONS = m64/m32 mno-app-regs|mcmodel=medany
! MULTILIB_DIRNAMES = 64 32 alt
! MULTILIB_MATCHES = mcmodel?medany=mcmodel?medmid
! MULTILIB_EXCEPTIONS = m32/mno-app-regs* m32/mcmodel=*
! MULTILIB_EXCLUSIONS = m32/!m64/mno-app-regs m32/!m64/mcmodel=medany
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
--- 1,6 ----
! MULTILIB_OPTIONS = m64/m32
! MULTILIB_DIRNAMES = 64 32
! MULTILIB_OSDIRNAMES = ../lib64 ../lib
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
*************** INSTALL_LIBGCC = install-multilib
*** 10,19 ****
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
crtfastmath.o
- SHLIB_SLIBDIR_SUFFIXES = 64:64 32:
-
# Override t-slibgcc-elf-ver to export some libgcc symbols with
# the symbol versions that glibc used.
# Avoid the t-linux version file.
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
$(srcdir)/config/sparc/libgcc-sparc-glibc.ver
--- 8,19 ----
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
crtfastmath.o
# Override t-slibgcc-elf-ver to export some libgcc symbols with
# the symbol versions that glibc used.
# Avoid the t-linux version file.
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
$(srcdir)/config/sparc/libgcc-sparc-glibc.ver
+
+ CRTSTUFF_T_CFLAGS = `if test x$$($(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) \
+ -print-multi-os-directory) \
+ = x../lib64; then echo -mcmodel=medany; fi`
diff -Nrc3pad gcc-3.2/gcc/config/sparc/t-netbsd64 gcc-3.2.1/gcc/config/sparc/t-netbsd64
*** gcc-3.2/gcc/config/sparc/t-netbsd64 Tue Feb 19 17:43:25 2002
--- gcc-3.2.1/gcc/config/sparc/t-netbsd64 Wed Sep 4 21:34:47 2002
***************
*** 1,6 ****
! MULTILIB_OPTIONS = m32/m64
! MULTILIB_DIRNAMES = 32 64
! MULTILIB_MATCHES =
! LIBGCC = stmp-multilib
! INSTALL_LIBGCC = install-multilib
--- 1,8 ----
! # Disable multilib fow now, as NetBSD/sparc64 does not ship with
! # a 32-bit environment.
! #MULTILIB_OPTIONS = m32/m64
! #MULTILIB_DIRNAMES = 32 64
! #MULTILIB_MATCHES =
! #LIBGCC = stmp-multilib
! #INSTALL_LIBGCC = install-multilib
diff -Nrc3pad gcc-3.2/gcc/config/sparc/t-sol2-64 gcc-3.2.1/gcc/config/sparc/t-sol2-64
*** gcc-3.2/gcc/config/sparc/t-sol2-64 Fri Jun 21 11:25:58 2002
--- gcc-3.2.1/gcc/config/sparc/t-sol2-64 Sat Oct 5 21:32:10 2002
***************
*** 1,11 ****
MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = sparcv7 sparcv9
MULTILIB_MATCHES =
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o gmon.o crt1.o crti.o crtn.o gcrt1.o \
crtfastmath.o
-
- SHLIB_SLIBDIR_SUFFIXES = sparcv9:/sparcv9 sparcv7:
--- 1,10 ----
MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = sparcv7 sparcv9
MULTILIB_MATCHES =
+ MULTILIB_OSDIRNAMES = . sparcv9
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o gmon.o crt1.o crti.o crtn.o gcrt1.o \
crtfastmath.o
diff -Nrc3pad gcc-3.2/gcc/config/xtensa/elf.h gcc-3.2.1/gcc/config/xtensa/elf.h
*** gcc-3.2/gcc/config/xtensa/elf.h Wed Jan 23 21:03:50 2002
--- gcc-3.2.1/gcc/config/xtensa/elf.h Tue Nov 5 21:33:24 2002
*************** Software Foundation, 59 Temple Place - S
*** 58,64 ****
#undef ASM_FINAL_SPEC
#undef LIB_SPEC
! #define LIB_SPEC "-lc -lsim -lc -lhandlers-sim"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "crt1-sim%O%s crti%O%s crtbegin%O%s _vectors%O%s"
--- 58,64 ----
#undef ASM_FINAL_SPEC
#undef LIB_SPEC
! #define LIB_SPEC "-lc -lsim -lc -lhandlers-sim -lhal"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "crt1-sim%O%s crti%O%s crtbegin%O%s _vectors%O%s"
diff -Nrc3pad gcc-3.2/gcc/config/xtensa/xtensa-protos.h gcc-3.2.1/gcc/config/xtensa/xtensa-protos.h
*** gcc-3.2/gcc/config/xtensa/xtensa-protos.h Fri Jun 28 19:40:31 2002
--- gcc-3.2.1/gcc/config/xtensa/xtensa-protos.h Mon Sep 30 20:34:09 2002
***************
*** 1,5 ****
/* Prototypes of target machine for GNU compiler for Xtensa.
! Copyright (C) 2001 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
--- 1,5 ----
/* Prototypes of target machine for GNU compiler for Xtensa.
! Copyright 2001,2002 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
*************** extern void xtensa_reorg PARAMS ((rtx));
*** 89,95 ****
extern rtx xtensa_return_addr PARAMS ((int, rtx));
extern rtx xtensa_builtin_saveregs PARAMS ((void));
extern enum reg_class xtensa_preferred_reload_class
! PARAMS ((rtx, enum reg_class));
extern enum reg_class xtensa_secondary_reload_class
PARAMS ((enum reg_class, enum machine_mode, rtx, int));
extern int a7_overlap_mentioned_p PARAMS ((rtx x));
--- 89,95 ----
extern rtx xtensa_return_addr PARAMS ((int, rtx));
extern rtx xtensa_builtin_saveregs PARAMS ((void));
extern enum reg_class xtensa_preferred_reload_class
! PARAMS ((rtx, enum reg_class, int));
extern enum reg_class xtensa_secondary_reload_class
PARAMS ((enum reg_class, enum machine_mode, rtx, int));
extern int a7_overlap_mentioned_p PARAMS ((rtx x));
diff -Nrc3pad gcc-3.2/gcc/config/xtensa/xtensa.c gcc-3.2.1/gcc/config/xtensa/xtensa.c
*** gcc-3.2/gcc/config/xtensa/xtensa.c Fri Jun 28 19:40:31 2002
--- gcc-3.2.1/gcc/config/xtensa/xtensa.c Mon Sep 30 20:34:09 2002
***************
*** 1,5 ****
/* Subroutines for insn-output.c for Tensilica's Xtensa architecture.
! Copyright (C) 2001 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
--- 1,5 ----
/* Subroutines for insn-output.c for Tensilica's Xtensa architecture.
! Copyright 2001,2002 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
*************** const char xtensa_leaf_regs[FIRST_PSEUDO
*** 104,113 ****
/* Map hard register number to register class */
const enum reg_class xtensa_regno_to_class[FIRST_PSEUDO_REGISTER] =
{
! GR_REGS, SP_REG, GR_REGS, GR_REGS,
! GR_REGS, GR_REGS, GR_REGS, GR_REGS,
! GR_REGS, GR_REGS, GR_REGS, GR_REGS,
! GR_REGS, GR_REGS, GR_REGS, GR_REGS,
AR_REGS, AR_REGS, BR_REGS,
FP_REGS, FP_REGS, FP_REGS, FP_REGS,
FP_REGS, FP_REGS, FP_REGS, FP_REGS,
--- 104,113 ----
/* Map hard register number to register class */
const enum reg_class xtensa_regno_to_class[FIRST_PSEUDO_REGISTER] =
{
! RL_REGS, SP_REG, RL_REGS, RL_REGS,
! RL_REGS, RL_REGS, RL_REGS, GR_REGS,
! RL_REGS, RL_REGS, RL_REGS, RL_REGS,
! RL_REGS, RL_REGS, RL_REGS, RL_REGS,
AR_REGS, AR_REGS, BR_REGS,
FP_REGS, FP_REGS, FP_REGS, FP_REGS,
FP_REGS, FP_REGS, FP_REGS, FP_REGS,
*************** xtensa_va_arg (valist, type)
*** 2625,2640 ****
enum reg_class
! xtensa_preferred_reload_class (x, class)
rtx x;
enum reg_class class;
{
! if (CONSTANT_P (x) && GET_CODE (x) == CONST_DOUBLE)
return NO_REGS;
! /* Don't use sp for reloads! */
! if (class == AR_REGS)
! return GR_REGS;
return class;
}
--- 2625,2646 ----
enum reg_class
! xtensa_preferred_reload_class (x, class, isoutput)
rtx x;
enum reg_class class;
+ int isoutput;
{
! if (!isoutput && CONSTANT_P (x) && GET_CODE (x) == CONST_DOUBLE)
return NO_REGS;
! /* Don't use the stack pointer or hard frame pointer for reloads!
! The hard frame pointer would normally be OK except that it may
! briefly hold an incoming argument in the prologue, and reload
! won't know that it is live because the hard frame pointer is
! treated specially. */
!
! if (class == AR_REGS || class == GR_REGS)
! return RL_REGS;
return class;
}
*************** xtensa_secondary_reload_class (class, mo
*** 2656,2668 ****
if (!isoutput)
{
if (class == FP_REGS && constantpool_mem_p (x))
! return GR_REGS;
}
if (ACC_REG_P (regno))
! return (class == GR_REGS ? NO_REGS : GR_REGS);
if (class == ACC_REG)
! return (GP_REG_P (regno) ? NO_REGS : GR_REGS);
return NO_REGS;
}
--- 2662,2674 ----
if (!isoutput)
{
if (class == FP_REGS && constantpool_mem_p (x))
! return RL_REGS;
}
if (ACC_REG_P (regno))
! return ((class == GR_REGS || class == RL_REGS) ? NO_REGS : RL_REGS);
if (class == ACC_REG)
! return (GP_REG_P (regno) ? NO_REGS : RL_REGS);
return NO_REGS;
}
diff -Nrc3pad gcc-3.2/gcc/config/xtensa/xtensa.h gcc-3.2.1/gcc/config/xtensa/xtensa.h
*** gcc-3.2/gcc/config/xtensa/xtensa.h Fri Jun 28 19:40:31 2002
--- gcc-3.2.1/gcc/config/xtensa/xtensa.h Mon Sep 30 20:34:09 2002
***************
*** 1,5 ****
/* Definitions of Tensilica's Xtensa target machine for GNU compiler.
! Copyright (C) 2001 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
--- 1,5 ----
/* Definitions of Tensilica's Xtensa target machine for GNU compiler.
! Copyright 2001,2002 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
*************** enum reg_class
*** 570,575 ****
--- 570,576 ----
FP_REGS, /* floating point registers */
ACC_REG, /* MAC16 accumulator */
SP_REG, /* sp register (aka a1) */
+ RL_REGS, /* preferred reload regs (not sp or fp) */
GR_REGS, /* integer registers except sp */
AR_REGS, /* all integer registers */
ALL_REGS, /* all registers */
*************** enum reg_class
*** 590,595 ****
--- 591,597 ----
"FP_REGS", \
"ACC_REG", \
"SP_REG", \
+ "RL_REGS", \
"GR_REGS", \
"AR_REGS", \
"ALL_REGS" \
*************** enum reg_class
*** 605,610 ****
--- 607,613 ----
{ 0xfff80000, 0x00000007 }, /* floating-point registers */ \
{ 0x00000000, 0x00000008 }, /* MAC16 accumulator */ \
{ 0x00000002, 0x00000000 }, /* stack pointer register */ \
+ { 0x0000ff7d, 0x00000000 }, /* preferred reload registers */ \
{ 0x0000fffd, 0x00000000 }, /* general-purpose registers */ \
{ 0x0003ffff, 0x00000000 }, /* integer registers */ \
{ 0xffffffff, 0x0000000f } /* all registers */ \
*************** extern enum reg_class xtensa_char_to_cla
*** 720,729 ****
: FALSE)
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
! xtensa_preferred_reload_class (X, CLASS)
#define PREFERRED_OUTPUT_RELOAD_CLASS(X, CLASS) \
! (CLASS)
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
xtensa_secondary_reload_class (CLASS, MODE, X, 0)
--- 723,732 ----
: FALSE)
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
! xtensa_preferred_reload_class (X, CLASS, 0)
#define PREFERRED_OUTPUT_RELOAD_CLASS(X, CLASS) \
! xtensa_preferred_reload_class (X, CLASS, 1)
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
xtensa_secondary_reload_class (CLASS, MODE, X, 0)
diff -Nrc3pad gcc-3.2/gcc/config.gcc gcc-3.2.1/gcc/config.gcc
*** gcc-3.2/gcc/config.gcc Tue Aug 6 15:20:55 2002
--- gcc-3.2.1/gcc/config.gcc Wed Oct 23 17:28:29 2002
*************** i[34567]86-*-rtems*|i[34567]86-*-rtemsel
*** 1405,1411 ****
i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
xm_defines=POSIX
install_headers_dir=install-headers-cpio
! tm_file=i386/sco5.h
if test x$gas = xyes
then
tm_file="usegas.h ${tm_file}"
--- 1405,1411 ----
i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
xm_defines=POSIX
install_headers_dir=install-headers-cpio
! tm_file="${tm_file} i386/att.h i386/sco5.h"
if test x$gas = xyes
then
tm_file="usegas.h ${tm_file}"
diff -Nrc3pad gcc-3.2/gcc/configure gcc-3.2.1/gcc/configure
*** gcc-3.2/gcc/configure Sat Jun 29 00:20:11 2002
--- gcc-3.2.1/gcc/configure Fri Sep 6 10:58:48 2002
*************** EOF
*** 7578,7619 ****
fi
! if test "x$gcc_cv_as_flags64" != xno; then
! echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
echo "configure:7584: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
! gcc_cv_as_offsetable_lo10=unknown
! if test "x$gcc_cv_as" != x; then
! # Check if assembler has offsetable %lo()
! echo "or %g1, %lo(ab) + 12, %g1" > conftest.s
! echo "or %g1, %lo(ab + 12), %g1" > conftest1.s
! if $gcc_cv_as $gcc_cv_as_flags64 -o conftest.o conftest.s \
! > /dev/null 2>&1 &&
! $gcc_cv_as $gcc_cv_as_flags64 -o conftest1.o conftest1.s \
! > /dev/null 2>&1; then
! if cmp conftest.o conftest1.o > /dev/null 2>&1; then
! gcc_cv_as_offsetable_lo10=no
! else
! gcc_cv_as_offsetable_lo10=yes
! fi
! else
gcc_cv_as_offsetable_lo10=no
fi
! rm -f conftest.s conftest.o conftest1.s conftest1.o
fi
!
fi
echo "$ac_t""$gcc_cv_as_offsetable_lo10" 1>&6
! if test "x$gcc_cv_as_offsetable_lo10" = xyes; then
! cat >> confdefs.h <<\EOF
#define HAVE_AS_OFFSETABLE_LO10 1
EOF
- fi
fi
;;
--- 7578,7617 ----
fi
! echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
echo "configure:7584: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
! gcc_cv_as_offsetable_lo10=unknown
! if test "x$gcc_cv_as" != x; then
! # Check if assembler has offsetable %lo()
! echo "or %g1, %lo(ab) + 12, %g1" > conftest.s
! echo "or %g1, %lo(ab + 12), %g1" > conftest1.s
! if $gcc_cv_as -xarch=v9 -o conftest.o conftest.s \
! > /dev/null 2>&1 &&
! $gcc_cv_as -xarch=v9 -o conftest1.o conftest1.s \
! > /dev/null 2>&1; then
! if cmp conftest.o conftest1.o > /dev/null 2>&1; then
gcc_cv_as_offsetable_lo10=no
+ else
+ gcc_cv_as_offsetable_lo10=yes
fi
! else
! gcc_cv_as_offsetable_lo10=no
fi
! rm -f conftest.s conftest.o conftest1.s conftest1.o
! fi
!
fi
echo "$ac_t""$gcc_cv_as_offsetable_lo10" 1>&6
! if test "x$gcc_cv_as_offsetable_lo10" = xyes; then
! cat >> confdefs.h <<\EOF
#define HAVE_AS_OFFSETABLE_LO10 1
EOF
fi
;;
diff -Nrc3pad gcc-3.2/gcc/configure.in gcc-3.2.1/gcc/configure.in
*** gcc-3.2/gcc/configure.in Sat Jun 29 00:20:11 2002
--- gcc-3.2.1/gcc/configure.in Fri Sep 6 10:58:47 2002
*************** EOF
*** 1846,1878 ****
[Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])
fi
! if test "x$gcc_cv_as_flags64" != xno; then
! AC_CACHE_CHECK([for assembler offsetable %lo() support],
! gcc_cv_as_offsetable_lo10, [
! gcc_cv_as_offsetable_lo10=unknown
! if test "x$gcc_cv_as" != x; then
! # Check if assembler has offsetable %lo()
! echo "or %g1, %lo(ab) + 12, %g1" > conftest.s
! echo "or %g1, %lo(ab + 12), %g1" > conftest1.s
! if $gcc_cv_as $gcc_cv_as_flags64 -o conftest.o conftest.s \
! > /dev/null 2>&1 &&
! $gcc_cv_as $gcc_cv_as_flags64 -o conftest1.o conftest1.s \
! > /dev/null 2>&1; then
! if cmp conftest.o conftest1.o > /dev/null 2>&1; then
! gcc_cv_as_offsetable_lo10=no
! else
! gcc_cv_as_offsetable_lo10=yes
! fi
! else
gcc_cv_as_offsetable_lo10=no
fi
! rm -f conftest.s conftest.o conftest1.s conftest1.o
fi
! ])
! if test "x$gcc_cv_as_offsetable_lo10" = xyes; then
! AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
! [Define if your assembler supports offsetable %lo().])
fi
fi
;;
--- 1846,1876 ----
[Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])
fi
! AC_CACHE_CHECK([for assembler offsetable %lo() support],
! gcc_cv_as_offsetable_lo10, [
! gcc_cv_as_offsetable_lo10=unknown
! if test "x$gcc_cv_as" != x; then
! # Check if assembler has offsetable %lo()
! echo "or %g1, %lo(ab) + 12, %g1" > conftest.s
! echo "or %g1, %lo(ab + 12), %g1" > conftest1.s
! if $gcc_cv_as -xarch=v9 -o conftest.o conftest.s \
! > /dev/null 2>&1 &&
! $gcc_cv_as -xarch=v9 -o conftest1.o conftest1.s \
! > /dev/null 2>&1; then
! if cmp conftest.o conftest1.o > /dev/null 2>&1; then
gcc_cv_as_offsetable_lo10=no
+ else
+ gcc_cv_as_offsetable_lo10=yes
fi
! else
! gcc_cv_as_offsetable_lo10=no
fi
! rm -f conftest.s conftest.o conftest1.s conftest1.o
fi
+ ])
+ if test "x$gcc_cv_as_offsetable_lo10" = xyes; then
+ AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
+ [Define if your assembler supports offsetable %lo().])
fi
;;
diff -Nrc3pad gcc-3.2/gcc/cppfiles.c gcc-3.2.1/gcc/cppfiles.c
*** gcc-3.2/gcc/cppfiles.c Fri Jan 18 13:40:28 2002
--- gcc-3.2.1/gcc/cppfiles.c Thu Aug 15 19:46:35 2002
*************** stack_include_file (pfile, inc)
*** 310,318 ****
sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
(inc->foundhere ? inc->foundhere->sysp : 0));
! /* For -M, add the file to the dependencies on its first inclusion. */
! if (CPP_OPTION (pfile, print_deps) > sysp && !inc->include_count)
! deps_add_dep (pfile->deps, inc->name);
/* Not in cache? */
if (! inc->buffer)
--- 310,321 ----
sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
(inc->foundhere ? inc->foundhere->sysp : 0));
! /* Add the file to the dependencies on its first inclusion. */
! if (CPP_OPTION (pfile, print_deps) > !!sysp && !inc->include_count)
! {
! if (pfile->buffer || CPP_OPTION (pfile, deps_ignore_main_file) == 0)
! deps_add_dep (pfile->deps, inc->name);
! }
/* Not in cache? */
if (! inc->buffer)
diff -Nrc3pad gcc-3.2/gcc/cppinit.c gcc-3.2.1/gcc/cppinit.c
*** gcc-3.2/gcc/cppinit.c Fri May 24 09:26:48 2002
--- gcc-3.2.1/gcc/cppinit.c Sun Oct 6 08:21:21 2002
*************** static void mark_named_operators PARAMS
*** 103,111 ****
static void append_include_chain PARAMS ((cpp_reader *,
char *, int, int));
static struct search_path * remove_dup_dir PARAMS ((cpp_reader *,
struct search_path *));
static struct search_path * remove_dup_dirs PARAMS ((cpp_reader *,
! struct search_path *));
static void merge_include_chains PARAMS ((cpp_reader *));
static bool push_include PARAMS ((cpp_reader *,
struct pending_option *));
--- 103,115 ----
static void append_include_chain PARAMS ((cpp_reader *,
char *, int, int));
static struct search_path * remove_dup_dir PARAMS ((cpp_reader *,
+ struct search_path *,
+ struct search_path **));
+ static struct search_path * remove_dup_nonsys_dirs PARAMS ((cpp_reader *,
+ struct search_path **,
struct search_path *));
static struct search_path * remove_dup_dirs PARAMS ((cpp_reader *,
! struct search_path **));
static void merge_include_chains PARAMS ((cpp_reader *));
static bool push_include PARAMS ((cpp_reader *,
struct pending_option *));
*************** path_include (pfile, list, path)
*** 189,195 ****
name[q - p] = 0;
}
! append_include_chain (pfile, name, path, 0);
/* Advance past this name. */
if (*q == 0)
--- 193,199 ----
name[q - p] = 0;
}
! append_include_chain (pfile, name, path, path == SYSTEM);
/* Advance past this name. */
if (*q == 0)
*************** append_include_chain (pfile, dir, path,
*** 272,326 ****
}
/* Handle a duplicated include path. PREV is the link in the chain
! before the duplicate. The duplicate is removed from the chain and
! freed. Returns PREV. */
static struct search_path *
! remove_dup_dir (pfile, prev)
cpp_reader *pfile;
struct search_path *prev;
{
! struct search_path *cur = prev->next;
if (CPP_OPTION (pfile, verbose))
fprintf (stderr, _("ignoring duplicate directory \"%s\"\n"), cur->name);
- prev->next = cur->next;
free ((PTR) cur->name);
free (cur);
return prev;
}
/* Remove duplicate directories from a chain. Returns the tail of the
chain, or NULL if the chain is empty. This algorithm is quadratic
in the number of -I switches, which is acceptable since there
aren't usually that many of them. */
static struct search_path *
! remove_dup_dirs (pfile, head)
cpp_reader *pfile;
! struct search_path *head;
{
struct search_path *prev = NULL, *cur, *other;
! for (cur = head; cur; cur = cur->next)
{
! for (other = head; other != cur; other = other->next)
if (INO_T_EQ (cur->ino, other->ino) && cur->dev == other->dev)
{
! if (cur->sysp && !other->sysp)
! {
! cpp_warning (pfile,
! "changing search order for system directory \"%s\"",
! cur->name);
! if (strcmp (cur->name, other->name))
! cpp_warning (pfile,
! " as it is the same as non-system directory \"%s\"",
! other->name);
! else
! cpp_warning (pfile,
! " as it has already been specified as a non-system directory");
! }
! cur = remove_dup_dir (pfile, prev);
break;
}
prev = cur;
--- 276,373 ----
}
/* Handle a duplicated include path. PREV is the link in the chain
! before the duplicate, or NULL if the duplicate is at the head of
! the chain. The duplicate is removed from the chain and freed.
! Returns PREV. */
static struct search_path *
! remove_dup_dir (pfile, prev, head_ptr)
cpp_reader *pfile;
struct search_path *prev;
+ struct search_path **head_ptr;
{
! struct search_path *cur;
!
! if (prev != NULL)
! {
! cur = prev->next;
! prev->next = cur->next;
! }
! else
! {
! cur = *head_ptr;
! *head_ptr = cur->next;
! }
if (CPP_OPTION (pfile, verbose))
fprintf (stderr, _("ignoring duplicate directory \"%s\"\n"), cur->name);
free ((PTR) cur->name);
free (cur);
return prev;
}
+ /* Remove duplicate non-system directories for which there is an equivalent
+ system directory later in the chain. The range for removal is between
+ *HEAD_PTR and END. Returns the directory before END, or NULL if none.
+ This algorithm is quadratic in the number of system directories, which is
+ acceptable since there aren't usually that many of them. */
+ static struct search_path *
+ remove_dup_nonsys_dirs (pfile, head_ptr, end)
+ cpp_reader *pfile;
+ struct search_path **head_ptr;
+ struct search_path *end;
+ {
+ int sysdir = 0;
+ struct search_path *prev = NULL, *cur, *other;
+
+ for (cur = *head_ptr; cur; cur = cur->next)
+ {
+ if (cur->sysp)
+ {
+ sysdir = 1;
+ for (other = *head_ptr, prev = NULL;
+ other != end;
+ other = other ? other->next : *head_ptr)
+ {
+ if (!other->sysp
+ && INO_T_EQ (cur->ino, other->ino)
+ && cur->dev == other->dev)
+ {
+ other = remove_dup_dir (pfile, prev, head_ptr);
+ if (CPP_OPTION (pfile, verbose))
+ fprintf (stderr,
+ _(" as it is a non-system directory that duplicates a system directory\n"));
+ }
+ prev = other;
+ }
+ }
+ }
+
+ if (!sysdir)
+ for (cur = *head_ptr; cur != end; cur = cur->next)
+ prev = cur;
+
+ return prev;
+ }
+
/* Remove duplicate directories from a chain. Returns the tail of the
chain, or NULL if the chain is empty. This algorithm is quadratic
in the number of -I switches, which is acceptable since there
aren't usually that many of them. */
static struct search_path *
! remove_dup_dirs (pfile, head_ptr)
cpp_reader *pfile;
! struct search_path **head_ptr;
{
struct search_path *prev = NULL, *cur, *other;
! for (cur = *head_ptr; cur; cur = cur->next)
{
! for (other = *head_ptr; other != cur; other = other->next)
if (INO_T_EQ (cur->ino, other->ino) && cur->dev == other->dev)
{
! cur = remove_dup_dir (pfile, prev, head_ptr);
break;
}
prev = cur;
*************** merge_include_chains (pfile)
*** 358,385 ****
else
brack = systm;
! /* This is a bit tricky. First we drop dupes from the quote-include
! list. Then we drop dupes from the bracket-include list.
! Finally, if qtail and brack are the same directory, we cut out
! brack and move brack up to point to qtail.
We can't just merge the lists and then uniquify them because
then we may lose directories from the <> search path that should
! be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
-Ibar -I- -Ifoo -Iquux. */
! remove_dup_dirs (pfile, brack);
! qtail = remove_dup_dirs (pfile, quote);
if (quote)
{
qtail->next = brack;
/* If brack == qtail, remove brack as it's simpler. */
! if (brack && INO_T_EQ (qtail->ino, brack->ino)
&& qtail->dev == brack->dev)
! brack = remove_dup_dir (pfile, qtail);
}
else
quote = brack;
--- 405,437 ----
else
brack = systm;
! /* This is a bit tricky. First we drop non-system dupes of system
! directories from the merged bracket-include list. Next we drop
! dupes from the bracket and quote include lists. Then we drop
! non-system dupes from the merged quote-include list. Finally,
! if qtail and brack are the same directory, we cut out brack and
! move brack up to point to qtail.
We can't just merge the lists and then uniquify them because
then we may lose directories from the <> search path that should
! be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
-Ibar -I- -Ifoo -Iquux. */
! remove_dup_nonsys_dirs (pfile, &brack, systm);
! remove_dup_dirs (pfile, &brack);
if (quote)
{
+ qtail = remove_dup_dirs (pfile, "e);
qtail->next = brack;
+ qtail = remove_dup_nonsys_dirs (pfile, "e, brack);
+
/* If brack == qtail, remove brack as it's simpler. */
! if (qtail && brack && INO_T_EQ (qtail->ino, brack->ino)
&& qtail->dev == brack->dev)
! brack = remove_dup_dir (pfile, qtail, "e);
}
else
quote = brack;
*************** struct lang_flags
*** 396,402 ****
char objc;
char cplusplus;
char extended_numbers;
! char trigraphs;
char dollars_in_ident;
char cplusplus_comments;
char digraphs;
--- 448,454 ----
char objc;
char cplusplus;
char extended_numbers;
! char std;
char dollars_in_ident;
char cplusplus_comments;
char digraphs;
*************** struct lang_flags
*** 404,410 ****
/* ??? Enable $ in identifiers in assembly? */
static const struct lang_flags lang_defaults[] =
! { /* c99 objc c++ xnum trig dollar c++comm digr */
/* GNUC89 */ { 0, 0, 0, 1, 0, 1, 1, 1 },
/* GNUC99 */ { 1, 0, 0, 1, 0, 1, 1, 1 },
/* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 },
--- 456,462 ----
/* ??? Enable $ in identifiers in assembly? */
static const struct lang_flags lang_defaults[] =
! { /* c99 objc c++ xnum std dollar c++comm digr */
/* GNUC89 */ { 0, 0, 0, 1, 0, 1, 1, 1 },
/* GNUC99 */ { 1, 0, 0, 1, 0, 1, 1, 1 },
/* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 },
*************** set_lang (pfile, lang)
*** 431,437 ****
CPP_OPTION (pfile, objc) = l->objc;
CPP_OPTION (pfile, cplusplus) = l->cplusplus;
CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
! CPP_OPTION (pfile, trigraphs) = l->trigraphs;
CPP_OPTION (pfile, dollars_in_ident) = l->dollars_in_ident;
CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
CPP_OPTION (pfile, digraphs) = l->digraphs;
--- 483,490 ----
CPP_OPTION (pfile, objc) = l->objc;
CPP_OPTION (pfile, cplusplus) = l->cplusplus;
CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
! CPP_OPTION (pfile, std) = l->std;
! CPP_OPTION (pfile, trigraphs) = l->std;
CPP_OPTION (pfile, dollars_in_ident) = l->dollars_in_ident;
CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
CPP_OPTION (pfile, digraphs) = l->digraphs;
*************** init_standard_includes (pfile)
*** 847,853 ****
&& !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
{
/* Does this dir start with the prefix? */
! if (!memcmp (p->fname, default_prefix, default_len))
{
/* Yes; change prefix and add to search list. */
int flen = strlen (p->fname);
--- 900,906 ----
&& !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
{
/* Does this dir start with the prefix? */
! if (!strncmp (p->fname, default_prefix, default_len))
{
/* Yes; change prefix and add to search list. */
int flen = strlen (p->fname);
*************** parse_option (input)
*** 1295,1301 ****
md = (mn + mx) / 2;
opt_len = cl_options[md].opt_len;
! comp = memcmp (input, cl_options[md].opt_text, opt_len);
if (comp > 0)
mn = md + 1;
--- 1348,1354 ----
md = (mn + mx) / 2;
opt_len = cl_options[md].opt_len;
! comp = strncmp (input, cl_options[md].opt_text, opt_len);
if (comp > 0)
mn = md + 1;
*************** parse_option (input)
*** 1320,1326 ****
for (; mn < (unsigned int) N_OPTS; mn++)
{
opt_len = cl_options[mn].opt_len;
! if (memcmp (input, cl_options[mn].opt_text, opt_len))
break;
if (input[opt_len] == '\0')
return mn;
--- 1373,1379 ----
for (; mn < (unsigned int) N_OPTS; mn++)
{
opt_len = cl_options[mn].opt_len;
! if (strncmp (input, cl_options[mn].opt_text, opt_len))
break;
if (input[opt_len] == '\0')
return mn;
*************** init_dependency_output (pfile)
*** 1880,1886 ****
{
spec = getenv ("SUNPRO_DEPENDENCIES");
if (spec)
! CPP_OPTION (pfile, print_deps) = 2;
else
return;
}
--- 1933,1942 ----
{
spec = getenv ("SUNPRO_DEPENDENCIES");
if (spec)
! {
! CPP_OPTION (pfile, print_deps) = 2;
! CPP_OPTION (pfile, deps_ignore_main_file) = 1;
! }
else
return;
}
diff -Nrc3pad gcc-3.2/gcc/cpplib.c gcc-3.2.1/gcc/cpplib.c
*** gcc-3.2/gcc/cpplib.c Thu Mar 14 19:24:56 2002
--- gcc-3.2.1/gcc/cpplib.c Sun Oct 6 09:12:19 2002
*************** run_directive (pfile, dir_no, buf, count
*** 406,417 ****
--- 406,422 ----
{
cpp_push_buffer (pfile, (const U_CHAR *) buf, count,
/* from_stage3 */ true, 1);
+ /* Disgusting hack. */
+ if (dir_no == T_PRAGMA)
+ pfile->buffer->inc = pfile->buffer->prev->inc;
start_directive (pfile);
/* We don't want a leading # to be interpreted as a directive. */
pfile->buffer->saved_flags = 0;
pfile->directive = &dtable[dir_no];
(void) (*pfile->directive->handler) (pfile);
end_directive (pfile, 1);
+ if (dir_no == T_PRAGMA)
+ pfile->buffer->inc = NULL;
_cpp_pop_buffer (pfile);
}
*************** destringize_and_run (pfile, in)
*** 1219,1224 ****
--- 1224,1232 ----
{
const unsigned char *src, *limit;
char *dest, *result;
+ cpp_context saved_context;
+ cpp_context *saved_cur_context;
+ unsigned int saved_line;
dest = result = alloca (in->len + 1);
for (src = in->text, limit = src + in->len; src < limit;)
*************** destringize_and_run (pfile, in)
*** 1230,1236 ****
--- 1238,1277 ----
}
*dest = '\0';
+ /* FIXME. All this saving is a horrible kludge to handle the case
+ when we're in a macro expansion.
+
+ A better strategy it to not convert _Pragma to #pragma if doing
+ preprocessed output, but to just pass it through as-is, unless it
+ is a CPP pragma in which case is should be processed normally.
+ When compiling the preprocessed output the _Pragma should be
+ handled. This will be become necessary when we move to
+ line-at-a-time lexing since we will be macro-expanding the line
+ before outputting / compiling it. */
+ saved_line = pfile->line;
+ saved_context = pfile->base_context;
+ saved_cur_context = pfile->context;
+ pfile->context = &pfile->base_context;
run_directive (pfile, T_PRAGMA, result, dest - result);
+ pfile->context = saved_cur_context;
+ pfile->base_context = saved_context;
+ pfile->line = saved_line;
+
+ /* See above comment. For the moment, we'd like
+
+ token1 _Pragma ("foo") token2
+
+ to be output as
+
+ token1
+ # 7 "file.c"
+ #pragma foo
+ # 7 "file.c"
+ token2
+
+ Getting the line markers is a little tricky. */
+ if (pfile->cb.line_change)
+ (*pfile->cb.line_change) (pfile, pfile->cur_token, false);
}
/* Handle the _Pragma operator. */
*************** _cpp_do__Pragma (pfile)
*** 1240,1264 ****
{
const cpp_token *string = get__Pragma_string (pfile);
! if (!string)
! cpp_error (pfile, "_Pragma takes a parenthesized string literal");
else
! {
! /* Ideally, we'd like
! token1 _Pragma ("foo") token2
! to be output as
! token1
! # 7 "file.c"
! #pragma foo
! # 7 "file.c"
! token2
! Getting these correct line markers is a little tricky. */
!
! unsigned int orig_line = pfile->line;
! destringize_and_run (pfile, &string->val.str);
! pfile->line = orig_line;
! pfile->buffer->saved_flags = BOL;
! }
}
/* Just ignore #sccs, on systems where we define it at all. */
--- 1281,1290 ----
{
const cpp_token *string = get__Pragma_string (pfile);
! if (string)
! destringize_and_run (pfile, &string->val.str);
else
! cpp_error (pfile, "_Pragma takes a parenthesized string literal");
}
/* Just ignore #sccs, on systems where we define it at all. */
diff -Nrc3pad gcc-3.2/gcc/cpplib.h gcc-3.2.1/gcc/cpplib.h
*** gcc-3.2/gcc/cpplib.h Thu Mar 14 19:24:57 2002
--- gcc-3.2.1/gcc/cpplib.h Thu Aug 15 19:46:36 2002
*************** struct cpp_options
*** 279,284 ****
--- 279,287 ----
/* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
unsigned char print_deps_append;
+ /* If true, no dependency is generated on the main file. */
+ unsigned char deps_ignore_main_file;
+
/* Nonzero means print names of header files (-H). */
unsigned char print_include_names;
*************** struct cpp_options
*** 335,340 ****
--- 338,346 ----
/* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
unsigned char c99;
+ /* Nonzero if conforming to some particular standard. */
+ unsigned char std;
+
/* Nonzero means give all the error messages the ANSI standard requires. */
unsigned char pedantic;
diff -Nrc3pad gcc-3.2/gcc/cppmacro.c gcc-3.2.1/gcc/cppmacro.c
*** gcc-3.2/gcc/cppmacro.c Wed May 29 19:26:00 2002
--- gcc-3.2.1/gcc/cppmacro.c Sat Sep 28 00:32:14 2002
*************** stringify_arg (pfile, arg)
*** 348,353 ****
--- 348,359 ----
}
/* Commit the memory, including NUL, and return the token. */
+ if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < 1)
+ {
+ size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
+ _cpp_extend_buff (pfile, &pfile->u_buff, 1);
+ dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
+ }
len = dest - BUFF_FRONT (pfile->u_buff);
BUFF_FRONT (pfile->u_buff) = dest + 1;
return new_string_token (pfile, dest - len, len);
*************** collect_args (pfile, node)
*** 613,619 ****
}
if (!error)
! return base_buff;
_cpp_release_buff (pfile, base_buff);
return NULL;
--- 619,638 ----
}
if (!error)
! {
! /* GCC has special semantics for , ## b where b is a varargs
! parameter: we remove the comma if b was omitted entirely.
! If b was merely an empty argument, the comma is retained.
! If the macro takes just one (varargs) parameter, then we
! retain the comma only if we are standards conforming.
!
! If FIRST is NULL replace_args () swallows the comma. */
! if (macro->variadic && (argc < macro->paramc
! || (argc == 1 && args[0].count == 0
! && !CPP_OPTION (pfile, std))))
! args[macro->paramc - 1].first = NULL;
! return base_buff;
! }
_cpp_release_buff (pfile, base_buff);
return NULL;
*************** replace_args (pfile, node, args)
*** 799,813 ****
count = arg->count, from = arg->first;
if (dest != first)
{
- /* GCC has special semantics for , ## b where b is a
- varargs parameter: the comma disappears if b was
- given no actual arguments (not merely if b is an
- empty argument); otherwise the paste flag is removed. */
if (dest[-1]->type == CPP_COMMA
&& macro->variadic
&& src->val.arg_no == macro->paramc)
{
! if (count == 0)
dest--;
else
paste_flag = dest - 1;
--- 818,830 ----
count = arg->count, from = arg->first;
if (dest != first)
{
if (dest[-1]->type == CPP_COMMA
&& macro->variadic
&& src->val.arg_no == macro->paramc)
{
! /* Swallow a pasted comma if from == NULL, otherwise
! drop the paste flag. */
! if (from == NULL)
dest--;
else
paste_flag = dest - 1;
diff -Nrc3pad gcc-3.2/gcc/dbxout.c gcc-3.2.1/gcc/dbxout.c
*** gcc-3.2/gcc/dbxout.c Wed May 1 22:29:25 2002
--- gcc-3.2.1/gcc/dbxout.c Sat Sep 14 00:26:38 2002
*************** dbxout_function_end ()
*** 396,406 ****
--- 396,410 ----
/* By convention, GCC will mark the end of a function with an N_FUN
symbol and an empty string. */
+ #ifdef DBX_OUTPUT_NFUN
+ DBX_OUTPUT_NFUN (asmfile, lscope_label_name, current_function_decl);
+ #else
fprintf (asmfile, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN);
assemble_name (asmfile, lscope_label_name);
putc ('-', asmfile);
assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));
fprintf (asmfile, "\n");
+ #endif
}
#endif /* DBX_DEBUGGING_INFO */
diff -Nrc3pad gcc-3.2/gcc/doc/c-tree.texi gcc-3.2.1/gcc/doc/c-tree.texi
*** gcc-3.2/gcc/doc/c-tree.texi Thu Apr 25 09:34:52 2002
--- gcc-3.2.1/gcc/doc/c-tree.texi Wed Sep 11 16:40:27 2002
*************** Then, if @code{THUNK_VCALL_OFFSET} (an @
*** 1203,1213 ****
the adjusted @code{this} pointer must be adjusted again. The complete
calculation is given by the following pseudo-code:
! @example
this += THUNK_DELTA
if (THUNK_VCALL_OFFSET)
this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
! @end example
Finally, the thunk should jump to the location given
by @code{DECL_INITIAL}; this will always be an expression for the
--- 1203,1213 ----
the adjusted @code{this} pointer must be adjusted again. The complete
calculation is given by the following pseudo-code:
! @smallexample
this += THUNK_DELTA
if (THUNK_VCALL_OFFSET)
this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
! @end smallexample
Finally, the thunk should jump to the location given
by @code{DECL_INITIAL}; this will always be an expression for the
diff -Nrc3pad gcc-3.2/gcc/doc/compat.texi gcc-3.2.1/gcc/doc/compat.texi
*** gcc-3.2/gcc/doc/compat.texi Thu Jan 1 00:00:00 1970
--- gcc-3.2.1/gcc/doc/compat.texi Sat Oct 12 00:01:18 2002
***************
*** 0 ****
--- 1,156 ----
+ @c Copyright (C) 2002 Free Software Foundation, Inc.
+ @c This is part of the GCC manual.
+ @c For copying conditions, see the file gcc.texi.
+
+ @node Compatibility
+ @chapter Binary Compatibility
+ @cindex binary compatibility
+ @cindex ABI
+ @cindex application binary interface
+
+ Binary compatibility encompasses several related concepts:
+
+ @table @dfn
+ @item application binary interface (ABI)
+ The set of runtime conventions followed by all of the tools that deal
+ with binary representations of a program, including compilers, assemblers,
+ linkers, and language runtime support.
+ Some ABIs are formal with a written specification, possibly designed
+ by multiple interested parties. Others are simply the way things are
+ actually done by a particular set of tools.
+
+ @item ABI conformance
+ A compiler conforms to an ABI if it generates code that follows all of
+ the specifications enumerated by that ABI@.
+ A library conforms to an ABI if it is implemented according to that ABI@.
+ An application conforms to an ABI if it is built using tools that conform
+ to that ABI and does not contain source code that specifically changes
+ behavior specified by the ABI@.
+
+ @item calling conventions
+ Calling conventions are a subset of an ABI that specify of how arguments
+ are passed and function results are returned.
+
+ @item interoperability
+ Different sets of tools are interoperable if they generate files that
+ can be used in the same program. The set of tools includes compilers,
+ assemblers, linkers, libraries, header files, startup files, and debuggers.
+ Binaries produced by different sets of tools are not interoperable unless
+ they implement the same ABI@. This applies to different versions of the
+ same tools as well as tools from different vendors.
+
+ @item intercallability
+ Whether a function in a binary built by one set of tools can call a
+ function in a binary built by a different set of tools is a subset
+ of interoperability.
+
+ @item implementation-defined features
+ Language standards include lists of implementation-defined features whose
+ behavior can vary from one implementation to another. Some of these
+ features are normally covered by a platform's ABI and others are not.
+ The features that are not covered by an ABI generally affect how a
+ program behaves, but not intercallability.
+
+ @item compatibility
+ Conformance to the same ABI and the same behavior of implementation-defined
+ features are both relevant for compatibility.
+ @end table
+
+ The application binary interface implemented by a C or C++ compiler
+ affects code generation and runtime support for:
+
+ @itemize @bullet
+ @item
+ size and alignment of data types
+ @item
+ layout of structured types
+ @item
+ calling conventions
+ @item
+ register usage conventions
+ @item
+ interfaces for runtime arithmetic support
+ @item
+ object file formats
+ @end itemize
+
+ In addition, the application binary interface implemented by a C++ compiler
+ affects code generation and runtime support for:
+ @itemize @bullet
+ @item
+ name mangling
+ @item
+ exception handling
+ @item
+ invoking constructors and destructors
+ @item
+ layout, alignment, and padding of classes
+ @item
+ layout and alignment of virtual tables
+ @end itemize
+
+ Some GCC compilation options cause the compiler to generate code that
+ does not conform to the platform's default ABI@. Other options cause
+ different program behavior for implementation-defined features that are
+ not covered by an ABI@. These options are provided for consistency with
+ other compilers that do not follow the platform's default ABI or the
+ usual behavior of implementation-defined features for the platform.
+ Be very careful about using such options.
+
+ Most platforms have a well-defined ABI that covers C code, but ABIs
+ that cover C++ functionality are not yet common.
+
+ Starting with GCC 3.2, GCC binary conventions for C++ are based on a
+ written, vendor-neutral C++ ABI that was designed to be specific to
+ 64-bit Itanium but also includes generic specifications that apply to
+ any platform.
+ This C++ ABI is also implemented by other compiler vendors on some
+ platforms, notably GNU/Linux and BSD systems.
+ We have tried hard to provide a stable ABI that will be compatible with
+ future GCC releases, but it is possible that we will encounter problems
+ that make this difficult. Such problems could include different
+ interpretations of the C++ ABI by different vendors, bugs in the ABI, or
+ bugs in the implementation of the ABI in different compilers.
+ GCC's @code{-Wabi} switch warns when G++ generates code that is
+ probably not compatible with the C++ ABI@.
+
+ The C++ library used with a C++ compiler includes the Standard C++
+ Library, with functionality defined in the C++ Standard, plus language
+ runtime support. The runtime support is included in a C++ ABI, but there
+ is no formal ABI for the Standard C++ Library. Two implementations
+ of that library are interoperable if one follows the de-facto ABI of the
+ other and if they are both built with the same compiler, or with compilers
+ that conform to the same ABI for C++ compiler and runtime support.
+
+ When G++ and another C++ compiler conform to the same C++ ABI, but the
+ implementations of the Standard C++ Library that they normally use do not
+ follow the same ABI for the Standard C++ Library, object files built with
+ those compilers can be used in the same program only if they use the same
+ C++ library. This requires specifying the location of the C++ library
+ header files when invoking the compiler whose usual library is not being
+ used. The location of GCC's C++ header files depends on how the GCC
+ build was configured, but can be seen by using the G++ @option{-v} option.
+ With default configuration options for G++ 3.2 the compile line for a
+ different C++ compiler needs to include
+
+ @example
+ -I@var{gcc_install_directory}/include/c++/3.2
+ @end example
+
+ Similarly, compiling code with G++ that must use a C++ library other
+ than the GNU C++ library requires specifying the location of the header
+ files for that other library.
+
+ The most straightforward way to link a program to use a particular
+ C++ library is to use a C++ driver that specifies that C++ library by
+ default. The @command{g++} driver, for example, tells the linker where
+ to find GCC's C++ library (@file{libstdc++}) plus the other libraries
+ and startup files it needs, in the proper order.
+
+ If a program must use a different C++ library and it's not possible
+ to do the final link using a C++ driver that uses that library by default,
+ it is necessary to tell @command{g++} the location and name of that
+ library. It might also be necessary to specify different startup files
+ and other runtime support libraries, and to suppress the use of GCC's
+ support libraries with one or more of the options @option{-nostdlib},
+ @option{-nostartfiles}, and @option{-nodefaultlibs}.
diff -Nrc3pad gcc-3.2/gcc/doc/contrib.texi gcc-3.2.1/gcc/doc/contrib.texi
*** gcc-3.2/gcc/doc/contrib.texi Sun May 19 19:59:08 2002
--- gcc-3.2.1/gcc/doc/contrib.texi Tue Nov 12 13:06:12 2002
*************** in this list are accidental. Feel free
*** 14,23 ****
or some of your contributions are not listed. Please keep this list in
alphabetical order.
- Some projects operating under the GCC project maintain their own list
- of contributors, such as
- @uref{http://gcc.gnu.org/libstdc++/,the C++ library}.
-
@itemize @bullet
@item
--- 14,19 ----
*************** Analog Devices helped implement the supp
*** 25,31 ****
and iterators.
@item
! John David Anglin for improvements to libstdc++-v3 and the HP-UX port.
@item
James van Artsdalen wrote the code that makes efficient use of
--- 21,28 ----
and iterators.
@item
! John David Anglin for threading-related fixes and improvements to
! libstdc++-v3, and the HP-UX port.
@item
James van Artsdalen wrote the code that makes efficient use of
*************** Alasdair Baird for various bugfixes.
*** 38,52 ****
Gerald Baumgartner added the signature extension to the C++ front end.
@item
Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.
@item
Per Bothner for his direction via the steering committee and various
improvements to our infrastructure for supporting new languages. Chill
! and Java front end implementations. Initial implementations of
! cpplib, fix-header, config.guess, libio, and past C++ library
! (libg++) maintainer.
@item
Devon Bowen helped port GCC to the Tahoe.
--- 35,69 ----
Gerald Baumgartner added the signature extension to the C++ front end.
@item
+ Godmar Back for his Java improvements and encouragement.
+
+ @item
+ Scott Bambrough for help porting the Java compiler.
+
+ @item
+ Jon Beniston for his Win32 port of Java.
+
+ @item
+ Geoff Berry for his Java object serialization work and various patches.
+
+ @item
+ Eric Blake for helping to make GCJ and libgcj conform to the
+ specifications.
+
+ @item
+ Hans-J. Boehm for his @uref{http://www.hpl.hp.com/personal/Hans_Boehm/gc/,,
+ garbage collector}, IA-64 libffi port, and other Java work.
+
+ @item
Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.
@item
Per Bothner for his direction via the steering committee and various
improvements to our infrastructure for supporting new languages. Chill
! front end implementation. Initial implementations of
! cpplib, fix-header, config.guess, libio, and past C++ library (libg++)
! maintainer. Dreaming up, designing and implementing much of GCJ.
@item
Devon Bowen helped port GCC to the Tahoe.
*************** Christian Bruel for improvements to loca
*** 67,97 ****
Herman A.J. ten Brugge for various fixes.
@item
Joe Buck for his direction via the steering committee.
@item
Craig Burley for leadership of the Fortran effort.
@item
! Paolo Carlini for his work on libstdc++-v3.
@item
John Carr for his alias work, SPARC hacking, infrastructure improvements,
previous contributions to the steering committee, loop optimizations, etc.
@item
! Steve Chamberlain wrote the support for the Hitachi SH and H8 processors
! and the PicoJava processor.
@item
Scott Christley for his Objective-C contributions.
@item
Branko Cibej for more warning contributions.
@item
! Nick Clifton for arm, mcore, fr30, v850, m32r work, @option{--help}, and other random
! hacking.
@item
Ralf Corsepius for SH testing and minor bugfixing.
--- 84,138 ----
Herman A.J. ten Brugge for various fixes.
@item
+ Joerg Brunsmann for Java compiler hacking and help with the GCJ FAQ.
+
+ @item
Joe Buck for his direction via the steering committee.
@item
Craig Burley for leadership of the Fortran effort.
@item
! Stephan Buys for contributing Doxygen notes for libstdc++.
!
! @item
! Paolo Carlini for libstdc++ work: lots of efficiency improvements to
! the string class, hard detective work on the frustrating localization
! issues, and keeping up with the problem reports.
@item
John Carr for his alias work, SPARC hacking, infrastructure improvements,
previous contributions to the steering committee, loop optimizations, etc.
@item
! Steve Chamberlain for support for the Hitachi SH and H8 processors
! and the PicoJava processor, and for GCJ config fixes.
!
! @item
! Glenn Chambers for help with the GCJ FAQ.
!
! @item
! John-Marc Chandonia for various libgcj patches.
@item
Scott Christley for his Objective-C contributions.
@item
+ Eric Christopher for his Java porting help and clean-ups.
+
+ @item
Branko Cibej for more warning contributions.
@item
! The @uref{http://www.classpath.org,,GNU Classpath project}
! for all of their merged runtime code.
!
! @item
! Nick Clifton for arm, mcore, fr30, v850, m32r work, @option{--help}, and
! other random hacking.
!
! @item
! Michael Cook for libstdc++ cleanup patches to reduce warnings.
@item
Ralf Corsepius for SH testing and minor bugfixing.
*************** Dario Dariol contributed the four variet
*** 111,132 ****
that print a copy of their source.
@item
! Ulrich Drepper for his work on the C++ runtime libraries, glibc,
! testing of GCC using glibc, ISO C99 support, CFG dumping support, etc.
@item
Richard Earnshaw for his ongoing work with the ARM@.
@item
! David Edelsohn for his direction via the steering committee,
! ongoing work with the RS6000/PowerPC port, and help cleaning up Haifa
! loop changes.
@item
Paul Eggert for random hacking all over GCC@.
@item
! Mark Elbrecht for various DJGPP improvements.
@item
Ben Elliston for his work to move the Objective-C runtime into its
--- 152,202 ----
that print a copy of their source.
@item
! Russell Davidson for fstream and stringstream fixes in libstdc++.
!
! @item
! Mo DeJong for GCJ and libgcj bug fixes.
!
! @item
! Gabriel Dos Reis for contributions to g++, contributions and
! maintenance of GCC diagnostics infrastructure, libstdc++-v3,
! including valarray<>, complex<>, maintaining the numerics library
! (including that pesky :-) and keeping up-to-date anything
! to do with numbers.
!
! @item
! Ulrich Drepper for his work on glibc, testing of GCC using glibc, ISO C99
! support, CFG dumping support, etc., plus support of the C++ runtime
! libraries including for all kinds of C interface issues, contributing and
! maintaining complex<>, sanity checking and disbursement, configuration
! architecture, libio maintenance, and early math work.
@item
Richard Earnshaw for his ongoing work with the ARM@.
@item
! David Edelsohn for his direction via the steering committee, ongoing work
! with the RS6000/PowerPC port, help cleaning up Haifa loop changes, and
! for doing the entire AIX port of libstdc++ with his bare hands.
!
! @item
! Kevin Ediger for the floating point formatting of num_put::do_put in
! libstdc++.
!
! @item
! Phil Edwards for libstdc++ work including configuration hackery,
! documentation maintainer, chief breaker of the web pages, the occasional
! iostream bugfix, and work on shared library symbol versioning.
@item
Paul Eggert for random hacking all over GCC@.
@item
! Mark Elbrecht for various DJGPP improvements, and for libstdc++
! configuration support for locales and fstream-related fixes.
!
! @item
! Vadim Egorov for libstdc++ fixes in strings, streambufs, and iostreams.
@item
Ben Elliston for his work to move the Objective-C runtime into its
*************** and SPARC work.
*** 143,148 ****
--- 213,221 ----
Fred Fish for BeOS support and Ada fixes.
@item
+ Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ.
+
+ @item
Peter Gerwinski for various bugfixes and the Pascal front end.
@item
*************** Kaveh Ghazi for his direction via the st
*** 150,155 ****
--- 223,231 ----
amazing work to make @samp{-W -Wall} useful.
@item
+ John Gilmore for a donation to the FSF earmarked improving GNU Java.
+
+ @item
Judy Goldberg for c++ contributions.
@item
*************** via the steering committee.
*** 162,167 ****
--- 238,246 ----
Anthony Green for his @option{-Os} contributions and Java front end work.
@item
+ Stu Grossman for gdb hacking, allowing GCJ developers to debug our code.
+
+ @item
Michael K. Gschwind contributed the port to the PDP-11.
@item
*************** Bruno Haible for improvements in the run
*** 175,181 ****
warnings and assorted bugfixes.
@item
! Andrew Haley for his Java work.
@item
Chris Hanson assisted in making GCC work on HP-UX for the 9000 series 300.
--- 254,260 ----
warnings and assorted bugfixes.
@item
! Andrew Haley for his amazing Java compiler and library efforts.
@item
Chris Hanson assisted in making GCC work on HP-UX for the 9000 series 300.
*************** Andreas Jaeger for various fixes to the
*** 222,228 ****
@item
Jakub Jelinek for his SPARC work and sibling call optimizations as well
! as lots of bug fixes and test cases.
@item
Janis Johnson for ia64 testing and fixes and for her quality improvement
--- 301,308 ----
@item
Jakub Jelinek for his SPARC work and sibling call optimizations as well
! as lots of bug fixes and test cases, and for improving the Java build
! system.
@item
Janis Johnson for ia64 testing and fixes and for her quality improvement
*************** sidetracks.
*** 232,248 ****
J. Kean Johnston for OpenServer support.
@item
Klaus Kaempf for his ongoing work to make alpha-vms a viable target.
@item
David Kashtan of SRI adapted GCC to VMS@.
@item
Geoffrey Keating for his ongoing work to make the PPC work for GNU/Linux
and his automatic regression tester.
@item
! Brendan Kehoe for his ongoing work with g++.
@item
Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
--- 312,340 ----
J. Kean Johnston for OpenServer support.
@item
+ Tim Josling for the sample language treelang based originally on Richard
+ Kenner's "``toy'' language".
+
+ @item
+ Nicolai Josuttis for additional libstdc++ documentation.
+
+ @item
Klaus Kaempf for his ongoing work to make alpha-vms a viable target.
@item
David Kashtan of SRI adapted GCC to VMS@.
@item
+ Ryszard Kabatek for many, many libstdc++ bugfixes and optimizations of
+ strings, especially member functions, and for auto_ptr fixes.
+
+ @item
Geoffrey Keating for his ongoing work to make the PPC work for GNU/Linux
and his automatic regression tester.
@item
! Brendan Kehoe for his ongoing work with g++ and for a lot of early work
! in just about every part of libstdc++.
@item
Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
*************** elimination and delay slot scheduling.
*** 260,267 ****
head maintainer of GCC for several years.
@item
! Mumit Khan for various contributions to the cygwin and mingw32 ports and
! maintaining binary releases for Windows hosts.
@item
Robin Kirkham for cpu32 support.
--- 352,360 ----
head maintainer of GCC for several years.
@item
! Mumit Khan for various contributions to the Cygwin and Mingw32 ports and
! maintaining binary releases for Windows hosts, and for massive libstdc++
! porting work to Cygwin/Mingw32.
@item
Robin Kirkham for cpu32 support.
*************** Ted Lemon wrote parts of the RTL reader
*** 299,311 ****
Kriang Lerdsuwanakij for improvements to demangler and various c++ fixes.
@item
! Warren Levy major work on libgcj (Java Runtime Library) and random
! work on the Java front end.
@item
Alain Lichnewsky ported GCC to the MIPS CPU.
@item
Robert Lipe for OpenServer support, new testsuites, testing, etc.
@item
--- 392,408 ----
Kriang Lerdsuwanakij for improvements to demangler and various c++ fixes.
@item
! Warren Levy for tremendous work on libgcj (Java Runtime Library) and
! random work on the Java front end.
@item
Alain Lichnewsky ported GCC to the MIPS CPU.
@item
+ Oskar Liljeblad for hacking on AWT and his many Java bug reports and
+ patches.
+
+ @item
Robert Lipe for OpenServer support, new testsuites, testing, etc.
@item
*************** runtime libraries.
*** 317,323 ****
@item
Martin von L@"owis for internal consistency checking infrastructure,
! and various C++ improvements including namespace support.
@item
H.J. Lu for his previous contributions to the steering committee, many x86
--- 414,421 ----
@item
Martin von L@"owis for internal consistency checking infrastructure,
! various C++ improvements including namespace support, and tons of
! assistance with libstdc++/compiler merges.
@item
H.J. Lu for his previous contributions to the steering committee, many x86
*************** Andrew MacLeod for his ongoing work in b
*** 331,344 ****
various code generation improvements, work on the global optimizer, etc.
@item
! Vladimir Makarov for hacking some ugly i960 problems, PowerPC
! hacking improvements to compile-time performance and overall knowledge
! and direction in the area of instruction scheduling.
@item
Bob Manson for his behind the scenes work on dejagnu.
@item
Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.
--- 429,458 ----
various code generation improvements, work on the global optimizer, etc.
@item
! Vladimir Makarov for hacking some ugly i960 problems, PowerPC hacking
! improvements to compile-time performance, overall knowledge and
! direction in the area of instruction scheduling, and design and
! implementation of the automaton based instruction scheduler.
@item
Bob Manson for his behind the scenes work on dejagnu.
@item
+ Philip Martin for lots of libstdc++ string and vector iterator fixes and
+ improvements, and string clean up and testsuites.
+
+ @item
+ All of the Mauve project
+ @uref{http://sources.redhat.com/cgi-bin/cvsweb.cgi/~checkout~/mauve/THANKS?rev=1.2&cvsroot=mauve&only_with_tag=HEAD,,contributors},
+ for Java test code.
+
+ @item
+ Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
+
+ @item
+ Adam Megacz for his work on the Win32 port of GCJ.
+
+ @item
Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.
*************** developers.
*** 355,360 ****
--- 469,478 ----
Gary Miller ported GCC to Charles River Data Systems machines.
@item
+ Alfred Minarik for libstdc++ string and ios bugfixes, and turning the
+ entire libstdc++ testsuite namespace-compatible.
+
+ @item
Mark Mitchell for his direction via the steering committee, mountains of
C++ work, load/store hoisting out of loops, alias analysis improvements,
ISO C @code{restrict} support, and serving as release manager for GCC 3.x.
*************** maintenance, and his ongoing work to mak
*** 369,375 ****
@item
Jason Molenda for major help in the care and feeding of all the services
on the gcc.gnu.org (formerly egcs.cygnus.com) machine---mail, web
! services, ftp services, etc etc.
@item
Catherine Moore for fixing various ugly problems we have sent her
--- 487,494 ----
@item
Jason Molenda for major help in the care and feeding of all the services
on the gcc.gnu.org (formerly egcs.cygnus.com) machine---mail, web
! services, ftp services, etc etc. Doing all this work on scrap paper and
! the backs of envelopes would have been... difficult.
@item
Catherine Moore for fixing various ugly problems we have sent her
*************** way, including the haifa bug which was k
*** 377,382 ****
--- 496,504 ----
Linux kernels.
@item
+ Mike Moreton for his various Java patches.
+
+ @item
David Mosberger-Tang for various Alpha improvements.
@item
*************** Joseph S. Myers for his work on the PDP-
*** 395,401 ****
C99 support, and continuous emphasis on (and contributions to) documentation.
@item
! Nathan Myers for his work on libstdc++-v3.
@item
NeXT, Inc.@: donated the front end that supports the Objective-C
--- 517,530 ----
C99 support, and continuous emphasis on (and contributions to) documentation.
@item
! Nathan Myers for his work on libstdc++-v3: architecture and authorship
! through the first three snapshots, including implementation of locale
! infrastructure, string, shadow C headers, and the initial project
! documentation (DESIGN, CHECKLIST, and so forth). Later, more work on
! MT-safe string and shadow headers.
!
! @item
! Felix Natter for documentation on porting libstdc++.
@item
NeXT, Inc.@: donated the front end that supports the Objective-C
*************** improvements.
*** 415,434 ****
@item
Alexandre Oliva for various build infrastructure improvements, scripts and
! amazing testing work.
@item
Melissa O'Neill for various NeXT fixes.
@item
Rainer Orth for random MIPS work, including improvements to our o32
! ABI support, improvements to dejagnu's MIPS support, etc.
@item
Paul Petersen wrote the machine description for the Alliant FX/8.
@item
! Alexandre Petit-Bianco for his Java work.
@item
Matthias Pfaller for major improvements to the NS32k port.
--- 544,565 ----
@item
Alexandre Oliva for various build infrastructure improvements, scripts and
! amazing testing work, including keeping libtool issues sane and happy.
@item
Melissa O'Neill for various NeXT fixes.
@item
Rainer Orth for random MIPS work, including improvements to our o32
! ABI support, improvements to dejagnu's MIPS support, Java configuration
! clean-ups and porting work, etc.
@item
Paul Petersen wrote the machine description for the Alliant FX/8.
@item
! Alexandre Petit-Bianco for implementing much of the Java compiler and
! continued Java maintainership.
@item
Matthias Pfaller for major improvements to the NS32k port.
*************** Ken Raeburn for various improvements to
*** 447,465 ****
cleanups in the compiler.
@item
! David Reese of Sun Microsystems contributed to the Solaris on PowerPC
! port.
@item
! Gabriel Dos Reis for contributions and maintenance of libstdc++-v3,
! including valarray implementation and limits support.
@item
Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
@item
! Loren J. Rittle for improvements to libstdc++-v3 and the FreeBSD port.
@item
Craig Rodrigues for processing tons of bug reports.
--- 578,597 ----
cleanups in the compiler.
@item
! Rolf W. Rasmussen for hacking on AWT.
@item
! David Reese of Sun Microsystems contributed to the Solaris on PowerPC
! port.
@item
Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
@item
! Loren J. Rittle for improvements to libstdc++-v3 including the FreeBSD
! port, threading fixes, thread-related configury changes, critical
! threading documentation, and solutions to really tricky I/O problems.
@item
Craig Rodrigues for processing tons of bug reports.
*************** Ken Rose for fixes to our delay slot fil
*** 474,485 ****
--- 606,624 ----
Paul Rubin wrote most of the preprocessor.
@item
+ Chip Salzenberg for libstdc++ patches and improvements to locales, traits,
+ Makefiles, libio, libtool hackery, and ``long long'' support.
+
+ @item
Juha Sarlin for improvements to the H8 code generator.
@item
Greg Satz assisted in making GCC work on HP-UX for the 9000 series 300.
@item
+ Bradley Schatz for his work on the GCJ FAQ.
+
+ @item
Peter Schauer wrote the code to allow debugging to work on the Alpha.
@item
*************** work in the reload pass as well a servin
*** 491,496 ****
--- 630,643 ----
GCC 2.95.3.
@item
+ Peter Schmid for constant testing of libstdc++ -- especially application
+ testing, going above and beyond what was requested for the release
+ criteria -- and libstdc++ header file tweaks.
+
+ @item
+ Jason Schroeder for jcf-dump patches.
+
+ @item
Andreas Schwab for his work on the m68k port.
@item
*************** code which handles the parse tree and RT
*** 506,511 ****
--- 653,662 ----
folding and help with the original VAX & m68k ports.
@item
+ Kenny Simpson for prompting libstdc++ fixes due to defect reports from
+ the LWG (thereby keeping us in line with updates from the ISO).
+
+ @item
Franz Sirl for his ongoing work with making the PPC port stable
for linux.
*************** Christopher Smith did the port for Conve
*** 519,525 ****
Randy Smith finished the Sun FPA support.
@item
! Scott Snyder for various fixes.
@item
Richard Stallman, for writing the original gcc and launching the GNU project.
--- 670,680 ----
Randy Smith finished the Sun FPA support.
@item
! Scott Snyder for queue, iterator, istream, and string fixes and libstdc++
! testsuite entries.
!
! @item
! Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
@item
Richard Stallman, for writing the original gcc and launching the GNU project.
*************** Jonathan Stone wrote the machine descrip
*** 538,547 ****
--- 693,708 ----
Graham Stott for various infrastructure improvements.
@item
+ John Stracke for his Java HTTP protocol fixes.
+
+ @item
Mike Stump for his Elxsi port, g++ contributions over the years and more
recently his vxworks contributions
@item
+ Jeff Sturm for Java porting help, bug fixes, and encouragement.
+
+ @item
Shigeya Suzuki for this fixes for the bsdi platforms.
@item
*************** Gary Thomas for his ongoing work to make
*** 558,565 ****
Philipp Thomas for random bugfixes throughout the compiler
@item
Kresten Krab Thorup wrote the run time support for the Objective-C
! language.
@item
Michael Tiemann for random bugfixes, the first instruction scheduler,
--- 719,729 ----
Philipp Thomas for random bugfixes throughout the compiler
@item
+ Jason Thorpe for thread support in libstdc++ on NetBSD.
+
+ @item
Kresten Krab Thorup wrote the run time support for the Objective-C
! language and the fantastic Java bytecode interpreter.
@item
Michael Tiemann for random bugfixes, the first instruction scheduler,
*************** initial C++ support, function integratio
*** 567,572 ****
--- 731,739 ----
machine description work, delay slot scheduling.
@item
+ Andreas Tobler for his work porting libgcj to Darwin.
+
+ @item
Teemu Torma for thread safe exception handling support.
@item
*************** Leonard Tower wrote parts of the parser,
*** 574,589 ****
definitions, and of the VAX machine description.
@item
! Tom Tromey for internationalization support and his Java work.
@item
Lassi Tuura for improvements to config.guess to determine HP processor
types.
@item
Todd Vierling for contributions for NetBSD ports.
@item
Dean Wakerley for converting the install documentation from HTML to texinfo
in time for GCC 3.0.
--- 741,768 ----
definitions, and of the VAX machine description.
@item
! Tom Tromey for internationalization support and for his many Java
! contributions and libgcj maintainership.
@item
Lassi Tuura for improvements to config.guess to determine HP processor
types.
@item
+ Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
+
+ @item
+ Brent Verner for work with the libstdc++ cshadow files and their
+ associated configure steps.
+
+ @item
Todd Vierling for contributions for NetBSD ports.
@item
+ Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
+ guidance.
+
+ @item
Dean Wakerley for converting the install documentation from HTML to texinfo
in time for GCC 3.0.
*************** in time for GCC 3.0.
*** 591,596 ****
--- 770,780 ----
Krister Walfridsson for random bugfixes.
@item
+ Stephen M. Webb for time and effort on making libstdc++ shadow files
+ work with the tricky Solaris 8+ headers, and for pushing the build-time
+ header tree.
+
+ @item
John Wehle for various improvements for the x86 code generator,
related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.
*************** value range propagation and other work,
*** 599,604 ****
--- 783,798 ----
Zack Weinberg for major work on cpplib and various other bugfixes.
@item
+ Matt Welsh for help with Linux Threads support in GCJ.
+
+ @item
+ Urban Widmark for help fixing java.io.
+
+ @item
+ Mark Wielaard for new Java library code and his work integrating with
+ Classpath.
+
+ @item
Dale Wiles helped port GCC to the Tahoe.
@item
*************** description for the Tron architecture (s
*** 622,627 ****
--- 816,824 ----
@item
Kevin Zachmann helped ported GCC to the Tahoe.
+ @item
+ Gilles Zunino for help porting Java to Irix.
+
@end itemize
*************** testing GCC:
*** 630,641 ****
--- 827,862 ----
@itemize @bullet
@item
+ Michael Abd-El-Malek
+
+ @item
+ Thomas Arend
+
+ @item
+ Bonzo Armstrong
+
+ @item
+ Steven Ashe
+
+ @item
+ Chris Baldwin
+
+ @item
David Billinghurst
@item
+ Jim Blandy
+
+ @item
+ Stephane Bortzmeyer
+
+ @item
Horst von Brand
@item
+ Frank Braun
+
+ @item
Rodney Brown
@item
*************** Joe Buck
*** 645,683 ****
--- 866,976 ----
Craig Burley
@item
+ Sidney Cadot
+
+ @item
+ Bradford Castalia
+
+ @item
+ Ralph Doncaster
+
+ @item
Ulrich Drepper
@item
David Edelsohn
@item
+ Richard Emberson
+
+ @item
+ Levente Farkas
+
+ @item
+ Graham Fawcett
+
+ @item
+ Robert A. French
+
+ @item
+ J@"orgen Freyh
+
+ @item
+ Mark K. Gardner
+
+ @item
+ Charles-Antoine Gauthier
+
+ @item
Yung Shing Gene
@item
Kaveh Ghazi
@item
+ David Gilbert
+
+ @item
+ Simon Gornall
+
+ @item
+ Fred Gray
+
+ @item
+ John Griffin
+
+ @item
+ Patrik Hagglund
+
+ @item
+ Phil Hargett
+
+ @item
+ Amancio Hasty
+
+ @item
+ Bryan W. Headley
+
+ @item
Kate Hedstrom
@item
Richard Henderson
@item
+ Kevin B. Hendricks
+
+ @item
Manfred Hollstein
@item
Kamil Iskra
@item
+ Joep Jansen
+
+ @item
Christian Joensson
@item
+ David Kidd
+
+ @item
+ Tobias Kuipers
+
+ @item
+ Anand Krishnaswamy
+
+ @item
Jeff Law
@item
Robert Lipe
@item
+ llewelly
+
+ @item
Damon Love
@item
*************** Matthias Klose
*** 699,725 ****
--- 992,1054 ----
Martin Knoblauch
@item
+ Jesse Macnish
+
+ @item
David Miller
@item
Toon Moene
@item
+ Stefan Morrell
+
+ @item
+ Anon A. Mous
+
+ @item
Matthias Mueller
@item
+ Pekka Nikander
+
+ @item
Alexandre Oliva
@item
+ Jon Olson
+
+ @item
+ Magnus Persson
+
+ @item
+ Chris Pollard
+
+ @item
Richard Polton
@item
David Rees
@item
+ Paul Reilly
+
+ @item
+ Tom Reilly
+
+ @item
Loren J. Rittle
@item
+ Torsten Rueger
+
+ @item
+ Danny Sadinoff
+
+ @item
+ Marc Schifer
+
+ @item
Peter Schmid
@item
*************** Vin Shelton
*** 732,743 ****
--- 1061,1087 ----
Franz Sirl
@item
+ Tim Souder
+
+ @item
Mike Stump
@item
+ Adam Sulmicki
+
+ @item
+ George Talbot
+
+ @item
+ Gregory Warnes
+
+ @item
Carlo Wood
@item
+ David E. Young
+
+ @item
And many others
@end itemize
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.1 gcc-3.2.1/gcc/doc/cpp.1
*** gcc-3.2/gcc/doc/cpp.1 Wed Aug 14 09:36:36 2002
--- gcc-3.2.1/gcc/doc/cpp.1 Tue Nov 19 18:17:14 2002
***************
*** 1,5 ****
.\" Automatically generated by Pod::Man version 1.15
! .\" Wed Aug 14 09:36:35 2002
.\"
.\" Standard preamble:
.\" ======================================================================
--- 1,5 ----
.\" Automatically generated by Pod::Man version 1.15
! .\" Tue Nov 19 18:17:13 2002
.\"
.\" Standard preamble:
.\" ======================================================================
***************
*** 138,144 ****
.\" ======================================================================
.\"
.IX Title "CPP 1"
! .TH CPP 1 "gcc-3.2" "2002-08-14" "GNU"
.UC
.SH "NAME"
cpp \- The C Preprocessor
--- 138,144 ----
.\" ======================================================================
.\"
.IX Title "CPP 1"
! .TH CPP 1 "gcc-3.2.1" "2002-11-19" "GNU"
.UC
.SH "NAME"
cpp \- The C Preprocessor
*************** with an optional \fB\-MT\fR switch too.
*** 782,788 ****
This variable is the same as the environment variable
\&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR, except that
system header files are not ignored, so it implies \fB\-M\fR rather
! than \fB\-MM\fR.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7),
--- 782,789 ----
This variable is the same as the environment variable
\&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR, except that
system header files are not ignored, so it implies \fB\-M\fR rather
! than \fB\-MM\fR. However, the dependence on the main input file is
! omitted.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7),
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.info gcc-3.2.1/gcc/doc/cpp.info
*** gcc-3.2/gcc/doc/cpp.info Wed Aug 14 09:36:32 2002
--- gcc-3.2.1/gcc/doc/cpp.info Tue Nov 19 18:17:11 2002
*************** END-INFO-DIR-ENTRY
*** 9,17 ****
Indirect:
cpp.info-1: 191
! cpp.info-2: 49612
! cpp.info-3: 99320
! cpp.info-4: 161716
Tag Table:
(Indirect)
--- 9,18 ----
Indirect:
cpp.info-1: 191
! cpp.info-2: 49827
! cpp.info-3: 96679
! cpp.info-4: 142533
! cpp.info-5: 190064
Tag Table:
(Indirect)
*************** Node: Header Files21776
*** 25,85 ****
Node: Include Syntax23654
Node: Include Operation25156
Node: Search Path27052
! Node: Once-Only Headers29902
! Node: Computed Includes31556
! Node: Wrapper Headers34695
! Node: System Headers37114
! Node: Macros39171
! Node: Object-like Macros40271
! Node: Function-like Macros43857
! Node: Macro Arguments45467
! Node: Stringification49612
! Node: Concatenation52813
! Node: Variadic Macros55927
! Node: Predefined Macros60264
! Node: Standard Predefined Macros60847
! Node: Common Predefined Macros66269
! Node: System-specific Predefined Macros72849
! Node: C++ Named Operators74861
! Node: Undefining and Redefining Macros75816
! Node: Macro Pitfalls77894
! Node: Misnesting78419
! Node: Operator Precedence Problems79520
! Node: Swallowing the Semicolon81375
! Node: Duplication of Side Effects83387
! Node: Self-Referential Macros85559
! Node: Argument Prescan87969
! Node: Newlines in Arguments91712
! Node: Conditionals92657
! Node: Conditional Uses94486
! Node: Conditional Syntax95839
! Node: Ifdef96154
! Node: If99320
! Node: Defined101733
! Node: Else103006
! Node: Elif103567
! Node: Deleted Code104847
! Node: Diagnostics106089
! Node: Line Control107706
! Node: Pragmas111513
! Node: Other Directives115781
! Node: Preprocessor Output116975
! Node: Traditional Mode120175
! Node: Implementation Details125754
! Node: Implementation-defined behavior126376
! Node: Implementation limits128649
! Node: Obsolete Features131356
! Node: Assertions131843
! Node: Obsolete once-only headers134374
! Node: Miscellaneous obsolete features136142
! Node: Differences from previous versions137475
! Node: Invocation141987
! Ref: -MF149306
! Node: Environment Variables161716
! Ref: DEPENDENCIES_OUTPUT163366
! Node: GNU Free Documentation License164341
! Node: Option Index184239
! Node: Index of Directives187706
! Node: Concept Index189453
End Tag Table
--- 26,86 ----
Node: Include Syntax23654
Node: Include Operation25156
Node: Search Path27052
! Node: Once-Only Headers30129
! Node: Computed Includes31783
! Node: Wrapper Headers34922
! Node: System Headers37341
! Node: Macros39386
! Node: Object-like Macros40486
! Node: Function-like Macros44072
! Node: Macro Arguments45682
! Node: Stringification49827
! Node: Concatenation53028
! Node: Variadic Macros56142
! Node: Predefined Macros60932
! Node: Standard Predefined Macros61515
! Node: Common Predefined Macros66794
! Node: System-specific Predefined Macros73374
! Node: C++ Named Operators75386
! Node: Undefining and Redefining Macros76341
! Node: Macro Pitfalls78419
! Node: Misnesting78944
! Node: Operator Precedence Problems80045
! Node: Swallowing the Semicolon81900
! Node: Duplication of Side Effects83912
! Node: Self-Referential Macros86084
! Node: Argument Prescan88494
! Node: Newlines in Arguments92237
! Node: Conditionals93182
! Node: Conditional Uses95011
! Node: Conditional Syntax96364
! Node: Ifdef96679
! Node: If99845
! Node: Defined102258
! Node: Else103531
! Node: Elif104092
! Node: Deleted Code105372
! Node: Diagnostics106614
! Node: Line Control108231
! Node: Pragmas112038
! Node: Other Directives116306
! Node: Preprocessor Output117500
! Node: Traditional Mode120700
! Node: Implementation Details126279
! Node: Implementation-defined behavior126901
! Node: Implementation limits129174
! Node: Obsolete Features131881
! Node: Assertions132368
! Node: Obsolete once-only headers134899
! Node: Miscellaneous obsolete features136667
! Node: Differences from previous versions138021
! Node: Invocation142533
! Ref: -MF149852
! Node: Environment Variables162262
! Ref: DEPENDENCIES_OUTPUT163912
! Node: GNU Free Documentation License164952
! Node: Option Index184850
! Node: Index of Directives188317
! Node: Concept Index190064
End Tag Table
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.info-1 gcc-3.2.1/gcc/doc/cpp.info-1
*** gcc-3.2/gcc/doc/cpp.info-1 Wed Aug 14 09:36:32 2002
--- gcc-3.2.1/gcc/doc/cpp.info-1 Tue Nov 19 18:17:11 2002
*************** in use.
*** 712,722 ****
You can add to this list with the `-IDIR' command line option. All
the directories named by `-I' are searched, in left-to-right order,
! _before_ the default directories. You can also prevent GCC from
! searching any of the default directories with the `-nostdinc' option.
! This is useful when you are compiling an operating system kernel or
! some other program that does not use the standard C library facilities,
! or the standard C library itself.
GCC looks for headers requested with `#include "FILE"' first in the
directory containing the current file, then in the same places it would
--- 712,732 ----
You can add to this list with the `-IDIR' command line option. All
the directories named by `-I' are searched, in left-to-right order,
! _before_ the default directories. The only exception is when `dir' is
! already searched by default. In this case, the option is ignored and
! the search order for system directories remains unchanged.
!
! Duplicate directories are removed from the quote and bracket search
! chains before the two chains are merged to make the final search chain.
! Thus, it is possible for a directory to occur twice in the final search
! chain if it was specified in both the quote and bracket chains.
!
! You can prevent GCC from searching any of the default directories
! with the `-nostdinc' option. This is useful when you are compiling an
! operating system kernel or some other program that does not use the
! standard C library facilities, or the standard C library itself. `-I'
! options are not ignored as described above when `-nostdinc' is in
! effect.
GCC looks for headers requested with `#include "FILE"' first in the
directory containing the current file, then in the same places it would
*************** if `/usr/include/sys/stat.h' contains `#
*** 725,736 ****
for `types.h' first in `/usr/include/sys', then in its usual search
path.
- If you name a search directory with `-IDIR' that is also a system
- include directory, the `-I' wins; the directory will be searched
- according to the `-I' ordering, and it will not be treated as a system
- include directory. GCC will warn you when a system include directory is
- hidden in this way.
-
`#line' (*note Line Control::) does not change GCC's idea of the
directory containing the current file.
--- 735,740 ----
*************** in that directory will be considered sys
*** 948,955 ****
All directories named by `-isystem' are searched _after_ all
directories named by `-I', no matter what their order was on the
command line. If the same directory is named by both `-I' and
! `-isystem', `-I' wins; it is as if the `-isystem' option had never been
! specified at all. GCC warns you when this happens.
There is also a directive, `#pragma GCC system_header', which tells
GCC to consider the rest of the current include file a system header,
--- 952,959 ----
All directories named by `-isystem' are searched _after_ all
directories named by `-I', no matter what their order was on the
command line. If the same directory is named by both `-I' and
! `-isystem', the `-I' option is ignored. GCC provides an informative
! message when this occurs if `-v' is used.
There is also a directive, `#pragma GCC system_header', which tells
GCC to consider the rest of the current include file a system header,
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.info-2 gcc-3.2.1/gcc/doc/cpp.info-2
*** gcc-3.2/gcc/doc/cpp.info-2 Wed Aug 14 09:36:32 2002
--- gcc-3.2.1/gcc/doc/cpp.info-2 Tue Nov 19 18:17:11 2002
*************** preceding `##' is anything other than a
*** 230,235 ****
--- 230,243 ----
eprintf ("success!\n")
==> fprintf(stderr, "success!\n");
+ The above explanation is ambiguous about the case where the only macro
+ parameter is a variable arguments parameter, as it is meaningless to
+ try to distinguish whether no argument at all is an empty argument or a
+ missing argument. In this case the C99 standard is clear that the
+ comma must remain, however the existing GCC extension used to swallow
+ the comma. So CPP retains the comma when conforming to a specific C
+ standard, and drops it otherwise.
+
C99 mandates that the only place the identifier `__VA_ARGS__' can
appear is in the replacement list of a variadic macro. It may not be
used as a macro name, macro argument name, or within a different type
*************** with `__FILE__' and `__LINE__', though.
*** 355,363 ****
processing user files `__STDC__' is always 1. This has been
reported to cause problems; for instance, some versions of Solaris
provide X Windows headers that expect `__STDC__' to be either
! undefined or 1. You may be able to work around this sort of
! problem by using an `-I' option to cancel treatment of those
! headers as system headers. *Note Invocation::.
`__STDC_VERSION__'
This macro expands to the C Standard's version number, a long
--- 363,369 ----
processing user files `__STDC__' is always 1. This has been
reported to cause problems; for instance, some versions of Solaris
provide X Windows headers that expect `__STDC__' to be either
! undefined or 1. *Note Invocation::.
`__STDC_VERSION__'
This macro expands to the C Standard's version number, a long
*************** directive": `#if', `#ifdef' or `#ifndef'
*** 1139,1213 ****
* Else::
* Elif::
-
- File: cpp.info, Node: Ifdef, Next: If, Up: Conditional Syntax
-
- Ifdef
- -----
-
- The simplest sort of conditional is
-
- #ifdef MACRO
-
- CONTROLLED TEXT
-
- #endif /* MACRO */
-
- This block is called a "conditional group". CONTROLLED TEXT will be
- included in the output of the preprocessor if and only if MACRO is
- defined. We say that the conditional "succeeds" if MACRO is defined,
- "fails" if it is not.
-
- The CONTROLLED TEXT inside of a conditional can include
- preprocessing directives. They are executed only if the conditional
- succeeds. You can nest conditional groups inside other conditional
- groups, but they must be completely nested. In other words, `#endif'
- always matches the nearest `#ifdef' (or `#ifndef', or `#if'). Also,
- you cannot start a conditional group in one file and end it in another.
-
- Even if a conditional fails, the CONTROLLED TEXT inside it is still
- run through initial transformations and tokenization. Therefore, it
- must all be lexically valid C. Normally the only way this matters is
- that all comments and string literals inside a failing conditional group
- must still be properly ended.
-
- The comment following the `#endif' is not required, but it is a good
- practice if there is a lot of CONTROLLED TEXT, because it helps people
- match the `#endif' to the corresponding `#ifdef'. Older programs
- sometimes put MACRO directly after the `#endif' without enclosing it in
- a comment. This is invalid code according to the C standard. GNU CPP
- accepts it with a warning. It never affects which `#ifndef' the
- `#endif' matches.
-
- Sometimes you wish to use some code if a macro is _not_ defined.
- You can do this by writing `#ifndef' instead of `#ifdef'. One common
- use of `#ifndef' is to include code only the first time a header file
- is included. *Note Once-Only Headers::.
-
- Macro definitions can vary between compilations for several reasons.
- Here are some samples.
-
- * Some macros are predefined on each kind of machine (*note
- System-specific Predefined Macros::). This allows you to provide
- code specially tuned for a particular machine.
-
- * System header files define more macros, associated with the
- features they implement. You can test these macros with
- conditionals to avoid using a system feature on a machine where it
- is not implemented.
-
- * Macros can be defined or undefined with the `-D' and `-U' command
- line options when you compile the program. You can arrange to
- compile the same source file into two different programs by
- choosing a macro name to specify which program you want, writing
- conditionals to test whether or how this macro is defined, and
- then controlling the state of the macro with command line options,
- perhaps set in the Makefile. *Note Invocation::.
-
- * Your program might have a special header file (often called
- `config.h') that is adjusted when the program is compiled. It can
- define or not define macros depending on the features of the
- system and the desired capabilities of the program. The
- adjustment can be automated by a tool such as `autoconf', or done
- by hand.
-
--- 1145,1147 ----
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.info-3 gcc-3.2.1/gcc/doc/cpp.info-3
*** gcc-3.2/gcc/doc/cpp.info-3 Wed Aug 14 09:36:32 2002
--- gcc-3.2.1/gcc/doc/cpp.info-3 Tue Nov 19 18:17:11 2002
*************** START-INFO-DIR-ENTRY
*** 7,12 ****
--- 7,84 ----
END-INFO-DIR-ENTRY
+ File: cpp.info, Node: Ifdef, Next: If, Up: Conditional Syntax
+
+ Ifdef
+ -----
+
+ The simplest sort of conditional is
+
+ #ifdef MACRO
+
+ CONTROLLED TEXT
+
+ #endif /* MACRO */
+
+ This block is called a "conditional group". CONTROLLED TEXT will be
+ included in the output of the preprocessor if and only if MACRO is
+ defined. We say that the conditional "succeeds" if MACRO is defined,
+ "fails" if it is not.
+
+ The CONTROLLED TEXT inside of a conditional can include
+ preprocessing directives. They are executed only if the conditional
+ succeeds. You can nest conditional groups inside other conditional
+ groups, but they must be completely nested. In other words, `#endif'
+ always matches the nearest `#ifdef' (or `#ifndef', or `#if'). Also,
+ you cannot start a conditional group in one file and end it in another.
+
+ Even if a conditional fails, the CONTROLLED TEXT inside it is still
+ run through initial transformations and tokenization. Therefore, it
+ must all be lexically valid C. Normally the only way this matters is
+ that all comments and string literals inside a failing conditional group
+ must still be properly ended.
+
+ The comment following the `#endif' is not required, but it is a good
+ practice if there is a lot of CONTROLLED TEXT, because it helps people
+ match the `#endif' to the corresponding `#ifdef'. Older programs
+ sometimes put MACRO directly after the `#endif' without enclosing it in
+ a comment. This is invalid code according to the C standard. GNU CPP
+ accepts it with a warning. It never affects which `#ifndef' the
+ `#endif' matches.
+
+ Sometimes you wish to use some code if a macro is _not_ defined.
+ You can do this by writing `#ifndef' instead of `#ifdef'. One common
+ use of `#ifndef' is to include code only the first time a header file
+ is included. *Note Once-Only Headers::.
+
+ Macro definitions can vary between compilations for several reasons.
+ Here are some samples.
+
+ * Some macros are predefined on each kind of machine (*note
+ System-specific Predefined Macros::). This allows you to provide
+ code specially tuned for a particular machine.
+
+ * System header files define more macros, associated with the
+ features they implement. You can test these macros with
+ conditionals to avoid using a system feature on a machine where it
+ is not implemented.
+
+ * Macros can be defined or undefined with the `-D' and `-U' command
+ line options when you compile the program. You can arrange to
+ compile the same source file into two different programs by
+ choosing a macro name to specify which program you want, writing
+ conditionals to test whether or how this macro is defined, and
+ then controlling the state of the macro with command line options,
+ perhaps set in the Makefile. *Note Invocation::.
+
+ * Your program might have a special header file (often called
+ `config.h') that is adjusted when the program is compiled. It can
+ define or not define macros depending on the features of the
+ system and the desired capabilities of the program. The
+ adjustment can be automated by a tool such as `autoconf', or done
+ by hand.
+
+
File: cpp.info, Node: If, Next: Defined, Prev: Ifdef, Up: Conditional Syntax
If
*************** Miscellaneous obsolete features
*** 906,914 ****
* Attempting to paste two tokens which together do not form a valid
preprocessing token.
! The preprocessor currently warns about this and outputs the two
! tokens adjacently, which is probably the behavior the programmer
! intends. It may not work in future, though.
Most of the time, when you get this warning, you will find that
`##' is being used superstitiously, to guard against whitespace
--- 978,986 ----
* Attempting to paste two tokens which together do not form a valid
preprocessing token.
! The preprocessor currently warns about this, and the resulting
! preprocessed output is undefined. The tokens remain distinct if
! the preprocessor is being used directly by the compiler front end.
Most of the time, when you get this warning, you will find that
`##' is being used superstitiously, to guard against whitespace
*************** they generally represent bugs in the sna
*** 1028,1520 ****
invasive.)
-
- File: cpp.info, Node: Invocation, Next: Environment Variables, Prev: Implementation Details, Up: Top
-
- Invocation
- **********
-
- Most often when you use the C preprocessor you will not have to
- invoke it explicitly: the C compiler will do so automatically.
- However, the preprocessor is sometimes useful on its own. All the
- options listed here are also acceptable to the C compiler and have the
- same meaning, except that the C compiler has different rules for
- specifying the output file.
-
- *Note:* Whether you use the preprocessor by way of `gcc' or `cpp',
- the "compiler driver" is run first. This program's purpose is to
- translate your command into invocations of the programs that do the
- actual work. Their command line interfaces are similar but not
- identical to the documented interface, and may change without notice.
-
- The C preprocessor expects two file names as arguments, INFILE and
- OUTFILE. The preprocessor reads INFILE together with any other files
- it specifies with `#include'. All the output generated by the combined
- input files is written in OUTFILE.
-
- Either INFILE or OUTFILE may be `-', which as INFILE means to read
- from standard input and as OUTFILE means to write to standard output.
- Also, if either file is omitted, it means the same as if `-' had been
- specified for that file.
-
- Unless otherwise noted, or the option ends in `=', all options which
- take an argument may have that argument appear either immediately after
- the option, or with a space between option and argument: `-Ifoo' and
- `-I foo' have the same effect.
-
- Many options have multi-letter names; therefore multiple
- single-letter options may _not_ be grouped: `-dM' is very different from
- `-d -M'.
-
- `-D NAME'
- Predefine NAME as a macro, with definition `1'.
-
- `-D NAME=DEFINITION'
- Predefine NAME as a macro, with definition DEFINITION. There are
- no restrictions on the contents of DEFINITION, but if you are
- invoking the preprocessor from a shell or shell-like program you
- may need to use the shell's quoting syntax to protect characters
- such as spaces that have a meaning in the shell syntax.
-
- If you wish to define a function-like macro on the command line,
- write its argument list with surrounding parentheses before the
- equals sign (if any). Parentheses are meaningful to most shells,
- so you will need to quote the option. With `sh' and `csh',
- `-D'NAME(ARGS...)=DEFINITION'' works.
-
- `-D' and `-U' options are processed in the order they are given on
- the command line. All `-imacros FILE' and `-include FILE' options
- are processed after all `-D' and `-U' options.
-
- `-U NAME'
- Cancel any previous definition of NAME, either built in or
- provided with a `-D' option.
-
- `-undef'
- Do not predefine any system-specific macros. The common predefined
- macros remain defined.
-
- `-I DIR'
- Add the directory DIR to the list of directories to be searched
- for header files. *Note Search Path::. Directories named by `-I'
- are searched before the standard system include directories.
-
- It is dangerous to specify a standard system include directory in
- an `-I' option. This defeats the special treatment of system
- headers (*note System Headers::) . It can also defeat the repairs
- to buggy system headers which GCC makes when it is installed.
-
- `-o FILE'
- Write output to FILE. This is the same as specifying FILE as the
- second non-option argument to `cpp'. `gcc' has a different
- interpretation of a second non-option argument, so you must use
- `-o' to specify the output file.
-
- `-Wall'
- Turns on all optional warnings which are desirable for normal
- code. At present this is `-Wcomment' and `-Wtrigraphs'. Note that
- many of the preprocessor's warnings are on by default and have no
- options to control them.
-
- `-Wcomment'
- `-Wcomments'
- Warn whenever a comment-start sequence `/*' appears in a `/*'
- comment, or whenever a backslash-newline appears in a `//' comment.
- (Both forms have the same effect.)
-
- `-Wtrigraphs'
- Warn if any trigraphs are encountered. This option used to take
- effect only if `-trigraphs' was also specified, but now works
- independently. Warnings are not given for trigraphs within
- comments, as they do not affect the meaning of the program.
-
- `-Wtraditional'
- Warn about certain constructs that behave differently in
- traditional and ISO C. Also warn about ISO C constructs that have
- no traditional C equivalent, and problematic constructs which
- should be avoided. *Note Traditional Mode::.
-
- `-Wimport'
- Warn the first time `#import' is used.
-
- `-Wundef'
- Warn whenever an identifier which is not a macro is encountered in
- an `#if' directive, outside of `defined'. Such identifiers are
- replaced with zero.
-
- `-Werror'
- Make all warnings into hard errors. Source code which triggers
- warnings will be rejected.
-
- `-Wsystem-headers'
- Issue warnings for code in system headers. These are normally
- unhelpful in finding bugs in your own code, therefore suppressed.
- If you are responsible for the system library, you may want to see
- them.
-
- `-w'
- Suppress all warnings, including those which GNU CPP issues by
- default.
-
- `-pedantic'
- Issue all the mandatory diagnostics listed in the C standard.
- Some of them are left out by default, since they trigger
- frequently on harmless code.
-
- `-pedantic-errors'
- Issue all the mandatory diagnostics, and make all mandatory
- diagnostics into errors. This includes mandatory diagnostics that
- GCC issues without `-pedantic' but treats as warnings.
-
- `-M'
- Instead of outputting the result of preprocessing, output a rule
- suitable for `make' describing the dependencies of the main source
- file. The preprocessor outputs one `make' rule containing the
- object file name for that source file, a colon, and the names of
- all the included files, including those coming from `-include' or
- `-imacros' command line options.
-
- Unless specified explicitly (with `-MT' or `-MQ'), the object file
- name consists of the basename of the source file with any suffix
- replaced with object file suffix. If there are many included
- files then the rule is split into several lines using `\'-newline.
- The rule has no commands.
-
- This option does not suppress the preprocessor's debug output,
- such as `-dM'. To avoid mixing such debug output with the
- dependency rules you should explicitly specify the dependency
- output file with `-MF', or use an environment variable like
- `DEPENDENCIES_OUTPUT' (*note DEPENDENCIES_OUTPUT::). Debug output
- will still be sent to the regular output stream as normal.
-
- Passing `-M' to the driver implies `-E'.
-
- `-MM'
- Like `-M' but do not mention header files that are found in system
- header directories, nor header files that are included, directly
- or indirectly, from such a header.
-
- This implies that the choice of angle brackets or double quotes in
- an `#include' directive does not in itself determine whether that
- header will appear in `-MM' dependency output. This is a slight
- change in semantics from GCC versions 3.0 and earlier.
-
- `-MF FILE'
- When used with `-M' or `-MM', specifies a file to write the
- dependencies to. If no `-MF' switch is given the preprocessor
- sends the rules to the same place it would have sent preprocessed
- output.
-
- When used with the driver options `-MD' or `-MMD', `-MF' overrides
- the default dependency output file.
-
- `-MG'
- When used with `-M' or `-MM', `-MG' says to treat missing header
- files as generated files and assume they live in the same
- directory as the source file. It suppresses preprocessed output,
- as a missing header file is ordinarily an error.
-
- This feature is used in automatic updating of makefiles.
-
- `-MP'
- This option instructs CPP to add a phony target for each dependency
- other than the main file, causing each to depend on nothing. These
- dummy rules work around errors `make' gives if you remove header
- files without updating the `Makefile' to match.
-
- This is typical output:
-
- test.o: test.c test.h
-
- test.h:
-
- `-MT TARGET'
- Change the target of the rule emitted by dependency generation. By
- default CPP takes the name of the main input file, including any
- path, deletes any file suffix such as `.c', and appends the
- platform's usual object suffix. The result is the target.
-
- An `-MT' option will set the target to be exactly the string you
- specify. If you want multiple targets, you can specify them as a
- single argument to `-MT', or use multiple `-MT' options.
-
- For example, `-MT '$(objpfx)foo.o'' might give
-
- $(objpfx)foo.o: foo.c
-
- `-MQ TARGET'
- Same as `-MT', but it quotes any characters which are special to
- Make. `-MQ '$(objpfx)foo.o'' gives
-
- $$(objpfx)foo.o: foo.c
-
- The default target is automatically quoted, as if it were given
- with `-MQ'.
-
- `-MD'
- `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
- implied. The driver determines FILE based on whether an `-o'
- option is given. If it is, the driver uses its argument but with
- a suffix of `.d', otherwise it take the basename of the input file
- and applies a `.d' suffix.
-
- If `-MD' is used in conjunction with `-E', any `-o' switch is
- understood to specify the dependency output file (but *note
- -MF::), but if used without `-E', each `-o' is understood to
- specify a target object file.
-
- Since `-E' is not implied, `-MD' can be used to generate a
- dependency output file as a side-effect of the compilation process.
-
- `-MMD'
- Like `-MD' except mention only user header files, not system
- -header files.
-
- `-x c'
- `-x c++'
- `-x objective-c'
- `-x assembler-with-cpp'
- Specify the source language: C, C++, Objective-C, or assembly.
- This has nothing to do with standards conformance or extensions;
- it merely selects which base syntax to expect. If you give none
- of these options, cpp will deduce the language from the extension
- of the source file: `.c', `.cc', `.m', or `.S'. Some other common
- extensions for C++ and assembly are also recognized. If cpp does
- not recognize the extension, it will treat the file as C; this is
- the most generic mode.
-
- *Note:* Previous versions of cpp accepted a `-lang' option which
- selected both the language and the standards conformance level.
- This option has been removed, because it conflicts with the `-l'
- option.
-
- `-std=STANDARD'
- `-ansi'
- Specify the standard to which the code should conform. Currently
- cpp only knows about the standards for C; other language standards
- will be added in the future.
-
- STANDARD may be one of:
- `iso9899:1990'
- `c89'
- The ISO C standard from 1990. `c89' is the customary
- shorthand for this version of the standard.
-
- The `-ansi' option is equivalent to `-std=c89'.
-
- `iso9899:199409'
- The 1990 C standard, as amended in 1994.
-
- `iso9899:1999'
- `c99'
- `iso9899:199x'
- `c9x'
- The revised ISO C standard, published in December 1999.
- Before publication, this was known as C9X.
-
- `gnu89'
- The 1990 C standard plus GNU extensions. This is the default.
-
- `gnu99'
- `gnu9x'
- The 1999 C standard plus GNU extensions.
-
- `-I-'
- Split the include path. Any directories specified with `-I'
- options before `-I-' are searched only for headers requested with
- `#include "FILE"'; they are not searched for `#include '.
- If additional directories are specified with `-I' options after
- the `-I-', those directories are searched for all `#include'
- directives.
-
- In addition, `-I-' inhibits the use of the directory of the current
- file directory as the first search directory for `#include "FILE"'.
- *Note Search Path::.
-
- `-nostdinc'
- Do not search the standard system directories for header files.
- Only the directories you have specified with `-I' options (and the
- directory of the current file, if appropriate) are searched.
-
- `-nostdinc++'
- 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 the C++ library.)
-
- `-include FILE'
- Process FILE as if `#include "file"' appeared as the first line of
- the primary source file. However, the first directory searched
- for FILE is the preprocessor's working directory _instead of_ the
- directory containing the main source file. If not found there, it
- is searched for in the remainder of the `#include "..."' search
- chain as normal.
-
- If multiple `-include' options are given, the files are included
- in the order they appear on the command line.
-
- `-imacros FILE'
- Exactly like `-include', except that any output produced by
- scanning FILE is thrown away. Macros it defines remain defined.
- This allows you to acquire all the macros from a header without
- also processing its declarations.
-
- All files specified by `-imacros' are processed before all files
- specified by `-include'.
-
- `-idirafter DIR'
- Search DIR for header files, but do it _after_ all directories
- specified with `-I' and the standard system directories have been
- exhausted. DIR is treated as a system include directory.
-
- `-iprefix PREFIX'
- Specify PREFIX as the prefix for subsequent `-iwithprefix'
- options. If the prefix represents a directory, you should include
- the final `/'.
-
- `-iwithprefix DIR'
- `-iwithprefixbefore DIR'
- Append DIR to the prefix specified previously with `-iprefix', and
- add the resulting directory to the include search path.
- `-iwithprefixbefore' puts it in the same place `-I' would;
- `-iwithprefix' puts it where `-idirafter' would.
-
- Use of these options is discouraged.
-
- `-isystem DIR'
- Search DIR for header files, after all directories specified by
- `-I' but before the standard system directories. Mark it as a
- system directory, so that it gets the same special treatment as is
- applied to the standard system directories. *Note System
- Headers::.
-
- `-fpreprocessed'
- Indicate to the preprocessor that the input file has already been
- preprocessed. This suppresses things like macro expansion,
- trigraph conversion, escaped newline splicing, and processing of
- most directives. The preprocessor still recognizes and removes
- comments, so that you can pass a file preprocessed with `-C' to
- the compiler without problems. In this mode the integrated
- preprocessor is little more than a tokenizer for the front ends.
-
- `-fpreprocessed' is implicit if the input file has one of the
- extensions `.i', `.ii' or `.mi'. These are the extensions that
- GCC uses for preprocessed files created by `-save-temps'.
-
- `-ftabstop=WIDTH'
- Set the distance between tab stops. This helps the preprocessor
- report correct column numbers in warnings or errors, even if tabs
- appear on the line. If the value is less than 1 or greater than
- 100, the option is ignored. The default is 8.
-
- `-fno-show-column'
- Do not print column numbers in diagnostics. This may be necessary
- if diagnostics are being scanned by a program that does not
- understand the column numbers, such as `dejagnu'.
-
- `-A PREDICATE=ANSWER'
- Make an assertion with the predicate PREDICATE and answer ANSWER.
- This form is preferred to the older form `-A PREDICATE(ANSWER)',
- which is still supported, because it does not use shell special
- characters. *Note Assertions::.
-
- `-A -PREDICATE=ANSWER'
- Cancel an assertion with the predicate PREDICATE and answer ANSWER.
-
- `-A-'
- Cancel all predefined assertions and all assertions preceding it on
- the command line. Also, undefine all predefined macros and all
- macros preceding it on the command line. (This is a historical
- wart and may change in the future.)
-
- `-dCHARS'
- CHARS is a sequence of one or more of the following characters,
- and must not be preceded by a space. Other characters are
- interpreted by the compiler proper, or reserved for future
- versions of GCC, and so are silently ignored. If you specify
- characters whose behavior conflicts, the result is undefined.
-
- `M'
- Instead of the normal output, generate a list of `#define'
- directives for all the macros defined during the execution of
- the preprocessor, including predefined macros. This gives
- you a way of finding out what is predefined in your version
- of the preprocessor. Assuming you have no file `foo.h', the
- command
-
- touch foo.h; cpp -dM foo.h
-
- will show all the predefined macros.
-
- `D'
- Like `M' except in two respects: it does _not_ include the
- predefined macros, and it outputs _both_ the `#define'
- directives and the result of preprocessing. Both kinds of
- output go to the standard output file.
-
- `N'
- Like `D', but emit only the macro names, not their expansions.
-
- `I'
- Output `#include' directives in addition to the result of
- preprocessing.
-
- `-P'
- Inhibit generation of linemarkers in the output from the
- preprocessor. This might be useful when running the preprocessor
- on something that is not C code, and will be sent to a program
- which might be confused by the linemarkers. *Note Preprocessor
- Output::.
-
- `-C'
- Do not discard comments. All comments are passed through to the
- output file, except for comments in processed directives, which
- are deleted along with the directive.
-
- You should be prepared for side effects when using `-C'; it causes
- the preprocessor to treat comments as tokens in their own right.
- For example, comments appearing at the start of what would be a
- directive line have the effect of turning that line into an
- ordinary source line, since the first token on the line is no
- longer a `#'.
-
- `-gcc'
- Define the macros __GNUC__, __GNUC_MINOR__ and
- __GNUC_PATCHLEVEL__. These are defined automatically when you use
- `gcc -E'; you can turn them off in that case with `-no-gcc'.
-
- `-traditional'
- Try to imitate the behavior of old-fashioned C, as opposed to ISO
- C. *Note Traditional Mode::.
-
- `-trigraphs'
- Process trigraph sequences. *Note Initial processing::.
-
- `-remap'
- Enable special code to work around file systems which only permit
- very short file names, such as MS-DOS.
-
- `-$'
- Forbid the use of `$' in identifiers. The C standard allows
- implementations to define extra characters that can appear in
- identifiers. By default GNU CPP permits `$', a common extension.
-
- `-h'
- `--help'
- `--target-help'
- Print text describing all the command line options instead of
- preprocessing anything.
-
- `-v'
- Verbose mode. Print out GNU CPP's version number at the beginning
- of execution, and report the final form of the include path.
-
- `-H'
- Print the name of each header file used, in addition to other
- normal activities. Each name is indented to show how deep in the
- `#include' stack it is.
-
- `-version'
- `--version'
- Print out GNU CPP's version number. With one dash, proceed to
- preprocess as normal. With two dashes, exit immediately.
-
--- 1100,1102 ----
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.info-4 gcc-3.2.1/gcc/doc/cpp.info-4
*** gcc-3.2/gcc/doc/cpp.info-4 Wed Aug 14 09:36:32 2002
--- gcc-3.2.1/gcc/doc/cpp.info-4 Tue Nov 19 18:17:11 2002
*************** START-INFO-DIR-ENTRY
*** 7,12 ****
--- 7,502 ----
END-INFO-DIR-ENTRY
+ File: cpp.info, Node: Invocation, Next: Environment Variables, Prev: Implementation Details, Up: Top
+
+ Invocation
+ **********
+
+ Most often when you use the C preprocessor you will not have to
+ invoke it explicitly: the C compiler will do so automatically.
+ However, the preprocessor is sometimes useful on its own. All the
+ options listed here are also acceptable to the C compiler and have the
+ same meaning, except that the C compiler has different rules for
+ specifying the output file.
+
+ *Note:* Whether you use the preprocessor by way of `gcc' or `cpp',
+ the "compiler driver" is run first. This program's purpose is to
+ translate your command into invocations of the programs that do the
+ actual work. Their command line interfaces are similar but not
+ identical to the documented interface, and may change without notice.
+
+ The C preprocessor expects two file names as arguments, INFILE and
+ OUTFILE. The preprocessor reads INFILE together with any other files
+ it specifies with `#include'. All the output generated by the combined
+ input files is written in OUTFILE.
+
+ Either INFILE or OUTFILE may be `-', which as INFILE means to read
+ from standard input and as OUTFILE means to write to standard output.
+ Also, if either file is omitted, it means the same as if `-' had been
+ specified for that file.
+
+ Unless otherwise noted, or the option ends in `=', all options which
+ take an argument may have that argument appear either immediately after
+ the option, or with a space between option and argument: `-Ifoo' and
+ `-I foo' have the same effect.
+
+ Many options have multi-letter names; therefore multiple
+ single-letter options may _not_ be grouped: `-dM' is very different from
+ `-d -M'.
+
+ `-D NAME'
+ Predefine NAME as a macro, with definition `1'.
+
+ `-D NAME=DEFINITION'
+ Predefine NAME as a macro, with definition DEFINITION. There are
+ no restrictions on the contents of DEFINITION, but if you are
+ invoking the preprocessor from a shell or shell-like program you
+ may need to use the shell's quoting syntax to protect characters
+ such as spaces that have a meaning in the shell syntax.
+
+ If you wish to define a function-like macro on the command line,
+ write its argument list with surrounding parentheses before the
+ equals sign (if any). Parentheses are meaningful to most shells,
+ so you will need to quote the option. With `sh' and `csh',
+ `-D'NAME(ARGS...)=DEFINITION'' works.
+
+ `-D' and `-U' options are processed in the order they are given on
+ the command line. All `-imacros FILE' and `-include FILE' options
+ are processed after all `-D' and `-U' options.
+
+ `-U NAME'
+ Cancel any previous definition of NAME, either built in or
+ provided with a `-D' option.
+
+ `-undef'
+ Do not predefine any system-specific macros. The common predefined
+ macros remain defined.
+
+ `-I DIR'
+ Add the directory DIR to the list of directories to be searched
+ for header files. *Note Search Path::. Directories named by `-I'
+ are searched before the standard system include directories.
+
+ It is dangerous to specify a standard system include directory in
+ an `-I' option. This defeats the special treatment of system
+ headers (*note System Headers::) . It can also defeat the repairs
+ to buggy system headers which GCC makes when it is installed.
+
+ `-o FILE'
+ Write output to FILE. This is the same as specifying FILE as the
+ second non-option argument to `cpp'. `gcc' has a different
+ interpretation of a second non-option argument, so you must use
+ `-o' to specify the output file.
+
+ `-Wall'
+ Turns on all optional warnings which are desirable for normal
+ code. At present this is `-Wcomment' and `-Wtrigraphs'. Note that
+ many of the preprocessor's warnings are on by default and have no
+ options to control them.
+
+ `-Wcomment'
+ `-Wcomments'
+ Warn whenever a comment-start sequence `/*' appears in a `/*'
+ comment, or whenever a backslash-newline appears in a `//' comment.
+ (Both forms have the same effect.)
+
+ `-Wtrigraphs'
+ Warn if any trigraphs are encountered. This option used to take
+ effect only if `-trigraphs' was also specified, but now works
+ independently. Warnings are not given for trigraphs within
+ comments, as they do not affect the meaning of the program.
+
+ `-Wtraditional'
+ Warn about certain constructs that behave differently in
+ traditional and ISO C. Also warn about ISO C constructs that have
+ no traditional C equivalent, and problematic constructs which
+ should be avoided. *Note Traditional Mode::.
+
+ `-Wimport'
+ Warn the first time `#import' is used.
+
+ `-Wundef'
+ Warn whenever an identifier which is not a macro is encountered in
+ an `#if' directive, outside of `defined'. Such identifiers are
+ replaced with zero.
+
+ `-Werror'
+ Make all warnings into hard errors. Source code which triggers
+ warnings will be rejected.
+
+ `-Wsystem-headers'
+ Issue warnings for code in system headers. These are normally
+ unhelpful in finding bugs in your own code, therefore suppressed.
+ If you are responsible for the system library, you may want to see
+ them.
+
+ `-w'
+ Suppress all warnings, including those which GNU CPP issues by
+ default.
+
+ `-pedantic'
+ Issue all the mandatory diagnostics listed in the C standard.
+ Some of them are left out by default, since they trigger
+ frequently on harmless code.
+
+ `-pedantic-errors'
+ Issue all the mandatory diagnostics, and make all mandatory
+ diagnostics into errors. This includes mandatory diagnostics that
+ GCC issues without `-pedantic' but treats as warnings.
+
+ `-M'
+ Instead of outputting the result of preprocessing, output a rule
+ suitable for `make' describing the dependencies of the main source
+ file. The preprocessor outputs one `make' rule containing the
+ object file name for that source file, a colon, and the names of
+ all the included files, including those coming from `-include' or
+ `-imacros' command line options.
+
+ Unless specified explicitly (with `-MT' or `-MQ'), the object file
+ name consists of the basename of the source file with any suffix
+ replaced with object file suffix. If there are many included
+ files then the rule is split into several lines using `\'-newline.
+ The rule has no commands.
+
+ This option does not suppress the preprocessor's debug output,
+ such as `-dM'. To avoid mixing such debug output with the
+ dependency rules you should explicitly specify the dependency
+ output file with `-MF', or use an environment variable like
+ `DEPENDENCIES_OUTPUT' (*note DEPENDENCIES_OUTPUT::). Debug output
+ will still be sent to the regular output stream as normal.
+
+ Passing `-M' to the driver implies `-E'.
+
+ `-MM'
+ Like `-M' but do not mention header files that are found in system
+ header directories, nor header files that are included, directly
+ or indirectly, from such a header.
+
+ This implies that the choice of angle brackets or double quotes in
+ an `#include' directive does not in itself determine whether that
+ header will appear in `-MM' dependency output. This is a slight
+ change in semantics from GCC versions 3.0 and earlier.
+
+ `-MF FILE'
+ When used with `-M' or `-MM', specifies a file to write the
+ dependencies to. If no `-MF' switch is given the preprocessor
+ sends the rules to the same place it would have sent preprocessed
+ output.
+
+ When used with the driver options `-MD' or `-MMD', `-MF' overrides
+ the default dependency output file.
+
+ `-MG'
+ When used with `-M' or `-MM', `-MG' says to treat missing header
+ files as generated files and assume they live in the same
+ directory as the source file. It suppresses preprocessed output,
+ as a missing header file is ordinarily an error.
+
+ This feature is used in automatic updating of makefiles.
+
+ `-MP'
+ This option instructs CPP to add a phony target for each dependency
+ other than the main file, causing each to depend on nothing. These
+ dummy rules work around errors `make' gives if you remove header
+ files without updating the `Makefile' to match.
+
+ This is typical output:
+
+ test.o: test.c test.h
+
+ test.h:
+
+ `-MT TARGET'
+ Change the target of the rule emitted by dependency generation. By
+ default CPP takes the name of the main input file, including any
+ path, deletes any file suffix such as `.c', and appends the
+ platform's usual object suffix. The result is the target.
+
+ An `-MT' option will set the target to be exactly the string you
+ specify. If you want multiple targets, you can specify them as a
+ single argument to `-MT', or use multiple `-MT' options.
+
+ For example, `-MT '$(objpfx)foo.o'' might give
+
+ $(objpfx)foo.o: foo.c
+
+ `-MQ TARGET'
+ Same as `-MT', but it quotes any characters which are special to
+ Make. `-MQ '$(objpfx)foo.o'' gives
+
+ $$(objpfx)foo.o: foo.c
+
+ The default target is automatically quoted, as if it were given
+ with `-MQ'.
+
+ `-MD'
+ `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
+ implied. The driver determines FILE based on whether an `-o'
+ option is given. If it is, the driver uses its argument but with
+ a suffix of `.d', otherwise it take the basename of the input file
+ and applies a `.d' suffix.
+
+ If `-MD' is used in conjunction with `-E', any `-o' switch is
+ understood to specify the dependency output file (but *note
+ -MF::), but if used without `-E', each `-o' is understood to
+ specify a target object file.
+
+ Since `-E' is not implied, `-MD' can be used to generate a
+ dependency output file as a side-effect of the compilation process.
+
+ `-MMD'
+ Like `-MD' except mention only user header files, not system
+ -header files.
+
+ `-x c'
+ `-x c++'
+ `-x objective-c'
+ `-x assembler-with-cpp'
+ Specify the source language: C, C++, Objective-C, or assembly.
+ This has nothing to do with standards conformance or extensions;
+ it merely selects which base syntax to expect. If you give none
+ of these options, cpp will deduce the language from the extension
+ of the source file: `.c', `.cc', `.m', or `.S'. Some other common
+ extensions for C++ and assembly are also recognized. If cpp does
+ not recognize the extension, it will treat the file as C; this is
+ the most generic mode.
+
+ *Note:* Previous versions of cpp accepted a `-lang' option which
+ selected both the language and the standards conformance level.
+ This option has been removed, because it conflicts with the `-l'
+ option.
+
+ `-std=STANDARD'
+ `-ansi'
+ Specify the standard to which the code should conform. Currently
+ cpp only knows about the standards for C; other language standards
+ will be added in the future.
+
+ STANDARD may be one of:
+ `iso9899:1990'
+ `c89'
+ The ISO C standard from 1990. `c89' is the customary
+ shorthand for this version of the standard.
+
+ The `-ansi' option is equivalent to `-std=c89'.
+
+ `iso9899:199409'
+ The 1990 C standard, as amended in 1994.
+
+ `iso9899:1999'
+ `c99'
+ `iso9899:199x'
+ `c9x'
+ The revised ISO C standard, published in December 1999.
+ Before publication, this was known as C9X.
+
+ `gnu89'
+ The 1990 C standard plus GNU extensions. This is the default.
+
+ `gnu99'
+ `gnu9x'
+ The 1999 C standard plus GNU extensions.
+
+ `-I-'
+ Split the include path. Any directories specified with `-I'
+ options before `-I-' are searched only for headers requested with
+ `#include "FILE"'; they are not searched for `#include '.
+ If additional directories are specified with `-I' options after
+ the `-I-', those directories are searched for all `#include'
+ directives.
+
+ In addition, `-I-' inhibits the use of the directory of the current
+ file directory as the first search directory for `#include "FILE"'.
+ *Note Search Path::.
+
+ `-nostdinc'
+ Do not search the standard system directories for header files.
+ Only the directories you have specified with `-I' options (and the
+ directory of the current file, if appropriate) are searched.
+
+ `-nostdinc++'
+ 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 the C++ library.)
+
+ `-include FILE'
+ Process FILE as if `#include "file"' appeared as the first line of
+ the primary source file. However, the first directory searched
+ for FILE is the preprocessor's working directory _instead of_ the
+ directory containing the main source file. If not found there, it
+ is searched for in the remainder of the `#include "..."' search
+ chain as normal.
+
+ If multiple `-include' options are given, the files are included
+ in the order they appear on the command line.
+
+ `-imacros FILE'
+ Exactly like `-include', except that any output produced by
+ scanning FILE is thrown away. Macros it defines remain defined.
+ This allows you to acquire all the macros from a header without
+ also processing its declarations.
+
+ All files specified by `-imacros' are processed before all files
+ specified by `-include'.
+
+ `-idirafter DIR'
+ Search DIR for header files, but do it _after_ all directories
+ specified with `-I' and the standard system directories have been
+ exhausted. DIR is treated as a system include directory.
+
+ `-iprefix PREFIX'
+ Specify PREFIX as the prefix for subsequent `-iwithprefix'
+ options. If the prefix represents a directory, you should include
+ the final `/'.
+
+ `-iwithprefix DIR'
+ `-iwithprefixbefore DIR'
+ Append DIR to the prefix specified previously with `-iprefix', and
+ add the resulting directory to the include search path.
+ `-iwithprefixbefore' puts it in the same place `-I' would;
+ `-iwithprefix' puts it where `-idirafter' would.
+
+ Use of these options is discouraged.
+
+ `-isystem DIR'
+ Search DIR for header files, after all directories specified by
+ `-I' but before the standard system directories. Mark it as a
+ system directory, so that it gets the same special treatment as is
+ applied to the standard system directories. *Note System
+ Headers::.
+
+ `-fpreprocessed'
+ Indicate to the preprocessor that the input file has already been
+ preprocessed. This suppresses things like macro expansion,
+ trigraph conversion, escaped newline splicing, and processing of
+ most directives. The preprocessor still recognizes and removes
+ comments, so that you can pass a file preprocessed with `-C' to
+ the compiler without problems. In this mode the integrated
+ preprocessor is little more than a tokenizer for the front ends.
+
+ `-fpreprocessed' is implicit if the input file has one of the
+ extensions `.i', `.ii' or `.mi'. These are the extensions that
+ GCC uses for preprocessed files created by `-save-temps'.
+
+ `-ftabstop=WIDTH'
+ Set the distance between tab stops. This helps the preprocessor
+ report correct column numbers in warnings or errors, even if tabs
+ appear on the line. If the value is less than 1 or greater than
+ 100, the option is ignored. The default is 8.
+
+ `-fno-show-column'
+ Do not print column numbers in diagnostics. This may be necessary
+ if diagnostics are being scanned by a program that does not
+ understand the column numbers, such as `dejagnu'.
+
+ `-A PREDICATE=ANSWER'
+ Make an assertion with the predicate PREDICATE and answer ANSWER.
+ This form is preferred to the older form `-A PREDICATE(ANSWER)',
+ which is still supported, because it does not use shell special
+ characters. *Note Assertions::.
+
+ `-A -PREDICATE=ANSWER'
+ Cancel an assertion with the predicate PREDICATE and answer ANSWER.
+
+ `-A-'
+ Cancel all predefined assertions and all assertions preceding it on
+ the command line. Also, undefine all predefined macros and all
+ macros preceding it on the command line. (This is a historical
+ wart and may change in the future.)
+
+ `-dCHARS'
+ CHARS is a sequence of one or more of the following characters,
+ and must not be preceded by a space. Other characters are
+ interpreted by the compiler proper, or reserved for future
+ versions of GCC, and so are silently ignored. If you specify
+ characters whose behavior conflicts, the result is undefined.
+
+ `M'
+ Instead of the normal output, generate a list of `#define'
+ directives for all the macros defined during the execution of
+ the preprocessor, including predefined macros. This gives
+ you a way of finding out what is predefined in your version
+ of the preprocessor. Assuming you have no file `foo.h', the
+ command
+
+ touch foo.h; cpp -dM foo.h
+
+ will show all the predefined macros.
+
+ `D'
+ Like `M' except in two respects: it does _not_ include the
+ predefined macros, and it outputs _both_ the `#define'
+ directives and the result of preprocessing. Both kinds of
+ output go to the standard output file.
+
+ `N'
+ Like `D', but emit only the macro names, not their expansions.
+
+ `I'
+ Output `#include' directives in addition to the result of
+ preprocessing.
+
+ `-P'
+ Inhibit generation of linemarkers in the output from the
+ preprocessor. This might be useful when running the preprocessor
+ on something that is not C code, and will be sent to a program
+ which might be confused by the linemarkers. *Note Preprocessor
+ Output::.
+
+ `-C'
+ Do not discard comments. All comments are passed through to the
+ output file, except for comments in processed directives, which
+ are deleted along with the directive.
+
+ You should be prepared for side effects when using `-C'; it causes
+ the preprocessor to treat comments as tokens in their own right.
+ For example, comments appearing at the start of what would be a
+ directive line have the effect of turning that line into an
+ ordinary source line, since the first token on the line is no
+ longer a `#'.
+
+ `-gcc'
+ Define the macros __GNUC__, __GNUC_MINOR__ and
+ __GNUC_PATCHLEVEL__. These are defined automatically when you use
+ `gcc -E'; you can turn them off in that case with `-no-gcc'.
+
+ `-traditional'
+ Try to imitate the behavior of old-fashioned C, as opposed to ISO
+ C. *Note Traditional Mode::.
+
+ `-trigraphs'
+ Process trigraph sequences. *Note Initial processing::.
+
+ `-remap'
+ Enable special code to work around file systems which only permit
+ very short file names, such as MS-DOS.
+
+ `-$'
+ Forbid the use of `$' in identifiers. The C standard allows
+ implementations to define extra characters that can appear in
+ identifiers. By default GNU CPP permits `$', a common extension.
+
+ `-h'
+ `--help'
+ `--target-help'
+ Print text describing all the command line options instead of
+ preprocessing anything.
+
+ `-v'
+ Verbose mode. Print out GNU CPP's version number at the beginning
+ of execution, and report the final form of the include path.
+
+ `-H'
+ Print the name of each header file used, in addition to other
+ normal activities. Each name is indented to show how deep in the
+ `#include' stack it is.
+
+ `-version'
+ `--version'
+ Print out GNU CPP's version number. With one dash, proceed to
+ preprocess as normal. With two dashes, exit immediately.
+
+
File: cpp.info, Node: Environment Variables, Next: GNU Free Documentation License, Prev: Invocation, Up: Top
Environment Variables
*************** in turn take precedence over the configu
*** 64,70 ****
This variable is the same as the environment variable
`DEPENDENCIES_OUTPUT' (*note DEPENDENCIES_OUTPUT::), except that
system header files are not ignored, so it implies `-M' rather
! than `-MM'. *Note Invocation::.
File: cpp.info, Node: GNU Free Documentation License, Next: Option Index, Prev: Environment Variables, Up: Top
--- 554,561 ----
This variable is the same as the environment variable
`DEPENDENCIES_OUTPUT' (*note DEPENDENCIES_OUTPUT::), except that
system header files are not ignored, so it implies `-M' rather
! than `-MM'. However, the dependence on the main input file is
! omitted. *Note Invocation::.
File: cpp.info, Node: GNU Free Documentation License, Next: Option Index, Prev: Environment Variables, Up: Top
*************** Index of Directives
*** 561,681 ****
* OBJC_INCLUDE_PATH: Environment Variables.
* SUNPRO_DEPENDENCIES: Environment Variables.
-
- File: cpp.info, Node: Concept Index, Prev: Index of Directives, Up: Top
-
- Concept Index
- *************
-
- * Menu:
-
- * # operator: Stringification.
- * ## operator: Concatenation.
- * _Pragma: Pragmas.
- * alternative tokens: Tokenization.
- * arguments: Macro Arguments.
- * arguments in macro definitions: Macro Arguments.
- * assertions: Assertions.
- * assertions, cancelling: Assertions.
- * backslash-newline: Initial processing.
- * block comments: Initial processing.
- * C++ named operators: C++ Named Operators.
- * character constants: Tokenization.
- * character sets: Initial processing.
- * command line: Invocation.
- * commenting out code: Deleted Code.
- * comments: Initial processing.
- * common predefined macros: Common Predefined Macros.
- * computed includes: Computed Includes.
- * concatenation: Concatenation.
- * conditional group: Ifdef.
- * conditionals: Conditionals.
- * continued lines: Initial processing.
- * controlling macro: Once-Only Headers.
- * defined: Defined.
- * dependencies for make as output: Environment Variables.
- * dependencies, make: Invocation.
- * diagnostic: Diagnostics.
- * differences from previous versions: Differences from previous versions.
- * digraphs: Tokenization.
- * directive line: The preprocessing language.
- * directive name: The preprocessing language.
- * directives: The preprocessing language.
- * empty macro arguments: Macro Arguments.
- * environment variables: Environment Variables.
- * expansion of arguments: Argument Prescan.
- * FDL, GNU Free Documentation License: GNU Free Documentation License.
- * function-like macros: Function-like Macros.
- * grouping options: Invocation.
- * guard macro: Once-Only Headers.
- * header file: Header Files.
- * header file names: Tokenization.
- * identifiers: Tokenization.
- * implementation limits: Implementation limits.
- * implementation-defined behavior: Implementation-defined behavior.
- * including just once: Once-Only Headers.
- * invalid token paste: Miscellaneous obsolete features.
- * invocation: Invocation.
- * iso646.h: C++ Named Operators.
- * line comments: Initial processing.
- * line control: Line Control.
- * line endings: Initial processing.
- * linemarkers: Preprocessor Output.
- * macro argument expansion: Argument Prescan.
- * macros in include: Computed Includes.
- * macros with arguments: Macro Arguments.
- * macros with variable arguments: Variadic Macros.
- * make: Invocation.
- * manifest constants: Object-like Macros.
- * multi-line string constants: Miscellaneous obsolete features.
- * named operators: C++ Named Operators.
- * newlines in macro arguments: Newlines in Arguments.
- * null directive: Other Directives.
- * numbers: Tokenization.
- * object-like macro: Object-like Macros.
- * options: Invocation.
- * options, grouping: Invocation.
- * other tokens: Tokenization.
- * output format: Preprocessor Output.
- * overriding a header file: Wrapper Headers.
- * parentheses in macro bodies: Operator Precedence Problems.
- * pitfalls of macros: Macro Pitfalls.
- * pragma poison: Miscellaneous obsolete features.
- * predefined macros: Predefined Macros.
- * predefined macros, system-specific: System-specific Predefined Macros.
- * predicates: Assertions.
- * preprocessing directives: The preprocessing language.
- * preprocessing numbers: Tokenization.
- * preprocessing tokens: Tokenization.
- * prescan of macro arguments: Argument Prescan.
- * problems with macros: Macro Pitfalls.
- * punctuators: Tokenization.
- * redefining macros: Undefining and Redefining Macros.
- * repeated inclusion: Once-Only Headers.
- * reporting errors: Diagnostics.
- * reporting warnings: Diagnostics.
- * reserved namespace: System-specific Predefined Macros.
- * self-reference: Self-Referential Macros.
- * semicolons (after macro calls): Swallowing the Semicolon.
- * side effects (in macro arguments): Duplication of Side Effects.
- * standard predefined macros.: Standard Predefined Macros.
- * string constants: Tokenization.
- * string literals: Tokenization.
- * stringification: Stringification.
- * symbolic constants: Object-like Macros.
- * system header files <1>: System Headers.
- * system header files: Header Files.
- * system-specific predefined macros: System-specific Predefined Macros.
- * testing predicates: Assertions.
- * token concatenation: Concatenation.
- * token pasting: Concatenation.
- * tokens: Tokenization.
- * trigraphs: Initial processing.
- * undefining macros: Undefining and Redefining Macros.
- * unsafe macros: Duplication of Side Effects.
- * variable number of arguments: Variadic Macros.
- * variadic macros: Variadic Macros.
- * wrapper #ifndef: Once-Only Headers.
- * wrapper headers: Wrapper Headers.
-
-
--- 1052,1054 ----
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.info-5 gcc-3.2.1/gcc/doc/cpp.info-5
*** gcc-3.2/gcc/doc/cpp.info-5 Thu Jan 1 00:00:00 1970
--- gcc-3.2.1/gcc/doc/cpp.info-5 Tue Nov 19 18:17:11 2002
***************
*** 0 ****
--- 1,126 ----
+ This is doc/cpp.info, produced by makeinfo version 4.2 from
+ doc/cpp.texi.
+
+ INFO-DIR-SECTION Programming
+ START-INFO-DIR-ENTRY
+ * Cpp: (cpp). The GNU C preprocessor.
+ END-INFO-DIR-ENTRY
+
+
+ File: cpp.info, Node: Concept Index, Prev: Index of Directives, Up: Top
+
+ Concept Index
+ *************
+
+ * Menu:
+
+ * # operator: Stringification.
+ * ## operator: Concatenation.
+ * _Pragma: Pragmas.
+ * alternative tokens: Tokenization.
+ * arguments: Macro Arguments.
+ * arguments in macro definitions: Macro Arguments.
+ * assertions: Assertions.
+ * assertions, cancelling: Assertions.
+ * backslash-newline: Initial processing.
+ * block comments: Initial processing.
+ * C++ named operators: C++ Named Operators.
+ * character constants: Tokenization.
+ * character sets: Initial processing.
+ * command line: Invocation.
+ * commenting out code: Deleted Code.
+ * comments: Initial processing.
+ * common predefined macros: Common Predefined Macros.
+ * computed includes: Computed Includes.
+ * concatenation: Concatenation.
+ * conditional group: Ifdef.
+ * conditionals: Conditionals.
+ * continued lines: Initial processing.
+ * controlling macro: Once-Only Headers.
+ * defined: Defined.
+ * dependencies for make as output: Environment Variables.
+ * dependencies, make: Invocation.
+ * diagnostic: Diagnostics.
+ * differences from previous versions: Differences from previous versions.
+ * digraphs: Tokenization.
+ * directive line: The preprocessing language.
+ * directive name: The preprocessing language.
+ * directives: The preprocessing language.
+ * empty macro arguments: Macro Arguments.
+ * environment variables: Environment Variables.
+ * expansion of arguments: Argument Prescan.
+ * FDL, GNU Free Documentation License: GNU Free Documentation License.
+ * function-like macros: Function-like Macros.
+ * grouping options: Invocation.
+ * guard macro: Once-Only Headers.
+ * header file: Header Files.
+ * header file names: Tokenization.
+ * identifiers: Tokenization.
+ * implementation limits: Implementation limits.
+ * implementation-defined behavior: Implementation-defined behavior.
+ * including just once: Once-Only Headers.
+ * invalid token paste: Miscellaneous obsolete features.
+ * invocation: Invocation.
+ * iso646.h: C++ Named Operators.
+ * line comments: Initial processing.
+ * line control: Line Control.
+ * line endings: Initial processing.
+ * linemarkers: Preprocessor Output.
+ * macro argument expansion: Argument Prescan.
+ * macros in include: Computed Includes.
+ * macros with arguments: Macro Arguments.
+ * macros with variable arguments: Variadic Macros.
+ * make: Invocation.
+ * manifest constants: Object-like Macros.
+ * multi-line string constants: Miscellaneous obsolete features.
+ * named operators: C++ Named Operators.
+ * newlines in macro arguments: Newlines in Arguments.
+ * null directive: Other Directives.
+ * numbers: Tokenization.
+ * object-like macro: Object-like Macros.
+ * options: Invocation.
+ * options, grouping: Invocation.
+ * other tokens: Tokenization.
+ * output format: Preprocessor Output.
+ * overriding a header file: Wrapper Headers.
+ * parentheses in macro bodies: Operator Precedence Problems.
+ * pitfalls of macros: Macro Pitfalls.
+ * pragma poison: Miscellaneous obsolete features.
+ * predefined macros: Predefined Macros.
+ * predefined macros, system-specific: System-specific Predefined Macros.
+ * predicates: Assertions.
+ * preprocessing directives: The preprocessing language.
+ * preprocessing numbers: Tokenization.
+ * preprocessing tokens: Tokenization.
+ * prescan of macro arguments: Argument Prescan.
+ * problems with macros: Macro Pitfalls.
+ * punctuators: Tokenization.
+ * redefining macros: Undefining and Redefining Macros.
+ * repeated inclusion: Once-Only Headers.
+ * reporting errors: Diagnostics.
+ * reporting warnings: Diagnostics.
+ * reserved namespace: System-specific Predefined Macros.
+ * self-reference: Self-Referential Macros.
+ * semicolons (after macro calls): Swallowing the Semicolon.
+ * side effects (in macro arguments): Duplication of Side Effects.
+ * standard predefined macros.: Standard Predefined Macros.
+ * string constants: Tokenization.
+ * string literals: Tokenization.
+ * stringification: Stringification.
+ * symbolic constants: Object-like Macros.
+ * system header files <1>: System Headers.
+ * system header files: Header Files.
+ * system-specific predefined macros: System-specific Predefined Macros.
+ * testing predicates: Assertions.
+ * token concatenation: Concatenation.
+ * token pasting: Concatenation.
+ * tokens: Tokenization.
+ * trigraphs: Initial processing.
+ * undefining macros: Undefining and Redefining Macros.
+ * unsafe macros: Duplication of Side Effects.
+ * variable number of arguments: Variadic Macros.
+ * variadic macros: Variadic Macros.
+ * wrapper #ifndef: Once-Only Headers.
+ * wrapper headers: Wrapper Headers.
+
+
diff -Nrc3pad gcc-3.2/gcc/doc/cpp.texi gcc-3.2.1/gcc/doc/cpp.texi
*** gcc-3.2/gcc/doc/cpp.texi Thu Mar 14 19:24:59 2002
--- gcc-3.2.1/gcc/doc/cpp.texi Sat Oct 5 09:36:28 2002
*************** version of GCC in use.
*** 830,840 ****
You can add to this list with the @option{-I@var{dir}} command line
option. All the directories named by @option{-I} are searched, in
! left-to-right order, @emph{before} the default directories. You can
! also prevent GCC from searching any of the default directories with the
! @option{-nostdinc} option. This is useful when you are compiling an
operating system kernel or some other program that does not use the
standard C library facilities, or the standard C library itself.
GCC looks for headers requested with @code{@w{#include "@var{file}"}}
first in the directory containing the current file, then in the same
--- 830,851 ----
You can add to this list with the @option{-I@var{dir}} command line
option. All the directories named by @option{-I} are searched, in
! left-to-right order, @emph{before} the default directories. The only
! exception is when @file{dir} is already searched by default. In
! this case, the option is ignored and the search order for system
! directories remains unchanged.
!
! Duplicate directories are removed from the quote and bracket search
! chains before the two chains are merged to make the final search chain.
! Thus, it is possible for a directory to occur twice in the final search
! chain if it was specified in both the quote and bracket chains.
!
! You can prevent GCC from searching any of the default directories with
! the @option{-nostdinc} option. This is useful when you are compiling an
operating system kernel or some other program that does not use the
standard C library facilities, or the standard C library itself.
+ @option{-I} options are not ignored as described above when
+ @option{-nostdinc} is in effect.
GCC looks for headers requested with @code{@w{#include "@var{file}"}}
first in the directory containing the current file, then in the same
*************** For example, if @file{/usr/include/sys/s
*** 843,854 ****
@code{@w{#include "types.h"}}, GCC looks for @file{types.h} first in
@file{/usr/include/sys}, then in its usual search path.
- If you name a search directory with @option{-I@var{dir}} that is also a
- system include directory, the @option{-I} wins; the directory will be
- searched according to the @option{-I} ordering, and it will not be
- treated as a system include directory. GCC will warn you when a system
- include directory is hidden in this way.
-
@samp{#line} (@pxref{Line Control}) does not change GCC's idea of the
directory containing the current file.
--- 854,859 ----
*************** found in that directory will be consider
*** 1081,1088 ****
All directories named by @option{-isystem} are searched @emph{after} all
directories named by @option{-I}, no matter what their order was on the
command line. If the same directory is named by both @option{-I} and
! @option{-isystem}, @option{-I} wins; it is as if the @option{-isystem} option
! had never been specified at all. GCC warns you when this happens.
@findex #pragma GCC system_header
There is also a directive, @code{@w{#pragma GCC system_header}}, which
--- 1086,1093 ----
All directories named by @option{-isystem} are searched @emph{after} all
directories named by @option{-I}, no matter what their order was on the
command line. If the same directory is named by both @option{-I} and
! @option{-isystem}, the @option{-I} option is ignored. GCC provides an
! informative message when this occurs if @option{-v} is used.
@findex #pragma GCC system_header
There is also a directive, @code{@w{#pragma GCC system_header}}, which
*************** eprintf ("success!\n")
*** 1676,1681 ****
--- 1681,1695 ----
@expansion{} fprintf(stderr, "success!\n");
@end example
+ @noindent
+ The above explanation is ambiguous about the case where the only macro
+ parameter is a variable arguments parameter, as it is meaningless to
+ try to distinguish whether no argument at all is an empty argument or
+ a missing argument. In this case the C99 standard is clear that the
+ comma must remain, however the existing GCC extension used to swallow
+ the comma. So CPP retains the comma when conforming to a specific C
+ standard, and drops it otherwise.
+
C99 mandates that the only place the identifier @code{@w{__VA_ARGS__}}
can appear is in the replacement list of a variadic macro. It may not
be used as a macro name, macro argument name, or within a different type
*************** conformance to the C Standard. GNU CPP
*** 1806,1814 ****
processing system header files, but when processing user files
@code{__STDC__} is always 1. This has been reported to cause problems;
for instance, some versions of Solaris provide X Windows headers that
! expect @code{__STDC__} to be either undefined or 1. You may be able to
! work around this sort of problem by using an @option{-I} option to
! cancel treatment of those headers as system headers. @xref{Invocation}.
@item __STDC_VERSION__
This macro expands to the C Standard's version number, a long integer
--- 1820,1826 ----
processing system header files, but when processing user files
@code{__STDC__} is always 1. This has been reported to cause problems;
for instance, some versions of Solaris provide X Windows headers that
! expect @code{__STDC__} to be either undefined or 1. @xref{Invocation}.
@item __STDC_VERSION__
This macro expands to the C Standard's version number, a long integer
*************** Here are a few more obsolete features.
*** 3724,3732 ****
@item Attempting to paste two tokens which together do not form a valid
preprocessing token.
! The preprocessor currently warns about this and outputs the two tokens
! adjacently, which is probably the behavior the programmer intends. It
! may not work in future, though.
Most of the time, when you get this warning, you will find that @samp{##}
is being used superstitiously, to guard against whitespace appearing
--- 3736,3744 ----
@item Attempting to paste two tokens which together do not form a valid
preprocessing token.
! The preprocessor currently warns about this, and the resulting
! preprocessed output is undefined. The tokens remain distinct if the
! preprocessor is being used directly by the compiler front end.
Most of the time, when you get this warning, you will find that @samp{##}
is being used superstitiously, to guard against whitespace appearing
diff -Nrc3pad gcc-3.2/gcc/doc/cppenv.texi gcc-3.2.1/gcc/doc/cppenv.texi
*** gcc-3.2/gcc/doc/cppenv.texi Mon Mar 11 19:59:58 2002
--- gcc-3.2.1/gcc/doc/cppenv.texi Thu Aug 15 19:46:42 2002
*************** with an optional @option{-MT} switch too
*** 66,72 ****
This variable is the same as the environment variable
@env{DEPENDENCIES_OUTPUT} (@pxref{DEPENDENCIES_OUTPUT}), except that
system header files are not ignored, so it implies @option{-M} rather
! than @option{-MM}.
@ifset cppmanual
@xref{Invocation}.
@end ifset
--- 66,73 ----
This variable is the same as the environment variable
@env{DEPENDENCIES_OUTPUT} (@pxref{DEPENDENCIES_OUTPUT}), except that
system header files are not ignored, so it implies @option{-M} rather
! than @option{-MM}. However, the dependence on the main input file is
! omitted.
@ifset cppmanual
@xref{Invocation}.
@end ifset
diff -Nrc3pad gcc-3.2/gcc/doc/cppopts.texi gcc-3.2.1/gcc/doc/cppopts.texi
*** gcc-3.2/gcc/doc/cppopts.texi Mon Mar 11 19:59:58 2002
--- gcc-3.2.1/gcc/doc/cppopts.texi Wed Sep 11 16:40:27 2002
*************** standard-conforming modes it converts th
*** 541,550 ****
The nine trigraphs and their replacements are
! @example
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Replacement: [ ] @{ @} # \ ^ | ~
! @end example
@end ifclear
@item -remap
--- 541,550 ----
The nine trigraphs and their replacements are
! @smallexample
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Replacement: [ ] @{ @} # \ ^ | ~
! @end smallexample
@end ifclear
@item -remap
diff -Nrc3pad gcc-3.2/gcc/doc/extend.texi gcc-3.2.1/gcc/doc/extend.texi
*** gcc-3.2/gcc/doc/extend.texi Thu Apr 11 21:36:04 2002
--- gcc-3.2.1/gcc/doc/extend.texi Wed Oct 9 21:31:00 2002
*************** extensions, accepted by GCC in C89 mode
*** 385,391 ****
* Labels as Values:: Getting pointers to labels, and computed gotos.
* Nested Functions:: As in Algol and Pascal, lexical scoping of functions.
* Constructing Calls:: Dispatching a call to another function.
- * Naming Types:: Giving a name to the type of some expression.
* Typeof:: @code{typeof}: referring to the type of an expression.
* Lvalues:: Using @samp{?:}, @samp{,} and casts in lvalues.
* Conditionals:: Omitting the middle operand of a @samp{?:} expression.
--- 385,390 ----
*************** the value of an enumeration constant, th
*** 495,502 ****
the initial value of a static variable.
If you don't know the type of the operand, you can still do this, but you
! must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
! Types}).
Statement expressions are not supported fully in G++, and their fate
there is unclear. (It is possible that they will become fully supported
--- 494,500 ----
the initial value of a static variable.
If you don't know the type of the operand, you can still do this, but you
! must use @code{typeof} (@pxref{Typeof}).
Statement expressions are not supported fully in G++, and their fate
there is unclear. (It is possible that they will become fully supported
*************** GCC implements taking the address of a n
*** 739,745 ****
called @dfn{trampolines}. A paper describing them is available as
@noindent
! @uref{http://people.debian.org/~karlheg/Usenix88-lexic.pdf}.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
--- 737,743 ----
called @dfn{trampolines}. A paper describing them is available as
@noindent
! @uref{http://people.debian.org/~aaronl/Usenix88-lexic.pdf}.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
*************** the containing function. You should spe
*** 845,873 ****
returned by @code{__builtin_apply}.
@end deftypefn
- @node Naming Types
- @section Naming an Expression's Type
- @cindex naming types
-
- You can give a name to the type of an expression using a @code{typedef}
- declaration with an initializer. Here is how to define @var{name} as a
- type name for the type of @var{exp}:
-
- @example
- typedef @var{name} = @var{exp};
- @end example
-
- This is useful in conjunction with the statements-within-expressions
- feature. Here is how the two together can be used to define a safe
- ``maximum'' macro that operates on any arithmetic type:
-
- @example
- #define max(a,b) \
- (@{typedef _ta = (a), _tb = (b); \
- _ta _a = (a); _tb _b = (b); \
- _a > _b ? _a : _b; @})
- @end example
-
@cindex underscores in variables in macros
@cindex @samp{_} in variables in macros
@cindex local variables in macros
--- 843,848 ----
*************** A @code{typeof}-construct can be used an
*** 919,924 ****
--- 894,914 ----
used. For example, you can use it in a declaration, in a cast, or inside
of @code{sizeof} or @code{typeof}.
+ @code{typeof} is often useful in conjunction with the
+ statements-within-expressions feature. Here is how the two together can
+ be used to define a safe ``maximum'' macro that operates on any
+ arithmetic type and evaluates each of its arguments exactly once:
+
+ @example
+ #define max(a,b) \
+ (@{ typeof (a) _a = (a); \
+ typeof (b) _b = (b); \
+ _a > _b ? _a : _b; @})
+ @end example
+
+ @noindent
+ Some more examples of the use of @code{typeof}:
+
@itemize @bullet
@item
This declares @code{y} with the type of what @code{x} points to.
*************** Thus, @code{array (pointer (char), 4)} i
*** 968,973 ****
--- 958,983 ----
pointers to @code{char}.
@end itemize
+ @emph{Compatibility Note:} In addition to @code{typeof}, GCC 2 supported
+ a more limited extension which permitted one to write
+
+ @example
+ typedef @var{T} = @var{expr};
+ @end example
+
+ @noindent
+ with the effect of declaring @var{T} to have the type of the expression
+ @var{expr}. This extension does not work with GCC 3 (versions between
+ 3.0 and 3.2 will crash; 3.2.1 and later give an error). Code which
+ relies on it should be rewritten to use @code{typeof}:
+
+ @example
+ typedef typeof(@var{expr}) @var{T};
+ @end example
+
+ @noindent
+ This will work with all versions of GCC@.
+
@node Lvalues
@section Generalized Lvalues
@cindex compound expressions as lvalues
*************** variable number of arguments much as a f
*** 1396,1404 ****
defining the macro is similar to that of a function. Here is an
example:
! @example
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
! @end example
Here @samp{@dots{}} is a @dfn{variable argument}. In the invocation of
such a macro, it represents the zero or more tokens until the closing
--- 1406,1414 ----
defining the macro is similar to that of a function. Here is an
example:
! @smallexample
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
! @end smallexample
Here @samp{@dots{}} is a @dfn{variable argument}. In the invocation of
such a macro, it represents the zero or more tokens until the closing
*************** string.
*** 1437,1445 ****
To help solve this problem, CPP behaves specially for variable arguments
used with the token paste operator, @samp{##}. If instead you write
! @example
#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
! @end example
and if the variable arguments are omitted or empty, the @samp{##}
operator causes the preprocessor to remove the comma before it. If you
--- 1447,1455 ----
To help solve this problem, CPP behaves specially for variable arguments
used with the token paste operator, @samp{##}. If instead you write
! @smallexample
#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
! @end smallexample
and if the variable arguments are omitted or empty, the @samp{##}
operator causes the preprocessor to remove the comma before it. If you
*************** nested subobject to initialize; the list
*** 1749,1757 ****
subobject corresponding to the closest surrounding brace pair. For
example, with the @samp{struct point} declaration above:
! @example
struct point ptarray[10] = @{ [2].y = yv2, [2].x = xv2, [0].x = xv0 @};
! @end example
@noindent
If the same field is initialized multiple times, it will have value from
--- 1759,1767 ----
subobject corresponding to the closest surrounding brace pair. For
example, with the @samp{struct point} declaration above:
! @smallexample
struct point ptarray[10] = @{ [2].y = yv2, [2].x = xv2, [0].x = xv0 @};
! @end smallexample
@noindent
If the same field is initialized multiple times, it will have value from
*************** the minimum value of variables @var{i} a
*** 6170,6181 ****
However, side effects in @code{X} or @code{Y} may cause unintended
behavior. For example, @code{MIN (i++, j++)} will fail, incrementing
! the smaller counter twice. A GNU C extension allows you to write safe
! macros that avoid this kind of problem (@pxref{Naming Types,,Naming an
! Expression's Type}). However, writing @code{MIN} and @code{MAX} as
! macros also forces you to use function-call notation for a
! fundamental arithmetic operation. Using GNU C++ extensions, you can
! write @w{@samp{int min = i j;}} instead.
Since @code{} and @code{>?} are built into the compiler, they properly
handle expressions with side-effects; @w{@samp{int min = i++ j++;}}
--- 6180,6191 ----
However, side effects in @code{X} or @code{Y} may cause unintended
behavior. For example, @code{MIN (i++, j++)} will fail, incrementing
! the smaller counter twice. The GNU C @code{typeof} extension allows you
! to write safe macros that avoid this kind of problem (@pxref{Typeof}).
! However, writing @code{MIN} and @code{MAX} as macros also forces you to
! use function-call notation for a fundamental arithmetic operation.
! Using GNU C++ extensions, you can write @w{@samp{int min = i j;}}
! instead.
Since @code{} and @code{>?} are built into the compiler, they properly
handle expressions with side-effects; @w{@samp{int min = i++ j++;}}
*************** inclusive. Lower numbers indicate a hig
*** 6749,6758 ****
In the following example, @code{A} would normally be created before
@code{B}, but the @code{init_priority} attribute has reversed that order:
! @example
Some_Class A __attribute__ ((init_priority (2000)));
Some_Class B __attribute__ ((init_priority (543)));
! @end example
@noindent
Note that the particular values of @var{priority} do not matter; only their
--- 6759,6768 ----
In the following example, @code{A} would normally be created before
@code{B}, but the @code{init_priority} attribute has reversed that order:
! @smallexample
Some_Class A __attribute__ ((init_priority (2000)));
Some_Class B __attribute__ ((init_priority (543)));
! @end smallexample
@noindent
Note that the particular values of @var{priority} do not matter; only their
*************** appropriately. However, if C++ code onl
*** 6778,6784 ****
when Java exceptions are thrown through it, GCC will guess incorrectly.
Sample problematic code is:
! @example
struct S @{ ~S(); @};
extern void bar(); // is written in Java, and may throw exceptions
void foo()
--- 6788,6794 ----
when Java exceptions are thrown through it, GCC will guess incorrectly.
Sample problematic code is:
! @smallexample
struct S @{ ~S(); @};
extern void bar(); // is written in Java, and may throw exceptions
void foo()
*************** Sample problematic code is:
*** 6786,6792 ****
S s;
bar();
@}
! @end example
@noindent
The usual effect of an incorrect guess is a link failure, complaining of
--- 6796,6802 ----
S s;
bar();
@}
! @end smallexample
@noindent
The usual effect of an incorrect guess is a link failure, complaining of
diff -Nrc3pad gcc-3.2/gcc/doc/fsf-funding.7 gcc-3.2.1/gcc/doc/fsf-funding.7
*** gcc-3.2/gcc/doc/fsf-funding.7 Wed Aug 14 09:36:41 2002
--- gcc-3.2.1/gcc/doc/fsf-funding.7 Tue Nov 19 18:17:20 2002
***************
*** 1,5 ****
.\" Automatically generated by Pod::Man version 1.15
! .\" Wed Aug 14 09:36:41 2002
.\"
.\" Standard preamble:
.\" ======================================================================
--- 1,5 ----
.\" Automatically generated by Pod::Man version 1.15
! .\" Tue Nov 19 18:17:20 2002
.\"
.\" Standard preamble:
.\" ======================================================================
***************
*** 138,144 ****
.\" ======================================================================
.\"
.IX Title "fsf-funding 7"
! .TH fsf-funding 7 "gcc-3.2" "2002-08-14" "GNU"
.UC
.SH "NAME"
fsf-funding \- Funding Free Software
--- 138,144 ----
.\" ======================================================================
.\"
.IX Title "fsf-funding 7"
! .TH fsf-funding 7 "gcc-3.2.1" "2002-11-19" "GNU"
.UC
.SH "NAME"
fsf-funding \- Funding Free Software
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.1 gcc-3.2.1/gcc/doc/gcc.1
*** gcc-3.2/gcc/doc/gcc.1 Wed Aug 14 09:36:40 2002
--- gcc-3.2.1/gcc/doc/gcc.1 Tue Nov 19 18:17:19 2002
***************
*** 1,5 ****
.\" Automatically generated by Pod::Man version 1.15
! .\" Wed Aug 14 09:36:36 2002
.\"
.\" Standard preamble:
.\" ======================================================================
--- 1,5 ----
.\" Automatically generated by Pod::Man version 1.15
! .\" Tue Nov 19 18:17:14 2002
.\"
.\" Standard preamble:
.\" ======================================================================
***************
*** 138,144 ****
.\" ======================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "gcc-3.2" "2002-08-14" "GNU"
.UC
.SH "NAME"
gcc \- \s-1GNU\s0 project C and \*(C+ compiler
--- 138,144 ----
.\" ======================================================================
.\"
.IX Title "GCC 1"
! .TH GCC 1 "gcc-3.2.1" "2002-11-19" "GNU"
.UC
.SH "NAME"
gcc \- \s-1GNU\s0 project C and \*(C+ compiler
*************** in the following sections.
*** 197,203 ****
.Ip "\fIOverall Options\fR" 4
.IX Item "Overall Options"
\&\fB\-c \-S \-E \-o\fR \fIfile\fR \fB\-pipe \-pass-exit-codes \-x\fR \fIlanguage\fR
! \&\fB\-v \-### \-\-target-help \-\-help\fR
.Ip "\fIC Language Options\fR" 4
.IX Item "C Language Options"
\&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux-info\fR \fIfilename\fR
--- 197,203 ----
.Ip "\fIOverall Options\fR" 4
.IX Item "Overall Options"
\&\fB\-c \-S \-E \-o\fR \fIfile\fR \fB\-pipe \-pass-exit-codes \-x\fR \fIlanguage\fR
! \&\fB\-v \-### \-\-help \-\-target-help \-\-version\fR
.Ip "\fIC Language Options\fR" 4
.IX Item "C Language Options"
\&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux-info\fR \fIfilename\fR
*************** in the following sections.
*** 207,213 ****
\&\-fallow-single-precision \-fcond-mismatch
\&\-fsigned-bitfields \-fsigned-char
\&\-funsigned-bitfields \-funsigned-char
! \&\-fwritable-strings \-fshort-wchar\fR
.Ip "\fI\*(C+ Language Options\fR" 4
.IX Item " Language Options"
\&\fB\-fno-access-control \-fcheck-new \-fconserve-space
--- 207,213 ----
\&\-fallow-single-precision \-fcond-mismatch
\&\-fsigned-bitfields \-fsigned-char
\&\-funsigned-bitfields \-funsigned-char
! \&\-fwritable-strings\fR
.Ip "\fI\*(C+ Language Options\fR" 4
.IX Item " Language Options"
\&\fB\-fno-access-control \-fcheck-new \-fconserve-space
*************** in the following sections.
*** 223,229 ****
\&\-fno-optional-diags \-fpermissive
\&\-frepo \-fno-rtti \-fstats \-ftemplate-depth-\fR\fIn\fR
\&\fB\-fuse-cxa-atexit \-fvtable-gc \-fno-weak \-nostdinc++
! \&\-fno-default-inline \-Wctor-dtor-privacy
\&\-Wnon-virtual-dtor \-Wreorder
\&\-Weffc++ \-Wno-deprecated
\&\-Wno-non-template-friend \-Wold-style-cast
--- 223,229 ----
\&\-fno-optional-diags \-fpermissive
\&\-frepo \-fno-rtti \-fstats \-ftemplate-depth-\fR\fIn\fR
\&\fB\-fuse-cxa-atexit \-fvtable-gc \-fno-weak \-nostdinc++
! \&\-fno-default-inline \-Wabi \-Wctor-dtor-privacy
\&\-Wnon-virtual-dtor \-Wreorder
\&\-Weffc++ \-Wno-deprecated
\&\-Wno-non-template-friend \-Wold-style-cast
*************** in the following sections.
*** 241,247 ****
.Ip "\fIWarning Options\fR" 4
.IX Item "Warning Options"
\&\fB\-fsyntax-only \-pedantic \-pedantic-errors
! \&\-w \-W \-Wall \-Waggregate-return
\&\-Wcast-align \-Wcast-qual \-Wchar-subscripts \-Wcomment
\&\-Wconversion \-Wno-deprecated-declarations
\&\-Wdisabled-optimization \-Wdiv-by-zero \-Werror
--- 241,247 ----
.Ip "\fIWarning Options\fR" 4
.IX Item "Warning Options"
\&\fB\-fsyntax-only \-pedantic \-pedantic-errors
! \&\-w \-W \-Wall \-Waggregate-return
\&\-Wcast-align \-Wcast-qual \-Wchar-subscripts \-Wcomment
\&\-Wconversion \-Wno-deprecated-declarations
\&\-Wdisabled-optimization \-Wdiv-by-zero \-Werror
*************** in the following sections.
*** 252,258 ****
\&\-Werror-implicit-function-declaration
\&\-Wimport \-Winline
\&\-Wlarger-than-\fR\fIlen\fR \fB\-Wlong-long
! \&\-Wmain \-Wmissing-braces \-Wmissing-declarations
\&\-Wmissing-format-attribute \-Wmissing-noreturn
\&\-Wmultichar \-Wno-format-extra-args \-Wno-format-y2k
\&\-Wno-import \-Wpacked \-Wpadded
--- 252,258 ----
\&\-Werror-implicit-function-declaration
\&\-Wimport \-Winline
\&\-Wlarger-than-\fR\fIlen\fR \fB\-Wlong-long
! \&\-Wmain \-Wmissing-braces
\&\-Wmissing-format-attribute \-Wmissing-noreturn
\&\-Wmultichar \-Wno-format-extra-args \-Wno-format-y2k
\&\-Wno-import \-Wpacked \-Wpadded
*************** in the following sections.
*** 265,271 ****
\&\-Wunused-value \-Wunused-variable \-Wwrite-strings\fR
.Ip "\fIC-only Warning Options\fR" 4
.IX Item "C-only Warning Options"
! \&\fB\-Wbad-function-cast \-Wmissing-prototypes \-Wnested-externs
\&\-Wstrict-prototypes \-Wtraditional\fR
.Ip "\fIDebugging Options\fR" 4
.IX Item "Debugging Options"
--- 265,272 ----
\&\-Wunused-value \-Wunused-variable \-Wwrite-strings\fR
.Ip "\fIC-only Warning Options\fR" 4
.IX Item "C-only Warning Options"
! \&\fB\-Wbad-function-cast \-Wmissing-declarations
! \&\-Wmissing-prototypes \-Wnested-externs
\&\-Wstrict-prototypes \-Wtraditional\fR
.Ip "\fIDebugging Options\fR" 4
.IX Item "Debugging Options"
*************** in the following sections.
*** 275,281 ****
\&\fB\-fdump-tree-original\fR[\fB-\fR\fIn\fR] \fB\-fdump-tree-optimized\fR[\fB-\fR\fIn\fR]
\&\fB\-fdump-tree-inlined\fR[\fB-\fR\fIn\fR]
\&\fB\-fmem-report \-fpretend-float
! \&\-fprofile-arcs \-ftest-coverage \-ftime-report
\&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf-1 \-gdwarf-1+ \-gdwarf-2
\&\-ggdb \-gstabs \-gstabs+ \-gvms \-gxcoff \-gxcoff+
\&\-p \-pg \-print-file-name=\fR\fIlibrary\fR \fB\-print-libgcc-file-name
--- 276,283 ----
\&\fB\-fdump-tree-original\fR[\fB-\fR\fIn\fR] \fB\-fdump-tree-optimized\fR[\fB-\fR\fIn\fR]
\&\fB\-fdump-tree-inlined\fR[\fB-\fR\fIn\fR]
\&\fB\-fmem-report \-fpretend-float
! \&\-fprofile-arcs \-fsched-verbose=\fR\fIn\fR
! \&\fB\-ftest-coverage \-ftime-report
\&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf-1 \-gdwarf-1+ \-gdwarf-2
\&\-ggdb \-gstabs \-gstabs+ \-gvms \-gxcoff \-gxcoff+
\&\-p \-pg \-print-file-name=\fR\fIlibrary\fR \fB\-print-libgcc-file-name
*************** in the following sections.
*** 286,292 ****
.IX Item "Optimization Options"
\&\fB\-falign-functions=\fR\fIn\fR \fB\-falign-jumps=\fR\fIn\fR
\&\fB\-falign-labels=\fR\fIn\fR \fB\-falign-loops=\fR\fIn\fR
! \&\fB\-fbranch-probabilities \-fcaller-saves \-fcprop-registers
\&\-fcse-follow-jumps \-fcse-skip-blocks \-fdata-sections
\&\-fdelayed-branch \-fdelete-null-pointer-checks
\&\-fexpensive-optimizations \-ffast-math \-ffloat-store
--- 288,295 ----
.IX Item "Optimization Options"
\&\fB\-falign-functions=\fR\fIn\fR \fB\-falign-jumps=\fR\fIn\fR
\&\fB\-falign-labels=\fR\fIn\fR \fB\-falign-loops=\fR\fIn\fR
! \&\fB\-fbounds-check
! \&\-fbranch-probabilities \-fcaller-saves \-fcprop-registers
\&\-fcse-follow-jumps \-fcse-skip-blocks \-fdata-sections
\&\-fdelayed-branch \-fdelete-null-pointer-checks
\&\-fexpensive-optimizations \-ffast-math \-ffloat-store
*************** in the following sections.
*** 294,300 ****
\&\-fgcse \-fgcse-lm \-fgcse-sm
\&\-finline-functions \-finline-limit=\fR\fIn\fR \fB\-fkeep-inline-functions
\&\-fkeep-static-consts \-fmerge-constants \-fmerge-all-constants
! \&\-fmove-all-movables \-fno-default-inline \-fno-defer-pop
\&\-fno-function-cse \-fno-guess-branch-probability
\&\-fno-inline \-fno-math-errno \-fno-peephole \-fno-peephole2
\&\-funsafe-math-optimizations \-fno-trapping-math
--- 297,304 ----
\&\-fgcse \-fgcse-lm \-fgcse-sm
\&\-finline-functions \-finline-limit=\fR\fIn\fR \fB\-fkeep-inline-functions
\&\-fkeep-static-consts \-fmerge-constants \-fmerge-all-constants
! \&\-fmove-all-movables \-fno-branch-count-reg
! \&\-fno-default-inline \-fno-defer-pop
\&\-fno-function-cse \-fno-guess-branch-probability
\&\-fno-inline \-fno-math-errno \-fno-peephole \-fno-peephole2
\&\-funsafe-math-optimizations \-fno-trapping-math
*************** in the following sections.
*** 303,311 ****
\&\-freduce-all-givs \-fregmove \-frename-registers
\&\-frerun-cse-after-loop \-frerun-loop-opt
\&\-fschedule-insns \-fschedule-insns2
\&\-fsingle-precision-constant \-fssa \-fssa-ccp \-fssa-dce
! \&\-fstrength-reduce \-fstrict-aliasing \-fthread-jumps \-ftrapv
! \&\-funroll-all-loops \-funroll-loops
\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
\&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR
.Ip "\fIPreprocessor Options\fR" 4
--- 307,317 ----
\&\-freduce-all-givs \-fregmove \-frename-registers
\&\-frerun-cse-after-loop \-frerun-loop-opt
\&\-fschedule-insns \-fschedule-insns2
+ \&\-fno-sched-interblock \-fno-sched-spec
+ \&\-fsched-spec-load \-fsched-spec-load-dangerous
\&\-fsingle-precision-constant \-fssa \-fssa-ccp \-fssa-dce
! \&\-fstrength-reduce \-fstrict-aliasing \-fthread-jumps
! \&\-ftrapv \-funroll-all-loops \-funroll-loops
\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
\&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR
.Ip "\fIPreprocessor Options\fR" 4
*************** in the following sections.
*** 457,463 ****
\&\-mno-relocatable \-mrelocatable-lib \-mno-relocatable-lib
\&\-mtoc \-mno-toc \-mlittle \-mlittle-endian \-mbig \-mbig-endian
\&\-mcall-aix \-mcall-sysv \-mcall-netbsd
! \&\-maix-struct-return \-msvr4\-struct-return
\&\-mabi=altivec \-mabi=no-altivec
\&\-mprototype \-mno-prototype
\&\-msim \-mmvme \-mads \-myellowknife \-memb \-msdata
--- 463,469 ----
\&\-mno-relocatable \-mrelocatable-lib \-mno-relocatable-lib
\&\-mtoc \-mno-toc \-mlittle \-mlittle-endian \-mbig \-mbig-endian
\&\-mcall-aix \-mcall-sysv \-mcall-netbsd
! \&\-maix-struct-return \-msvr4\-struct-return
\&\-mabi=altivec \-mabi=no-altivec
\&\-mprototype \-mno-prototype
\&\-msim \-mmvme \-mads \-myellowknife \-memb \-msdata
*************** in the following sections.
*** 494,505 ****
\&\-mno-fp-ret-in-387 \-msoft-float \-msvr3\-shlib
\&\-mno-wide-multiply \-mrtd \-malign-double
\&\-mpreferred-stack-boundary=\fR\fInum\fR
! \&\fB\-mmmx \-msse \-msse2 \-msse-math \-m3dnow
\&\-mthreads \-mno-align-stringops \-minline-all-stringops
\&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double
\&\-m96bit-long-double \-mregparm=\fR\fInum\fR \fB\-momit-leaf-frame-pointer
\&\-mno-red-zone
! \&\-m32 \-m64\fR
.Sp
\&\fI\s-1HPPA\s0 Options\fR
.Sp
--- 500,512 ----
\&\-mno-fp-ret-in-387 \-msoft-float \-msvr3\-shlib
\&\-mno-wide-multiply \-mrtd \-malign-double
\&\-mpreferred-stack-boundary=\fR\fInum\fR
! \&\fB\-mmmx \-msse \-msse2 \-m3dnow
\&\-mthreads \-mno-align-stringops \-minline-all-stringops
\&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double
\&\-m96bit-long-double \-mregparm=\fR\fInum\fR \fB\-momit-leaf-frame-pointer
\&\-mno-red-zone
! \&\-mcmodel=\fR\fIcode-model\fR
! \&\fB\-m32 \-m64\fR
.Sp
\&\fI\s-1HPPA\s0 Options\fR
.Sp
*************** in the following sections.
*** 622,629 ****
.Sp
\&\fID30V Options\fR
.Sp
! \&\fB\-mextmem \-mextmemory \-monchip \-mno-asm-optimize \-masm-optimize
! \&\-mbranch-cost=\fR\fIn\fR \fB\-mcond-exec=\fR\fIn\fR
.Sp
\&\fIS/390 and zSeries Options\fR
.Sp
--- 629,636 ----
.Sp
\&\fID30V Options\fR
.Sp
! \&\fB\-mextmem \-mextmemory \-monchip \-mno-asm-optimize
! \&\-masm-optimize \-mbranch-cost=\fR\fIn\fR \fB\-mcond-exec=\fR\fIn\fR
.Sp
\&\fIS/390 and zSeries Options\fR
.Sp
*************** in the following sections.
*** 680,686 ****
\&\-fno-common \-fno-ident \-fno-gnu-linker
\&\-fpcc-struct-return \-fpic \-fPIC
\&\-freg-struct-return \-fshared-data \-fshort-enums
! \&\-fshort-double \-fvolatile
\&\-fvolatile-global \-fvolatile-static
\&\-fverbose-asm \-fpack-struct \-fstack-check
\&\-fstack-limit-register=\fR\fIreg\fR \fB\-fstack-limit-symbol=\fR\fIsym\fR
--- 687,693 ----
\&\-fno-common \-fno-ident \-fno-gnu-linker
\&\-fpcc-struct-return \-fpic \-fPIC
\&\-freg-struct-return \-fshared-data \-fshort-enums
! \&\-fshort-double \-fshort-wchar \-fvolatile
\&\-fvolatile-global \-fvolatile-static
\&\-fverbose-asm \-fpack-struct \-fstack-check
\&\-fstack-limit-register=\fR\fIreg\fR \fB\-fstack-limit-symbol=\fR\fIsym\fR
*************** be displayed.
*** 883,888 ****
--- 890,898 ----
.IX Item "target-help"
Print (on the standard output) a description of target specific command
line options for each tool.
+ .Ip "\fB\*(--version\fR" 4
+ .IX Item "version"
+ Display the version number and copyrights of the invoked \s-1GCC\s0.
.Sh "Compiling \*(C+ Programs"
.IX Subsection "Compiling Programs"
\&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
*************** than double precision. If you must use
*** 1215,1225 ****
to use single precision operations when the operands are single
precision, use this option. This option has no effect when compiling
with \s-1ISO\s0 or \s-1GNU\s0 C conventions (the default).
- .Ip "\fB\-fshort-wchar\fR" 4
- .IX Item "-fshort-wchar"
- Override the underlying type for \fBwchar_t\fR to be \fBshort
- unsigned int\fR instead of the default for the target. This option is
- useful for building programs to run under \s-1WINE\s0.
.Sh "Options Controlling \*(C+ Dialect"
.IX Subsection "Options Controlling Dialect"
This section describes the command-line options that are only meaningful
--- 1225,1230 ----
*************** Do not assume \fBinline\fR for functions
*** 1425,1430 ****
--- 1430,1480 ----
Note that these
functions will have linkage like inline functions; they just won't be
inlined by default.
+ .Ip "\fB\-Wabi\fR (\*(C+ only)" 4
+ .IX Item "-Wabi ( only)"
+ Warn when G++ generates code that is probably not compatible with the
+ vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about
+ all such cases, there are probably some cases that are not warned about,
+ even though G++ is generating incompatible code. There may also be
+ cases where warnings are emitted even though the code that is generated
+ will be compatible.
+ .Sp
+ You should rewrite your code to avoid these warnings if you are
+ concerned about the fact that code generated by G++ may not be binary
+ compatible with code generated by other compilers.
+ .Sp
+ The known incompatibilites at this point include:
+ .RS 4
+ .Ip "\(bu" 4
+ Incorrect handling of tail-padding for bit-fields. G++ may attempt to
+ pack data into the same byte as a base class. For example:
+ .Sp
+ .Vb 2
+ \& struct A { virtual void f(); int f1 : 1; };
+ \& struct B : public A { int f2 : 1; };
+ .Ve
+ In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
+ as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not. You can avoid this problem
+ by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
+ byte size on your platform; that will cause G++ and other compilers to
+ layout \f(CW\*(C`B\*(C'\fR identically.
+ .Ip "\(bu" 4
+ Incorrect handling of tail-padding for virtual bases. G++ does not use
+ tail padding when laying out virtual bases. For example:
+ .Sp
+ .Vb 3
+ \& struct A { virtual void f(); char c1; };
+ \& struct B { B(); char c2; };
+ \& struct C : public A, public virtual B {};
+ .Ve
+ In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
+ \&\f(CW\*(C`A\*(C'\fR; other compilers will. You can avoid this problem by
+ explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
+ alignment (ignoring virtual base classes); that will cause G++ and other
+ compilers to layout \f(CW\*(C`C\*(C'\fR identically.
+ .RE
+ .RS 4
+ .RE
.Ip "\fB\-Wctor-dtor-privacy\fR (\*(C+ only)" 4
.IX Item "-Wctor-dtor-privacy ( only)"
Warn when a class seems unusable, because all the constructors or
*************** optimization and code generation options
*** 2546,2563 ****
\&\fB\-fbranch-probabilities\fR.
.Sp
The other use of \fB\-fprofile-arcs\fR is for use with \f(CW\*(C`gcov\*(C'\fR,
! when it is used with the \fB\-ftest-coverage\fR option. \s-1GCC\s0
! supports two methods of determining code coverage: the options that
! support \f(CW\*(C`gcov\*(C'\fR, and options \fB\-a\fR and \fB\-ax\fR, which
! write information to text files. The options that support \f(CW\*(C`gcov\*(C'\fR
! do not need to instrument every arc in the program, so a program compiled
! with them runs faster than a program compiled with \fB\-a\fR, which
! adds instrumentation code to every basic block in the program. The
! tradeoff: since \f(CW\*(C`gcov\*(C'\fR does not have execution counts for all
! branches, it must start with the execution counts for the instrumented
! branches, and then iterate over the program flow graph until the entire
! graph has been solved. Hence, \f(CW\*(C`gcov\*(C'\fR runs a little more slowly than
! a program which uses information from \fB\-a\fR and \fB\-ax\fR.
.Sp
With \fB\-fprofile-arcs\fR, for each function of your program \s-1GCC\s0
creates a program flow graph, then finds a spanning tree for the graph.
--- 2596,2602 ----
\&\fB\-fbranch-probabilities\fR.
.Sp
The other use of \fB\-fprofile-arcs\fR is for use with \f(CW\*(C`gcov\*(C'\fR,
! when it is used with the \fB\-ftest-coverage\fR option.
.Sp
With \fB\-fprofile-arcs\fR, for each function of your program \s-1GCC\s0
creates a program flow graph, then finds a spanning tree for the graph.
*************** compiler adds code to count the number o
*** 2566,2576 ****
executed. When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.
- .Sp
- This option makes it possible to estimate branch probabilities and to
- calculate basic block execution counts. In general, basic block
- execution counts as provided by \fB\-a\fR do not give enough
- information to estimate all branch probabilities.
.Ip "\fB\-ftest-coverage\fR" 4
.IX Item "-ftest-coverage"
Create data files for the \f(CW\*(C`gcov\*(C'\fR code-coverage utility.
--- 2605,2610 ----
*************** Dump after function inlining, to \fI\fIf
*** 2817,2822 ****
--- 2851,2872 ----
.RE
.RS 4
.RE
+ .Ip "\fB\-fsched-verbose=\fR\fIn\fR" 4
+ .IX Item "-fsched-verbose=n"
+ On targets that use instruction scheduling, this option controls the
+ amount of debugging output the scheduler prints. This information is
+ written to standard error, unless \fB\-dS\fR or \fB\-dR\fR is
+ specified, in which case it is output to the usual dump
+ listing file, \fI.sched\fR or \fI.sched2\fR respectively. However
+ for \fIn\fR greater than nine, the output is always printed to standard
+ error.
+ .Sp
+ For \fIn\fR greater than zero, \fB\-fsched-verbose\fR outputs the
+ same information as \fB\-dRS\fR. For \fIn\fR greater than one, it
+ also output basic block probabilities, detailed ready list information
+ and unit/insn info. For \fIn\fR greater than two, it includes \s-1RTL\s0
+ at abort point, control-flow and regions info. And for \fIn\fR over
+ four, \fB\-fsched-verbose\fR also includes dependence info.
.Ip "\fB\-fpretend-float\fR" 4
.IX Item "-fpretend-float"
When running a cross-compiler, pretend that the target machine uses the
*************** arrays or initialized constant variables
*** 3081,3086 ****
--- 3131,3143 ----
types. Languages like C or \*(C+ require each non-automatic variable to
have distinct location, so using this option will result in non-conforming
behavior.
+ .Ip "\fB\-fno-branch-count-reg\fR" 4
+ .IX Item "-fno-branch-count-reg"
+ Do not use ``decrement and branch'' instructions on a count register,
+ but instead generate a sequence of instructions that decrement a
+ register, compare it against zero, then branch based upon the result.
+ This option is only meaningful on architectures that support such
+ instructions, which include x86, PowerPC, \s-1IA-64\s0 and S/390.
.Ip "\fB\-fno-function-cse\fR" 4
.IX Item "-fno-function-cse"
Do not put function addresses in registers; make each instruction that
*************** an exact implementation of \s-1IEEE\s0 o
*** 3138,3143 ****
--- 3195,3206 ----
math functions.
.Sp
The default is \fB\-ftrapping-math\fR.
+ .Ip "\fB\-fbounds-check\fR" 4
+ .IX Item "-fbounds-check"
+ For front-ends that support it, generate additional code to check that
+ indices used to access arrays are within the declared range. This is
+ currenly only supported by the Java and Fortran 77 front-ends, where
+ this option defaults to true and false respectively.
.PP
The following options control specific optimizations. The \fB\-O2\fR
option turns on all of these optimizations except \fB\-funroll-loops\fR
*************** Similar to \fB\-fschedule-insns\fR, but
*** 3249,3254 ****
--- 3312,3337 ----
instruction scheduling after register allocation has been done. This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.
+ .Ip "\fB\-fno-sched-interblock\fR" 4
+ .IX Item "-fno-sched-interblock"
+ Don't schedule instructions across basic blocks. This is normally
+ enabled by default when scheduling before register allocation, i.e.
+ with \fB\-fschedule-insns\fR or at \fB\-O2\fR or higher.
+ .Ip "\fB\-fno-sched-spec\fR" 4
+ .IX Item "-fno-sched-spec"
+ Don't allow speculative motion of non-load instructions. This is normally
+ enabled by default when scheduling before register allocation, i.e.
+ with \fB\-fschedule-insns\fR or at \fB\-O2\fR or higher.
+ .Ip "\fB\-fsched-spec-load\fR" 4
+ .IX Item "-fsched-spec-load"
+ Allow speculative motion of some load instructions. This only makes
+ sense when scheduling before register allocation, i.e. with
+ \&\fB\-fschedule-insns\fR or at \fB\-O2\fR or higher.
+ .Ip "\fB\-fsched-spec-load-dangerous\fR" 4
+ .IX Item "-fsched-spec-load-dangerous"
+ Allow speculative motion of more load instructions. This only makes
+ sense when scheduling before register allocation, i.e. with
+ \&\fB\-fschedule-insns\fR or at \fB\-O2\fR or higher.
.Ip "\fB\-ffunction-sections\fR" 4
.IX Item "-ffunction-sections"
.PD 0
*************** one \fB\-I\fR option, the directories ar
*** 4290,4304 ****
order; the standard system directories come after.
.Sp
If a standard system include directory, or a directory specified with
! \&\fB\-isystem\fR, is also specified with \fB\-I\fR, it will be
! searched only in the position requested by \fB\-I\fR. Also, it will
! not be considered a system include directory. If that directory really
! does contain system headers, there is a good chance that they will
! break. For instance, if \s-1GCC\s0's installation procedure edited the headers
! in \fI/usr/include\fR to fix bugs, \fB\-I/usr/include\fR will cause the
! original, buggy headers to be found instead of the corrected ones. \s-1GCC\s0
! will issue a warning when a system include directory is hidden in this
! way.
.Ip "\fB\-I-\fR" 4
.IX Item "-I-"
Any directories you specify with \fB\-I\fR options before the \fB\-I-\fR
--- 4373,4385 ----
order; the standard system directories come after.
.Sp
If a standard system include directory, or a directory specified with
! \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
! option will be ignored. The directory will still be searched but as a
! system directory at its normal position in the system include chain.
! This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
! the ordering for the include_next directive are not inadvertantly changed.
! If you really need to change the search order for system directories,
! use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
.Ip "\fB\-I-\fR" 4
.IX Item "-I-"
Any directories you specify with \fB\-I\fR options before the \fB\-I-\fR
*************** preferred alignment to \fB\-mpreferred-s
*** 6880,6885 ****
--- 6961,6969 ----
.PD
These switches enable or disable the use of built-in functions that allow
direct access to the \s-1MMX\s0, \s-1SSE\s0 and 3Dnow extensions of the instruction set.
+ .Sp
+ To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point code,
+ see \fB\-mfpmath=sse\fR.
.Ip "\fB\-mpush-args\fR" 4
.IX Item "-mpush-args"
.PD 0
*************** by the x86\-64 \s-1ABI\s0, it is a 128\-
*** 6943,6948 ****
--- 7027,7054 ----
stack pointer that will not be modified by signal or interrupt handlers
and therefore can be used for temporary data without adjusting the stack
pointer. The flag \fB\-mno-red-zone\fR disables this red zone.
+ .Ip "\fB\-mcmodel=small\fR" 4
+ .IX Item "-mcmodel=small"
+ Generate code for the small code model: the program and its symbols must
+ be linked in the lower 2 \s-1GB\s0 of the address space. Pointers are 64 bits.
+ Programs can be statically or dynamically linked. This is the default
+ code model.
+ .Ip "\fB\-mcmodel=kernel\fR" 4
+ .IX Item "-mcmodel=kernel"
+ Generate code for the kernel code model. The kernel runs in the
+ negative 2 \s-1GB\s0 of the address space.
+ This model has to be used for Linux kernel code.
+ .Ip "\fB\-mcmodel=medium\fR" 4
+ .IX Item "-mcmodel=medium"
+ Generate code for the medium model: The program is linked in the lower 2
+ \&\s-1GB\s0 of the address space but symbols can be located anywhere in the
+ address space. Programs can be statically or dynamically linked, but
+ building of shared libraries are not supported with the medium model.
+ .Ip "\fB\-mcmodel=large\fR" 4
+ .IX Item "-mcmodel=large"
+ Generate code for the large model: This model makes no assumptions
+ about addresses and sizes of sections. Currently \s-1GCC\s0 does not implement
+ this model.
.PP
.I "\s-1HPPA\s0 Options"
.IX Subsection "HPPA Options"
*************** unwinding from asynchronous events (such
*** 8864,8876 ****
Return ``short'' \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
longer ones, rather than in registers. This convention is less
efficient, but it has the advantage of allowing intercallability between
! GCC-compiled files and files compiled with other compilers.
.Sp
The precise convention for returning structures in memory depends
on the target configuration macros.
.Sp
Short structures and unions are those whose size and alignment match
that of some integer type.
.Ip "\fB\-freg-struct-return\fR" 4
.IX Item "-freg-struct-return"
Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
--- 8970,8988 ----
Return ``short'' \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
longer ones, rather than in registers. This convention is less
efficient, but it has the advantage of allowing intercallability between
! GCC-compiled files and files compiled with other compilers, particularly
! the Portable C Compiler (pcc).
.Sp
The precise convention for returning structures in memory depends
on the target configuration macros.
.Sp
Short structures and unions are those whose size and alignment match
that of some integer type.
+ .Sp
+ \&\fBWarning:\fR code compiled with the \fB\-fpcc-struct-return\fR
+ switch is not binary compatible with code compiled with the
+ \&\fB\-freg-struct-return\fR switch.
+ Use it to conform to a non-default application binary interface.
.Ip "\fB\-freg-struct-return\fR" 4
.IX Item "-freg-struct-return"
Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
*************** standard for the target. If there is no
*** 8883,8896 ****
--- 8995,9030 ----
defaults to \fB\-fpcc-struct-return\fR, except on targets where \s-1GCC\s0 is
the principal compiler. In those cases, we can choose the standard, and
we chose the more efficient register return alternative.
+ .Sp
+ \&\fBWarning:\fR code compiled with the \fB\-freg-struct-return\fR
+ switch is not binary compatible with code compiled with the
+ \&\fB\-fpcc-struct-return\fR switch.
+ Use it to conform to a non-default application binary interface.
.Ip "\fB\-fshort-enums\fR" 4
.IX Item "-fshort-enums"
Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
declared range of possible values. Specifically, the \f(CW\*(C`enum\*(C'\fR type
will be equivalent to the smallest integer type which has enough room.
+ .Sp
+ \&\fBWarning:\fR the \fB\-fshort-enums\fR switch causes \s-1GCC\s0 to generate
+ code that is not binary compatible with code generated without that switch.
+ Use it to conform to a non-default application binary interface.
.Ip "\fB\-fshort-double\fR" 4
.IX Item "-fshort-double"
Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
+ .Sp
+ \&\fBWarning:\fR the \fB\-fshort-double\fR switch causes \s-1GCC\s0 to generate
+ code that is not binary compatible with code generated without that switch.
+ Use it to conform to a non-default application binary interface.
+ .Ip "\fB\-fshort-wchar\fR" 4
+ .IX Item "-fshort-wchar"
+ Override the underlying type for \fBwchar_t\fR to be \fBshort
+ unsigned int\fR instead of the default for the target. This option is
+ useful for building programs to run under \s-1WINE\s0.
+ .Sp
+ \&\fBWarning:\fR the \fB\-fshort-wchar\fR switch causes \s-1GCC\s0 to generate
+ code that is not binary compatible with code generated without that switch.
+ Use it to conform to a non-default application binary interface.
.Ip "\fB\-fshared-data\fR" 4
.IX Item "-fshared-data"
Requests that the data and non-\f(CW\*(C`const\*(C'\fR variables of this
*************** This flag does not have a negative form,
*** 9016,9024 ****
three-way choice.
.Ip "\fB\-fpack-struct\fR" 4
.IX Item "-fpack-struct"
! Pack all structure members together without holes. Usually you would
! not want to use this option, since it makes the code suboptimal, and
! the offsets of structure members won't agree with system libraries.
.Ip "\fB\-finstrument-functions\fR" 4
.IX Item "-finstrument-functions"
Generate instrumentation calls for entry and exit to functions. Just
--- 9150,9161 ----
three-way choice.
.Ip "\fB\-fpack-struct\fR" 4
.IX Item "-fpack-struct"
! Pack all structure members together without holes.
! .Sp
! \&\fBWarning:\fR the \fB\-fpack-struct\fR switch causes \s-1GCC\s0 to generate
! code that is not binary compatible with code generated without that switch.
! Additionally, it makes the code suboptimial.
! Use it to conform to a non-default application binary interface.
.Ip "\fB\-finstrument-functions\fR" 4
.IX Item "-finstrument-functions"
Generate instrumentation calls for entry and exit to functions. Just
*************** This option and its counterpart, \fB\-fn
*** 9109,9116 ****
change the way C symbols are represented in the object file. One use
is to help link with legacy assembly code.
.Sp
! Be warned that you should know what you are doing when invoking this
! option, and that not all targets provide complete support for it.
.SH "ENVIRONMENT"
.IX Header "ENVIRONMENT"
This section describes several environment variables that affect how \s-1GCC\s0
--- 9246,9255 ----
change the way C symbols are represented in the object file. One use
is to help link with legacy assembly code.
.Sp
! \&\fBWarning:\fR the \fB\-fleading-underscore\fR switch causes \s-1GCC\s0 to
! generate code that is not binary compatible with code generated without that
! switch. Use it to conform to a non-default application binary interface.
! Not all targets provide complete support for this switch.
.SH "ENVIRONMENT"
.IX Header "ENVIRONMENT"
This section describes several environment variables that affect how \s-1GCC\s0
*************** with an optional \fB\-MT\fR switch too.
*** 9281,9287 ****
This variable is the same as the environment variable
\&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR, except that
system header files are not ignored, so it implies \fB\-M\fR rather
! than \fB\-MM\fR.
.SH "BUGS"
.IX Header "BUGS"
For instructions on reporting bugs, see
--- 9420,9427 ----
This variable is the same as the environment variable
\&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR, except that
system header files are not ignored, so it implies \fB\-M\fR rather
! than \fB\-MM\fR. However, the dependence on the main input file is
! omitted.
.SH "BUGS"
.IX Header "BUGS"
For instructions on reporting bugs, see
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info gcc-3.2.1/gcc/doc/gcc.info
*** gcc-3.2/gcc/doc/gcc.info Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info Tue Nov 19 18:17:12 2002
*************** funds for GNU development.
*** 35,265 ****
Indirect:
gcc.info-1: 1225
! gcc.info-2: 45738
! gcc.info-3: 76999
! gcc.info-4: 110248
! gcc.info-5: 158275
! gcc.info-6: 191512
! gcc.info-7: 237573
! gcc.info-8: 283645
! gcc.info-9: 331614
! gcc.info-10: 368281
! gcc.info-11: 417781
! gcc.info-12: 457002
! gcc.info-13: 504956
! gcc.info-14: 548787
! gcc.info-15: 598270
! gcc.info-16: 607922
! gcc.info-17: 664857
! gcc.info-18: 714098
! gcc.info-19: 762187
! gcc.info-20: 811075
! gcc.info-21: 842039
! gcc.info-22: 879727
! gcc.info-23: 948899
Tag Table:
(Indirect)
Node: Top1225
! Node: G++ and GCC2892
! Node: Standards5445
! Node: Invoking GCC12672
! Node: Option Summary16321
! Node: Overall Options37509
! Node: Invoking G++44292
! Node: C Dialect Options45738
! Node: C++ Dialect Options59465
! Node: Objective-C Dialect Options73589
! Node: Language Independent Options75212
! Node: Warning Options76999
! Node: Debugging Options110248
! Node: Optimize Options130100
! Node: Preprocessor Options158275
! Ref: -MF164857
! Node: Assembler Options177648
! Node: Link Options178015
! Ref: Link Options-Footnote-1186094
! Node: Directory Options186430
! Node: Spec Files191512
! Node: Target Options209016
! Node: Submodel Options213003
! Node: M680x0 Options214785
! Node: M68hc1x Options220792
! Node: VAX Options221972
! Node: SPARC Options222508
! Node: Convex Options231996
! Node: AMD29K Options234177
! Node: ARM Options237573
! Node: MN10200 Options250093
! Node: MN10300 Options250615
! Node: M32R/D Options251666
! Node: M88K Options254124
! Node: RS/6000 and PowerPC Options262048
! Node: RT Options281942
! Node: MIPS Options283645
! Node: i386 and x86-64 Options295326
! Node: HPPA Options308735
! Node: Intel 960 Options312811
! Node: DEC Alpha Options315753
! Node: DEC Alpha/VMS Options326769
! Node: Clipper Options327147
! Node: H8/300 Options327551
! Node: SH Options328480
! Node: System V Options330796
! Node: TMS320C3x/C4x Options331614
! Node: V850 Options337126
! Node: ARC Options339135
! Node: NS32K Options340336
! Node: AVR Options344585
! Node: MCore Options346386
! Node: IA-64 Options347530
! Node: D30V Options349918
! Node: S/390 and zSeries Options351161
! Node: CRIS Options353094
! Node: MMIX Options357128
! Node: PDP-11 Options359468
! Node: Xstormy16 Options361294
! Node: Xtensa Options361570
! Node: Code Gen Options368281
! Node: Environment Variables382460
! Ref: DEPENDENCIES_OUTPUT388777
! Node: Running Protoize389772
! Node: C Implementation396129
! Node: Translation implementation397063
! Node: Environment implementation397431
! Node: Identifiers implementation397724
! Node: Characters implementation398127
! Node: Integers implementation399984
! Node: Floating point implementation400836
! Node: Arrays and pointers implementation402685
! Ref: Arrays and pointers implementation-Footnote-1403988
! Node: Hints implementation404114
! Node: Structures unions enumerations and bit-fields implementation404543
! Node: Qualifiers implementation405352
! Node: Preprocessing directives implementation405663
! Node: Library functions implementation407280
! Node: Architecture implementation407605
! Node: Locale-specific behavior implementation408170
! Node: C Extensions408468
! Node: Statement Exprs412624
! Node: Local Labels415716
! Node: Labels as Values417781
! Ref: Labels as Values-Footnote-1419840
! Node: Nested Functions420025
! Node: Constructing Calls423864
! Node: Naming Types425951
! Node: Typeof427045
! Node: Lvalues428921
! Node: Conditionals431361
! Node: Long Long432252
! Node: Complex433751
! Node: Hex Floats436419
! Node: Zero Length437448
! Node: Variable Length440492
! Node: Variadic Macros443254
! Node: Escaped Newlines445644
! Node: Multi-line Strings446527
! Node: Subscripting447131
! Node: Pointer Arith447859
! Node: Initializers448424
! Node: Compound Literals448907
! Node: Designated Inits451070
! Node: Case Ranges454744
! Node: Cast to Union455424
! Node: Mixed Declarations456507
! Node: Function Attributes457002
! Node: Attribute Syntax478980
! Node: Function Prototypes489357
! Node: C++ Comments491150
! Node: Dollar Signs491745
! Node: Character Escapes492203
! Node: Alignment492490
! Node: Variable Attributes493810
! Node: Type Attributes504956
! Node: Inline515486
! Node: Extended Asm520195
! Node: Constraints537312
! Node: Simple Constraints538155
! Node: Multi-Alternative544644
! Node: Modifiers546355
! Node: Machine Constraints548787
! Node: Asm Labels565374
! Node: Explicit Reg Vars567050
! Node: Global Reg Vars568504
! Node: Local Reg Vars573069
! Node: Alternate Keywords574869
! Node: Incomplete Enums576556
! Node: Function Names577312
! Node: Return Address579749
! Node: Vector Extensions582328
! Node: Other Builtins585213
! Node: Target Builtins597769
! Node: X86 Built-in Functions598270
! Node: PowerPC AltiVec Built-in Functions607922
! Node: Pragmas664857
! Node: ARM Pragmas665323
! Node: Darwin Pragmas665917
! Node: Solaris Pragmas666956
! Node: Tru64 Pragmas667519
! Node: Unnamed Fields668248
! Node: C++ Extensions669319
! Node: Min and Max670880
! Node: Volatiles672286
! Node: Restricted Pointers675656
! Node: Vague Linkage677226
! Node: C++ Interface680884
! Ref: C++ Interface-Footnote-1685972
! Node: Template Instantiation686111
! Node: Bound member functions694942
! Node: C++ Attributes696493
! Node: Java Exceptions698097
! Node: Deprecated Features699494
! Node: Backwards Compatibility701460
! Node: Objective-C702808
! Node: Executing code before main703378
! Node: What you can and what you cannot do in +load706016
! Node: Type encoding708182
! Node: Garbage Collection711434
! Node: Constant string objects714098
! Node: compatibility_alias715732
! Node: Gcov716611
! Node: Gcov Intro717078
! Node: Invoking Gcov719753
! Node: Gcov and Optimization725827
! Node: Gcov Data Files727244
! Node: Trouble730809
! Node: Actual Bugs732403
! Node: Cross-Compiler Problems733311
! Node: Interoperation734821
! Node: External Bugs747408
! Node: Incompatibilities748900
! Node: Fixed Headers758508
! Node: Standard Libraries760817
! Node: Disappointments762187
! Node: C++ Misunderstandings766909
! Node: Static Definitions767635
! Node: Temporaries768682
! Node: Copy Assignment770659
! Node: Protoize Caveats772477
! Node: Non-bugs776432
! Node: Warnings and Errors786324
! Node: Bugs788084
! Node: Bug Criteria789437
! Node: Bug Lists791861
! Node: Bug Reporting792420
! Node: gccbug804523
! Node: Service805343
! Node: Contributing806089
! Node: VMS806828
! Node: Include Files and VMS807210
! Node: Global Declarations811075
! Node: VMS Misc815379
! Node: Funding819682
! Node: GNU Project822177
! Node: Copying822828
! Node: GNU Free Documentation License842039
! Node: Contributors861923
! Node: Option Index879727
! Node: Index948899
End Tag Table
--- 35,265 ----
Indirect:
gcc.info-1: 1225
! gcc.info-2: 46107
! gcc.info-3: 79111
! gcc.info-4: 112360
! gcc.info-5: 161725
! gcc.info-6: 194872
! gcc.info-7: 240933
! gcc.info-8: 287005
! gcc.info-9: 336046
! gcc.info-10: 372713
! gcc.info-11: 421741
! gcc.info-12: 463226
! gcc.info-13: 511180
! gcc.info-14: 555011
! gcc.info-15: 604494
! gcc.info-16: 614146
! gcc.info-17: 671081
! gcc.info-18: 720309
! gcc.info-19: 761821
! gcc.info-20: 805341
! gcc.info-21: 854960
! gcc.info-22: 899772
! gcc.info-23: 969741
Tag Table:
(Indirect)
Node: Top1225
! Node: G++ and GCC2933
! Node: Standards5486
! Node: Invoking GCC12722
! Node: Option Summary16371
! Node: Overall Options37798
! Node: Invoking G++44661
! Node: C Dialect Options46107
! Node: C++ Dialect Options59629
! Node: Objective-C Dialect Options75701
! Node: Language Independent Options77324
! Node: Warning Options79111
! Node: Debugging Options112360
! Node: Optimize Options131990
! Node: Preprocessor Options161725
! Ref: -MF168307
! Node: Assembler Options181098
! Node: Link Options181465
! Ref: Link Options-Footnote-1189544
! Node: Directory Options189880
! Node: Spec Files194872
! Node: Target Options212376
! Node: Submodel Options216363
! Node: M680x0 Options218145
! Node: M68hc1x Options224152
! Node: VAX Options225332
! Node: SPARC Options225868
! Node: Convex Options235356
! Node: AMD29K Options237537
! Node: ARM Options240933
! Node: MN10200 Options253453
! Node: MN10300 Options253975
! Node: M32R/D Options255026
! Node: M88K Options257484
! Node: RS/6000 and PowerPC Options265408
! Node: RT Options285302
! Node: MIPS Options287005
! Node: i386 and x86-64 Options298686
! Node: HPPA Options313167
! Node: Intel 960 Options317243
! Node: DEC Alpha Options320185
! Node: DEC Alpha/VMS Options331201
! Node: Clipper Options331579
! Node: H8/300 Options331983
! Node: SH Options332912
! Node: System V Options335228
! Node: TMS320C3x/C4x Options336046
! Node: V850 Options341558
! Node: ARC Options343567
! Node: NS32K Options344768
! Node: AVR Options349017
! Node: MCore Options350818
! Node: IA-64 Options351962
! Node: D30V Options354350
! Node: S/390 and zSeries Options355593
! Node: CRIS Options357526
! Node: MMIX Options361560
! Node: PDP-11 Options363900
! Node: Xstormy16 Options365726
! Node: Xtensa Options366002
! Node: Code Gen Options372713
! Node: Environment Variables388528
! Ref: DEPENDENCIES_OUTPUT394845
! Node: Running Protoize395905
! Node: C Implementation402262
! Node: Translation implementation403196
! Node: Environment implementation403564
! Node: Identifiers implementation403857
! Node: Characters implementation404260
! Node: Integers implementation406117
! Node: Floating point implementation406969
! Node: Arrays and pointers implementation408818
! Ref: Arrays and pointers implementation-Footnote-1410121
! Node: Hints implementation410247
! Node: Structures unions enumerations and bit-fields implementation410676
! Node: Qualifiers implementation411485
! Node: Preprocessing directives implementation411796
! Node: Library functions implementation413413
! Node: Architecture implementation413738
! Node: Locale-specific behavior implementation414303
! Node: C Extensions414601
! Node: Statement Exprs418687
! Node: Local Labels421741
! Node: Labels as Values423806
! Ref: Labels as Values-Footnote-1425865
! Node: Nested Functions426050
! Node: Constructing Calls429888
! Node: Typeof432376
! Node: Lvalues435145
! Node: Conditionals437585
! Node: Long Long438476
! Node: Complex439975
! Node: Hex Floats442643
! Node: Zero Length443672
! Node: Variable Length446716
! Node: Variadic Macros449478
! Node: Escaped Newlines451868
! Node: Multi-line Strings452751
! Node: Subscripting453355
! Node: Pointer Arith454083
! Node: Initializers454648
! Node: Compound Literals455131
! Node: Designated Inits457294
! Node: Case Ranges460968
! Node: Cast to Union461648
! Node: Mixed Declarations462731
! Node: Function Attributes463226
! Node: Attribute Syntax485204
! Node: Function Prototypes495581
! Node: C++ Comments497374
! Node: Dollar Signs497969
! Node: Character Escapes498427
! Node: Alignment498714
! Node: Variable Attributes500034
! Node: Type Attributes511180
! Node: Inline521710
! Node: Extended Asm526419
! Node: Constraints543536
! Node: Simple Constraints544379
! Node: Multi-Alternative550868
! Node: Modifiers552579
! Node: Machine Constraints555011
! Node: Asm Labels571598
! Node: Explicit Reg Vars573274
! Node: Global Reg Vars574728
! Node: Local Reg Vars579293
! Node: Alternate Keywords581093
! Node: Incomplete Enums582780
! Node: Function Names583536
! Node: Return Address585973
! Node: Vector Extensions588552
! Node: Other Builtins591437
! Node: Target Builtins603993
! Node: X86 Built-in Functions604494
! Node: PowerPC AltiVec Built-in Functions614146
! Node: Pragmas671081
! Node: ARM Pragmas671547
! Node: Darwin Pragmas672141
! Node: Solaris Pragmas673180
! Node: Tru64 Pragmas673743
! Node: Unnamed Fields674472
! Node: C++ Extensions675543
! Node: Min and Max677104
! Node: Volatiles678488
! Node: Restricted Pointers681858
! Node: Vague Linkage683428
! Node: C++ Interface687086
! Ref: C++ Interface-Footnote-1692174
! Node: Template Instantiation692313
! Node: Bound member functions701144
! Node: C++ Attributes702695
! Node: Java Exceptions704299
! Node: Deprecated Features705696
! Node: Backwards Compatibility707662
! Node: Objective-C709010
! Node: Executing code before main709589
! Node: What you can and what you cannot do in +load712227
! Node: Type encoding714393
! Node: Garbage Collection717645
! Node: Constant string objects720309
! Node: compatibility_alias721943
! Node: Compatibility722822
! Node: Gcov729409
! Node: Gcov Intro729878
! Node: Invoking Gcov732553
! Node: Gcov and Optimization738627
! Node: Gcov Data Files740044
! Node: Trouble743609
! Node: Actual Bugs745203
! Node: Cross-Compiler Problems746111
! Node: Interoperation747621
! Node: External Bugs760329
! Node: Incompatibilities761821
! Node: Fixed Headers771429
! Node: Standard Libraries773738
! Node: Disappointments775108
! Node: C++ Misunderstandings779830
! Node: Static Definitions780556
! Node: Temporaries781603
! Node: Copy Assignment783580
! Node: Protoize Caveats785398
! Node: Non-bugs789353
! Node: Warnings and Errors799245
! Node: Bugs801005
! Node: Bug Criteria802358
! Node: Bug Lists804782
! Node: Bug Reporting805341
! Node: gccbug817444
! Node: Service818264
! Node: Contributing819010
! Node: VMS819749
! Node: Include Files and VMS820131
! Node: Global Declarations823996
! Node: VMS Misc828300
! Node: Funding832603
! Node: GNU Project835098
! Node: Copying835749
! Node: GNU Free Documentation License854960
! Node: Contributors874844
! Node: Option Index899772
! Node: Index969741
End Tag Table
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-1 gcc-3.2.1/gcc/doc/gcc.info-1
*** gcc-3.2/gcc/doc/gcc.info-1 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-1 Tue Nov 19 18:17:12 2002
*************** front ends for new languages, are docume
*** 54,59 ****
--- 54,60 ----
* C Extensions:: GNU extensions to the C language family.
* C++ Extensions:: GNU extensions to the C++ language.
* Objective-C:: GNU Objective-C runtime features.
+ * Compatibility:: Binary Compatibility
* Gcov:: gcov: a GCC test coverage program.
* Trouble:: If you have trouble using GCC.
* Bugs:: How, why and where to report bugs.
*************** information concerning the history of C
*** 245,255 ****
There is no formal written standard for Objective-C. The most
authoritative manual is "Object-Oriented Programming and the
! Objective-C Language", available at a number of web sites;
! `http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/' has a
! recent version, while `http://www.toodarkpark.org/computers/objc/' is
! an older example. `http://www.gnustep.org' includes useful information
! as well.
*Note GNAT Reference Manual: (gnat_rm)Top, for information on
standard conformance and compatibility of the Ada compiler.
--- 246,259 ----
There is no formal written standard for Objective-C. The most
authoritative manual is "Object-Oriented Programming and the
! Objective-C Language", available at a number of web sites
!
! * `http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/' is
! a recent version
!
! * `http://www.toodarkpark.org/computers/objc/' is an older example
!
! * `http://www.gnustep.org' has additional useful information
*Note GNAT Reference Manual: (gnat_rm)Top, for information on
standard conformance and compatibility of the Ada compiler.
*************** are in the following sections.
*** 345,351 ****
_Overall Options_
*Note Options Controlling the Kind of Output: Overall Options.
-c -S -E -o FILE -pipe -pass-exit-codes -x LANGUAGE
! -v -### --target-help --help
_C Language Options_
*Note Options Controlling C Dialect: C Dialect Options.
--- 349,355 ----
_Overall Options_
*Note Options Controlling the Kind of Output: Overall Options.
-c -S -E -o FILE -pipe -pass-exit-codes -x LANGUAGE
! -v -### --help --target-help --version
_C Language Options_
*Note Options Controlling C Dialect: C Dialect Options.
*************** _C Language Options_
*** 356,362 ****
-fallow-single-precision -fcond-mismatch
-fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char
! -fwritable-strings -fshort-wchar
_C++ Language Options_
*Note Options Controlling C++ Dialect: C++ Dialect Options.
--- 360,366 ----
-fallow-single-precision -fcond-mismatch
-fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char
! -fwritable-strings
_C++ Language Options_
*Note Options Controlling C++ Dialect: C++ Dialect Options.
*************** _C++ Language Options_
*** 373,379 ****
-fno-optional-diags -fpermissive
-frepo -fno-rtti -fstats -ftemplate-depth-N
-fuse-cxa-atexit -fvtable-gc -fno-weak -nostdinc++
! -fno-default-inline -Wctor-dtor-privacy
-Wnon-virtual-dtor -Wreorder
-Weffc++ -Wno-deprecated
-Wno-non-template-friend -Wold-style-cast
--- 377,383 ----
-fno-optional-diags -fpermissive
-frepo -fno-rtti -fstats -ftemplate-depth-N
-fuse-cxa-atexit -fvtable-gc -fno-weak -nostdinc++
! -fno-default-inline -Wabi -Wctor-dtor-privacy
-Wnon-virtual-dtor -Wreorder
-Weffc++ -Wno-deprecated
-Wno-non-template-friend -Wold-style-cast
*************** _Language Independent Options_
*** 396,402 ****
_Warning Options_
*Note Options to Request or Suppress Warnings: Warning Options.
-fsyntax-only -pedantic -pedantic-errors
! -w -W -Wall -Waggregate-return
-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
-Wconversion -Wno-deprecated-declarations
-Wdisabled-optimization -Wdiv-by-zero -Werror
--- 400,406 ----
_Warning Options_
*Note Options to Request or Suppress Warnings: Warning Options.
-fsyntax-only -pedantic -pedantic-errors
! -w -W -Wall -Waggregate-return
-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
-Wconversion -Wno-deprecated-declarations
-Wdisabled-optimization -Wdiv-by-zero -Werror
*************** _Warning Options_
*** 407,413 ****
-Werror-implicit-function-declaration
-Wimport -Winline
-Wlarger-than-LEN -Wlong-long
! -Wmain -Wmissing-braces -Wmissing-declarations
-Wmissing-format-attribute -Wmissing-noreturn
-Wmultichar -Wno-format-extra-args -Wno-format-y2k
-Wno-import -Wpacked -Wpadded
--- 411,417 ----
-Werror-implicit-function-declaration
-Wimport -Winline
-Wlarger-than-LEN -Wlong-long
! -Wmain -Wmissing-braces
-Wmissing-format-attribute -Wmissing-noreturn
-Wmultichar -Wno-format-extra-args -Wno-format-y2k
-Wno-import -Wpacked -Wpadded
*************** _Warning Options_
*** 420,426 ****
-Wunused-value -Wunused-variable -Wwrite-strings
_C-only Warning Options_
! -Wbad-function-cast -Wmissing-prototypes -Wnested-externs
-Wstrict-prototypes -Wtraditional
_Debugging Options_
--- 424,431 ----
-Wunused-value -Wunused-variable -Wwrite-strings
_C-only Warning Options_
! -Wbad-function-cast -Wmissing-declarations
! -Wmissing-prototypes -Wnested-externs
-Wstrict-prototypes -Wtraditional
_Debugging Options_
*************** _Debugging Options_
*** 431,437 ****
-fdump-tree-original[-N] -fdump-tree-optimized[-N]
-fdump-tree-inlined[-N]
-fmem-report -fpretend-float
! -fprofile-arcs -ftest-coverage -ftime-report
-g -gLEVEL -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+
-p -pg -print-file-name=LIBRARY -print-libgcc-file-name
--- 436,443 ----
-fdump-tree-original[-N] -fdump-tree-optimized[-N]
-fdump-tree-inlined[-N]
-fmem-report -fpretend-float
! -fprofile-arcs -fsched-verbose=N
! -ftest-coverage -ftime-report
-g -gLEVEL -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+
-p -pg -print-file-name=LIBRARY -print-libgcc-file-name
*************** _Optimization Options_
*** 443,448 ****
--- 449,455 ----
*Note Options that Control Optimization: Optimize Options.
-falign-functions=N -falign-jumps=N
-falign-labels=N -falign-loops=N
+ -fbounds-check
-fbranch-probabilities -fcaller-saves -fcprop-registers
-fcse-follow-jumps -fcse-skip-blocks -fdata-sections
-fdelayed-branch -fdelete-null-pointer-checks
*************** _Optimization Options_
*** 451,457 ****
-fgcse -fgcse-lm -fgcse-sm
-finline-functions -finline-limit=N -fkeep-inline-functions
-fkeep-static-consts -fmerge-constants -fmerge-all-constants
! -fmove-all-movables -fno-default-inline -fno-defer-pop
-fno-function-cse -fno-guess-branch-probability
-fno-inline -fno-math-errno -fno-peephole -fno-peephole2
-funsafe-math-optimizations -fno-trapping-math
--- 458,465 ----
-fgcse -fgcse-lm -fgcse-sm
-finline-functions -finline-limit=N -fkeep-inline-functions
-fkeep-static-consts -fmerge-constants -fmerge-all-constants
! -fmove-all-movables -fno-branch-count-reg
! -fno-default-inline -fno-defer-pop
-fno-function-cse -fno-guess-branch-probability
-fno-inline -fno-math-errno -fno-peephole -fno-peephole2
-funsafe-math-optimizations -fno-trapping-math
*************** _Optimization Options_
*** 460,468 ****
-freduce-all-givs -fregmove -frename-registers
-frerun-cse-after-loop -frerun-loop-opt
-fschedule-insns -fschedule-insns2
-fsingle-precision-constant -fssa -fssa-ccp -fssa-dce
! -fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv
! -funroll-all-loops -funroll-loops
--param NAME=VALUE
-O -O0 -O1 -O2 -O3 -Os
--- 468,478 ----
-freduce-all-givs -fregmove -frename-registers
-frerun-cse-after-loop -frerun-loop-opt
-fschedule-insns -fschedule-insns2
+ -fno-sched-interblock -fno-sched-spec
+ -fsched-spec-load -fsched-spec-load-dangerous
-fsingle-precision-constant -fssa -fssa-ccp -fssa-dce
! -fstrength-reduce -fstrict-aliasing -fthread-jumps
! -ftrapv -funroll-all-loops -funroll-loops
--param NAME=VALUE
-O -O0 -O1 -O2 -O3 -Os
*************** _Machine Dependent Options_
*** 608,614 ****
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib
-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian
-mcall-aix -mcall-sysv -mcall-netbsd
! -maix-struct-return -msvr4-struct-return
-mabi=altivec -mabi=no-altivec
-mprototype -mno-prototype
-msim -mmvme -mads -myellowknife -memb -msdata
--- 618,624 ----
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib
-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian
-mcall-aix -mcall-sysv -mcall-netbsd
! -maix-struct-return -msvr4-struct-return
-mabi=altivec -mabi=no-altivec
-mprototype -mno-prototype
-msim -mmvme -mads -myellowknife -memb -msdata
*************** _Machine Dependent Options_
*** 642,652 ****
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib
-mno-wide-multiply -mrtd -malign-double
-mpreferred-stack-boundary=NUM
! -mmmx -msse -msse2 -msse-math -m3dnow
-mthreads -mno-align-stringops -minline-all-stringops
-mpush-args -maccumulate-outgoing-args -m128bit-long-double
-m96bit-long-double -mregparm=NUM -momit-leaf-frame-pointer
-mno-red-zone
-m32 -m64
_HPPA Options_
--- 652,663 ----
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib
-mno-wide-multiply -mrtd -malign-double
-mpreferred-stack-boundary=NUM
! -mmmx -msse -msse2 -m3dnow
-mthreads -mno-align-stringops -minline-all-stringops
-mpush-args -maccumulate-outgoing-args -m128bit-long-double
-m96bit-long-double -mregparm=NUM -momit-leaf-frame-pointer
-mno-red-zone
+ -mcmodel=CODE-MODEL
-m32 -m64
_HPPA Options_
*************** _Machine Dependent Options_
*** 753,760 ****
-mfixed-range=REGISTER-RANGE
_D30V Options_
! -mextmem -mextmemory -monchip -mno-asm-optimize -masm-optimize
! -mbranch-cost=N -mcond-exec=N
_S/390 and zSeries Options_
-mhard-float -msoft-float -mbackchain -mno-backchain
--- 764,771 ----
-mfixed-range=REGISTER-RANGE
_D30V Options_
! -mextmem -mextmemory -monchip -mno-asm-optimize
! -masm-optimize -mbranch-cost=N -mcond-exec=N
_S/390 and zSeries Options_
-mhard-float -msoft-float -mbackchain -mno-backchain
*************** _Code Generation Options_
*** 807,813 ****
-fno-common -fno-ident -fno-gnu-linker
-fpcc-struct-return -fpic -fPIC
-freg-struct-return -fshared-data -fshort-enums
! -fshort-double -fvolatile
-fvolatile-global -fvolatile-static
-fverbose-asm -fpack-struct -fstack-check
-fstack-limit-register=REG -fstack-limit-symbol=SYM
--- 818,824 ----
-fno-common -fno-ident -fno-gnu-linker
-fpcc-struct-return -fpic -fPIC
-freg-struct-return -fshared-data -fshort-enums
! -fshort-double -fshort-wchar -fvolatile
-fvolatile-global -fvolatile-static
-fverbose-asm -fpack-struct -fstack-check
-fstack-limit-register=REG -fstack-limit-symbol=SYM
*************** do nothing at all.
*** 1025,1030 ****
--- 1036,1044 ----
Print (on the standard output) a description of target specific
command line options for each tool.
+ `--version'
+ Display the version number and copyrights of the invoked GCC.
+
File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-10 gcc-3.2.1/gcc/doc/gcc.info-10
*** gcc-3.2/gcc/doc/gcc.info-10 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-10 Tue Nov 19 18:17:12 2002
*************** the other form by either removing `no-'
*** 86,92 ****
Return "short" `struct' and `union' values in memory like longer
ones, rather than in registers. This convention is less
efficient, but it has the advantage of allowing intercallability
! between GCC-compiled files and files compiled with other compilers.
The precise convention for returning structures in memory depends
on the target configuration macros.
--- 86,93 ----
Return "short" `struct' and `union' values in memory like longer
ones, rather than in registers. This convention is less
efficient, but it has the advantage of allowing intercallability
! between GCC-compiled files and files compiled with other
! compilers, particularly the Portable C Compiler (pcc).
The precise convention for returning structures in memory depends
on the target configuration macros.
*************** the other form by either removing `no-'
*** 94,99 ****
--- 95,105 ----
Short structures and unions are those whose size and alignment
match that of some integer type.
+ *Warning:* code compiled with the `-fpcc-struct-return' switch is
+ not binary compatible with code compiled with the
+ `-freg-struct-return' switch. Use it to conform to a non-default
+ application binary interface.
+
`-freg-struct-return'
Return `struct' and `union' values in registers when possible.
This is more efficient for small structures than
*************** the other form by either removing `no-'
*** 107,121 ****
--- 113,152 ----
standard, and we chose the more efficient register return
alternative.
+ *Warning:* code compiled with the `-freg-struct-return' switch is
+ not binary compatible with code compiled with the
+ `-fpcc-struct-return' switch. Use it to conform to a non-default
+ application binary interface.
+
`-fshort-enums'
Allocate to an `enum' type only as many bytes as it needs for the
declared range of possible values. Specifically, the `enum' type
will be equivalent to the smallest integer type which has enough
room.
+ *Warning:* the `-fshort-enums' switch causes GCC to generate code
+ that is not binary compatible with code generated without that
+ switch. Use it to conform to a non-default application binary
+ interface.
+
`-fshort-double'
Use the same size for `double' as for `float'.
+ *Warning:* the `-fshort-double' switch causes GCC to generate code
+ that is not binary compatible with code generated without that
+ switch. Use it to conform to a non-default application binary
+ interface.
+
+ `-fshort-wchar'
+ Override the underlying type for `wchar_t' to be `short unsigned
+ int' instead of the default for the target. This option is useful
+ for building programs to run under WINE.
+
+ *Warning:* the `-fshort-wchar' switch causes GCC to generate code
+ that is not binary compatible with code generated without that
+ switch. Use it to conform to a non-default application binary
+ interface.
+
`-fshared-data'
Requests that the data and non-`const' variables of this
compilation be shared data rather than private data. The
*************** the other form by either removing `no-'
*** 243,252 ****
three-way choice.
`-fpack-struct'
! Pack all structure members together without holes. Usually you
! would not want to use this option, since it makes the code
! suboptimal, and the offsets of structure members won't agree with
! system libraries.
`-finstrument-functions'
Generate instrumentation calls for entry and exit to functions.
--- 274,285 ----
three-way choice.
`-fpack-struct'
! Pack all structure members together without holes.
!
! *Warning:* the `-fpack-struct' switch causes GCC to generate code
! that is not binary compatible with code generated without that
! switch. Additionally, it makes the code suboptimial. Use it to
! conform to a non-default application binary interface.
`-finstrument-functions'
Generate instrumentation calls for entry and exit to functions.
*************** the other form by either removing `no-'
*** 336,344 ****
forcibly change the way C symbols are represented in the object
file. One use is to help link with legacy assembly code.
! Be warned that you should know what you are doing when invoking
! this option, and that not all targets provide complete support for
! it.
File: gcc.info, Node: Environment Variables, Next: Running Protoize, Prev: Code Gen Options, Up: Invoking GCC
--- 369,379 ----
forcibly change the way C symbols are represented in the object
file. One use is to help link with legacy assembly code.
! *Warning:* the `-fleading-underscore' switch causes GCC to
! generate code that is not binary compatible with code generated
! without that switch. Use it to conform to a non-default
! application binary interface. Not all targets provide complete
! support for this switch.
File: gcc.info, Node: Environment Variables, Next: Running Protoize, Prev: Code Gen Options, Up: Invoking GCC
*************** preprocessor.
*** 504,510 ****
This variable is the same as the environment variable
`DEPENDENCIES_OUTPUT' (*note DEPENDENCIES_OUTPUT::), except that
system header files are not ignored, so it implies `-M' rather
! than `-MM'. *Note Preprocessor Options::.
File: gcc.info, Node: Running Protoize, Prev: Environment Variables, Up: Invoking GCC
--- 539,546 ----
This variable is the same as the environment variable
`DEPENDENCIES_OUTPUT' (*note DEPENDENCIES_OUTPUT::), except that
system header files are not ignored, so it implies `-M' rather
! than `-MM'. However, the dependence on the main input file is
! omitted. *Note Preprocessor Options::.
File: gcc.info, Node: Running Protoize, Prev: Environment Variables, Up: Invoking GCC
*************** extensions, accepted by GCC in C89 mode
*** 1015,1021 ****
* Labels as Values:: Getting pointers to labels, and computed gotos.
* Nested Functions:: As in Algol and Pascal, lexical scoping of functions.
* Constructing Calls:: Dispatching a call to another function.
- * Naming Types:: Giving a name to the type of some expression.
* Typeof:: `typeof': referring to the type of an expression.
* Lvalues:: Using `?:', `,' and casts in lvalues.
* Conditionals:: Omitting the middle operand of a `?:' expression.
--- 1051,1056 ----
*************** the value of an enumeration constant, th
*** 1111,1118 ****
initial value of a static variable.
If you don't know the type of the operand, you can still do this,
! but you must use `typeof' (*note Typeof::) or type naming (*note Naming
! Types::).
Statement expressions are not supported fully in G++, and their fate
there is unclear. (It is possible that they will become fully supported
--- 1146,1152 ----
initial value of a static variable.
If you don't know the type of the operand, you can still do this,
! but you must use `typeof' (*note Typeof::).
Statement expressions are not supported fully in G++, and their fate
there is unclear. (It is possible that they will become fully supported
*************** work with C++. (Note that some versions
*** 1141,1193 ****
header files using statement-expression that lead to precisely this
bug.)
-
- File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions
-
- Locally Declared Labels
- =======================
-
- Each statement expression is a scope in which "local labels" can be
- declared. A local label is simply an identifier; you can jump to it
- with an ordinary `goto' statement, but only from within the statement
- expression it belongs to.
-
- A local label declaration looks like this:
-
- __label__ LABEL;
-
- or
-
- __label__ LABEL1, LABEL2, ...;
-
- Local label declarations must come at the beginning of the statement
- expression, right after the `({', before any ordinary declarations.
-
- The label declaration defines the label _name_, but does not define
- the label itself. You must do this in the usual way, with `LABEL:',
- within the statements of the statement expression.
-
- The local label feature is useful because statement expressions are
- often used in macros. If the macro contains nested loops, a `goto' can
- be useful for breaking out of them. However, an ordinary label whose
- scope is the whole function cannot be used: if the macro can be
- expanded several times in one function, the label will be multiply
- defined in that function. A local label avoids this problem. For
- example:
-
- #define SEARCH(array, target) \
- ({ \
- __label__ found; \
- typeof (target) _SEARCH_target = (target); \
- typeof (*(array)) *_SEARCH_array = (array); \
- int i, j; \
- int value; \
- for (i = 0; i < max; i++) \
- for (j = 0; j < max; j++) \
- if (_SEARCH_array[i][j] == _SEARCH_target) \
- { value = i; goto found; } \
- value = -1; \
- found: \
- value; \
- })
-
--- 1175,1177 ----
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-11 gcc-3.2.1/gcc/doc/gcc.info-11
*** gcc-3.2/gcc/doc/gcc.info-11 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-11 Tue Nov 19 18:17:12 2002
*************** software. Copies published by the Free
*** 33,38 ****
--- 33,88 ----
funds for GNU development.
+ File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions
+
+ Locally Declared Labels
+ =======================
+
+ Each statement expression is a scope in which "local labels" can be
+ declared. A local label is simply an identifier; you can jump to it
+ with an ordinary `goto' statement, but only from within the statement
+ expression it belongs to.
+
+ A local label declaration looks like this:
+
+ __label__ LABEL;
+
+ or
+
+ __label__ LABEL1, LABEL2, ...;
+
+ Local label declarations must come at the beginning of the statement
+ expression, right after the `({', before any ordinary declarations.
+
+ The label declaration defines the label _name_, but does not define
+ the label itself. You must do this in the usual way, with `LABEL:',
+ within the statements of the statement expression.
+
+ The local label feature is useful because statement expressions are
+ often used in macros. If the macro contains nested loops, a `goto' can
+ be useful for breaking out of them. However, an ordinary label whose
+ scope is the whole function cannot be used: if the macro can be
+ expanded several times in one function, the label will be multiply
+ defined in that function. A local label avoids this problem. For
+ example:
+
+ #define SEARCH(array, target) \
+ ({ \
+ __label__ found; \
+ typeof (target) _SEARCH_target = (target); \
+ typeof (*(array)) *_SEARCH_array = (array); \
+ int i, j; \
+ int value; \
+ for (i = 0; i < max; i++) \
+ for (j = 0; j < max; j++) \
+ if (_SEARCH_array[i][j] == _SEARCH_target) \
+ { value = i; goto found; } \
+ value = -1; \
+ found: \
+ value; \
+ })
+
+
File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions
Labels as Values
*************** safe.
*** 162,168 ****
GCC implements taking the address of a nested function using a
technique called "trampolines". A paper describing them is available as
! `http://people.debian.org/~karlheg/Usenix88-lexic.pdf'.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
--- 212,218 ----
GCC implements taking the address of a nested function using a
technique called "trampolines". A paper describing them is available as
! `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
*************** function declarations).
*** 212,218 ****
}
! File: gcc.info, Node: Constructing Calls, Next: Naming Types, Prev: Nested Functions, Up: C Extensions
Constructing Function Calls
===========================
--- 262,268 ----
}
! File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions
Constructing Function Calls
===========================
*************** tried to return (as long as your caller
*** 258,284 ****
the containing function. You should specify, for RESULT, a value
returned by `__builtin_apply'.
-
- File: gcc.info, Node: Naming Types, Next: Typeof, Prev: Constructing Calls, Up: C Extensions
-
- Naming an Expression's Type
- ===========================
-
- You can give a name to the type of an expression using a `typedef'
- declaration with an initializer. Here is how to define NAME as a type
- name for the type of EXP:
-
- typedef NAME = EXP;
-
- This is useful in conjunction with the statements-within-expressions
- feature. Here is how the two together can be used to define a safe
- "maximum" macro that operates on any arithmetic type:
-
- #define max(a,b) \
- ({typedef _ta = (a), _tb = (b); \
- _ta _a = (a); _tb _b = (b); \
- _a > _b ? _a : _b; })
-
The reason for using names that start with underscores for the local
variables is to avoid conflicts with variable names that occur within
the expressions that are substituted for `a' and `b'. Eventually we
--- 308,313 ----
*************** declare variables whose scopes start onl
*** 287,293 ****
this will be a more reliable way to prevent such conflicts.
! File: gcc.info, Node: Typeof, Next: Lvalues, Prev: Naming Types, Up: C Extensions
Referring to a Type with `typeof'
=================================
--- 316,322 ----
this will be a more reliable way to prevent such conflicts.
! File: gcc.info, Node: Typeof, Next: Lvalues, Prev: Constructing Calls, Up: C Extensions
Referring to a Type with `typeof'
=================================
*************** Keywords::.
*** 318,323 ****
--- 347,364 ----
used. For example, you can use it in a declaration, in a cast, or
inside of `sizeof' or `typeof'.
+ `typeof' is often useful in conjunction with the
+ statements-within-expressions feature. Here is how the two together can
+ be used to define a safe "maximum" macro that operates on any
+ arithmetic type and evaluates each of its arguments exactly once:
+
+ #define max(a,b) \
+ ({ typeof (a) _a = (a); \
+ typeof (b) _b = (b); \
+ _a > _b ? _a : _b; })
+
+ Some more examples of the use of `typeof':
+
* This declares `y' with the type of what `x' points to.
typeof (*x) y;
*************** inside of `sizeof' or `typeof'.
*** 347,352 ****
--- 388,407 ----
Thus, `array (pointer (char), 4)' is the type of arrays of 4
pointers to `char'.
+ _Compatibility Note:_ In addition to `typeof', GCC 2 supported a
+ more limited extension which permitted one to write
+
+ typedef T = EXPR;
+
+ with the effect of declaring T to have the type of the expression EXPR.
+ This extension does not work with GCC 3 (versions between 3.0 and 3.2
+ will crash; 3.2.1 and later give an error). Code which relies on it
+ should be rewritten to use `typeof':
+
+ typedef typeof(EXPR) T;
+
+ This will work with all versions of GCC.
+
File: gcc.info, Node: Lvalues, Next: Conditionals, Prev: Typeof, Up: C Extensions
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-17 gcc-3.2.1/gcc/doc/gcc.info-17
*** gcc-3.2/gcc/doc/gcc.info-17 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-17 Tue Nov 19 18:17:12 2002
*************** value of variables I and J.
*** 232,242 ****
However, side effects in `X' or `Y' may cause unintended behavior.
For example, `MIN (i++, j++)' will fail, incrementing the smaller
! counter twice. A GNU C extension allows you to write safe macros that
! avoid this kind of problem (*note Naming an Expression's Type: Naming
! Types.). However, writing `MIN' and `MAX' as macros also forces you to
! use function-call notation for a fundamental arithmetic operation.
! Using GNU C++ extensions, you can write `int min = i j;' instead.
Since `' and `>?' are built into the compiler, they properly
handle expressions with side-effects; `int min = i++ j++;' works
--- 232,242 ----
However, side effects in `X' or `Y' may cause unintended behavior.
For example, `MIN (i++, j++)' will fail, incrementing the smaller
! counter twice. The GNU C `typeof' extension allows you to write safe
! macros that avoid this kind of problem (*note Typeof::). However,
! writing `MIN' and `MAX' as macros also forces you to use function-call
! notation for a fundamental arithmetic operation. Using GNU C++
! extensions, you can write `int min = i j;' instead.
Since `' and `>?' are built into the compiler, they properly
handle expressions with side-effects; `int min = i++ j++;' works
*************** G++._ They should be considered deprecat
*** 889,895 ****
arguments, rather than no arguments, as C++ demands.
! File: gcc.info, Node: Objective-C, Next: Gcov, Prev: C++ Extensions, Up: Top
GNU Objective-C runtime features
********************************
--- 889,895 ----
arguments, rather than no arguments, as C++ demands.
! File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top
GNU Objective-C runtime features
********************************
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-18 gcc-3.2.1/gcc/doc/gcc.info-18
*** gcc-3.2/gcc/doc/gcc.info-18 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-18 Tue Nov 19 18:17:12 2002
*************** class name, it should replace it with `G
*** 100,106 ****
! File: gcc.info, Node: Gcov, Next: Trouble, Prev: Objective-C, Up: Top
`gcov': a Test Coverage Program
*******************************
--- 100,252 ----
! File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top
!
! Binary Compatibility
! ********************
!
! Binary compatibility encompasses several related concepts:
!
! "application binary interface (ABI)"
! The set of runtime conventions followed by all of the tools that
! deal with binary representations of a program, including
! compilers, assemblers, linkers, and language runtime support.
! Some ABIs are formal with a written specification, possibly
! designed by multiple interested parties. Others are simply the
! way things are actually done by a particular set of tools.
!
! "ABI conformance"
! A compiler conforms to an ABI if it generates code that follows
! all of the specifications enumerated by that ABI. A library
! conforms to an ABI if it is implemented according to that ABI. An
! application conforms to an ABI if it is built using tools that
! conform to that ABI and does not contain source code that
! specifically changes behavior specified by the ABI.
!
! "calling conventions"
! Calling conventions are a subset of an ABI that specify of how
! arguments are passed and function results are returned.
!
! "interoperability"
! Different sets of tools are interoperable if they generate files
! that can be used in the same program. The set of tools includes
! compilers, assemblers, linkers, libraries, header files, startup
! files, and debuggers. Binaries produced by different sets of
! tools are not interoperable unless they implement the same ABI.
! This applies to different versions of the same tools as well as
! tools from different vendors.
!
! "intercallability"
! Whether a function in a binary built by one set of tools can call a
! function in a binary built by a different set of tools is a subset
! of interoperability.
!
! "implementation-defined features"
! Language standards include lists of implementation-defined
! features whose behavior can vary from one implementation to
! another. Some of these features are normally covered by a
! platform's ABI and others are not. The features that are not
! covered by an ABI generally affect how a program behaves, but not
! intercallability.
!
! "compatibility"
! Conformance to the same ABI and the same behavior of
! implementation-defined features are both relevant for
! compatibility.
!
! The application binary interface implemented by a C or C++ compiler
! affects code generation and runtime support for:
!
! * size and alignment of data types
!
! * layout of structured types
!
! * calling conventions
!
! * register usage conventions
!
! * interfaces for runtime arithmetic support
!
! * object file formats
!
! In addition, the application binary interface implemented by a C++
! compiler affects code generation and runtime support for:
! * name mangling
!
! * exception handling
!
! * invoking constructors and destructors
!
! * layout, alignment, and padding of classes
!
! * layout and alignment of virtual tables
!
! Some GCC compilation options cause the compiler to generate code that
! does not conform to the platform's default ABI. Other options cause
! different program behavior for implementation-defined features that are
! not covered by an ABI. These options are provided for consistency with
! other compilers that do not follow the platform's default ABI or the
! usual behavior of implementation-defined features for the platform. Be
! very careful about using such options.
!
! Most platforms have a well-defined ABI that covers C code, but ABIs
! that cover C++ functionality are not yet common.
!
! Starting with GCC 3.2, GCC binary conventions for C++ are based on a
! written, vendor-neutral C++ ABI that was designed to be specific to
! 64-bit Itanium but also includes generic specifications that apply to
! any platform. This C++ ABI is also implemented by other compiler
! vendors on some platforms, notably GNU/Linux and BSD systems. We have
! tried hard to provide a stable ABI that will be compatible with future
! GCC releases, but it is possible that we will encounter problems that
! make this difficult. Such problems could include different
! interpretations of the C++ ABI by different vendors, bugs in the ABI, or
! bugs in the implementation of the ABI in different compilers. GCC's
! `-Wabi' switch warns when G++ generates code that is probably not
! compatible with the C++ ABI.
!
! The C++ library used with a C++ compiler includes the Standard C++
! Library, with functionality defined in the C++ Standard, plus language
! runtime support. The runtime support is included in a C++ ABI, but
! there is no formal ABI for the Standard C++ Library. Two
! implementations of that library are interoperable if one follows the
! de-facto ABI of the other and if they are both built with the same
! compiler, or with compilers that conform to the same ABI for C++
! compiler and runtime support.
!
! When G++ and another C++ compiler conform to the same C++ ABI, but
! the implementations of the Standard C++ Library that they normally use
! do not follow the same ABI for the Standard C++ Library, object files
! built with those compilers can be used in the same program only if they
! use the same C++ library. This requires specifying the location of the
! C++ library header files when invoking the compiler whose usual library
! is not being used. The location of GCC's C++ header files depends on
! how the GCC build was configured, but can be seen by using the G++ `-v'
! option. With default configuration options for G++ 3.2 the compile
! line for a different C++ compiler needs to include
!
! -IGCC_INSTALL_DIRECTORY/include/c++/3.2
!
! Similarly, compiling code with G++ that must use a C++ library other
! than the GNU C++ library requires specifying the location of the header
! files for that other library.
!
! The most straightforward way to link a program to use a particular
! C++ library is to use a C++ driver that specifies that C++ library by
! default. The `g++' driver, for example, tells the linker where to find
! GCC's C++ library (`libstdc++') plus the other libraries and startup
! files it needs, in the proper order.
!
! If a program must use a different C++ library and it's not possible
! to do the final link using a C++ driver that uses that library by
! default, it is necessary to tell `g++' the location and name of that
! library. It might also be necessary to specify different startup files
! and other runtime support libraries, and to suppress the use of GCC's
! support libraries with one or more of the options `-nostdlib',
! `-nostartfiles', and `-nodefaultlibs'.
!
!
! File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top
`gcov': a Test Coverage Program
*******************************
*************** Interoperation
*** 540,556 ****
together with other compilers or with the assemblers, linkers,
libraries and debuggers on certain systems.
! * G++ does not do name mangling in the same way as other C++
! compilers. This means that object files compiled with one compiler
! cannot be used with another.
! This effect is intentional, to protect you from more subtle
! problems. Compilers differ as to many internal details of C++
! implementation, including: how class instances are laid out, how
! multiple inheritance is implemented, and how virtual function
! calls are handled. If the name encoding were made the same, your
! programs would link against libraries provided from other
! compilers--but the programs would then crash when run.
Incompatible libraries are then detected at link time, rather than
at run time.
--- 686,703 ----
together with other compilers or with the assemblers, linkers,
libraries and debuggers on certain systems.
! * On many platforms, GCC supports a different ABI for C++ than do
! other compilers, so the object files compiled by GCC cannot be
! used with object files generated by another C++ compiler.
! An area where the difference is most apparent is name mangling.
! The use of different name mangling is intentional, to protect you
! from more subtle problems. Compilers differ as to many internal
! details of C++ implementation, including: how class instances are
! laid out, how multiple inheritance is implemented, and how virtual
! function calls are handled. If the name encoding were made the
! same, your programs would link against libraries provided from
! other compilers--but the programs would then crash when run.
Incompatible libraries are then detected at link time, rather than
at run time.
*************** Problems Compiling Certain Programs
*** 836,1134 ****
MALLOC=gmalloc.o
-
- File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: External Bugs, Up: Trouble
-
- Incompatibilities of GCC
- ========================
-
- There are several noteworthy incompatibilities between GNU C and K&R
- (non-ISO) versions of C. The `-traditional' option eliminates many of
- these incompatibilities, _but not all_, by telling GCC to behave like a
- K&R C compiler.
-
- * GCC normally makes string constants read-only. If several
- identical-looking string constants are used, GCC stores only one
- copy of the string.
-
- One consequence is that you cannot call `mktemp' with a string
- constant argument. The function `mktemp' always alters the string
- its argument points to.
-
- Another consequence is that `sscanf' does not work on some systems
- when passed a string constant as its format control string or
- input. This is because `sscanf' incorrectly tries to write into
- the string constant. Likewise `fscanf' and `scanf'.
-
- The best solution to these problems is to change the program to use
- `char'-array variables with initialization strings for these
- purposes instead of string constants. But if this is not possible,
- you can use the `-fwritable-strings' flag, which directs GCC to
- handle string constants the same way most C compilers do.
- `-traditional' also has this effect, among others.
-
- * `-2147483648' is positive.
-
- This is because 2147483648 cannot fit in the type `int', so
- (following the ISO C rules) its data type is `unsigned long int'.
- Negating this value yields 2147483648 again.
-
- * GCC does not substitute macro arguments when they appear inside of
- string constants. For example, the following macro in GCC
-
- #define foo(a) "a"
-
- will produce output `"a"' regardless of what the argument A is.
-
- The `-traditional' option directs GCC to handle such cases (among
- others) in the old-fashioned (non-ISO) fashion.
-
- * When you use `setjmp' and `longjmp', the only automatic variables
- guaranteed to remain valid are those declared `volatile'. This is
- a consequence of automatic register allocation. Consider this
- function:
-
- jmp_buf j;
-
- foo ()
- {
- int a, b;
-
- a = fun1 ();
- if (setjmp (j))
- return a;
-
- a = fun2 ();
- /* `longjmp (j)' may occur in `fun3'. */
- return a + fun3 ();
- }
-
- Here `a' may or may not be restored to its first value when the
- `longjmp' occurs. If `a' is allocated in a register, then its
- first value is restored; otherwise, it keeps the last value stored
- in it.
-
- If you use the `-W' option with the `-O' option, you will get a
- warning when GCC thinks such a problem might be possible.
-
- The `-traditional' option directs GCC to put variables in the
- stack by default, rather than in registers, in functions that call
- `setjmp'. This results in the behavior found in traditional C
- compilers.
-
- * Programs that use preprocessing directives in the middle of macro
- arguments do not work with GCC. For example, a program like this
- will not work:
-
- foobar (
- #define luser
- hack)
-
- ISO C does not permit such a construct. It would make sense to
- support it when `-traditional' is used, but it is too much work to
- implement.
-
- * K&R compilers allow comments to cross over an inclusion boundary
- (i.e. started in an include file and ended in the including file).
- I think this would be quite ugly and can't imagine it could be
- needed.
-
- * Declarations of external variables and functions within a block
- apply only to the block containing the declaration. In other
- words, they have the same scope as any other declaration in the
- same place.
-
- In some other C compilers, a `extern' declaration affects all the
- rest of the file even if it happens within a block.
-
- The `-traditional' option directs GCC to treat all `extern'
- declarations as global, like traditional compilers.
-
- * In traditional C, you can combine `long', etc., with a typedef
- name, as shown here:
-
- typedef int foo;
- typedef long foo bar;
-
- In ISO C, this is not allowed: `long' and other type modifiers
- require an explicit `int'. Because this criterion is expressed by
- Bison grammar rules rather than C code, the `-traditional' flag
- cannot alter it.
-
- * PCC allows typedef names to be used as function parameters. The
- difficulty described immediately above applies here too.
-
- * When in `-traditional' mode, GCC allows the following erroneous
- pair of declarations to appear together in a given scope:
-
- typedef int foo;
- typedef foo foo;
-
- * GCC treats all characters of identifiers as significant, even when
- in `-traditional' mode. According to K&R-1 (2.2), "No more than
- the first eight characters are significant, although more may be
- used.". Also according to K&R-1 (2.2), "An identifier is a
- sequence of letters and digits; the first character must be a
- letter. The underscore _ counts as a letter.", but GCC also
- allows dollar signs in identifiers.
-
- * PCC allows whitespace in the middle of compound assignment
- operators such as `+='. GCC, following the ISO standard, does not
- allow this. The difficulty described immediately above applies
- here too.
-
- * GCC complains about unterminated character constants inside of
- preprocessing conditionals that fail. Some programs have English
- comments enclosed in conditionals that are guaranteed to fail; if
- these comments contain apostrophes, GCC will probably report an
- error. For example, this code would produce an error:
-
- #if 0
- You can't expect this to work.
- #endif
-
- The best solution to such a problem is to put the text into an
- actual C comment delimited by `/*...*/'. However, `-traditional'
- suppresses these error messages.
-
- * Many user programs contain the declaration `long time ();'. In the
- past, the system header files on many systems did not actually
- declare `time', so it did not matter what type your program
- declared it to return. But in systems with ISO C headers, `time'
- is declared to return `time_t', and if that is not the same as
- `long', then `long time ();' is erroneous.
-
- The solution is to change your program to use appropriate system
- headers (`' on systems with ISO C headers) and not to
- declare `time' if the system header files declare it, or failing
- that to use `time_t' as the return type of `time'.
-
- * When compiling functions that return `float', PCC converts it to a
- double. GCC actually returns a `float'. If you are concerned
- with PCC compatibility, you should declare your functions to return
- `double'; you might as well say what you mean.
-
- * When compiling functions that return structures or unions, GCC
- output code normally uses a method different from that used on most
- versions of Unix. As a result, code compiled with GCC cannot call
- a structure-returning function compiled with PCC, and vice versa.
-
- The method used by GCC is as follows: a structure or union which is
- 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or
- union with any other size is stored into an address supplied by
- the caller (usually in a special, fixed register, but on some
- machines it is passed on the stack). The machine-description
- macros `STRUCT_VALUE' and `STRUCT_INCOMING_VALUE' tell GCC where
- to pass this address.
-
- By contrast, PCC on most target machines returns structures and
- unions of any size by copying the data into an area of static
- storage, and then returning the address of that storage as if it
- were a pointer value. The caller must copy the data from that
- memory area to the place where the value is wanted. GCC does not
- use this method because it is slower and nonreentrant.
-
- On some newer machines, PCC uses a reentrant convention for all
- structure and union returning. GCC on most of these machines uses
- a compatible convention when returning structures and unions in
- memory, but still returns small structures and unions in registers.
-
- You can tell GCC to use a compatible convention for all structure
- and union returning with the option `-fpcc-struct-return'.
-
- * GCC complains about program fragments such as `0x74ae-0x4000'
- which appear to be two hexadecimal constants separated by the minus
- operator. Actually, this string is a single "preprocessing token".
- Each such token must correspond to one token in C. Since this
- does not, GCC prints an error message. Although it may appear
- obvious that what is meant is an operator and two values, the ISO
- C standard specifically requires that this be treated as erroneous.
-
- A "preprocessing token" is a "preprocessing number" if it begins
- with a digit and is followed by letters, underscores, digits,
- periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
- character sequences. (In strict C89 mode, the sequences `p+',
- `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
-
- To make the above program fragment valid, place whitespace in
- front of the minus sign. This whitespace will end the
- preprocessing number.
-
-
- File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble
-
- Fixed Header Files
- ==================
-
- GCC needs to install corrected versions of some system header files.
- This is because most target systems have some header files that won't
- work with GCC unless they are changed. Some have bugs, some are
- incompatible with ISO C, and some depend on special features of other
- compilers.
-
- Installing GCC automatically creates and installs the fixed header
- files, by running a program called `fixincludes' (or for certain
- targets an alternative such as `fixinc.svr4'). Normally, you don't
- need to pay attention to this. But there are cases where it doesn't do
- the right thing automatically.
-
- * If you update the system's header files, such as by installing a
- new system version, the fixed header files of GCC are not
- automatically updated. The easiest way to update them is to
- reinstall GCC. (If you want to be clever, look in the makefile
- and you can find a shortcut.)
-
- * On some systems, in particular SunOS 4, header file directories
- contain machine-specific symbolic links in certain places. This
- makes it possible to share most of the header files among hosts
- running the same version of SunOS 4 on different machine models.
-
- The programs that fix the header files do not understand this
- special way of using symbolic links; therefore, the directory of
- fixed header files is good only for the machine model used to
- build it.
-
- In SunOS 4, only programs that look inside the kernel will notice
- the difference between machine models. Therefore, for most
- purposes, you need not be concerned about this.
-
- It is possible to make separate sets of fixed header files for the
- different machine models, and arrange a structure of symbolic
- links so as to use the proper set, but you'll have to do this by
- hand.
-
- * On Lynxos, GCC by default does not fix the header files. This is
- because bugs in the shell cause the `fixincludes' script to fail.
-
- This means you will encounter problems due to bugs in the system
- header files. It may be no comfort that they aren't GCC's fault,
- but it does mean that there's nothing for us to do about them.
-
-
- File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble
-
- Standard Libraries
- ==================
-
- GCC by itself attempts to be a conforming freestanding
- implementation. *Note Language Standards Supported by GCC: Standards,
- for details of what this means. Beyond the library facilities required
- of such an implementation, the rest of the C library is supplied by the
- vendor of the operating system. If that C library doesn't conform to
- the C standards, then your programs might get warnings (especially when
- using `-Wall') that you don't expect.
-
- For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
- while the C standard says that `sprintf' returns an `int'. The
- `fixincludes' program could make the prototype for this function match
- the Standard, but that would be wrong, since the function will still
- return `char *'.
-
- If you need a Standard compliant library, then you need to find one,
- as GCC does not provide one. The GNU C library (called `glibc')
- provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for
- GNU/Linux and HURD-based GNU systems; no recent version of it supports
- other systems, though some very old versions did. Version 2.2 of the
- GNU C library includes nearly complete C99 support. You could also ask
- your operating system vendor if newer libraries are available.
-
--- 983,985 ----
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-19 gcc-3.2.1/gcc/doc/gcc.info-19
*** gcc-3.2/gcc/doc/gcc.info-19 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-19 Tue Nov 19 18:17:12 2002
*************** software. Copies published by the Free
*** 33,38 ****
--- 33,334 ----
funds for GNU development.
+ File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: External Bugs, Up: Trouble
+
+ Incompatibilities of GCC
+ ========================
+
+ There are several noteworthy incompatibilities between GNU C and K&R
+ (non-ISO) versions of C. The `-traditional' option eliminates many of
+ these incompatibilities, _but not all_, by telling GCC to behave like a
+ K&R C compiler.
+
+ * GCC normally makes string constants read-only. If several
+ identical-looking string constants are used, GCC stores only one
+ copy of the string.
+
+ One consequence is that you cannot call `mktemp' with a string
+ constant argument. The function `mktemp' always alters the string
+ its argument points to.
+
+ Another consequence is that `sscanf' does not work on some systems
+ when passed a string constant as its format control string or
+ input. This is because `sscanf' incorrectly tries to write into
+ the string constant. Likewise `fscanf' and `scanf'.
+
+ The best solution to these problems is to change the program to use
+ `char'-array variables with initialization strings for these
+ purposes instead of string constants. But if this is not possible,
+ you can use the `-fwritable-strings' flag, which directs GCC to
+ handle string constants the same way most C compilers do.
+ `-traditional' also has this effect, among others.
+
+ * `-2147483648' is positive.
+
+ This is because 2147483648 cannot fit in the type `int', so
+ (following the ISO C rules) its data type is `unsigned long int'.
+ Negating this value yields 2147483648 again.
+
+ * GCC does not substitute macro arguments when they appear inside of
+ string constants. For example, the following macro in GCC
+
+ #define foo(a) "a"
+
+ will produce output `"a"' regardless of what the argument A is.
+
+ The `-traditional' option directs GCC to handle such cases (among
+ others) in the old-fashioned (non-ISO) fashion.
+
+ * When you use `setjmp' and `longjmp', the only automatic variables
+ guaranteed to remain valid are those declared `volatile'. This is
+ a consequence of automatic register allocation. Consider this
+ function:
+
+ jmp_buf j;
+
+ foo ()
+ {
+ int a, b;
+
+ a = fun1 ();
+ if (setjmp (j))
+ return a;
+
+ a = fun2 ();
+ /* `longjmp (j)' may occur in `fun3'. */
+ return a + fun3 ();
+ }
+
+ Here `a' may or may not be restored to its first value when the
+ `longjmp' occurs. If `a' is allocated in a register, then its
+ first value is restored; otherwise, it keeps the last value stored
+ in it.
+
+ If you use the `-W' option with the `-O' option, you will get a
+ warning when GCC thinks such a problem might be possible.
+
+ The `-traditional' option directs GCC to put variables in the
+ stack by default, rather than in registers, in functions that call
+ `setjmp'. This results in the behavior found in traditional C
+ compilers.
+
+ * Programs that use preprocessing directives in the middle of macro
+ arguments do not work with GCC. For example, a program like this
+ will not work:
+
+ foobar (
+ #define luser
+ hack)
+
+ ISO C does not permit such a construct. It would make sense to
+ support it when `-traditional' is used, but it is too much work to
+ implement.
+
+ * K&R compilers allow comments to cross over an inclusion boundary
+ (i.e. started in an include file and ended in the including file).
+ I think this would be quite ugly and can't imagine it could be
+ needed.
+
+ * Declarations of external variables and functions within a block
+ apply only to the block containing the declaration. In other
+ words, they have the same scope as any other declaration in the
+ same place.
+
+ In some other C compilers, a `extern' declaration affects all the
+ rest of the file even if it happens within a block.
+
+ The `-traditional' option directs GCC to treat all `extern'
+ declarations as global, like traditional compilers.
+
+ * In traditional C, you can combine `long', etc., with a typedef
+ name, as shown here:
+
+ typedef int foo;
+ typedef long foo bar;
+
+ In ISO C, this is not allowed: `long' and other type modifiers
+ require an explicit `int'. Because this criterion is expressed by
+ Bison grammar rules rather than C code, the `-traditional' flag
+ cannot alter it.
+
+ * PCC allows typedef names to be used as function parameters. The
+ difficulty described immediately above applies here too.
+
+ * When in `-traditional' mode, GCC allows the following erroneous
+ pair of declarations to appear together in a given scope:
+
+ typedef int foo;
+ typedef foo foo;
+
+ * GCC treats all characters of identifiers as significant, even when
+ in `-traditional' mode. According to K&R-1 (2.2), "No more than
+ the first eight characters are significant, although more may be
+ used.". Also according to K&R-1 (2.2), "An identifier is a
+ sequence of letters and digits; the first character must be a
+ letter. The underscore _ counts as a letter.", but GCC also
+ allows dollar signs in identifiers.
+
+ * PCC allows whitespace in the middle of compound assignment
+ operators such as `+='. GCC, following the ISO standard, does not
+ allow this. The difficulty described immediately above applies
+ here too.
+
+ * GCC complains about unterminated character constants inside of
+ preprocessing conditionals that fail. Some programs have English
+ comments enclosed in conditionals that are guaranteed to fail; if
+ these comments contain apostrophes, GCC will probably report an
+ error. For example, this code would produce an error:
+
+ #if 0
+ You can't expect this to work.
+ #endif
+
+ The best solution to such a problem is to put the text into an
+ actual C comment delimited by `/*...*/'. However, `-traditional'
+ suppresses these error messages.
+
+ * Many user programs contain the declaration `long time ();'. In the
+ past, the system header files on many systems did not actually
+ declare `time', so it did not matter what type your program
+ declared it to return. But in systems with ISO C headers, `time'
+ is declared to return `time_t', and if that is not the same as
+ `long', then `long time ();' is erroneous.
+
+ The solution is to change your program to use appropriate system
+ headers (`' on systems with ISO C headers) and not to
+ declare `time' if the system header files declare it, or failing
+ that to use `time_t' as the return type of `time'.
+
+ * When compiling functions that return `float', PCC converts it to a
+ double. GCC actually returns a `float'. If you are concerned
+ with PCC compatibility, you should declare your functions to return
+ `double'; you might as well say what you mean.
+
+ * When compiling functions that return structures or unions, GCC
+ output code normally uses a method different from that used on most
+ versions of Unix. As a result, code compiled with GCC cannot call
+ a structure-returning function compiled with PCC, and vice versa.
+
+ The method used by GCC is as follows: a structure or union which is
+ 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or
+ union with any other size is stored into an address supplied by
+ the caller (usually in a special, fixed register, but on some
+ machines it is passed on the stack). The machine-description
+ macros `STRUCT_VALUE' and `STRUCT_INCOMING_VALUE' tell GCC where
+ to pass this address.
+
+ By contrast, PCC on most target machines returns structures and
+ unions of any size by copying the data into an area of static
+ storage, and then returning the address of that storage as if it
+ were a pointer value. The caller must copy the data from that
+ memory area to the place where the value is wanted. GCC does not
+ use this method because it is slower and nonreentrant.
+
+ On some newer machines, PCC uses a reentrant convention for all
+ structure and union returning. GCC on most of these machines uses
+ a compatible convention when returning structures and unions in
+ memory, but still returns small structures and unions in registers.
+
+ You can tell GCC to use a compatible convention for all structure
+ and union returning with the option `-fpcc-struct-return'.
+
+ * GCC complains about program fragments such as `0x74ae-0x4000'
+ which appear to be two hexadecimal constants separated by the minus
+ operator. Actually, this string is a single "preprocessing token".
+ Each such token must correspond to one token in C. Since this
+ does not, GCC prints an error message. Although it may appear
+ obvious that what is meant is an operator and two values, the ISO
+ C standard specifically requires that this be treated as erroneous.
+
+ A "preprocessing token" is a "preprocessing number" if it begins
+ with a digit and is followed by letters, underscores, digits,
+ periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
+ character sequences. (In strict C89 mode, the sequences `p+',
+ `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
+
+ To make the above program fragment valid, place whitespace in
+ front of the minus sign. This whitespace will end the
+ preprocessing number.
+
+
+ File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble
+
+ Fixed Header Files
+ ==================
+
+ GCC needs to install corrected versions of some system header files.
+ This is because most target systems have some header files that won't
+ work with GCC unless they are changed. Some have bugs, some are
+ incompatible with ISO C, and some depend on special features of other
+ compilers.
+
+ Installing GCC automatically creates and installs the fixed header
+ files, by running a program called `fixincludes' (or for certain
+ targets an alternative such as `fixinc.svr4'). Normally, you don't
+ need to pay attention to this. But there are cases where it doesn't do
+ the right thing automatically.
+
+ * If you update the system's header files, such as by installing a
+ new system version, the fixed header files of GCC are not
+ automatically updated. The easiest way to update them is to
+ reinstall GCC. (If you want to be clever, look in the makefile
+ and you can find a shortcut.)
+
+ * On some systems, in particular SunOS 4, header file directories
+ contain machine-specific symbolic links in certain places. This
+ makes it possible to share most of the header files among hosts
+ running the same version of SunOS 4 on different machine models.
+
+ The programs that fix the header files do not understand this
+ special way of using symbolic links; therefore, the directory of
+ fixed header files is good only for the machine model used to
+ build it.
+
+ In SunOS 4, only programs that look inside the kernel will notice
+ the difference between machine models. Therefore, for most
+ purposes, you need not be concerned about this.
+
+ It is possible to make separate sets of fixed header files for the
+ different machine models, and arrange a structure of symbolic
+ links so as to use the proper set, but you'll have to do this by
+ hand.
+
+ * On Lynxos, GCC by default does not fix the header files. This is
+ because bugs in the shell cause the `fixincludes' script to fail.
+
+ This means you will encounter problems due to bugs in the system
+ header files. It may be no comfort that they aren't GCC's fault,
+ but it does mean that there's nothing for us to do about them.
+
+
+ File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble
+
+ Standard Libraries
+ ==================
+
+ GCC by itself attempts to be a conforming freestanding
+ implementation. *Note Language Standards Supported by GCC: Standards,
+ for details of what this means. Beyond the library facilities required
+ of such an implementation, the rest of the C library is supplied by the
+ vendor of the operating system. If that C library doesn't conform to
+ the C standards, then your programs might get warnings (especially when
+ using `-Wall') that you don't expect.
+
+ For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
+ while the C standard says that `sprintf' returns an `int'. The
+ `fixincludes' program could make the prototype for this function match
+ the Standard, but that would be wrong, since the function will still
+ return `char *'.
+
+ If you need a Standard compliant library, then you need to find one,
+ as GCC does not provide one. The GNU C library (called `glibc')
+ provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for
+ GNU/Linux and HURD-based GNU systems; no recent version of it supports
+ other systems, though some very old versions did. Version 2.2 of the
+ GNU C library includes nearly complete C99 support. You could also ask
+ your operating system vendor if newer libraries are available.
+
+
File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble
Disappointments and Misunderstandings
*************** address given above.
*** 721,1136 ****
Please read `http://gcc.gnu.org/bugs.html' for additional and/or
more up-to-date bug reporting instructions before you post a bug report.
-
- File: gcc.info, Node: Bug Reporting, Next: gccbug, Prev: Bug Lists, Up: Bugs
-
- How to Report Bugs
- ==================
-
- The fundamental principle of reporting bugs usefully is this:
- *report all the facts*. If you are not sure whether to state a fact or
- leave it out, state it!
-
- Often people omit facts because they think they know what causes the
- problem and they conclude that some details don't matter. Thus, you
- might assume that the name of the variable you use in an example does
- not matter. Well, probably it doesn't, but one cannot be sure.
- Perhaps the bug is a stray memory reference which happens to fetch from
- the location where that name is stored in memory; perhaps, if the name
- were different, the contents of that location would fool the compiler
- into doing the right thing despite the bug. Play it safe and give a
- specific, complete example. That is the easiest thing for you to do,
- and the most helpful.
-
- Keep in mind that the purpose of a bug report is to enable someone to
- fix the bug if it is not known. It isn't very important what happens if
- the bug is already known. Therefore, always write your bug reports on
- the assumption that the bug is not known.
-
- Sometimes people give a few sketchy facts and ask, "Does this ring a
- bell?" This cannot help us fix a bug, so it is basically useless. We
- respond by asking for enough details to enable us to investigate. You
- might as well expedite matters by sending them to begin with.
-
- Try to make your bug report self-contained. If we have to ask you
- for more information, it is best if you include all the previous
- information in your response, as well as the information that was
- missing.
-
- Please report each bug in a separate message. This makes it easier
- for us to track which bugs have been fixed and to forward your bugs
- reports to the appropriate maintainer.
-
- To enable someone to investigate the bug, you should include all
- these things:
-
- * The version of GCC. You can get this by running it with the `-v'
- option.
-
- Without this, we won't know whether there is any point in looking
- for the bug in the current version of GCC.
-
- * A complete input file that will reproduce the bug. If the bug is
- in the C preprocessor, send a source file and any header files
- that it requires. If the bug is in the compiler proper (`cc1'),
- send the preprocessor output generated by adding `-save-temps' to
- the compilation command (*note Debugging Options::). When you do
- this, use the same `-I', `-D' or `-U' options that you used in
- actual compilation. Then send the INPUT.i or INPUT.ii files
- generated.
-
- A single statement is not enough of an example. In order to
- compile it, it must be embedded in a complete file of compiler
- input; and the bug might depend on the details of how this is done.
-
- Without a real example one can compile, all anyone can do about
- your bug report is wish you luck. It would be futile to try to
- guess how to provoke the bug. For example, bugs in register
- allocation and reloading frequently depend on every little detail
- of the function they happen in.
-
- Even if the input file that fails comes from a GNU program, you
- should still send the complete test case. Don't ask the GCC
- maintainers to do the extra work of obtaining the program in
- question--they are all overworked as it is. Also, the problem may
- depend on what is in the header files on your system; it is
- unreliable for the GCC maintainers to try the problem with the
- header files available to them. By sending CPP output, you can
- eliminate this source of uncertainty and save us a certain
- percentage of wild goose chases.
-
- * The command arguments you gave GCC to compile that example and
- observe the bug. For example, did you use `-O'? To guarantee you
- won't omit something important, list all the options.
-
- If we were to try to guess the arguments, we would probably guess
- wrong and then we would not encounter the bug.
-
- * The type of machine you are using, and the operating system name
- and version number.
-
- * The operands you gave to the `configure' command when you installed
- the compiler.
-
- * A complete list of any modifications you have made to the compiler
- source. (We don't promise to investigate the bug unless it
- happens in an unmodified compiler. But if you've made
- modifications and don't tell us, then you are sending us on a wild
- goose chase.)
-
- Be precise about these changes. A description in English is not
- enough--send a context diff for them.
-
- Adding files of your own (such as a machine description for a
- machine we don't support) is a modification of the compiler source.
-
- * Details of any other deviations from the standard procedure for
- installing GCC.
-
- * A description of what behavior you observe that you believe is
- incorrect. For example, "The compiler gets a fatal signal," or,
- "The assembler instruction at line 208 in the output is incorrect."
-
- Of course, if the bug is that the compiler gets a fatal signal,
- then one can't miss it. But if the bug is incorrect output, the
- maintainer might not notice unless it is glaringly wrong. None of
- us has time to study all the assembler code from a 50-line C
- program just on the chance that one instruction might be wrong.
- We need _you_ to do this part!
-
- Even if the problem you experience is a fatal signal, you should
- still say so explicitly. Suppose something strange is going on,
- such as, your copy of the compiler is out of synch, or you have
- encountered a bug in the C library on your system. (This has
- happened!) Your copy might crash and the copy here would not. If
- you said to expect a crash, then when the compiler here fails to
- crash, we would know that the bug was not happening. If you don't
- say to expect a crash, then we would not know whether the bug was
- happening. We would not be able to draw any conclusion from our
- observations.
-
- If the problem is a diagnostic when compiling GCC with some other
- compiler, say whether it is a warning or an error.
-
- Often the observed symptom is incorrect output when your program
- is run. Sad to say, this is not enough information unless the
- program is short and simple. None of us has time to study a large
- program to figure out how it would work if compiled correctly,
- much less which line of it was compiled wrong. So you will have
- to do that. Tell us which source line it is, and what incorrect
- result happens when that line is executed. A person who
- understands the program can find this as easily as finding a bug
- in the program itself.
-
- * If you send examples of assembler code output from GCC, please use
- `-g' when you make them. The debugging information includes
- source line numbers which are essential for correlating the output
- with the input.
-
- * If you wish to mention something in the GCC source, refer to it by
- context, not by line number.
-
- The line numbers in the development sources don't match those in
- your sources. Your line numbers would convey no useful
- information to the maintainers.
-
- * Additional information from a debugger might enable someone to
- find a problem on a machine which he does not have available.
- However, you need to think when you collect this information if
- you want it to have any chance of being useful.
-
- For example, many people send just a backtrace, but that is never
- useful by itself. A simple backtrace with arguments conveys little
- about GCC because the compiler is largely data-driven; the same
- functions are called over and over for different RTL insns, doing
- different things depending on the details of the insn.
-
- Most of the arguments listed in the backtrace are useless because
- they are pointers to RTL list structure. The numeric values of the
- pointers, which the debugger prints in the backtrace, have no
- significance whatever; all that matters is the contents of the
- objects they point to (and most of the contents are other such
- pointers).
-
- In addition, most compiler passes consist of one or more loops that
- scan the RTL insn sequence. The most vital piece of information
- about such a loop--which insn it has reached--is usually in a
- local variable, not in an argument.
-
- What you need to provide in addition to a backtrace are the values
- of the local variables for several stack frames up. When a local
- variable or an argument is an RTX, first print its value and then
- use the GDB command `pr' to print the RTL expression that it points
- to. (If GDB doesn't run on your machine, use your debugger to call
- the function `debug_rtx' with the RTX as an argument.) In
- general, whenever a variable is a pointer, its value is no use
- without the data it points to.
-
- Here are some things that are not necessary:
-
- * A description of the envelope of the bug.
-
- Often people who encounter a bug spend a lot of time investigating
- which changes to the input file will make the bug go away and which
- changes will not affect it.
-
- This is often time consuming and not very useful, because the way
- we will find the bug is by running a single example under the
- debugger with breakpoints, not by pure deduction from a series of
- examples. You might as well save your time for something else.
-
- Of course, if you can find a simpler example to report _instead_ of
- the original one, that is a convenience. Errors in the output
- will be easier to spot, running under the debugger will take less
- time, etc. Most GCC bugs involve just one function, so the most
- straightforward way to simplify an example is to delete all the
- function definitions except the one where the bug occurs. Those
- earlier in the file may be replaced by external declarations if
- the crucial function depends on them. (Exception: inline
- functions may affect compilation of functions defined later in the
- file.)
-
- However, simplification is not vital; if you don't want to do this,
- report the bug anyway and send the entire test case you used.
-
- * In particular, some people insert conditionals `#ifdef BUG' around
- a statement which, if removed, makes the bug not happen. These
- are just clutter; we won't pay any attention to them anyway.
- Besides, you should send us cpp output, and that can't have
- conditionals.
-
- * A patch for the bug.
-
- A patch for the bug is useful if it is a good one. But don't omit
- the necessary information, such as the test case, on the
- assumption that a patch is all we need. We might see problems
- with your patch and decide to fix the problem another way, or we
- might not understand it at all.
-
- Sometimes with a program as complicated as GCC it is very hard to
- construct an example that will make the program follow a certain
- path through the code. If you don't send the example, we won't be
- able to construct one, so we won't be able to verify that the bug
- is fixed.
-
- And if we can't understand what bug you are trying to fix, or why
- your patch should be an improvement, we won't install it. A test
- case will help us to understand.
-
- See `http://gcc.gnu.org/contribute.html' for guidelines on how to
- make it easy for us to understand and install your patches.
-
- * A guess about what the bug is or what it depends on.
-
- Such guesses are usually wrong. Even I can't guess right about
- such things without first using the debugger to find the facts.
-
- * A core dump file.
-
- We have no way of examining a core dump for your type of machine
- unless we have an identical system--and if we do have one, we
- should be able to reproduce the crash ourselves.
-
-
- File: gcc.info, Node: gccbug, Prev: Bug Reporting, Up: Bugs
-
- The gccbug script
- =================
-
- To simplify creation of bug reports, and to allow better tracking of
- reports, we use the GNATS bug tracking system. Part of that system is
- the `gccbug' script. This is a Unix shell script, so you need a shell
- to run it. It is normally installed in the same directory where `gcc'
- is installed.
-
- The gccbug script is derived from send-pr, *note Creating new
- Problem Reports: (send-pr)using send-pr.. When invoked, it starts a
- text editor so you can fill out the various fields of the report. When
- the you quit the editor, the report is automatically send to the bug
- reporting address.
-
- A number of fields in this bug report form are specific to GCC, and
- are explained at `http://gcc.gnu.org/gnats.html'.
-
-
- File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top
-
- How To Get Help with GCC
- ************************
-
- If you need help installing, using or changing GCC, there are two
- ways to find it:
-
- * Send a message to a suitable network mailing list. First try
- (for help installing or using GCC), and if
- that brings no response, try . For help changing
- GCC, ask . If you think you have found a bug in
- GCC, please report it following the instructions at *note Bug
- Reporting::.
-
- * Look in the service directory for someone who might help you for a
- fee. The service directory is found at
- `http://www.gnu.org/prep/service.html'.
-
-
- File: gcc.info, Node: Contributing, Next: VMS, Prev: Service, Up: Top
-
- Contributing to GCC Development
- *******************************
-
- If you would like to help pretest GCC releases to assure they work
- well, our current development sources are available by CVS (see
- `http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
- available for FTP; see `http://gcc.gnu.org/snapshots.html'.
-
- If you would like to work on improvements to GCC, please read the
- advice at these URLs:
-
- `http://gcc.gnu.org/contribute.html'
- `http://gcc.gnu.org/contributewhy.html'
-
- for information on how to make useful contributions and avoid
- duplication of effort. Suggested projects are listed at
- `http://gcc.gnu.org/projects/'.
-
-
- File: gcc.info, Node: VMS, Next: Funding, Prev: Contributing, Up: Top
-
- Using GCC on VMS
- ****************
-
- Here is how to use GCC on VMS.
-
- * Menu:
-
- * Include Files and VMS:: Where the preprocessor looks for the include files.
- * Global Declarations:: How to do globaldef, globalref and globalvalue with
- GCC.
- * VMS Misc:: Misc information.
-
-
- File: gcc.info, Node: Include Files and VMS, Next: Global Declarations, Up: VMS
-
- Include Files and VMS
- =====================
-
- Due to the differences between the filesystems of Unix and VMS, GCC
- attempts to translate file names in `#include' into names that VMS will
- understand. The basic strategy is to prepend a prefix to the
- specification of the include file, convert the whole filename to a VMS
- filename, and then try to open the file. GCC tries various prefixes
- one by one until one of them succeeds:
-
- 1. The first prefix is the `GNU_CC_INCLUDE:' logical name: this is
- where GNU C header files are traditionally stored. If you wish to
- store header files in non-standard locations, then you can assign
- the logical `GNU_CC_INCLUDE' to be a search list, where each
- element of the list is suitable for use with a rooted logical.
-
- 2. The next prefix tried is `SYS$SYSROOT:[SYSLIB.]'. This is where
- VAX-C header files are traditionally stored.
-
- 3. If the include file specification by itself is a valid VMS
- filename, the preprocessor then uses this name with no prefix in
- an attempt to open the include file.
-
- 4. If the file specification is not a valid VMS filename (i.e. does
- not contain a device or a directory specifier, and contains a `/'
- character), the preprocessor tries to convert it from Unix syntax
- to VMS syntax.
-
- Conversion works like this: the first directory name becomes a
- device, and the rest of the directories are converted into
- VMS-format directory names. For example, the name `X11/foobar.h'
- is translated to `X11:[000000]foobar.h' or `X11:foobar.h',
- whichever one can be opened. This strategy allows you to assign a
- logical name to point to the actual location of the header files.
-
- 5. If none of these strategies succeeds, the `#include' fails.
-
- Include directives of the form:
-
- #include foobar
-
- are a common source of incompatibility between VAX-C and GCC. VAX-C
- treats this much like a standard `#include ' directive. That
- is incompatible with the ISO C behavior implemented by GCC: to expand
- the name `foobar' as a macro. Macro expansion should eventually yield
- one of the two standard formats for `#include':
-
- #include "FILE"
- #include
-
- If you have this problem, the best solution is to modify the source
- to convert the `#include' directives to one of the two standard forms.
- That will work with either compiler. If you want a quick and dirty fix,
- define the file names as macros with the proper expansion, like this:
-
- #define stdio
-
- This will work, as long as the name doesn't conflict with anything else
- in the program.
-
- Another source of incompatibility is that VAX-C assumes that:
-
- #include "foobar"
-
- is actually asking for the file `foobar.h'. GCC does not make this
- assumption, and instead takes what you ask for literally; it tries to
- read the file `foobar'. The best way to avoid this problem is to
- always specify the desired file extension in your include directives.
-
- GCC for VMS is distributed with a set of include files that is
- sufficient to compile most general purpose programs. Even though the
- GCC distribution does not contain header files to define constants and
- structures for some VMS system-specific functions, there is no reason
- why you cannot use GCC with any of these functions. You first may have
- to generate or create header files, either by using the public domain
- utility `UNSDL' (which can be found on a DECUS tape), or by extracting
- the relevant modules from one of the system macro libraries, and using
- an editor to construct a C header file.
-
- A `#include' file name cannot contain a DECNET node name. The
- preprocessor reports an I/O error if you attempt to use a node name,
- whether explicitly, or implicitly via a logical name.
-
--- 1017,1019 ----
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-2 gcc-3.2.1/gcc/doc/gcc.info-2
*** gcc-3.2/gcc/doc/gcc.info-2 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-2 Tue Nov 19 18:17:12 2002
*************** from C, such as C++ and Objective-C) tha
*** 335,345 ****
single precision, use this option. This option has no effect
when compiling with ISO or GNU C conventions (the default).
- `-fshort-wchar'
- Override the underlying type for `wchar_t' to be `short unsigned
- int' instead of the default for the target. This option is useful
- for building programs to run under WINE.
-
File: gcc.info, Node: C++ Dialect Options, Next: Objective-C Dialect Options, Prev: C Dialect Options, Up: Invoking GCC
--- 335,340 ----
*************** have meanings only for C++ programs:
*** 559,564 ****
--- 554,601 ----
that these functions will have linkage like inline functions; they
just won't be inlined by default.
+ `-Wabi (C++ only)'
+ Warn when G++ generates code that is probably not compatible with
+ the vendor-neutral C++ ABI. Although an effort has been made to
+ warn about all such cases, there are probably some cases that are
+ not warned about, even though G++ is generating incompatible code.
+ There may also be cases where warnings are emitted even though
+ the code that is generated will be compatible.
+
+ You should rewrite your code to avoid these warnings if you are
+ concerned about the fact that code generated by G++ may not be
+ binary compatible with code generated by other compilers.
+
+ The known incompatibilites at this point include:
+
+ * Incorrect handling of tail-padding for bit-fields. G++ may
+ attempt to pack data into the same byte as a base class. For
+ example:
+
+ struct A { virtual void f(); int f1 : 1; };
+ struct B : public A { int f2 : 1; };
+
+ In this case, G++ will place `B::f2' into the same byte
+ as`A::f1'; other compilers will not. You can avoid this
+ problem by explicitly padding `A' so that its size is a
+ multiple of the byte size on your platform; that will cause
+ G++ and other compilers to layout `B' identically.
+
+ * Incorrect handling of tail-padding for virtual bases. G++
+ does not use tail padding when laying out virtual bases. For
+ example:
+
+ struct A { virtual void f(); char c1; };
+ struct B { B(); char c2; };
+ struct C : public A, public virtual B {};
+
+ In this case, G++ will not place `B' into the tail-padding for
+ `A'; other compilers will. You can avoid this problem by
+ explicitly padding `A' so that its size is a multiple of its
+ alignment (ignoring virtual base classes); that will cause
+ G++ and other compilers to layout `C' identically.
+
+
`-Wctor-dtor-privacy (C++ only)'
Warn when a class seems unusable, because all the constructors or
destructors in a class are private and the class has no friends or
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-20 gcc-3.2.1/gcc/doc/gcc.info-20
*** gcc-3.2/gcc/doc/gcc.info-20 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-20 Tue Nov 19 18:17:12 2002
*************** software. Copies published by the Free
*** 33,38 ****
--- 33,451 ----
funds for GNU development.
+ File: gcc.info, Node: Bug Reporting, Next: gccbug, Prev: Bug Lists, Up: Bugs
+
+ How to Report Bugs
+ ==================
+
+ The fundamental principle of reporting bugs usefully is this:
+ *report all the facts*. If you are not sure whether to state a fact or
+ leave it out, state it!
+
+ Often people omit facts because they think they know what causes the
+ problem and they conclude that some details don't matter. Thus, you
+ might assume that the name of the variable you use in an example does
+ not matter. Well, probably it doesn't, but one cannot be sure.
+ Perhaps the bug is a stray memory reference which happens to fetch from
+ the location where that name is stored in memory; perhaps, if the name
+ were different, the contents of that location would fool the compiler
+ into doing the right thing despite the bug. Play it safe and give a
+ specific, complete example. That is the easiest thing for you to do,
+ and the most helpful.
+
+ Keep in mind that the purpose of a bug report is to enable someone to
+ fix the bug if it is not known. It isn't very important what happens if
+ the bug is already known. Therefore, always write your bug reports on
+ the assumption that the bug is not known.
+
+ Sometimes people give a few sketchy facts and ask, "Does this ring a
+ bell?" This cannot help us fix a bug, so it is basically useless. We
+ respond by asking for enough details to enable us to investigate. You
+ might as well expedite matters by sending them to begin with.
+
+ Try to make your bug report self-contained. If we have to ask you
+ for more information, it is best if you include all the previous
+ information in your response, as well as the information that was
+ missing.
+
+ Please report each bug in a separate message. This makes it easier
+ for us to track which bugs have been fixed and to forward your bugs
+ reports to the appropriate maintainer.
+
+ To enable someone to investigate the bug, you should include all
+ these things:
+
+ * The version of GCC. You can get this by running it with the `-v'
+ option.
+
+ Without this, we won't know whether there is any point in looking
+ for the bug in the current version of GCC.
+
+ * A complete input file that will reproduce the bug. If the bug is
+ in the C preprocessor, send a source file and any header files
+ that it requires. If the bug is in the compiler proper (`cc1'),
+ send the preprocessor output generated by adding `-save-temps' to
+ the compilation command (*note Debugging Options::). When you do
+ this, use the same `-I', `-D' or `-U' options that you used in
+ actual compilation. Then send the INPUT.i or INPUT.ii files
+ generated.
+
+ A single statement is not enough of an example. In order to
+ compile it, it must be embedded in a complete file of compiler
+ input; and the bug might depend on the details of how this is done.
+
+ Without a real example one can compile, all anyone can do about
+ your bug report is wish you luck. It would be futile to try to
+ guess how to provoke the bug. For example, bugs in register
+ allocation and reloading frequently depend on every little detail
+ of the function they happen in.
+
+ Even if the input file that fails comes from a GNU program, you
+ should still send the complete test case. Don't ask the GCC
+ maintainers to do the extra work of obtaining the program in
+ question--they are all overworked as it is. Also, the problem may
+ depend on what is in the header files on your system; it is
+ unreliable for the GCC maintainers to try the problem with the
+ header files available to them. By sending CPP output, you can
+ eliminate this source of uncertainty and save us a certain
+ percentage of wild goose chases.
+
+ * The command arguments you gave GCC to compile that example and
+ observe the bug. For example, did you use `-O'? To guarantee you
+ won't omit something important, list all the options.
+
+ If we were to try to guess the arguments, we would probably guess
+ wrong and then we would not encounter the bug.
+
+ * The type of machine you are using, and the operating system name
+ and version number.
+
+ * The operands you gave to the `configure' command when you installed
+ the compiler.
+
+ * A complete list of any modifications you have made to the compiler
+ source. (We don't promise to investigate the bug unless it
+ happens in an unmodified compiler. But if you've made
+ modifications and don't tell us, then you are sending us on a wild
+ goose chase.)
+
+ Be precise about these changes. A description in English is not
+ enough--send a context diff for them.
+
+ Adding files of your own (such as a machine description for a
+ machine we don't support) is a modification of the compiler source.
+
+ * Details of any other deviations from the standard procedure for
+ installing GCC.
+
+ * A description of what behavior you observe that you believe is
+ incorrect. For example, "The compiler gets a fatal signal," or,
+ "The assembler instruction at line 208 in the output is incorrect."
+
+ Of course, if the bug is that the compiler gets a fatal signal,
+ then one can't miss it. But if the bug is incorrect output, the
+ maintainer might not notice unless it is glaringly wrong. None of
+ us has time to study all the assembler code from a 50-line C
+ program just on the chance that one instruction might be wrong.
+ We need _you_ to do this part!
+
+ Even if the problem you experience is a fatal signal, you should
+ still say so explicitly. Suppose something strange is going on,
+ such as, your copy of the compiler is out of synch, or you have
+ encountered a bug in the C library on your system. (This has
+ happened!) Your copy might crash and the copy here would not. If
+ you said to expect a crash, then when the compiler here fails to
+ crash, we would know that the bug was not happening. If you don't
+ say to expect a crash, then we would not know whether the bug was
+ happening. We would not be able to draw any conclusion from our
+ observations.
+
+ If the problem is a diagnostic when compiling GCC with some other
+ compiler, say whether it is a warning or an error.
+
+ Often the observed symptom is incorrect output when your program
+ is run. Sad to say, this is not enough information unless the
+ program is short and simple. None of us has time to study a large
+ program to figure out how it would work if compiled correctly,
+ much less which line of it was compiled wrong. So you will have
+ to do that. Tell us which source line it is, and what incorrect
+ result happens when that line is executed. A person who
+ understands the program can find this as easily as finding a bug
+ in the program itself.
+
+ * If you send examples of assembler code output from GCC, please use
+ `-g' when you make them. The debugging information includes
+ source line numbers which are essential for correlating the output
+ with the input.
+
+ * If you wish to mention something in the GCC source, refer to it by
+ context, not by line number.
+
+ The line numbers in the development sources don't match those in
+ your sources. Your line numbers would convey no useful
+ information to the maintainers.
+
+ * Additional information from a debugger might enable someone to
+ find a problem on a machine which he does not have available.
+ However, you need to think when you collect this information if
+ you want it to have any chance of being useful.
+
+ For example, many people send just a backtrace, but that is never
+ useful by itself. A simple backtrace with arguments conveys little
+ about GCC because the compiler is largely data-driven; the same
+ functions are called over and over for different RTL insns, doing
+ different things depending on the details of the insn.
+
+ Most of the arguments listed in the backtrace are useless because
+ they are pointers to RTL list structure. The numeric values of the
+ pointers, which the debugger prints in the backtrace, have no
+ significance whatever; all that matters is the contents of the
+ objects they point to (and most of the contents are other such
+ pointers).
+
+ In addition, most compiler passes consist of one or more loops that
+ scan the RTL insn sequence. The most vital piece of information
+ about such a loop--which insn it has reached--is usually in a
+ local variable, not in an argument.
+
+ What you need to provide in addition to a backtrace are the values
+ of the local variables for several stack frames up. When a local
+ variable or an argument is an RTX, first print its value and then
+ use the GDB command `pr' to print the RTL expression that it points
+ to. (If GDB doesn't run on your machine, use your debugger to call
+ the function `debug_rtx' with the RTX as an argument.) In
+ general, whenever a variable is a pointer, its value is no use
+ without the data it points to.
+
+ Here are some things that are not necessary:
+
+ * A description of the envelope of the bug.
+
+ Often people who encounter a bug spend a lot of time investigating
+ which changes to the input file will make the bug go away and which
+ changes will not affect it.
+
+ This is often time consuming and not very useful, because the way
+ we will find the bug is by running a single example under the
+ debugger with breakpoints, not by pure deduction from a series of
+ examples. You might as well save your time for something else.
+
+ Of course, if you can find a simpler example to report _instead_ of
+ the original one, that is a convenience. Errors in the output
+ will be easier to spot, running under the debugger will take less
+ time, etc. Most GCC bugs involve just one function, so the most
+ straightforward way to simplify an example is to delete all the
+ function definitions except the one where the bug occurs. Those
+ earlier in the file may be replaced by external declarations if
+ the crucial function depends on them. (Exception: inline
+ functions may affect compilation of functions defined later in the
+ file.)
+
+ However, simplification is not vital; if you don't want to do this,
+ report the bug anyway and send the entire test case you used.
+
+ * In particular, some people insert conditionals `#ifdef BUG' around
+ a statement which, if removed, makes the bug not happen. These
+ are just clutter; we won't pay any attention to them anyway.
+ Besides, you should send us cpp output, and that can't have
+ conditionals.
+
+ * A patch for the bug.
+
+ A patch for the bug is useful if it is a good one. But don't omit
+ the necessary information, such as the test case, on the
+ assumption that a patch is all we need. We might see problems
+ with your patch and decide to fix the problem another way, or we
+ might not understand it at all.
+
+ Sometimes with a program as complicated as GCC it is very hard to
+ construct an example that will make the program follow a certain
+ path through the code. If you don't send the example, we won't be
+ able to construct one, so we won't be able to verify that the bug
+ is fixed.
+
+ And if we can't understand what bug you are trying to fix, or why
+ your patch should be an improvement, we won't install it. A test
+ case will help us to understand.
+
+ See `http://gcc.gnu.org/contribute.html' for guidelines on how to
+ make it easy for us to understand and install your patches.
+
+ * A guess about what the bug is or what it depends on.
+
+ Such guesses are usually wrong. Even I can't guess right about
+ such things without first using the debugger to find the facts.
+
+ * A core dump file.
+
+ We have no way of examining a core dump for your type of machine
+ unless we have an identical system--and if we do have one, we
+ should be able to reproduce the crash ourselves.
+
+
+ File: gcc.info, Node: gccbug, Prev: Bug Reporting, Up: Bugs
+
+ The gccbug script
+ =================
+
+ To simplify creation of bug reports, and to allow better tracking of
+ reports, we use the GNATS bug tracking system. Part of that system is
+ the `gccbug' script. This is a Unix shell script, so you need a shell
+ to run it. It is normally installed in the same directory where `gcc'
+ is installed.
+
+ The gccbug script is derived from send-pr, *note Creating new
+ Problem Reports: (send-pr)using send-pr.. When invoked, it starts a
+ text editor so you can fill out the various fields of the report. When
+ the you quit the editor, the report is automatically send to the bug
+ reporting address.
+
+ A number of fields in this bug report form are specific to GCC, and
+ are explained at `http://gcc.gnu.org/gnats.html'.
+
+
+ File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top
+
+ How To Get Help with GCC
+ ************************
+
+ If you need help installing, using or changing GCC, there are two
+ ways to find it:
+
+ * Send a message to a suitable network mailing list. First try
+ (for help installing or using GCC), and if
+ that brings no response, try . For help changing
+ GCC, ask . If you think you have found a bug in
+ GCC, please report it following the instructions at *note Bug
+ Reporting::.
+
+ * Look in the service directory for someone who might help you for a
+ fee. The service directory is found at
+ `http://www.gnu.org/prep/service.html'.
+
+
+ File: gcc.info, Node: Contributing, Next: VMS, Prev: Service, Up: Top
+
+ Contributing to GCC Development
+ *******************************
+
+ If you would like to help pretest GCC releases to assure they work
+ well, our current development sources are available by CVS (see
+ `http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
+ available for FTP; see `http://gcc.gnu.org/snapshots.html'.
+
+ If you would like to work on improvements to GCC, please read the
+ advice at these URLs:
+
+ `http://gcc.gnu.org/contribute.html'
+ `http://gcc.gnu.org/contributewhy.html'
+
+ for information on how to make useful contributions and avoid
+ duplication of effort. Suggested projects are listed at
+ `http://gcc.gnu.org/projects/'.
+
+
+ File: gcc.info, Node: VMS, Next: Funding, Prev: Contributing, Up: Top
+
+ Using GCC on VMS
+ ****************
+
+ Here is how to use GCC on VMS.
+
+ * Menu:
+
+ * Include Files and VMS:: Where the preprocessor looks for the include files.
+ * Global Declarations:: How to do globaldef, globalref and globalvalue with
+ GCC.
+ * VMS Misc:: Misc information.
+
+
+ File: gcc.info, Node: Include Files and VMS, Next: Global Declarations, Up: VMS
+
+ Include Files and VMS
+ =====================
+
+ Due to the differences between the filesystems of Unix and VMS, GCC
+ attempts to translate file names in `#include' into names that VMS will
+ understand. The basic strategy is to prepend a prefix to the
+ specification of the include file, convert the whole filename to a VMS
+ filename, and then try to open the file. GCC tries various prefixes
+ one by one until one of them succeeds:
+
+ 1. The first prefix is the `GNU_CC_INCLUDE:' logical name: this is
+ where GNU C header files are traditionally stored. If you wish to
+ store header files in non-standard locations, then you can assign
+ the logical `GNU_CC_INCLUDE' to be a search list, where each
+ element of the list is suitable for use with a rooted logical.
+
+ 2. The next prefix tried is `SYS$SYSROOT:[SYSLIB.]'. This is where
+ VAX-C header files are traditionally stored.
+
+ 3. If the include file specification by itself is a valid VMS
+ filename, the preprocessor then uses this name with no prefix in
+ an attempt to open the include file.
+
+ 4. If the file specification is not a valid VMS filename (i.e. does
+ not contain a device or a directory specifier, and contains a `/'
+ character), the preprocessor tries to convert it from Unix syntax
+ to VMS syntax.
+
+ Conversion works like this: the first directory name becomes a
+ device, and the rest of the directories are converted into
+ VMS-format directory names. For example, the name `X11/foobar.h'
+ is translated to `X11:[000000]foobar.h' or `X11:foobar.h',
+ whichever one can be opened. This strategy allows you to assign a
+ logical name to point to the actual location of the header files.
+
+ 5. If none of these strategies succeeds, the `#include' fails.
+
+ Include directives of the form:
+
+ #include foobar
+
+ are a common source of incompatibility between VAX-C and GCC. VAX-C
+ treats this much like a standard `#include ' directive. That
+ is incompatible with the ISO C behavior implemented by GCC: to expand
+ the name `foobar' as a macro. Macro expansion should eventually yield
+ one of the two standard formats for `#include':
+
+ #include "FILE"
+ #include
+
+ If you have this problem, the best solution is to modify the source
+ to convert the `#include' directives to one of the two standard forms.
+ That will work with either compiler. If you want a quick and dirty fix,
+ define the file names as macros with the proper expansion, like this:
+
+ #define stdio
+
+ This will work, as long as the name doesn't conflict with anything else
+ in the program.
+
+ Another source of incompatibility is that VAX-C assumes that:
+
+ #include "foobar"
+
+ is actually asking for the file `foobar.h'. GCC does not make this
+ assumption, and instead takes what you ask for literally; it tries to
+ read the file `foobar'. The best way to avoid this problem is to
+ always specify the desired file extension in your include directives.
+
+ GCC for VMS is distributed with a set of include files that is
+ sufficient to compile most general purpose programs. Even though the
+ GCC distribution does not contain header files to define constants and
+ structures for some VMS system-specific functions, there is no reason
+ why you cannot use GCC with any of these functions. You first may have
+ to generate or create header files, either by using the public domain
+ utility `UNSDL' (which can be found on a DECUS tape), or by extracting
+ the relevant modules from one of the system macro libraries, and using
+ an editor to construct a C header file.
+
+ A `#include' file name cannot contain a DECNET node name. The
+ preprocessor reports an I/O error if you attempt to use a node name,
+ whether explicitly, or implicitly via a logical name.
+
+
File: gcc.info, Node: Global Declarations, Next: VMS Misc, Prev: Include Files and VMS, Up: VMS
Global Declarations and VMS
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-21 gcc-3.2.1/gcc/doc/gcc.info-21
*** gcc-3.2/gcc/doc/gcc.info-21 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-21 Tue Nov 19 18:17:12 2002
*************** been. Any omissions in this list are ac
*** 430,444 ****
contributions are not listed. Please keep this list in alphabetical
order.
- Some projects operating under the GCC project maintain their own list
- of contributors, such as the C++ library
- (http://gcc.gnu.org/libstdc++/).
-
* Analog Devices helped implement the support for complex data types
and iterators.
! * John David Anglin for improvements to libstdc++-v3 and the HP-UX
! port.
* James van Artsdalen wrote the code that makes efficient use of the
Intel 80387 register stack.
--- 430,440 ----
contributions are not listed. Please keep this list in alphabetical
order.
* Analog Devices helped implement the support for complex data types
and iterators.
! * John David Anglin for threading-related fixes and improvements to
! libstdc++-v3, and the HP-UX port.
* James van Artsdalen wrote the code that makes efficient use of the
Intel 80387 register stack.
*************** of contributors, such as the C++ library
*** 448,461 ****
* Gerald Baumgartner added the signature extension to the C++ front
end.
* Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.
* Per Bothner for his direction via the steering committee and
various improvements to our infrastructure for supporting new
! languages. Chill and Java front end implementations. Initial
implementations of cpplib, fix-header, config.guess, libio, and
! past C++ library (libg++) maintainer.
* Devon Bowen helped port GCC to the Tahoe.
--- 444,473 ----
* Gerald Baumgartner added the signature extension to the C++ front
end.
+ * Godmar Back for his Java improvements and encouragement.
+
+ * Scott Bambrough for help porting the Java compiler.
+
+ * Jon Beniston for his Win32 port of Java.
+
+ * Geoff Berry for his Java object serialization work and various
+ patches.
+
+ * Eric Blake for helping to make GCJ and libgcj conform to the
+ specifications.
+
+ * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
+ other Java work.
+
* Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.
* Per Bothner for his direction via the steering committee and
various improvements to our infrastructure for supporting new
! languages. Chill front end implementation. Initial
implementations of cpplib, fix-header, config.guess, libio, and
! past C++ library (libg++) maintainer. Dreaming up, designing and
! implementing much of GCJ.
* Devon Bowen helped port GCC to the Tahoe.
*************** of contributors, such as the C++ library
*** 469,494 ****
* Herman A.J. ten Brugge for various fixes.
* Joe Buck for his direction via the steering committee.
* Craig Burley for leadership of the Fortran effort.
! * Paolo Carlini for his work on libstdc++-v3.
* John Carr for his alias work, SPARC hacking, infrastructure
improvements, previous contributions to the steering committee,
loop optimizations, etc.
! * Steve Chamberlain wrote the support for the Hitachi SH and H8
! processors and the PicoJava processor.
* Scott Christley for his Objective-C contributions.
* Branko Cibej for more warning contributions.
* Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
other random hacking.
* Ralf Corsepius for SH testing and minor bugfixing.
* Stan Cox for care and feeding of the x86 port and lots of behind
--- 481,523 ----
* Herman A.J. ten Brugge for various fixes.
+ * Joerg Brunsmann for Java compiler hacking and help with the GCJ
+ FAQ.
+
* Joe Buck for his direction via the steering committee.
* Craig Burley for leadership of the Fortran effort.
! * Stephan Buys for contributing Doxygen notes for libstdc++.
!
! * Paolo Carlini for libstdc++ work: lots of efficiency improvements
! to the string class, hard detective work on the frustrating
! localization issues, and keeping up with the problem reports.
* John Carr for his alias work, SPARC hacking, infrastructure
improvements, previous contributions to the steering committee,
loop optimizations, etc.
! * Steve Chamberlain for support for the Hitachi SH and H8 processors
! and the PicoJava processor, and for GCJ config fixes.
!
! * Glenn Chambers for help with the GCJ FAQ.
!
! * John-Marc Chandonia for various libgcj patches.
* Scott Christley for his Objective-C contributions.
+ * Eric Christopher for his Java porting help and clean-ups.
+
* Branko Cibej for more warning contributions.
+ * The GNU Classpath project for all of their merged runtime code.
+
* Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
other random hacking.
+ * Michael Cook for libstdc++ cleanup patches to reduce warnings.
+
* Ralf Corsepius for SH testing and minor bugfixing.
* Stan Cox for care and feeding of the x86 port and lots of behind
*************** of contributors, such as the C++ library
*** 501,519 ****
* Dario Dariol contributed the four varieties of sample programs
that print a copy of their source.
! * Ulrich Drepper for his work on the C++ runtime libraries, glibc,
! testing of GCC using glibc, ISO C99 support, CFG dumping support,
! etc.
* Richard Earnshaw for his ongoing work with the ARM.
* David Edelsohn for his direction via the steering committee,
! ongoing work with the RS6000/PowerPC port, and help cleaning up
! Haifa loop changes.
* Paul Eggert for random hacking all over GCC.
! * Mark Elbrecht for various DJGPP improvements.
* Ben Elliston for his work to move the Objective-C runtime into its
own subdirectory and for his work on autoconf.
--- 530,574 ----
* Dario Dariol contributed the four varieties of sample programs
that print a copy of their source.
! * Russell Davidson for fstream and stringstream fixes in libstdc++.
!
! * Mo DeJong for GCJ and libgcj bug fixes.
!
! * Gabriel Dos Reis for contributions to g++, contributions and
! maintenance of GCC diagnostics infrastructure, libstdc++-v3,
! including valarray<>, complex<>, maintaining the numerics library
! (including that pesky :-) and keeping up-to-date anything
! to do with numbers.
!
! * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
! ISO C99 support, CFG dumping support, etc., plus support of the
! C++ runtime libraries including for all kinds of C interface
! issues, contributing and maintaining complex<>, sanity checking
! and disbursement, configuration architecture, libio maintenance,
! and early math work.
* Richard Earnshaw for his ongoing work with the ARM.
* David Edelsohn for his direction via the steering committee,
! ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
! loop changes, and for doing the entire AIX port of libstdc++ with
! his bare hands.
!
! * Kevin Ediger for the floating point formatting of num_put::do_put
! in libstdc++.
!
! * Phil Edwards for libstdc++ work including configuration hackery,
! documentation maintainer, chief breaker of the web pages, the
! occasional iostream bugfix, and work on shared library symbol
! versioning.
* Paul Eggert for random hacking all over GCC.
! * Mark Elbrecht for various DJGPP improvements, and for libstdc++
! configuration support for locales and fstream-related fixes.
!
! * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
! iostreams.
* Ben Elliston for his work to move the Objective-C runtime into its
own subdirectory and for his work on autoconf.
*************** of contributors, such as the C++ library
*** 525,535 ****
--- 580,595 ----
* Fred Fish for BeOS support and Ada fixes.
+ * Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ.
+
* Peter Gerwinski for various bugfixes and the Pascal front end.
* Kaveh Ghazi for his direction via the steering committee and
amazing work to make `-W -Wall' useful.
+ * John Gilmore for a donation to the FSF earmarked improving GNU
+ Java.
+
* Judy Goldberg for c++ contributions.
* Torbjorn Granlund for various fixes and the c-torture testsuite,
*************** of contributors, such as the C++ library
*** 539,544 ****
--- 599,607 ----
* Anthony Green for his `-Os' contributions and Java front end work.
+ * Stu Grossman for gdb hacking, allowing GCJ developers to debug our
+ code.
+
* Michael K. Gschwind contributed the port to the PDP-11.
* Ron Guilmette implemented the `protoize' and `unprotoize' tools,
*************** of contributors, such as the C++ library
*** 549,555 ****
* Bruno Haible for improvements in the runtime overhead for EH, new
warnings and assorted bugfixes.
! * Andrew Haley for his Java work.
* Chris Hanson assisted in making GCC work on HP-UX for the 9000
series 300.
--- 612,618 ----
* Bruno Haible for improvements in the runtime overhead for EH, new
warnings and assorted bugfixes.
! * Andrew Haley for his amazing Java compiler and library efforts.
* Chris Hanson assisted in making GCC work on HP-UX for the 9000
series 300.
*************** of contributors, such as the C++ library
*** 584,605 ****
* Andreas Jaeger for various fixes to the MIPS port
* Jakub Jelinek for his SPARC work and sibling call optimizations as
! well as lots of bug fixes and test cases.
* Janis Johnson for ia64 testing and fixes and for her quality
improvement sidetracks.
* J. Kean Johnston for OpenServer support.
* Klaus Kaempf for his ongoing work to make alpha-vms a viable
target.
* David Kashtan of SRI adapted GCC to VMS.
* Geoffrey Keating for his ongoing work to make the PPC work for
GNU/Linux and his automatic regression tester.
! * Brendan Kehoe for his ongoing work with g++.
* Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
MIL-STD-1750A.
--- 647,679 ----
* Andreas Jaeger for various fixes to the MIPS port
* Jakub Jelinek for his SPARC work and sibling call optimizations as
! well as lots of bug fixes and test cases, and for improving the
! Java build system.
* Janis Johnson for ia64 testing and fixes and for her quality
improvement sidetracks.
* J. Kean Johnston for OpenServer support.
+ * Tim Josling for the sample language treelang based originally on
+ Richard Kenner's ""toy" language".
+
+ * Nicolai Josuttis for additional libstdc++ documentation.
+
* Klaus Kaempf for his ongoing work to make alpha-vms a viable
target.
* David Kashtan of SRI adapted GCC to VMS.
+ * Ryszard Kabatek for many, many libstdc++ bugfixes and
+ optimizations of strings, especially member functions, and for
+ auto_ptr fixes.
+
* Geoffrey Keating for his ongoing work to make the PPC work for
GNU/Linux and his automatic regression tester.
! * Brendan Kehoe for his ongoing work with g++ and for a lot of early
! work in just about every part of libstdc++.
* Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
MIL-STD-1750A.
*************** of contributors, such as the C++ library
*** 615,622 ****
scheduling. Richard Kenner was also the head maintainer of GCC
for several years.
! * Mumit Khan for various contributions to the cygwin and mingw32
! ports and maintaining binary releases for Windows hosts.
* Robin Kirkham for cpu32 support.
--- 689,697 ----
scheduling. Richard Kenner was also the head maintainer of GCC
for several years.
! * Mumit Khan for various contributions to the Cygwin and Mingw32
! ports and maintaining binary releases for Windows hosts, and for
! massive libstdc++ porting work to Cygwin/Mingw32.
* Robin Kirkham for cpu32 support.
*************** of contributors, such as the C++ library
*** 646,656 ****
* Kriang Lerdsuwanakij for improvements to demangler and various c++
fixes.
! * Warren Levy major work on libgcj (Java Runtime Library) and random
! work on the Java front end.
* Alain Lichnewsky ported GCC to the MIPS CPU.
* Robert Lipe for OpenServer support, new testsuites, testing, etc.
* Weiwen Liu for testing and various bugfixes.
--- 721,734 ----
* Kriang Lerdsuwanakij for improvements to demangler and various c++
fixes.
! * Warren Levy for tremendous work on libgcj (Java Runtime Library)
! and random work on the Java front end.
* Alain Lichnewsky ported GCC to the MIPS CPU.
+ * Oskar Liljeblad for hacking on AWT and his many Java bug reports
+ and patches.
+
* Robert Lipe for OpenServer support, new testsuites, testing, etc.
* Weiwen Liu for testing and various bugfixes.
*************** of contributors, such as the C++ library
*** 659,665 ****
runtime libraries.
* Martin von Lo"wis for internal consistency checking infrastructure,
! and various C++ improvements including namespace support.
* H.J. Lu for his previous contributions to the steering committee,
many x86 bug reports, prototype patches, and keeping the GNU/Linux
--- 737,744 ----
runtime libraries.
* Martin von Lo"wis for internal consistency checking infrastructure,
! various C++ improvements including namespace support, and tons of
! assistance with libstdc++/compiler merges.
* H.J. Lu for his previous contributions to the steering committee,
many x86 bug reports, prototype patches, and keeping the GNU/Linux
*************** of contributors, such as the C++ library
*** 672,682 ****
optimizer, etc.
* Vladimir Makarov for hacking some ugly i960 problems, PowerPC
! hacking improvements to compile-time performance and overall
! knowledge and direction in the area of instruction scheduling.
* Bob Manson for his behind the scenes work on dejagnu.
* Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.
--- 751,772 ----
optimizer, etc.
* Vladimir Makarov for hacking some ugly i960 problems, PowerPC
! hacking improvements to compile-time performance, overall
! knowledge and direction in the area of instruction scheduling, and
! design and implementation of the automaton based instruction
! scheduler.
* Bob Manson for his behind the scenes work on dejagnu.
+ * Philip Martin for lots of libstdc++ string and vector iterator
+ fixes and improvements, and string clean up and testsuites.
+
+ * All of the Mauve project contributors, for Java test code.
+
+ * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
+
+ * Adam Megacz for his work on the Win32 port of GCJ.
+
* Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.
*************** of contributors, such as the C++ library
*** 689,694 ****
--- 779,787 ----
* Gary Miller ported GCC to Charles River Data Systems machines.
+ * Alfred Minarik for libstdc++ string and ios bugfixes, and turning
+ the entire libstdc++ testsuite namespace-compatible.
+
* Mark Mitchell for his direction via the steering committee,
mountains of C++ work, load/store hoisting out of loops, alias
analysis improvements, ISO C `restrict' support, and serving as
*************** of contributors, such as the C++ library
*** 701,712 ****
* Jason Molenda for major help in the care and feeding of all the
services on the gcc.gnu.org (formerly egcs.cygnus.com)
! machine--mail, web services, ftp services, etc etc.
* Catherine Moore for fixing various ugly problems we have sent her
way, including the haifa bug which was killing the Alpha & PowerPC
Linux kernels.
* David Mosberger-Tang for various Alpha improvements.
* Stephen Moshier contributed the floating point emulator that
--- 794,809 ----
* Jason Molenda for major help in the care and feeding of all the
services on the gcc.gnu.org (formerly egcs.cygnus.com)
! machine--mail, web services, ftp services, etc etc. Doing all
! this work on scrap paper and the backs of envelopes would have
! been... difficult.
* Catherine Moore for fixing various ugly problems we have sent her
way, including the haifa bug which was killing the Alpha & PowerPC
Linux kernels.
+ * Mike Moreton for his various Java patches.
+
* David Mosberger-Tang for various Alpha improvements.
* Stephen Moshier contributed the floating point emulator that
*************** of contributors, such as the C++ library
*** 721,727 ****
and ISO C99 support, and continuous emphasis on (and contributions
to) documentation.
! * Nathan Myers for his work on libstdc++-v3.
* NeXT, Inc. donated the front end that supports the Objective-C
language.
--- 818,830 ----
and ISO C99 support, and continuous emphasis on (and contributions
to) documentation.
! * Nathan Myers for his work on libstdc++-v3: architecture and
! authorship through the first three snapshots, including
! implementation of locale infrastructure, string, shadow C headers,
! and the initial project documentation (DESIGN, CHECKLIST, and so
! forth). Later, more work on MT-safe string and shadow headers.
!
! * Felix Natter for documentation on porting libstdc++.
* NeXT, Inc. donated the front end that supports the Objective-C
language.
*************** of contributors, such as the C++ library
*** 737,752 ****
related infrastructure improvements.
* Alexandre Oliva for various build infrastructure improvements,
! scripts and amazing testing work.
* Melissa O'Neill for various NeXT fixes.
* Rainer Orth for random MIPS work, including improvements to our o32
! ABI support, improvements to dejagnu's MIPS support, etc.
* Paul Petersen wrote the machine description for the Alliant FX/8.
! * Alexandre Petit-Bianco for his Java work.
* Matthias Pfaller for major improvements to the NS32k port.
--- 840,858 ----
related infrastructure improvements.
* Alexandre Oliva for various build infrastructure improvements,
! scripts and amazing testing work, including keeping libtool issues
! sane and happy.
* Melissa O'Neill for various NeXT fixes.
* Rainer Orth for random MIPS work, including improvements to our o32
! ABI support, improvements to dejagnu's MIPS support, Java
! configuration clean-ups and porting work, etc.
* Paul Petersen wrote the machine description for the Alliant FX/8.
! * Alexandre Petit-Bianco for implementing much of the Java compiler
! and continued Java maintainership.
* Matthias Pfaller for major improvements to the NS32k port.
*************** of contributors, such as the C++ library
*** 760,776 ****
* Ken Raeburn for various improvements to checker, MIPS ports and
various cleanups in the compiler.
* David Reese of Sun Microsystems contributed to the Solaris on
PowerPC port.
- * Gabriel Dos Reis for contributions and maintenance of libstdc++-v3,
- including valarray implementation and limits support.
-
* Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
! * Loren J. Rittle for improvements to libstdc++-v3 and the FreeBSD
! port.
* Craig Rodrigues for processing tons of bug reports.
--- 866,883 ----
* Ken Raeburn for various improvements to checker, MIPS ports and
various cleanups in the compiler.
+ * Rolf W. Rasmussen for hacking on AWT.
+
* David Reese of Sun Microsystems contributed to the Solaris on
PowerPC port.
* Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
! * Loren J. Rittle for improvements to libstdc++-v3 including the
! FreeBSD port, threading fixes, thread-related configury changes,
! critical threading documentation, and solutions to really tricky
! I/O problems.
* Craig Rodrigues for processing tons of bug reports.
*************** of contributors, such as the C++ library
*** 780,790 ****
--- 887,902 ----
* Paul Rubin wrote most of the preprocessor.
+ * Chip Salzenberg for libstdc++ patches and improvements to locales,
+ traits, Makefiles, libio, libtool hackery, and "long long" support.
+
* Juha Sarlin for improvements to the H8 code generator.
* Greg Satz assisted in making GCC work on HP-UX for the 9000 series
300.
+ * Bradley Schatz for his work on the GCJ FAQ.
+
* Peter Schauer wrote the code to allow debugging to work on the
Alpha.
*************** of contributors, such as the C++ library
*** 794,799 ****
--- 906,917 ----
work in the reload pass as well a serving as release manager for
GCC 2.95.3.
+ * Peter Schmid for constant testing of libstdc++ - especially
+ application testing, going above and beyond what was requested for
+ the release criteria - and libstdc++ header file tweaks.
+
+ * Jason Schroeder for jcf-dump patches.
+
* Andreas Schwab for his work on the m68k port.
* Joel Sherrill for his direction via the steering committee, RTEMS
*************** of contributors, such as the C++ library
*** 805,810 ****
--- 923,932 ----
some code which handles the parse tree and RTL data structures,
constant folding and help with the original VAX & m68k ports.
+ * Kenny Simpson for prompting libstdc++ fixes due to defect reports
+ from the LWG (thereby keeping us in line with updates from the
+ ISO).
+
* Franz Sirl for his ongoing work with making the PPC port stable
for linux.
*************** of contributors, such as the C++ library
*** 814,820 ****
* Randy Smith finished the Sun FPA support.
! * Scott Snyder for various fixes.
* Richard Stallman, for writing the original gcc and launching the
GNU project.
--- 936,945 ----
* Randy Smith finished the Sun FPA support.
! * Scott Snyder for queue, iterator, istream, and string fixes and
! libstdc++ testsuite entries.
!
! * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
* Richard Stallman, for writing the original gcc and launching the
GNU project.
*************** of contributors, such as the C++ library
*** 829,837 ****
--- 954,966 ----
* Graham Stott for various infrastructure improvements.
+ * John Stracke for his Java HTTP protocol fixes.
+
* Mike Stump for his Elxsi port, g++ contributions over the years
and more recently his vxworks contributions
+ * Jeff Sturm for Java porting help, bug fixes, and encouragement.
+
* Shigeya Suzuki for this fixes for the bsdi platforms.
* Ian Lance Taylor for his mips16 work, general configury hacking,
*************** of contributors, such as the C++ library
*** 844,879 ****
* Philipp Thomas for random bugfixes throughout the compiler
* Kresten Krab Thorup wrote the run time support for the Objective-C
! language.
* Michael Tiemann for random bugfixes, the first instruction
scheduler, initial C++ support, function integration, NS32k, SPARC
and M88k machine description work, delay slot scheduling.
* Teemu Torma for thread safe exception handling support.
* Leonard Tower wrote parts of the parser, RTL generator, and RTL
definitions, and of the VAX machine description.
! * Tom Tromey for internationalization support and his Java work.
* Lassi Tuura for improvements to config.guess to determine HP
processor types.
* Todd Vierling for contributions for NetBSD ports.
* Dean Wakerley for converting the install documentation from HTML
to texinfo in time for GCC 3.0.
* Krister Walfridsson for random bugfixes.
* John Wehle for various improvements for the x86 code generator,
related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.
* Zack Weinberg for major work on cpplib and various other bugfixes.
* Dale Wiles helped port GCC to the Tahoe.
* Bob Wilson from Tensilica, Inc. for the Xtensa port.
--- 973,1032 ----
* Philipp Thomas for random bugfixes throughout the compiler
+ * Jason Thorpe for thread support in libstdc++ on NetBSD.
+
* Kresten Krab Thorup wrote the run time support for the Objective-C
! language and the fantastic Java bytecode interpreter.
* Michael Tiemann for random bugfixes, the first instruction
scheduler, initial C++ support, function integration, NS32k, SPARC
and M88k machine description work, delay slot scheduling.
+ * Andreas Tobler for his work porting libgcj to Darwin.
+
* Teemu Torma for thread safe exception handling support.
* Leonard Tower wrote parts of the parser, RTL generator, and RTL
definitions, and of the VAX machine description.
! * Tom Tromey for internationalization support and for his many Java
! contributions and libgcj maintainership.
* Lassi Tuura for improvements to config.guess to determine HP
processor types.
+ * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
+
+ * Brent Verner for work with the libstdc++ cshadow files and their
+ associated configure steps.
+
* Todd Vierling for contributions for NetBSD ports.
+ * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
+ guidance.
+
* Dean Wakerley for converting the install documentation from HTML
to texinfo in time for GCC 3.0.
* Krister Walfridsson for random bugfixes.
+ * Stephen M. Webb for time and effort on making libstdc++ shadow
+ files work with the tricky Solaris 8+ headers, and for pushing the
+ build-time header tree.
+
* John Wehle for various improvements for the x86 code generator,
related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.
* Zack Weinberg for major work on cpplib and various other bugfixes.
+ * Matt Welsh for help with Linux Threads support in GCJ.
+
+ * Urban Widmark for help fixing java.io.
+
+ * Mark Wielaard for new Java library code and his work integrating
+ with Classpath.
+
* Dale Wiles helped port GCC to the Tahoe.
* Bob Wilson from Tensilica, Inc. for the Xtensa port.
*************** of contributors, such as the C++ library
*** 891,932 ****
--- 1044,1151 ----
* Kevin Zachmann helped ported GCC to the Tahoe.
+ * Gilles Zunino for help porting Java to Irix.
+
We'd also like to thank the folks who have contributed time and
energy in testing GCC:
+ * Michael Abd-El-Malek
+
+ * Thomas Arend
+
+ * Bonzo Armstrong
+
+ * Steven Ashe
+
+ * Chris Baldwin
+
* David Billinghurst
+ * Jim Blandy
+
+ * Stephane Bortzmeyer
+
* Horst von Brand
+ * Frank Braun
+
* Rodney Brown
* Joe Buck
* Craig Burley
+ * Sidney Cadot
+
+ * Bradford Castalia
+
+ * Ralph Doncaster
+
* Ulrich Drepper
* David Edelsohn
+ * Richard Emberson
+
+ * Levente Farkas
+
+ * Graham Fawcett
+
+ * Robert A. French
+
+ * Jo"rgen Freyh
+
+ * Mark K. Gardner
+
+ * Charles-Antoine Gauthier
+
* Yung Shing Gene
* Kaveh Ghazi
+ * David Gilbert
+
+ * Simon Gornall
+
+ * Fred Gray
+
+ * John Griffin
+
+ * Patrik Hagglund
+
+ * Phil Hargett
+
+ * Amancio Hasty
+
+ * Bryan W. Headley
+
* Kate Hedstrom
* Richard Henderson
+ * Kevin B. Hendricks
+
* Manfred Hollstein
* Kamil Iskra
+ * Joep Jansen
+
* Christian Joensson
+ * David Kidd
+
+ * Tobias Kuipers
+
+ * Anand Krishnaswamy
+
* Jeff Law
* Robert Lipe
+ * llewelly
+
* Damon Love
* Dave Love
*************** energy in testing GCC:
*** 941,960 ****
--- 1160,1203 ----
* Martin Knoblauch
+ * Jesse Macnish
+
* David Miller
* Toon Moene
+ * Stefan Morrell
+
+ * Anon A. Mous
+
* Matthias Mueller
+ * Pekka Nikander
+
* Alexandre Oliva
+ * Jon Olson
+
+ * Magnus Persson
+
+ * Chris Pollard
+
* Richard Polton
* David Rees
+ * Paul Reilly
+
+ * Tom Reilly
+
* Loren J. Rittle
+ * Torsten Rueger
+
+ * Danny Sadinoff
+
+ * Marc Schifer
+
* Peter Schmid
* David Schuler
*************** energy in testing GCC:
*** 963,972 ****
--- 1206,1225 ----
* Franz Sirl
+ * Tim Souder
+
* Mike Stump
+ * Adam Sulmicki
+
+ * George Talbot
+
+ * Gregory Warnes
+
* Carlo Wood
+ * David E. Young
+
* And many others
And finally we'd like to thank everyone who uses the compiler,
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-22 gcc-3.2.1/gcc/doc/gcc.info-22
*** gcc-3.2/gcc/doc/gcc.info-22 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-22 Tue Nov 19 18:17:12 2002
*************** look up both forms.
*** 126,131 ****
--- 126,132 ----
* fargument-alias: Code Gen Options.
* fargument-noalias: Code Gen Options.
* fargument-noalias-global: Code Gen Options.
+ * fbounds-check: Optimize Options.
* fbranch-probabilities: Optimize Options.
* fcall-saved <1>: Interoperation.
* fcall-saved: Code Gen Options.
*************** look up both forms.
*** 183,188 ****
--- 184,190 ----
* fnext-runtime: Objective-C Dialect Options.
* fno-access-control: C++ Dialect Options.
* fno-asm: C Dialect Options.
+ * fno-branch-count-reg: Optimize Options.
* fno-builtin <1>: Other Builtins.
* fno-builtin: C Dialect Options.
* fno-common <1>: Variable Attributes.
*************** look up both forms.
*** 214,219 ****
--- 216,223 ----
* fno-peephole: Optimize Options.
* fno-peephole2: Optimize Options.
* fno-rtti: C++ Dialect Options.
+ * fno-sched-interblock: Optimize Options.
+ * fno-sched-spec: Optimize Options.
* fno-show-column: Preprocessor Options.
* fno-signed-bitfields: C Dialect Options.
* fno-stack-limit: Code Gen Options.
*************** look up both forms.
*** 243,248 ****
--- 247,255 ----
* frepo: C++ Dialect Options.
* frerun-cse-after-loop: Optimize Options.
* frerun-loop-opt: Optimize Options.
+ * fsched-spec-load: Optimize Options.
+ * fsched-spec-load-dangerous: Optimize Options.
+ * fsched-verbose: Debugging Options.
* fschedule-insns: Optimize Options.
* fschedule-insns2: Optimize Options.
* fshared-data: Code Gen Options.
*************** look up both forms.
*** 250,256 ****
* fshort-enums <1>: Non-bugs.
* fshort-enums <2>: Type Attributes.
* fshort-enums: Code Gen Options.
! * fshort-wchar: C Dialect Options.
* fsigned-bitfields <1>: Non-bugs.
* fsigned-bitfields: C Dialect Options.
* fsigned-char: C Dialect Options.
--- 257,263 ----
* fshort-enums <1>: Non-bugs.
* fshort-enums <2>: Type Attributes.
* fshort-enums: Code Gen Options.
! * fshort-wchar: Code Gen Options.
* fsigned-bitfields <1>: Non-bugs.
* fsigned-bitfields: C Dialect Options.
* fsigned-char: C Dialect Options.
*************** look up both forms.
*** 478,486 ****
--- 485,497 ----
* mcheck-zero-division: M88K Options.
* mcix: DEC Alpha Options.
* mcmodel=embmedany: SPARC Options.
+ * mcmodel=kernel: i386 and x86-64 Options.
+ * mcmodel=large: i386 and x86-64 Options.
* mcmodel=medany: SPARC Options.
+ * mcmodel=medium: i386 and x86-64 Options.
* mcmodel=medlow: SPARC Options.
* mcmodel=medmid: SPARC Options.
+ * mcmodel=small: i386 and x86-64 Options.
* mcode-align: Intel 960 Options.
* mcode-model=large: M32R/D Options.
* mcode-model=medium: M32R/D Options.
*************** look up both forms.
*** 1103,1114 ****
* V: Target Options.
* v <1>: Preprocessor Options.
* v: Overall Options.
! * version: Preprocessor Options.
* W: Incompatibilities.
* w: Preprocessor Options.
* W: Warning Options.
* w: Warning Options.
* Wa: Assembler Options.
* Waggregate-return: Warning Options.
* Wall <1>: Standard Libraries.
* Wall <2>: Preprocessor Options.
--- 1114,1127 ----
* V: Target Options.
* v <1>: Preprocessor Options.
* v: Overall Options.
! * version <1>: Preprocessor Options.
! * version: Overall Options.
* W: Incompatibilities.
* w: Preprocessor Options.
* W: Warning Options.
* w: Warning Options.
* Wa: Assembler Options.
+ * Wabi: C++ Dialect Options.
* Waggregate-return: Warning Options.
* Wall <1>: Standard Libraries.
* Wall <2>: Preprocessor Options.
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-23 gcc-3.2.1/gcc/doc/gcc.info-23
*** gcc-3.2/gcc/doc/gcc.info-23 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-23 Tue Nov 19 18:17:12 2002
*************** Index
*** 74,80 ****
* ?: side effect: Conditionals.
* \a: C Dialect Options.
* \x: C Dialect Options.
! * _ in variables in macros: Naming Types.
* __builtin_apply: Constructing Calls.
* __builtin_apply_args: Constructing Calls.
* __builtin_choose_expr: Other Builtins.
--- 74,80 ----
* ?: side effect: Conditionals.
* \a: C Dialect Options.
* \x: C Dialect Options.
! * _ in variables in macros: Constructing Calls.
* __builtin_apply: Constructing Calls.
* __builtin_apply_args: Constructing Calls.
* __builtin_choose_expr: Other Builtins.
*************** Index
*** 102,107 ****
--- 102,108 ----
* _Complex keyword: Complex.
* _Exit: Other Builtins.
* _exit: Other Builtins.
+ * ABI: Compatibility.
* abort: Other Builtins.
* abs: Other Builtins.
* accessing volatiles: Volatiles.
*************** Index
*** 128,133 ****
--- 129,135 ----
* ANSI support: C Dialect Options.
* ANSI X3.159-1989: Standards.
* apostrophes: Incompatibilities.
+ * application binary interface: Compatibility.
* ARC Options: ARC Options.
* arguments in frame (88k): M88K Options.
* ARM [Annotated C++ Reference Manual]: Backwards Compatibility.
*************** Index
*** 150,155 ****
--- 152,158 ----
* backtrace for bug reports: Bug Reporting.
* Backwards Compatibility: Backwards Compatibility.
* bcmp: Other Builtins.
+ * binary compatibility: Compatibility.
* bit shift overflow (88k): M88K Options.
* bound pointer to member function: Bound member functions.
* bug criteria: Bug Criteria.
*************** Index
*** 433,439 ****
* llabs: Other Builtins.
* load address instruction: Simple Constraints.
* local labels: Local Labels.
! * local variables in macros: Naming Types.
* local variables, specifying registers: Local Reg Vars.
* locale: Environment Variables.
* locale definition: Environment Variables.
--- 436,442 ----
* llabs: Other Builtins.
* load address instruction: Simple Constraints.
* local labels: Local Labels.
! * local variables in macros: Constructing Calls.
* local variables, specifying registers: Local Reg Vars.
* locale: Environment Variables.
* locale definition: Environment Variables.
*************** Index
*** 454,460 ****
* macros containing asm: Extended Asm.
* macros, inline alternative: Inline.
* macros, local labels: Local Labels.
! * macros, local variables in: Naming Types.
* macros, statements in expressions: Statement Exprs.
* macros, types of arguments: Typeof.
* main and the exit status: VMS Misc.
--- 457,463 ----
* macros containing asm: Extended Asm.
* macros, inline alternative: Inline.
* macros, local labels: Local Labels.
! * macros, local variables in: Constructing Calls.
* macros, statements in expressions: Statement Exprs.
* macros, types of arguments: Typeof.
* main and the exit status: VMS Misc.
*************** Index
*** 490,496 ****
* name augmentation: VMS Misc.
* names used in assembler code: Asm Labels.
* naming convention, implementation headers: C++ Interface.
- * naming types: Naming Types.
* nested functions: Nested Functions.
* newlines (escaped): Escaped Newlines.
* no_instrument_function function attribute: Function Attributes.
--- 493,498 ----
*************** Index
*** 689,695 ****
* Ultrix calling convention: Interoperation.
* undefined behavior: Bug Criteria.
* undefined function value: Bug Criteria.
! * underscores in variables in macros: Naming Types.
* underscores, avoiding (88k): M88K Options.
* union: Unnamed Fields.
* union, casting to a: Cast to Union.
--- 691,697 ----
* Ultrix calling convention: Interoperation.
* undefined behavior: Bug Criteria.
* undefined function value: Bug Criteria.
! * underscores in variables in macros: Constructing Calls.
* underscores, avoiding (88k): M88K Options.
* union: Unnamed Fields.
* union, casting to a: Cast to Union.
*************** Index
*** 711,717 ****
* variable-length array scope: Variable Length.
* variable-length arrays: Variable Length.
* variables in specified registers: Explicit Reg Vars.
! * variables, local, in macros: Naming Types.
* variadic macros: Variadic Macros.
* VAX calling convention: Interoperation.
* VAX options: VAX Options.
--- 713,719 ----
* variable-length array scope: Variable Length.
* variable-length arrays: Variable Length.
* variables in specified registers: Explicit Reg Vars.
! * variables, local, in macros: Constructing Calls.
* variadic macros: Variadic Macros.
* VAX calling convention: Interoperation.
* VAX options: VAX Options.
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-4 gcc-3.2.1/gcc/doc/gcc.info-4
*** gcc-3.2/gcc/doc/gcc.info-4 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-4 Tue Nov 19 18:17:12 2002
*************** your program or GCC:
*** 203,221 ****
Optimize Options.).
The other use of `-fprofile-arcs' is for use with `gcov', when it
! is used with the `-ftest-coverage' option. GCC supports two
! methods of determining code coverage: the options that support
! `gcov', and options `-a' and `-ax', which write information to
! text files. The options that support `gcov' do not need to
! instrument every arc in the program, so a program compiled with
! them runs faster than a program compiled with `-a', which adds
! instrumentation code to every basic block in the program. The
! tradeoff: since `gcov' does not have execution counts for all
! branches, it must start with the execution counts for the
! instrumented branches, and then iterate over the program flow
! graph until the entire graph has been solved. Hence, `gcov' runs
! a little more slowly than a program which uses information from
! `-a' and `-ax'.
With `-fprofile-arcs', for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the
--- 203,209 ----
Optimize Options.).
The other use of `-fprofile-arcs' is for use with `gcov', when it
! is used with the `-ftest-coverage' option.
With `-fprofile-arcs', for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the
*************** your program or GCC:
*** 226,236 ****
the block; otherwise, a new basic block must be created to hold
the instrumentation code.
- This option makes it possible to estimate branch probabilities and
- to calculate basic block execution counts. In general, basic block
- execution counts as provided by `-a' do not give enough
- information to estimate all branch probabilities.
-
`-ftest-coverage'
Create data files for the `gcov' code-coverage utility (*note
`gcov': a GCC Test Coverage Program: Gcov.). The data file names
--- 214,219 ----
*************** your program or GCC:
*** 455,460 ****
--- 438,458 ----
`inlined'
Dump after function inlining, to `FILE.inlined'.
+ `-fsched-verbose=N'
+ On targets that use instruction scheduling, this option controls
+ the amount of debugging output the scheduler prints. This
+ information is written to standard error, unless `-dS' or `-dR' is
+ specified, in which case it is output to the usual dump listing
+ file, `.sched' or `.sched2' respectively. However for N greater
+ than nine, the output is always printed to standard error.
+
+ For N greater than zero, `-fsched-verbose' outputs the same
+ information as `-dRS'. For N greater than one, it also output
+ basic block probabilities, detailed ready list information and
+ unit/insn info. For N greater than two, it includes RTL at abort
+ point, control-flow and regions info. And for N over four,
+ `-fsched-verbose' also includes dependence info.
+
`-fpretend-float'
When running a cross-compiler, pretend that the target machine
uses the same floating point format as the host machine. This
*************** other form by either removing `no-' or a
*** 728,733 ****
--- 726,739 ----
variable to have distinct location, so using this option will
result in non-conforming behavior.
+ `-fno-branch-count-reg'
+ Do not use "decrement and branch" instructions on a count register,
+ but instead generate a sequence of instructions that decrement a
+ register, compare it against zero, then branch based upon the
+ result. This option is only meaningful on architectures that
+ support such instructions, which include x86, PowerPC, IA-64 and
+ S/390.
+
`-fno-function-cse'
Do not put function addresses in registers; make each instruction
that calls a constant function contain the function's address
*************** other form by either removing `no-' or a
*** 788,793 ****
--- 794,806 ----
The default is `-ftrapping-math'.
+ `-fbounds-check'
+ For front-ends that support it, generate additional code to check
+ that indices used to access arrays are within the declared range.
+ This is currenly only supported by the Java and Fortran 77
+ front-ends, where this option defaults to true and false
+ respectively.
+
The following options control specific optimizations. The `-O2'
option turns on all of these optimizations except `-funroll-loops' and
`-funroll-all-loops'. On most machines, the `-O' option turns on the
*************** control them.
*** 900,905 ****
--- 913,938 ----
number of registers and where memory load instructions take more
than one cycle.
+ `-fno-sched-interblock'
+ Don't schedule instructions across basic blocks. This is normally
+ enabled by default when scheduling before register allocation, i.e.
+ with `-fschedule-insns' or at `-O2' or higher.
+
+ `-fno-sched-spec'
+ Don't allow speculative motion of non-load instructions. This is
+ normally enabled by default when scheduling before register
+ allocation, i.e. with `-fschedule-insns' or at `-O2' or higher.
+
+ `-fsched-spec-load'
+ Allow speculative motion of some load instructions. This only
+ makes sense when scheduling before register allocation, i.e. with
+ `-fschedule-insns' or at `-O2' or higher.
+
+ `-fsched-spec-load-dangerous'
+ Allow speculative motion of more load instructions. This only
+ makes sense when scheduling before register allocation, i.e. with
+ `-fschedule-insns' or at `-O2' or higher.
+
`-ffunction-sections'
`-fdata-sections'
Place each function or data item into its own section in the output
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-5 gcc-3.2.1/gcc/doc/gcc.info-5
*** gcc-3.2/gcc/doc/gcc.info-5 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-5 Tue Nov 19 18:17:12 2002
*************** libraries and for parts of the compiler:
*** 726,740 ****
system directories come after.
If a standard system include directory, or a directory specified
! with `-isystem', is also specified with `-I', it will be searched
! only in the position requested by `-I'. Also, it will not be
! considered a system include directory. If that directory really
! does contain system headers, there is a good chance that they will
! break. For instance, if GCC's installation procedure edited the
! headers in `/usr/include' to fix bugs, `-I/usr/include' will cause
! the original, buggy headers to be found instead of the corrected
! ones. GCC will issue a warning when a system include directory is
! hidden in this way.
`-I-'
Any directories you specify with `-I' options before the `-I-'
--- 726,739 ----
system directories come after.
If a standard system include directory, or a directory specified
! with `-isystem', is also specified with `-I', the `-I' option will
! be ignored. The directory will still be searched but as a system
! directory at its normal position in the system include chain.
! This is to ensure that GCC's procedure to fix buggy system headers
! and the ordering for the include_next directive are not
! inadvertantly changed. If you really need to change the search
! order for system directories, use the `-nostdinc' and/or
! `-isystem' options.
`-I-'
Any directories you specify with `-I' options before the `-I-'
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.info-8 gcc-3.2.1/gcc/doc/gcc.info-8
*** gcc-3.2/gcc/doc/gcc.info-8 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gcc.info-8 Tue Nov 19 18:17:12 2002
*************** computers:
*** 560,565 ****
--- 560,568 ----
*Note X86 Built-in Functions::, for details of the functions
enabled and disabled by these switches.
+ To have SSE/SSE2 instructions generated automatically from
+ floating-point code, see `-mfpmath=sse'.
+
`-mpush-args'
`-mno-push-args'
Use PUSH operations to store outgoing parameters. This method is
*************** x86-64 processors in 64-bit environments
*** 622,627 ****
--- 625,653 ----
without adjusting the stack pointer. The flag `-mno-red-zone'
disables this red zone.
+ `-mcmodel=small'
+ Generate code for the small code model: the program and its
+ symbols must be linked in the lower 2 GB of the address space.
+ Pointers are 64 bits. Programs can be statically or dynamically
+ linked. This is the default code model.
+
+ `-mcmodel=kernel'
+ Generate code for the kernel code model. The kernel runs in the
+ negative 2 GB of the address space. This model has to be used for
+ Linux kernel code.
+
+ `-mcmodel=medium'
+ Generate code for the medium model: The program is linked in the
+ lower 2 GB of the address space but symbols can be located
+ anywhere in the address space. Programs can be statically or
+ dynamically linked, but building of shared libraries are not
+ supported with the medium model.
+
+ `-mcmodel=large'
+ Generate code for the large model: This model makes no assumptions
+ about addresses and sizes of sections. Currently GCC does not
+ implement this model.
+
File: gcc.info, Node: HPPA Options, Next: Intel 960 Options, Prev: i386 and x86-64 Options, Up: Submodel Options
diff -Nrc3pad gcc-3.2/gcc/doc/gcc.texi gcc-3.2.1/gcc/doc/gcc.texi
*** gcc-3.2/gcc/doc/gcc.texi Sat Apr 20 20:44:36 2002
--- gcc-3.2.1/gcc/doc/gcc.texi Wed Sep 11 16:40:28 2002
*************** Introduction, gccint, GNU Compiler Colle
*** 164,169 ****
--- 164,170 ----
* C Extensions:: GNU extensions to the C language family.
* C++ Extensions:: GNU extensions to the C++ language.
* Objective-C:: GNU Objective-C runtime features.
+ * Compatibility:: Binary Compatibility
* Gcov:: gcov: a GCC test coverage program.
* Trouble:: If you have trouble using GCC.
* Bugs:: How, why and where to report bugs.
*************** Introduction, gccint, GNU Compiler Colle
*** 188,193 ****
--- 189,195 ----
@include invoke.texi
@include extend.texi
@include objc.texi
+ @include compat.texi
@include gcov.texi
@include trouble.texi
@include bugreport.texi
diff -Nrc3pad gcc-3.2/gcc/doc/gccint.info gcc-3.2.1/gcc/doc/gccint.info
*** gcc-3.2/gcc/doc/gccint.info Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gccint.info Tue Nov 19 18:17:12 2002
*************** funds for GNU development.
*** 36,62 ****
Indirect:
gccint.info-1: 1250
gccint.info-2: 48413
! gccint.info-3: 91053
! gccint.info-4: 127284
! gccint.info-5: 172740
! gccint.info-6: 222159
! gccint.info-7: 261135
! gccint.info-8: 301808
! gccint.info-9: 342914
! gccint.info-10: 359504
! gccint.info-11: 406156
! gccint.info-12: 453308
! gccint.info-13: 488376
! gccint.info-14: 537491
! gccint.info-15: 586555
! gccint.info-16: 634602
! gccint.info-17: 675306
! gccint.info-18: 723210
! gccint.info-19: 768286
! gccint.info-20: 815474
! gccint.info-21: 864910
! gccint.info-22: 907171
! gccint.info-23: 926778
Tag Table:
(Indirect)
--- 36,62 ----
Indirect:
gccint.info-1: 1250
gccint.info-2: 48413
! gccint.info-3: 92033
! gccint.info-4: 128264
! gccint.info-5: 173720
! gccint.info-6: 223139
! gccint.info-7: 262115
! gccint.info-8: 302788
! gccint.info-9: 343894
! gccint.info-10: 360484
! gccint.info-11: 407136
! gccint.info-12: 454288
! gccint.info-13: 489356
! gccint.info-14: 538471
! gccint.info-15: 587535
! gccint.info-16: 635582
! gccint.info-17: 676286
! gccint.info-18: 724190
! gccint.info-19: 769266
! gccint.info-20: 816628
! gccint.info-21: 866064
! gccint.info-22: 908325
! gccint.info-23: 935056
Tag Table:
(Indirect)
*************** Node: Front End Directory41548
*** 87,242 ****
Node: Front End Config46059
Node: Back End48413
Node: Test Suites51426
! Node: Test Idioms51879
! Node: C Tests54747
! Node: Passes57472
! Node: Trees81150
! Node: Deficiencies83879
! Node: Tree overview84112
! Node: Macros and Functions88250
! Node: Identifiers88387
! Node: Containers89906
! Node: Types91053
! Node: Scopes103778
! Node: Namespaces104537
! Node: Classes107344
! Node: Declarations111945
! Node: Functions118002
! Node: Function Basics120535
! Node: Function Bodies127284
! Node: Attributes141188
! Node: Expression trees142424
! Node: RTL166815
! Node: RTL Objects168849
! Node: RTL Classes172740
! Node: Accessors177301
! Node: Flags179684
! Node: Machine Modes194589
! Node: Constants203322
! Node: Regs and Memory209288
! Node: Arithmetic222159
! Node: Comparisons228818
! Node: Bit-Fields232941
! Node: Vector Operations234362
! Node: Conversions236139
! Node: RTL Declarations239449
! Node: Side Effects240261
! Node: Incdec256054
! Node: Assembler259610
! Node: Insns261135
! Node: Calls285933
! Node: Sharing288530
! Node: Reading RTL291634
! Node: Machine Desc292620
! Node: Overview294899
! Node: Patterns296941
! Node: Example300374
! Node: RTL Template301808
! Node: Output Template314275
! Node: Output Statement318260
! Node: Constraints322234
! Node: Simple Constraints323168
! Node: Multi-Alternative335532
! Node: Class Preferences338370
! Node: Modifiers339253
! Node: Machine Constraints342914
! Node: Standard Names359504
! Ref: prologue instruction pattern398887
! Ref: epilogue instruction pattern399380
! Node: Pattern Ordering402108
! Node: Dependent Patterns403338
! Node: Jump Patterns406156
! Node: Looping Patterns411906
! Node: Insn Canonicalizations416512
! Node: Expander Definitions420013
! Node: Insn Splitting428148
! Node: Including Patterns437766
! Node: Peephole Definitions439544
! Node: define_peephole440794
! Node: define_peephole2447143
! Node: Insn Attributes450207
! Node: Defining Attributes451293
! Node: Expressions453308
! Node: Tagging Insns459900
! Node: Attr Example464265
! Node: Insn Lengths466644
! Node: Constant Attributes469906
! Node: Delay Slots471069
! Node: Function Units474283
! Node: Conditional Execution479956
! Node: Constant Definitions482815
! Node: Target Macros484396
! Node: Target Structure487085
! Node: Driver488376
! Node: Run-time Target507709
! Node: Per-Function Data515199
! Node: Storage Layout518463
! Node: Type Layout537491
! Node: Escape Sequences547843
! Node: Registers548758
! Node: Register Basics549681
! Node: Allocation Order555285
! Node: Values in Registers556701
! Node: Leaf Functions561536
! Node: Stack Registers564325
! Node: Register Classes565125
! Node: Stack and Calling586059
! Node: Frame Layout586555
! Node: Exception Handling593420
! Node: Stack Checking597922
! Node: Frame Registers601479
! Node: Elimination606930
! Node: Stack Arguments610903
! Node: Register Arguments618492
! Node: Scalar Return630361
! Node: Aggregate Return634602
! Node: Caller Saves638319
! Node: Function Entry639859
! Node: Profiling651948
! Node: Tail Calls654280
! Node: Varargs654871
! Node: Trampolines662549
! Node: Library Calls669784
! Node: Addressing Modes675306
! Node: Condition Code686583
! Node: Costs693909
! Node: Scheduling705668
! Node: Sections711184
! Node: PIC719339
! Node: Assembler Format722140
! Node: File Framework723210
! Node: Data Output728070
! Node: Uninitialized Data735943
! Node: Label Output741343
! Node: Initialization756136
! Node: Macros for Initialization762117
! Node: Instruction Output768286
! Node: Dispatch Tables777326
! Node: Exception Region Output779881
! Node: Alignment Output783234
! Node: Debugging Info787106
! Node: All Debuggers787770
! Node: DBX Options790653
! Node: DBX Hooks796028
! Node: File Names and DBX799677
! Node: SDB and DWARF801653
! Node: VMS Debug805094
! Node: Cross-compilation805642
! Node: Mode Switching812221
! Node: Target Attributes815474
! Node: Misc819311
! Node: Host Config847792
! Node: Fragments853828
! Node: Target Fragment854971
! Node: Host Fragment859466
! Node: Collect2860902
! Node: Header Dirs863459
! Node: Funding864910
! Node: GNU Project867416
! Node: Copying868070
! Node: GNU Free Documentation License887284
! Node: Contributors907171
! Node: Option Index924978
! Node: Index926778
End Tag Table
--- 87,243 ----
Node: Front End Config46059
Node: Back End48413
Node: Test Suites51426
! Node: Test Idioms51926
! Node: C Tests54794
! Node: libgcj Tests57540
! Node: Passes58452
! Node: Trees82130
! Node: Deficiencies84859
! Node: Tree overview85092
! Node: Macros and Functions89230
! Node: Identifiers89367
! Node: Containers90886
! Node: Types92033
! Node: Scopes104758
! Node: Namespaces105517
! Node: Classes108324
! Node: Declarations112925
! Node: Functions118982
! Node: Function Basics121515
! Node: Function Bodies128264
! Node: Attributes142168
! Node: Expression trees143404
! Node: RTL167795
! Node: RTL Objects169829
! Node: RTL Classes173720
! Node: Accessors178281
! Node: Flags180664
! Node: Machine Modes195569
! Node: Constants204302
! Node: Regs and Memory210268
! Node: Arithmetic223139
! Node: Comparisons229798
! Node: Bit-Fields233921
! Node: Vector Operations235342
! Node: Conversions237119
! Node: RTL Declarations240429
! Node: Side Effects241241
! Node: Incdec257034
! Node: Assembler260590
! Node: Insns262115
! Node: Calls286913
! Node: Sharing289510
! Node: Reading RTL292614
! Node: Machine Desc293600
! Node: Overview295879
! Node: Patterns297921
! Node: Example301354
! Node: RTL Template302788
! Node: Output Template315255
! Node: Output Statement319240
! Node: Constraints323214
! Node: Simple Constraints324148
! Node: Multi-Alternative336512
! Node: Class Preferences339350
! Node: Modifiers340233
! Node: Machine Constraints343894
! Node: Standard Names360484
! Ref: prologue instruction pattern399867
! Ref: epilogue instruction pattern400360
! Node: Pattern Ordering403088
! Node: Dependent Patterns404318
! Node: Jump Patterns407136
! Node: Looping Patterns412886
! Node: Insn Canonicalizations417492
! Node: Expander Definitions420993
! Node: Insn Splitting429128
! Node: Including Patterns438746
! Node: Peephole Definitions440524
! Node: define_peephole441774
! Node: define_peephole2448123
! Node: Insn Attributes451187
! Node: Defining Attributes452273
! Node: Expressions454288
! Node: Tagging Insns460880
! Node: Attr Example465245
! Node: Insn Lengths467624
! Node: Constant Attributes470886
! Node: Delay Slots472049
! Node: Function Units475263
! Node: Conditional Execution480936
! Node: Constant Definitions483795
! Node: Target Macros485376
! Node: Target Structure488065
! Node: Driver489356
! Node: Run-time Target508689
! Node: Per-Function Data516179
! Node: Storage Layout519443
! Node: Type Layout538471
! Node: Escape Sequences548823
! Node: Registers549738
! Node: Register Basics550661
! Node: Allocation Order556265
! Node: Values in Registers557681
! Node: Leaf Functions562516
! Node: Stack Registers565305
! Node: Register Classes566105
! Node: Stack and Calling587039
! Node: Frame Layout587535
! Node: Exception Handling594400
! Node: Stack Checking598902
! Node: Frame Registers602459
! Node: Elimination607910
! Node: Stack Arguments611883
! Node: Register Arguments619472
! Node: Scalar Return631341
! Node: Aggregate Return635582
! Node: Caller Saves639299
! Node: Function Entry640839
! Node: Profiling652928
! Node: Tail Calls655260
! Node: Varargs655851
! Node: Trampolines663529
! Node: Library Calls670764
! Node: Addressing Modes676286
! Node: Condition Code687563
! Node: Costs694889
! Node: Scheduling706648
! Node: Sections712164
! Node: PIC720319
! Node: Assembler Format723120
! Node: File Framework724190
! Node: Data Output729050
! Node: Uninitialized Data736923
! Node: Label Output742323
! Node: Initialization757116
! Node: Macros for Initialization763097
! Node: Instruction Output769266
! Node: Dispatch Tables778306
! Node: Exception Region Output780861
! Node: Alignment Output784214
! Node: Debugging Info788086
! Node: All Debuggers788750
! Node: DBX Options791633
! Node: DBX Hooks797008
! Node: File Names and DBX800831
! Node: SDB and DWARF802807
! Node: VMS Debug806248
! Node: Cross-compilation806796
! Node: Mode Switching813375
! Node: Target Attributes816628
! Node: Misc820465
! Node: Host Config848946
! Node: Fragments854982
! Node: Target Fragment856125
! Node: Host Fragment860620
! Node: Collect2862056
! Node: Header Dirs864613
! Node: Funding866064
! Node: GNU Project868570
! Node: Copying869224
! Node: GNU Free Documentation License888438
! Node: Contributors908325
! Node: Option Index933256
! Node: Index935056
End Tag Table
diff -Nrc3pad gcc-3.2/gcc/doc/gccint.info-19 gcc-3.2.1/gcc/doc/gccint.info-19
*** gcc-3.2/gcc/doc/gccint.info-19 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gccint.info-19 Tue Nov 19 18:17:12 2002
*************** Open-Ended Hooks for DBX Format
*** 664,669 ****
--- 664,673 ----
`DBX_OUTPUT_RBRAC (STREAM, NAME)'
Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
+ `DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL)'
+ Define this macro if the target machine requires special handling
+ to output an `N_FUN' entry for the function DECL.
+
`DBX_OUTPUT_ENUM (STREAM, TYPE)'
Define this macro if the target machine requires special handling
to output an enumeration type. The definition should be a C
diff -Nrc3pad gcc-3.2/gcc/doc/gccint.info-2 gcc-3.2.1/gcc/doc/gccint.info-2
*** gcc-3.2/gcc/doc/gccint.info-2 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gccint.info-2 Tue Nov 19 18:17:12 2002
*************** FIXME: document the others.
*** 116,121 ****
--- 116,122 ----
* Test Idioms:: Idioms used in test suite code.
* C Tests:: The C language test suites.
+ * libgcj Tests:: The Java library test suites.
File: gccint.info, Node: Test Idioms, Next: C Tests, Up: Test Suites
*************** on all targets).
*** 185,191 ****
FIXME: discuss non-C test suites here.
! File: gccint.info, Node: C Tests, Prev: Test Idioms, Up: Test Suites
C Language Test Suites
----------------------
--- 186,192 ----
FIXME: discuss non-C test suites here.
! File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Test Idioms, Up: Test Suites
C Language Test Suites
----------------------
*************** C Language Test Suites
*** 259,264 ****
--- 260,287 ----
test cases and magic comments more.
+ File: gccint.info, Node: libgcj Tests, Prev: C Tests, Up: Test Suites
+
+ The Java library test suites.
+ -----------------------------
+
+ Runtime tests are executed via `make check' from the `testsuite'
+ directory of the libjava hierarchy in the build tree. Additional
+ runtime tests can be checked into this testsuite.
+
+ Regression testing of the core packages in libgcj is also covered by
+ the Mauve test suite. The Mauve Project develops tests for the Java
+ Class Libraries. These tests are run as part of libgcj testing by
+ specifying the location of the Mauve tree when invoking `make', as in
+ `make MAUVEDIR=~/mauve check'.
+
+ The Jacks project provides a test suite for Java compilers that can
+ be used to test changes that affect the GCJ front end. There is no
+ automated mechanism to run the Jacks suite as part of GCJ testing.
+
+ We encourage developers to contribute test cases to Mauve and Jacks.
+
+
File: gccint.info, Node: Passes, Next: Trees, Prev: Source Tree, Up: Top
Passes and Files of the Compiler
diff -Nrc3pad gcc-3.2/gcc/doc/gccint.info-22 gcc-3.2.1/gcc/doc/gccint.info-22
*** gcc-3.2/gcc/doc/gccint.info-22 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gccint.info-22 Tue Nov 19 18:17:12 2002
*************** been. Any omissions in this list are ac
*** 45,59 ****
contributions are not listed. Please keep this list in alphabetical
order.
- Some projects operating under the GCC project maintain their own list
- of contributors, such as the C++ library
- (http://gcc.gnu.org/libstdc++/).
-
* Analog Devices helped implement the support for complex data types
and iterators.
! * John David Anglin for improvements to libstdc++-v3 and the HP-UX
! port.
* James van Artsdalen wrote the code that makes efficient use of the
Intel 80387 register stack.
--- 45,55 ----
contributions are not listed. Please keep this list in alphabetical
order.
* Analog Devices helped implement the support for complex data types
and iterators.
! * John David Anglin for threading-related fixes and improvements to
! libstdc++-v3, and the HP-UX port.
* James van Artsdalen wrote the code that makes efficient use of the
Intel 80387 register stack.
*************** of contributors, such as the C++ library
*** 63,76 ****
* Gerald Baumgartner added the signature extension to the C++ front
end.
* Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.
* Per Bothner for his direction via the steering committee and
various improvements to our infrastructure for supporting new
! languages. Chill and Java front end implementations. Initial
implementations of cpplib, fix-header, config.guess, libio, and
! past C++ library (libg++) maintainer.
* Devon Bowen helped port GCC to the Tahoe.
--- 59,88 ----
* Gerald Baumgartner added the signature extension to the C++ front
end.
+ * Godmar Back for his Java improvements and encouragement.
+
+ * Scott Bambrough for help porting the Java compiler.
+
+ * Jon Beniston for his Win32 port of Java.
+
+ * Geoff Berry for his Java object serialization work and various
+ patches.
+
+ * Eric Blake for helping to make GCJ and libgcj conform to the
+ specifications.
+
+ * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
+ other Java work.
+
* Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.
* Per Bothner for his direction via the steering committee and
various improvements to our infrastructure for supporting new
! languages. Chill front end implementation. Initial
implementations of cpplib, fix-header, config.guess, libio, and
! past C++ library (libg++) maintainer. Dreaming up, designing and
! implementing much of GCJ.
* Devon Bowen helped port GCC to the Tahoe.
*************** of contributors, such as the C++ library
*** 84,109 ****
* Herman A.J. ten Brugge for various fixes.
* Joe Buck for his direction via the steering committee.
* Craig Burley for leadership of the Fortran effort.
! * Paolo Carlini for his work on libstdc++-v3.
* John Carr for his alias work, SPARC hacking, infrastructure
improvements, previous contributions to the steering committee,
loop optimizations, etc.
! * Steve Chamberlain wrote the support for the Hitachi SH and H8
! processors and the PicoJava processor.
* Scott Christley for his Objective-C contributions.
* Branko Cibej for more warning contributions.
* Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
other random hacking.
* Ralf Corsepius for SH testing and minor bugfixing.
* Stan Cox for care and feeding of the x86 port and lots of behind
--- 96,138 ----
* Herman A.J. ten Brugge for various fixes.
+ * Joerg Brunsmann for Java compiler hacking and help with the GCJ
+ FAQ.
+
* Joe Buck for his direction via the steering committee.
* Craig Burley for leadership of the Fortran effort.
! * Stephan Buys for contributing Doxygen notes for libstdc++.
!
! * Paolo Carlini for libstdc++ work: lots of efficiency improvements
! to the string class, hard detective work on the frustrating
! localization issues, and keeping up with the problem reports.
* John Carr for his alias work, SPARC hacking, infrastructure
improvements, previous contributions to the steering committee,
loop optimizations, etc.
! * Steve Chamberlain for support for the Hitachi SH and H8 processors
! and the PicoJava processor, and for GCJ config fixes.
!
! * Glenn Chambers for help with the GCJ FAQ.
!
! * John-Marc Chandonia for various libgcj patches.
* Scott Christley for his Objective-C contributions.
+ * Eric Christopher for his Java porting help and clean-ups.
+
* Branko Cibej for more warning contributions.
+ * The GNU Classpath project for all of their merged runtime code.
+
* Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
other random hacking.
+ * Michael Cook for libstdc++ cleanup patches to reduce warnings.
+
* Ralf Corsepius for SH testing and minor bugfixing.
* Stan Cox for care and feeding of the x86 port and lots of behind
*************** of contributors, such as the C++ library
*** 116,134 ****
* Dario Dariol contributed the four varieties of sample programs
that print a copy of their source.
! * Ulrich Drepper for his work on the C++ runtime libraries, glibc,
! testing of GCC using glibc, ISO C99 support, CFG dumping support,
! etc.
* Richard Earnshaw for his ongoing work with the ARM.
* David Edelsohn for his direction via the steering committee,
! ongoing work with the RS6000/PowerPC port, and help cleaning up
! Haifa loop changes.
* Paul Eggert for random hacking all over GCC.
! * Mark Elbrecht for various DJGPP improvements.
* Ben Elliston for his work to move the Objective-C runtime into its
own subdirectory and for his work on autoconf.
--- 145,189 ----
* Dario Dariol contributed the four varieties of sample programs
that print a copy of their source.
! * Russell Davidson for fstream and stringstream fixes in libstdc++.
!
! * Mo DeJong for GCJ and libgcj bug fixes.
!
! * Gabriel Dos Reis for contributions to g++, contributions and
! maintenance of GCC diagnostics infrastructure, libstdc++-v3,
! including valarray<>, complex<>, maintaining the numerics library
! (including that pesky :-) and keeping up-to-date anything
! to do with numbers.
!
! * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
! ISO C99 support, CFG dumping support, etc., plus support of the
! C++ runtime libraries including for all kinds of C interface
! issues, contributing and maintaining complex<>, sanity checking
! and disbursement, configuration architecture, libio maintenance,
! and early math work.
* Richard Earnshaw for his ongoing work with the ARM.
* David Edelsohn for his direction via the steering committee,
! ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
! loop changes, and for doing the entire AIX port of libstdc++ with
! his bare hands.
!
! * Kevin Ediger for the floating point formatting of num_put::do_put
! in libstdc++.
!
! * Phil Edwards for libstdc++ work including configuration hackery,
! documentation maintainer, chief breaker of the web pages, the
! occasional iostream bugfix, and work on shared library symbol
! versioning.
* Paul Eggert for random hacking all over GCC.
! * Mark Elbrecht for various DJGPP improvements, and for libstdc++
! configuration support for locales and fstream-related fixes.
!
! * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
! iostreams.
* Ben Elliston for his work to move the Objective-C runtime into its
own subdirectory and for his work on autoconf.
*************** of contributors, such as the C++ library
*** 140,150 ****
--- 195,210 ----
* Fred Fish for BeOS support and Ada fixes.
+ * Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ.
+
* Peter Gerwinski for various bugfixes and the Pascal front end.
* Kaveh Ghazi for his direction via the steering committee and
amazing work to make `-W -Wall' useful.
+ * John Gilmore for a donation to the FSF earmarked improving GNU
+ Java.
+
* Judy Goldberg for c++ contributions.
* Torbjorn Granlund for various fixes and the c-torture testsuite,
*************** of contributors, such as the C++ library
*** 154,159 ****
--- 214,222 ----
* Anthony Green for his `-Os' contributions and Java front end work.
+ * Stu Grossman for gdb hacking, allowing GCJ developers to debug our
+ code.
+
* Michael K. Gschwind contributed the port to the PDP-11.
* Ron Guilmette implemented the `protoize' and `unprotoize' tools,
*************** of contributors, such as the C++ library
*** 164,170 ****
* Bruno Haible for improvements in the runtime overhead for EH, new
warnings and assorted bugfixes.
! * Andrew Haley for his Java work.
* Chris Hanson assisted in making GCC work on HP-UX for the 9000
series 300.
--- 227,233 ----
* Bruno Haible for improvements in the runtime overhead for EH, new
warnings and assorted bugfixes.
! * Andrew Haley for his amazing Java compiler and library efforts.
* Chris Hanson assisted in making GCC work on HP-UX for the 9000
series 300.
*************** of contributors, such as the C++ library
*** 199,220 ****
* Andreas Jaeger for various fixes to the MIPS port
* Jakub Jelinek for his SPARC work and sibling call optimizations as
! well as lots of bug fixes and test cases.
* Janis Johnson for ia64 testing and fixes and for her quality
improvement sidetracks.
* J. Kean Johnston for OpenServer support.
* Klaus Kaempf for his ongoing work to make alpha-vms a viable
target.
* David Kashtan of SRI adapted GCC to VMS.
* Geoffrey Keating for his ongoing work to make the PPC work for
GNU/Linux and his automatic regression tester.
! * Brendan Kehoe for his ongoing work with g++.
* Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
MIL-STD-1750A.
--- 262,294 ----
* Andreas Jaeger for various fixes to the MIPS port
* Jakub Jelinek for his SPARC work and sibling call optimizations as
! well as lots of bug fixes and test cases, and for improving the
! Java build system.
* Janis Johnson for ia64 testing and fixes and for her quality
improvement sidetracks.
* J. Kean Johnston for OpenServer support.
+ * Tim Josling for the sample language treelang based originally on
+ Richard Kenner's ""toy" language".
+
+ * Nicolai Josuttis for additional libstdc++ documentation.
+
* Klaus Kaempf for his ongoing work to make alpha-vms a viable
target.
* David Kashtan of SRI adapted GCC to VMS.
+ * Ryszard Kabatek for many, many libstdc++ bugfixes and
+ optimizations of strings, especially member functions, and for
+ auto_ptr fixes.
+
* Geoffrey Keating for his ongoing work to make the PPC work for
GNU/Linux and his automatic regression tester.
! * Brendan Kehoe for his ongoing work with g++ and for a lot of early
! work in just about every part of libstdc++.
* Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
MIL-STD-1750A.
*************** of contributors, such as the C++ library
*** 230,237 ****
scheduling. Richard Kenner was also the head maintainer of GCC
for several years.
! * Mumit Khan for various contributions to the cygwin and mingw32
! ports and maintaining binary releases for Windows hosts.
* Robin Kirkham for cpu32 support.
--- 304,312 ----
scheduling. Richard Kenner was also the head maintainer of GCC
for several years.
! * Mumit Khan for various contributions to the Cygwin and Mingw32
! ports and maintaining binary releases for Windows hosts, and for
! massive libstdc++ porting work to Cygwin/Mingw32.
* Robin Kirkham for cpu32 support.
*************** of contributors, such as the C++ library
*** 261,271 ****
* Kriang Lerdsuwanakij for improvements to demangler and various c++
fixes.
! * Warren Levy major work on libgcj (Java Runtime Library) and random
! work on the Java front end.
* Alain Lichnewsky ported GCC to the MIPS CPU.
* Robert Lipe for OpenServer support, new testsuites, testing, etc.
* Weiwen Liu for testing and various bugfixes.
--- 336,349 ----
* Kriang Lerdsuwanakij for improvements to demangler and various c++
fixes.
! * Warren Levy for tremendous work on libgcj (Java Runtime Library)
! and random work on the Java front end.
* Alain Lichnewsky ported GCC to the MIPS CPU.
+ * Oskar Liljeblad for hacking on AWT and his many Java bug reports
+ and patches.
+
* Robert Lipe for OpenServer support, new testsuites, testing, etc.
* Weiwen Liu for testing and various bugfixes.
*************** of contributors, such as the C++ library
*** 274,280 ****
runtime libraries.
* Martin von Lo"wis for internal consistency checking infrastructure,
! and various C++ improvements including namespace support.
* H.J. Lu for his previous contributions to the steering committee,
many x86 bug reports, prototype patches, and keeping the GNU/Linux
--- 352,359 ----
runtime libraries.
* Martin von Lo"wis for internal consistency checking infrastructure,
! various C++ improvements including namespace support, and tons of
! assistance with libstdc++/compiler merges.
* H.J. Lu for his previous contributions to the steering committee,
many x86 bug reports, prototype patches, and keeping the GNU/Linux
*************** of contributors, such as the C++ library
*** 287,297 ****
optimizer, etc.
* Vladimir Makarov for hacking some ugly i960 problems, PowerPC
! hacking improvements to compile-time performance and overall
! knowledge and direction in the area of instruction scheduling.
* Bob Manson for his behind the scenes work on dejagnu.
* Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.
--- 366,387 ----
optimizer, etc.
* Vladimir Makarov for hacking some ugly i960 problems, PowerPC
! hacking improvements to compile-time performance, overall
! knowledge and direction in the area of instruction scheduling, and
! design and implementation of the automaton based instruction
! scheduler.
* Bob Manson for his behind the scenes work on dejagnu.
+ * Philip Martin for lots of libstdc++ string and vector iterator
+ fixes and improvements, and string clean up and testsuites.
+
+ * All of the Mauve project contributors, for Java test code.
+
+ * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
+
+ * Adam Megacz for his work on the Win32 port of GCJ.
+
* Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.
*************** of contributors, such as the C++ library
*** 304,309 ****
--- 394,402 ----
* Gary Miller ported GCC to Charles River Data Systems machines.
+ * Alfred Minarik for libstdc++ string and ios bugfixes, and turning
+ the entire libstdc++ testsuite namespace-compatible.
+
* Mark Mitchell for his direction via the steering committee,
mountains of C++ work, load/store hoisting out of loops, alias
analysis improvements, ISO C `restrict' support, and serving as
*************** of contributors, such as the C++ library
*** 316,327 ****
* Jason Molenda for major help in the care and feeding of all the
services on the gcc.gnu.org (formerly egcs.cygnus.com)
! machine--mail, web services, ftp services, etc etc.
* Catherine Moore for fixing various ugly problems we have sent her
way, including the haifa bug which was killing the Alpha & PowerPC
Linux kernels.
* David Mosberger-Tang for various Alpha improvements.
* Stephen Moshier contributed the floating point emulator that
--- 409,424 ----
* Jason Molenda for major help in the care and feeding of all the
services on the gcc.gnu.org (formerly egcs.cygnus.com)
! machine--mail, web services, ftp services, etc etc. Doing all
! this work on scrap paper and the backs of envelopes would have
! been... difficult.
* Catherine Moore for fixing various ugly problems we have sent her
way, including the haifa bug which was killing the Alpha & PowerPC
Linux kernels.
+ * Mike Moreton for his various Java patches.
+
* David Mosberger-Tang for various Alpha improvements.
* Stephen Moshier contributed the floating point emulator that
*************** of contributors, such as the C++ library
*** 336,342 ****
and ISO C99 support, and continuous emphasis on (and contributions
to) documentation.
! * Nathan Myers for his work on libstdc++-v3.
* NeXT, Inc. donated the front end that supports the Objective-C
language.
--- 433,445 ----
and ISO C99 support, and continuous emphasis on (and contributions
to) documentation.
! * Nathan Myers for his work on libstdc++-v3: architecture and
! authorship through the first three snapshots, including
! implementation of locale infrastructure, string, shadow C headers,
! and the initial project documentation (DESIGN, CHECKLIST, and so
! forth). Later, more work on MT-safe string and shadow headers.
!
! * Felix Natter for documentation on porting libstdc++.
* NeXT, Inc. donated the front end that supports the Objective-C
language.
*************** of contributors, such as the C++ library
*** 352,367 ****
related infrastructure improvements.
* Alexandre Oliva for various build infrastructure improvements,
! scripts and amazing testing work.
* Melissa O'Neill for various NeXT fixes.
* Rainer Orth for random MIPS work, including improvements to our o32
! ABI support, improvements to dejagnu's MIPS support, etc.
* Paul Petersen wrote the machine description for the Alliant FX/8.
! * Alexandre Petit-Bianco for his Java work.
* Matthias Pfaller for major improvements to the NS32k port.
--- 455,473 ----
related infrastructure improvements.
* Alexandre Oliva for various build infrastructure improvements,
! scripts and amazing testing work, including keeping libtool issues
! sane and happy.
* Melissa O'Neill for various NeXT fixes.
* Rainer Orth for random MIPS work, including improvements to our o32
! ABI support, improvements to dejagnu's MIPS support, Java
! configuration clean-ups and porting work, etc.
* Paul Petersen wrote the machine description for the Alliant FX/8.
! * Alexandre Petit-Bianco for implementing much of the Java compiler
! and continued Java maintainership.
* Matthias Pfaller for major improvements to the NS32k port.
*************** of contributors, such as the C++ library
*** 375,391 ****
* Ken Raeburn for various improvements to checker, MIPS ports and
various cleanups in the compiler.
* David Reese of Sun Microsystems contributed to the Solaris on
PowerPC port.
- * Gabriel Dos Reis for contributions and maintenance of libstdc++-v3,
- including valarray implementation and limits support.
-
* Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
! * Loren J. Rittle for improvements to libstdc++-v3 and the FreeBSD
! port.
* Craig Rodrigues for processing tons of bug reports.
--- 481,498 ----
* Ken Raeburn for various improvements to checker, MIPS ports and
various cleanups in the compiler.
+ * Rolf W. Rasmussen for hacking on AWT.
+
* David Reese of Sun Microsystems contributed to the Solaris on
PowerPC port.
* Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
! * Loren J. Rittle for improvements to libstdc++-v3 including the
! FreeBSD port, threading fixes, thread-related configury changes,
! critical threading documentation, and solutions to really tricky
! I/O problems.
* Craig Rodrigues for processing tons of bug reports.
*************** of contributors, such as the C++ library
*** 395,405 ****
--- 502,517 ----
* Paul Rubin wrote most of the preprocessor.
+ * Chip Salzenberg for libstdc++ patches and improvements to locales,
+ traits, Makefiles, libio, libtool hackery, and "long long" support.
+
* Juha Sarlin for improvements to the H8 code generator.
* Greg Satz assisted in making GCC work on HP-UX for the 9000 series
300.
+ * Bradley Schatz for his work on the GCJ FAQ.
+
* Peter Schauer wrote the code to allow debugging to work on the
Alpha.
*************** of contributors, such as the C++ library
*** 409,414 ****
--- 521,532 ----
work in the reload pass as well a serving as release manager for
GCC 2.95.3.
+ * Peter Schmid for constant testing of libstdc++ - especially
+ application testing, going above and beyond what was requested for
+ the release criteria - and libstdc++ header file tweaks.
+
+ * Jason Schroeder for jcf-dump patches.
+
* Andreas Schwab for his work on the m68k port.
* Joel Sherrill for his direction via the steering committee, RTEMS
*************** of contributors, such as the C++ library
*** 420,425 ****
--- 538,547 ----
some code which handles the parse tree and RTL data structures,
constant folding and help with the original VAX & m68k ports.
+ * Kenny Simpson for prompting libstdc++ fixes due to defect reports
+ from the LWG (thereby keeping us in line with updates from the
+ ISO).
+
* Franz Sirl for his ongoing work with making the PPC port stable
for linux.
*************** of contributors, such as the C++ library
*** 429,435 ****
* Randy Smith finished the Sun FPA support.
! * Scott Snyder for various fixes.
* Richard Stallman, for writing the original gcc and launching the
GNU project.
--- 551,560 ----
* Randy Smith finished the Sun FPA support.
! * Scott Snyder for queue, iterator, istream, and string fixes and
! libstdc++ testsuite entries.
!
! * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
* Richard Stallman, for writing the original gcc and launching the
GNU project.
*************** of contributors, such as the C++ library
*** 444,452 ****
--- 569,581 ----
* Graham Stott for various infrastructure improvements.
+ * John Stracke for his Java HTTP protocol fixes.
+
* Mike Stump for his Elxsi port, g++ contributions over the years
and more recently his vxworks contributions
+ * Jeff Sturm for Java porting help, bug fixes, and encouragement.
+
* Shigeya Suzuki for this fixes for the bsdi platforms.
* Ian Lance Taylor for his mips16 work, general configury hacking,
*************** of contributors, such as the C++ library
*** 459,494 ****
* Philipp Thomas for random bugfixes throughout the compiler
* Kresten Krab Thorup wrote the run time support for the Objective-C
! language.
* Michael Tiemann for random bugfixes, the first instruction
scheduler, initial C++ support, function integration, NS32k, SPARC
and M88k machine description work, delay slot scheduling.
* Teemu Torma for thread safe exception handling support.
* Leonard Tower wrote parts of the parser, RTL generator, and RTL
definitions, and of the VAX machine description.
! * Tom Tromey for internationalization support and his Java work.
* Lassi Tuura for improvements to config.guess to determine HP
processor types.
* Todd Vierling for contributions for NetBSD ports.
* Dean Wakerley for converting the install documentation from HTML
to texinfo in time for GCC 3.0.
* Krister Walfridsson for random bugfixes.
* John Wehle for various improvements for the x86 code generator,
related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.
* Zack Weinberg for major work on cpplib and various other bugfixes.
* Dale Wiles helped port GCC to the Tahoe.
* Bob Wilson from Tensilica, Inc. for the Xtensa port.
--- 588,647 ----
* Philipp Thomas for random bugfixes throughout the compiler
+ * Jason Thorpe for thread support in libstdc++ on NetBSD.
+
* Kresten Krab Thorup wrote the run time support for the Objective-C
! language and the fantastic Java bytecode interpreter.
* Michael Tiemann for random bugfixes, the first instruction
scheduler, initial C++ support, function integration, NS32k, SPARC
and M88k machine description work, delay slot scheduling.
+ * Andreas Tobler for his work porting libgcj to Darwin.
+
* Teemu Torma for thread safe exception handling support.
* Leonard Tower wrote parts of the parser, RTL generator, and RTL
definitions, and of the VAX machine description.
! * Tom Tromey for internationalization support and for his many Java
! contributions and libgcj maintainership.
* Lassi Tuura for improvements to config.guess to determine HP
processor types.
+ * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
+
+ * Brent Verner for work with the libstdc++ cshadow files and their
+ associated configure steps.
+
* Todd Vierling for contributions for NetBSD ports.
+ * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
+ guidance.
+
* Dean Wakerley for converting the install documentation from HTML
to texinfo in time for GCC 3.0.
* Krister Walfridsson for random bugfixes.
+ * Stephen M. Webb for time and effort on making libstdc++ shadow
+ files work with the tricky Solaris 8+ headers, and for pushing the
+ build-time header tree.
+
* John Wehle for various improvements for the x86 code generator,
related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.
* Zack Weinberg for major work on cpplib and various other bugfixes.
+ * Matt Welsh for help with Linux Threads support in GCJ.
+
+ * Urban Widmark for help fixing java.io.
+
+ * Mark Wielaard for new Java library code and his work integrating
+ with Classpath.
+
* Dale Wiles helped port GCC to the Tahoe.
* Bob Wilson from Tensilica, Inc. for the Xtensa port.
*************** of contributors, such as the C++ library
*** 506,547 ****
--- 659,766 ----
* Kevin Zachmann helped ported GCC to the Tahoe.
+ * Gilles Zunino for help porting Java to Irix.
+
We'd also like to thank the folks who have contributed time and
energy in testing GCC:
+ * Michael Abd-El-Malek
+
+ * Thomas Arend
+
+ * Bonzo Armstrong
+
+ * Steven Ashe
+
+ * Chris Baldwin
+
* David Billinghurst
+ * Jim Blandy
+
+ * Stephane Bortzmeyer
+
* Horst von Brand
+ * Frank Braun
+
* Rodney Brown
* Joe Buck
* Craig Burley
+ * Sidney Cadot
+
+ * Bradford Castalia
+
+ * Ralph Doncaster
+
* Ulrich Drepper
* David Edelsohn
+ * Richard Emberson
+
+ * Levente Farkas
+
+ * Graham Fawcett
+
+ * Robert A. French
+
+ * Jo"rgen Freyh
+
+ * Mark K. Gardner
+
+ * Charles-Antoine Gauthier
+
* Yung Shing Gene
* Kaveh Ghazi
+ * David Gilbert
+
+ * Simon Gornall
+
+ * Fred Gray
+
+ * John Griffin
+
+ * Patrik Hagglund
+
+ * Phil Hargett
+
+ * Amancio Hasty
+
+ * Bryan W. Headley
+
* Kate Hedstrom
* Richard Henderson
+ * Kevin B. Hendricks
+
* Manfred Hollstein
* Kamil Iskra
+ * Joep Jansen
+
* Christian Joensson
+ * David Kidd
+
+ * Tobias Kuipers
+
+ * Anand Krishnaswamy
+
* Jeff Law
* Robert Lipe
+ * llewelly
+
* Damon Love
* Dave Love
*************** energy in testing GCC:
*** 556,575 ****
--- 775,818 ----
* Martin Knoblauch
+ * Jesse Macnish
+
* David Miller
* Toon Moene
+ * Stefan Morrell
+
+ * Anon A. Mous
+
* Matthias Mueller
+ * Pekka Nikander
+
* Alexandre Oliva
+ * Jon Olson
+
+ * Magnus Persson
+
+ * Chris Pollard
+
* Richard Polton
* David Rees
+ * Paul Reilly
+
+ * Tom Reilly
+
* Loren J. Rittle
+ * Torsten Rueger
+
+ * Danny Sadinoff
+
+ * Marc Schifer
+
* Peter Schmid
* David Schuler
*************** energy in testing GCC:
*** 578,587 ****
--- 821,840 ----
* Franz Sirl
+ * Tim Souder
+
* Mike Stump
+ * Adam Sulmicki
+
+ * George Talbot
+
+ * Gregory Warnes
+
* Carlo Wood
+ * David E. Young
+
* And many others
And finally we'd like to thank everyone who uses the compiler,
diff -Nrc3pad gcc-3.2/gcc/doc/gccint.info-23 gcc-3.2.1/gcc/doc/gccint.info-23
*** gcc-3.2/gcc/doc/gccint.info-23 Wed Aug 14 09:36:33 2002
--- gcc-3.2.1/gcc/doc/gccint.info-23 Tue Nov 19 18:17:12 2002
*************** Index
*** 495,500 ****
--- 495,501 ----
* DBX_OUTPUT_MAIN_SOURCE_DIRECTORY: File Names and DBX.
* DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX.
* DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX.
+ * DBX_OUTPUT_NFUN: DBX Hooks.
* DBX_OUTPUT_RBRAC: DBX Hooks.
* DBX_OUTPUT_SOURCE_FILENAME: File Names and DBX.
* DBX_OUTPUT_STANDARD_TYPES: DBX Hooks.
diff -Nrc3pad gcc-3.2/gcc/doc/gcov.1 gcc-3.2.1/gcc/doc/gcov.1
*** gcc-3.2/gcc/doc/gcov.1 Wed Aug 14 09:36:35 2002
--- gcc-3.2.1/gcc/doc/gcov.1 Tue Nov 19 18:17:13 2002
***************
*** 1,5 ****
.\" Automatically generated by Pod::Man version 1.15
! .\" Wed Aug 14 09:36:35 2002
.\"
.\" Standard preamble:
.\" ======================================================================
--- 1,5 ----
.\" Automatically generated by Pod::Man version 1.15
! .\" Tue Nov 19 18:17:13 2002
.\"
.\" Standard preamble:
.\" ======================================================================
***************
*** 138,144 ****
.\" ======================================================================
.\"
.IX Title "GCOV 1"
! .TH GCOV 1 "gcc-3.2" "2002-08-14" "GNU"
.UC
.SH "NAME"
gcov \- coverage testing tool
--- 138,144 ----
.\" ======================================================================
.\"
.IX Title "GCOV 1"
! .TH GCOV 1 "gcc-3.2.1" "2002-11-19" "GNU"
.UC
.SH "NAME"
gcov \- coverage testing tool
diff -Nrc3pad gcc-3.2/gcc/doc/gfdl.7 gcc-3.2.1/gcc/doc/gfdl.7
*** gcc-3.2/gcc/doc/gfdl.7 Wed Aug 14 09:36:41 2002
--- gcc-3.2.1/gcc/doc/gfdl.7 Tue Nov 19 18:17:19 2002
***************
*** 1,5 ****
.\" Automatically generated by Pod::Man version 1.15
! .\" Wed Aug 14 09:36:41 2002
.\"
.\" Standard preamble:
.\" ======================================================================
--- 1,5 ----
.\" Automatically generated by Pod::Man version 1.15
! .\" Tue Nov 19 18:17:19 2002
.\"
.\" Standard preamble:
.\" ======================================================================
***************
*** 138,144 ****
.\" ======================================================================
.\"
.IX Title "gfdl 7"
! .TH gfdl 7 "gcc-3.2" "2002-08-14" "GNU"
.UC
.SH "NAME"
gfdl \- \s-1GNU\s0 Free Documentation License
--- 138,144 ----
.\" ======================================================================
.\"
.IX Title "gfdl 7"
! .TH gfdl 7 "gcc-3.2.1" "2002-11-19" "GNU"
.UC
.SH "NAME"
gfdl \- \s-1GNU\s0 Free Documentation License
diff -Nrc3pad gcc-3.2/gcc/doc/gpl.7 gcc-3.2.1/gcc/doc/gpl.7
*** gcc-3.2/gcc/doc/gpl.7 Wed Aug 14 09:36:41 2002
--- gcc-3.2.1/gcc/doc/gpl.7 Tue Nov 19 18:17:19 2002
***************
*** 1,5 ****
.\" Automatically generated by Pod::Man version 1.15
! .\" Wed Aug 14 09:36:41 2002
.\"
.\" Standard preamble:
.\" ======================================================================
--- 1,5 ----
.\" Automatically generated by Pod::Man version 1.15
! .\" Tue Nov 19 18:17:19 2002
.\"
.\" Standard preamble:
.\" ======================================================================
***************
*** 138,144 ****
.\" ======================================================================
.\"
.IX Title "gpl 7"
! .TH gpl 7 "gcc-3.2" "2002-08-14" "GNU"
.UC
.SH "NAME"
gpl \- \s-1GNU\s0 General Public License
--- 138,144 ----
.\" ======================================================================
.\"
.IX Title "gpl 7"
! .TH gpl 7 "gcc-3.2.1" "2002-11-19" "GNU"
.UC
.SH "NAME"
gpl \- \s-1GNU\s0 General Public License
diff -Nrc3pad gcc-3.2/gcc/doc/install.texi gcc-3.2.1/gcc/doc/install.texi
*** gcc-3.2/gcc/doc/install.texi Mon Aug 5 03:40:02 2002
--- gcc-3.2.1/gcc/doc/install.texi Wed Nov 13 21:17:09 2002
*************** not yet been merged into the main part o
*** 191,197 ****
@end ifhtml
@html
!
@end html
@ifhtml
--- 191,197 ----
@end ifhtml
@html
!
@end html
@ifhtml
*************** components of the binutils you intend to
*** 245,251 ****
@file{opcodes}, @dots{}) to the directory containing the GCC sources.
@html
!
@end html
@ifhtml
--- 245,251 ----
@file{opcodes}, @dots{}) to the directory containing the GCC sources.
@html
!
@end html
@ifhtml
*************** subdirectory of @var{objdir} or vice ver
*** 355,361 ****
These additional options control where certain parts of the distribution
are installed. Normally you should not need to use these options.
@table @code
-
@item --exec-prefix=@var{dirname}
Specify the toplevel installation directory for architecture-dependent
files. The default is @file{@var{prefix}}.
--- 355,360 ----
*************** complex conversion patterns. As a basic
*** 422,430 ****
@var{suffix}) are prepended (appended) before further transformations
can happen with a special transformation script @var{pattern}.
! As currently implemented, this options only take effect for native
builds; cross compiler binaries' names are not transformed even when a
! transformation is explicitly asked for by one of this options.
For native builds, some of the installed programs are also installed
with the target alias in front of their name, as in
--- 421,429 ----
@var{suffix}) are prepended (appended) before further transformations
can happen with a special transformation script @var{pattern}.
! As currently implemented, these options only take effect for native
builds; cross compiler binaries' names are not transformed even when a
! transformation is explicitly asked for by one of these options.
For native builds, some of the installed programs are also installed
with the target alias in front of their name, as in
*************** any in that directory---are not part of
*** 460,471 ****
programs---perhaps many others. (GCC installs its own header files in
another directory which is based on the @option{--prefix} value.)
@strong{Do not} specify @file{/usr} as the @option{--with-local-prefix}!
The directory you use for @option{--with-local-prefix} @strong{must not}
contain any of the system's standard header files. If it did contain
them, certain programs would be miscompiled (including GNU Emacs, on
certain targets), because this would override and nullify the header
! file corrections made by the @code{fixincludes} script.
Indications are that people who use this option use it based on mistaken
ideas of what it is for. People use it as if it specified where to
--- 459,507 ----
programs---perhaps many others. (GCC installs its own header files in
another directory which is based on the @option{--prefix} value.)
+ Both the local-prefix include directory and the GCC-prefix include
+ directory are part of GCC's "system include" directories. Although these
+ two directories are not fixed, they need to be searched in the proper
+ order for the correct processing of the include_next directive. The
+ local-prefix include directory is searched before the GCC-prefix
+ include directory. Another characteristic of system include directories
+ is that pedantic warnings are turned off for headers in these directories.
+
+ Some autoconf macros add @option{-I @var{directory}} options to the
+ compiler command line, to ensure that directories containing installed
+ packages' headers are searched. When @var{directory} is one of GCC's
+ system include directories, GCC will ignore the option so that system
+ directories continue to be processed in the correct order. This
+ may result in a search order different from what was specified but the
+ directory will still be searched.
+
+ GCC automatically searches for ordinary libraries using
+ @env{GCC_EXEC_PREFIX}. Thus, when the same installation prefix is
+ used for both GCC and packages, GCC will automatically search for
+ both headers and libraries. This provides a configuration that is
+ easy to use. GCC behaves in a manner similar to that when it is
+ installed as a system compiler in @file{/usr}.
+
+ Sites that need to install multiple versions of GCC may not want to
+ use the above simple configuration. It is possible to use the
+ @option{--program-prefix}, @option{--program-suffix} and
+ @option{--program-transform-name} options to install multiple versions
+ into a single directory, but it may be simpler to use different prefixes
+ and the @option{--with-local-prefix} option to specify the location of the
+ site-specific files for each version. It will then be necessary for
+ users to specify explicitly the location of local site libraries
+ (e.g., with @env{LIBRARY_PATH}).
+
+ The same value can be used for both @option{--with-local-prefix} and
+ @option{--prefix} provided it is not @file{/usr}. This can be used
+ to avoid the default search of @file{/usr/local/include}.
+
@strong{Do not} specify @file{/usr} as the @option{--with-local-prefix}!
The directory you use for @option{--with-local-prefix} @strong{must not}
contain any of the system's standard header files. If it did contain
them, certain programs would be miscompiled (including GNU Emacs, on
certain targets), because this would override and nullify the header
! file corrections made by the @command{fixincludes} script.
Indications are that people who use this option use it based on mistaken
ideas of what it is for. People use it as if it specified where to
*************** configured with @option{--with-gnu-as}.)
*** 503,517 ****
assembler installed on your system, you may want to use this option in
connection with @option{--with-as=@var{pathname}}.
! The systems where it makes a difference whether you use the GNU assembler are
! @samp{hppa1.0-@var{any}-@var{any}}, @samp{hppa1.1-@var{any}-@var{any}},
! @samp{i386-@var{any}-sysv}, @samp{i386-@var{any}-isc},
! @samp{i860-@var{any}-bsd}, @samp{m68k-bull-sysv},
! @samp{m68k-hp-hpux}, @samp{m68k-sony-bsd},
! @samp{m68k-altos-sysv}, @samp{m68000-hp-hpux},
! @samp{m68000-att-sysv}, @samp{@var{any}-lynx-lynxos},
! and @samp{mips-@var{any}}.
! On any other system, @option{--with-gnu-as} has no effect.
On the systems listed above (except for the HP-PA, for ISC on the
386, and for @samp{mips-sgi-irix5.*}), if you use the GNU assembler,
--- 539,563 ----
assembler installed on your system, you may want to use this option in
connection with @option{--with-as=@var{pathname}}.
! The following systems are the only ones where it makes a difference
! whether you use the GNU assembler. On any other system,
! @option{--with-gnu-as} has no effect.
!
! @itemize bullet
! @item @samp{hppa1.0-@var{any}-@var{any}}
! @item @samp{hppa1.1-@var{any}-@var{any}}
! @item @samp{i386-@var{any}-sysv}
! @item @samp{i386-@var{any}-isc}
! @item @samp{i860-@var{any}-bsd}
! @item @samp{m68k-bull-sysv}
! @item @samp{m68k-hp-hpux}
! @item @samp{m68k-sony-bsd}
! @item @samp{m68k-altos-sysv}
! @item @samp{m68000-hp-hpux}
! @item @samp{m68000-att-sysv}
! @item @samp{@var{any}-lynx-lynxos}
! @item @samp{mips-@var{any}}
! @end itemize
On the systems listed above (except for the HP-PA, for ISC on the
386, and for @samp{mips-sgi-irix5.*}), if you use the GNU assembler,
*************** predefined set of them.
*** 588,594 ****
Some targets provide finer-grained control over which multilibs are built
(e.g., @option{--disable-softfloat}):
@table @code
-
@item arc-*-elf*
biendian.
--- 634,639 ----
*************** Some options which only apply to buildin
*** 816,825 ****
@item --with-headers=@var{dir}
Specifies a directory
which has target include files.
! @emph{This options is required} when building a cross
compiler, if @file{@var{prefix}/@var{target}/sys-include} doesn't pre-exist.
These include files will be copied into the @file{gcc} install directory.
! Fixincludes will be run on these files to make them compatible with
GCC.
@item --with-libs=``@var{dir1} @var{dir2} @dots{} @var{dirN}''
Specifies a list of directories which contain the target runtime
--- 861,870 ----
@item --with-headers=@var{dir}
Specifies a directory
which has target include files.
! @emph{This option is required} when building a cross
compiler, if @file{@var{prefix}/@var{target}/sys-include} doesn't pre-exist.
These include files will be copied into the @file{gcc} install directory.
! @command{fixincludes} will be run on these files to make them compatible with
GCC.
@item --with-libs=``@var{dir1} @var{dir2} @dots{} @var{dirN}''
Specifies a list of directories which contain the target runtime
*************** Note that each @option{--enable} option
*** 837,843 ****
corresponding @option{--without} option.
@html
!
@end html
@ifhtml
--- 882,888 ----
corresponding @option{--without} option.
@html
!
@end html
@ifhtml
*************** because you have previously configured t
*** 887,893 ****
directory. Make sure you have done all the necessary preparations.
If you build GCC on a BSD system using a directory stored in an old System
! V file system, problems may occur in running @code{fixincludes} if the
System V file system doesn't support symbolic links. These problems
result in a failure to fix the declaration of @code{size_t} in
@file{sys/types.h}. If you find that @code{size_t} is a signed type and
--- 932,938 ----
directory. Make sure you have done all the necessary preparations.
If you build GCC on a BSD system using a directory stored in an old System
! V file system, problems may occur in running @command{fixincludes} if the
System V file system doesn't support symbolic links. These problems
result in a failure to fix the declaration of @code{size_t} in
@file{sys/types.h}. If you find that @code{size_t} is a signed type and
*************** bootstrap} except that object files from
*** 939,952 ****
stage2 of the 3-stage bootstrap of the compiler are deleted as
soon as they are no longer needed.
-
If you want to save additional space during the bootstrap and in
the final installation as well, you can build the compiler binaries
! without debugging information with @samp{make CFLAGS='-O' LIBCFLAGS='-g
! -O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap}. This will save
roughly 40% of disk space both for the bootstrap and the final installation.
(Libraries will still contain debugging information.)
If you wish to use non-default GCC flags when compiling the stage2 and
stage3 compilers, set @code{BOOT_CFLAGS} on the command line when doing
@samp{make bootstrap}. Non-default optimization flags are less well
--- 984,1000 ----
stage2 of the 3-stage bootstrap of the compiler are deleted as
soon as they are no longer needed.
If you want to save additional space during the bootstrap and in
the final installation as well, you can build the compiler binaries
! without debugging information as in the following example. This will save
roughly 40% of disk space both for the bootstrap and the final installation.
(Libraries will still contain debugging information.)
+ @example
+ make CFLAGS='-O' LIBCFLAGS='-g -O2' \
+ LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
+ @end example
+
If you wish to use non-default GCC flags when compiling the stage2 and
stage3 compilers, set @code{BOOT_CFLAGS} on the command line when doing
@samp{make bootstrap}. Non-default optimization flags are less well
*************** used to disable building the Ada front e
*** 1042,1050 ****
Additional build tools (such as @command{gnatmake}) or a working GNAT
run-time library installation are usually @emph{not} required. However,
! if you want to boostrap the compiler using a minimal version of GNAT,
you have to issue the following commands before invoking @samp{make
! boostrap} (this assumes that you start with an unmodified and consistent
source distribution):
@example
--- 1090,1098 ----
Additional build tools (such as @command{gnatmake}) or a working GNAT
run-time library installation are usually @emph{not} required. However,
! if you want to bootstrap the compiler using a minimal version of GNAT,
you have to issue the following commands before invoking @samp{make
! bootstrap} (this assumes that you start with an unmodified and consistent
source distribution):
@example
*************** Currently, when compiling the Ada front
*** 1076,1082 ****
build feature described in the previous section.
@html
!
@end html
@ifhtml
--- 1124,1130 ----
build feature described in the previous section.
@html
!
@end html
@ifhtml
*************** To get a list of the possible @file{*.ex
*** 1180,1185 ****
--- 1228,1244 ----
output of @samp{make check} into a file and look at the
@samp{Running @dots{} .exp} lines.
+ To run only the tests for a library, run @samp{make check} from the
+ the library's testsuite in a subdirectory of the object directory:
+ @file{libstdc++-v3/testsuite} or @file{libcgj/testsuite}.
+
+ @section Additional testing for Java Class Libraries
+
+ The @uref{http://sources.redhat.com/mauve/,,Mauve Project} provides
+ a suite of tests for the Java Class Libraries. This suite can be run
+ as part of libgcj testing by specifying the location of the Mauve tree
+ when invoking @samp{make}, as in @samp{make MAUVEDIR=~/mauve check}.
+
@section How to interpret test results
After the testsuite has run you'll find various @file{*.sum} and @file{*.log}
*************** few failing testcases are possible even
*** 1234,1240 ****
should look here first if you think your results are unreasonable.
@html
!
@end html
@ifhtml
--- 1293,1299 ----
should look here first if you think your results are unreasonable.
@html
!
@end html
@ifhtml
*************** parts of the compiler in @file{@var{libd
*** 1272,1281 ****
info format in @file{@var{infodir}} (normally @file{@var{prefix}/info}).
If you built a released version of GCC using @samp{make bootstrap} then please
! quickly review the build status page for
! @uref{http://gcc.gnu.org/gcc-3.1/buildstat.html,,3.1},
! @uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,3.0}, or
! @uref{http://gcc.gnu.org/gcc-2.95/buildstat.html,,2.95}.
If your system is not listed for the version of GCC that you built,
send a note to
@email{gcc@@gcc.gnu.org} indicating
--- 1331,1338 ----
info format in @file{@var{infodir}} (normally @file{@var{prefix}/info}).
If you built a released version of GCC using @samp{make bootstrap} then please
! quickly review the build status page for your release, available from
! @uref{http://gcc.gnu.org/buildstat.html}.
If your system is not listed for the version of GCC that you built,
send a note to
@email{gcc@@gcc.gnu.org} indicating
*************** Free Software Foundation}, though such m
*** 1348,1354 ****
recent version of GCC@.
@html
!
@end html
@ifhtml
--- 1405,1411 ----
recent version of GCC@.
@html
!
@end html
@ifhtml
*************** contact their makers.
*** 1382,1388 ****
AIX:
@itemize
@item
! @uref{http://freeware.bull.net,,Bull's Freeware and Shareware Archive for AIX};
@item
@uref{http://aixpdslib.seas.ucla.edu,,UCLA Software Library for AIX}.
--- 1439,1445 ----
AIX:
@itemize
@item
! @uref{http://www.bullfreeware.com,,Bull's Freeware and Shareware Archive for AIX};
@item
@uref{http://aixpdslib.seas.ucla.edu,,UCLA Software Library for AIX}.
*************** bootstrapping the compiler. An updated
*** 1444,1450 ****
works.
@html
!
@end html
@ifhtml
--- 1501,1507 ----
works.
@html
!
@end html
@ifhtml
*************** GNU Compiler Collection on your machine.
*** 1683,1689 ****
@html
!
@end html
@heading @anchor{1750a-*-*}1750a-*-*
MIL-STD-1750A processors. This target is obsoleted in GCC 3.1.
--- 1740,1746 ----
@html
!
@end html
@heading @anchor{1750a-*-*}1750a-*-*
MIL-STD-1750A processors. This target is obsoleted in GCC 3.1.
*************** The 1750A's ``Load/Store Upper/Lower Byt
*** 1724,1731 ****
GCC@.
@html
!
!
@end html
@heading @anchor{a29k}a29k
AMD Am29k-family processors. These are normally used in embedded
--- 1781,1787 ----
GCC@.
@html
!
@end html
@heading @anchor{a29k}a29k
AMD Am29k-family processors. These are normally used in embedded
*************** You may need to make a variant of the fi
*** 1739,1753 ****
particular configuration.
@html
!
!
@end html
@heading @anchor{a29k-*-bsd}a29k-*-bsd
AMD Am29050 used in a system running a variant of BSD Unix.
@html
!
!
@end html
@heading @anchor{alpha*-*-*}alpha*-*-*
--- 1795,1807 ----
particular configuration.
@html
!
@end html
@heading @anchor{a29k-*-bsd}a29k-*-bsd
AMD Am29050 used in a system running a variant of BSD Unix.
@html
!
@end html
@heading @anchor{alpha*-*-*}alpha*-*-*
*************** debugging information, not the least of
*** 1762,1769 ****
shared libraries.
@html
!
!
@end html
@heading @anchor{alpha*-dec-osf*}alpha*-dec-osf*
Systems using processors that implement the DEC Alpha architecture and
--- 1816,1822 ----
shared libraries.
@html
!
@end html
@heading @anchor{alpha*-dec-osf*}alpha*-dec-osf*
Systems using processors that implement the DEC Alpha architecture and
*************** Tru64 UNIX) operating system, for exampl
*** 1773,1778 ****
--- 1826,1838 ----
Support for versions before @code{alpha*-dec-osf4} is obsoleted in GCC
3.1. (These are the versions which identify themselves as DEC OSF/1.)
+ In Digital Unix V4.0, virtual memory exhausted bootstrap failures
+ may be fixed by configuring with @option{--with-gc=simple},
+ reconfiguring Kernel Virtual Memory and Swap parameters
+ per the @command{/usr/sbin/sys_check} Tuning Suggestions,
+ or applying the patch in
+ @uref{http://gcc.gnu.org/ml/gcc/2002-08/msg00822.html}.
+
In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not
currently (2001-06-13) work with @command{mips-tfile}. As a workaround,
we need to use the old assembler, invoked via the barely documented
*************** DBX@. DEC is now aware of this problem
*** 1839,1846 ****
provide a fix shortly.
@html
!
!
@end html
@heading @anchor{alphaev5-cray-unicosmk*}alphaev5-cray-unicosmk*
Cray T3E systems running Unicos/Mk.
--- 1899,1905 ----
provide a fix shortly.
@html
!
@end html
@heading @anchor{alphaev5-cray-unicosmk*}alphaev5-cray-unicosmk*
Cray T3E systems running Unicos/Mk.
*************** need to tell GCC where to find the assem
*** 1856,1863 ****
simplest way to do so is by providing @option{--with-as} and
@option{--with-ld} to @file{configure}, e.g.@:
! @samp{configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld
! --enable-languages=c}
The comparison test during @samp{make bootstrap} fails on Unicos/Mk
because the assembler inserts timestamps into object files. You should
--- 1915,1924 ----
simplest way to do so is by providing @option{--with-as} and
@option{--with-ld} to @file{configure}, e.g.@:
! @example
! configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld \
! --enable-languages=c
! @end example
The comparison test during @samp{make bootstrap} fails on Unicos/Mk
because the assembler inserts timestamps into object files. You should
*************** be able to work around this by doing @sa
*** 1865,1880 ****
failure.
@html
!
!
@end html
@heading @anchor{arc-*-elf}arc-*-elf
Argonaut ARC processor.
This configuration is intended for embedded systems.
@html
!
!
@end html
@heading @anchor{arm-*-aout}arm-*-aout
Advanced RISC Machines ARM-family processors. These are often used in
--- 1926,1939 ----
failure.
@html
!
@end html
@heading @anchor{arc-*-elf}arc-*-elf
Argonaut ARC processor.
This configuration is intended for embedded systems.
@html
!
@end html
@heading @anchor{arm-*-aout}arm-*-aout
Advanced RISC Machines ARM-family processors. These are often used in
*************** You may need to make a variant of the fi
*** 1886,1908 ****
configuration.
@html
!
!
@end html
@heading @anchor{arm-*-elf}arm-*-elf
This configuration is intended for embedded systems.
@html
!
!
@end html
@heading @anchor{arm*-*-linux-gnu}arm*-*-linux-gnu
We require GNU binutils 2.10 or newer.
@html
!
!
@end html
@heading @anchor{arm-*-riscix}arm-*-riscix
The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.
--- 1945,1964 ----
configuration.
@html
!
@end html
@heading @anchor{arm-*-elf}arm-*-elf
This configuration is intended for embedded systems.
@html
!
@end html
@heading @anchor{arm*-*-linux-gnu}arm*-*-linux-gnu
We require GNU binutils 2.10 or newer.
@html
!
@end html
@heading @anchor{arm-*-riscix}arm-*-riscix
The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.
*************** debugging, pass @option{--with-gnu-as} t
*** 1919,1926 ****
You will need to install GNU @command{sed} before you can run configure.
@html
!
!
@end html
@heading @anchor{avr}avr
--- 1975,1981 ----
You will need to install GNU @command{sed} before you can run configure.
@html
!
@end html
@heading @anchor{avr}avr
*************** The following error:
*** 1957,1964 ****
indicates that you should upgrade to a newer version of the binutils.
@html
!
!
@end html
@heading @anchor{c4x}c4x
--- 2012,2018 ----
indicates that you should upgrade to a newer version of the binutils.
@html
!
@end html
@heading @anchor{c4x}c4x
*************** can also be obtained from:
*** 1988,1995 ****
@end itemize
@html
!
!
@end html
@heading @anchor{cris}CRIS
--- 2042,2048 ----
@end itemize
@html
!
@end html
@heading @anchor{cris}CRIS
*************** information about this platform is avail
*** 2027,2034 ****
@uref{http://developer.axis.com/}.
@html
!
!
@end html
@heading @anchor{dos}DOS
--- 2080,2086 ----
@uref{http://developer.axis.com/}.
@html
!
@end html
@heading @anchor{dos}DOS
*************** compilation package DJGPP, which include
*** 2040,2054 ****
and includes all the necessary compilation tools and libraries.
@html
!
!
@end html
@heading @anchor{dsp16xx}dsp16xx
A port to the AT&T DSP1610 family of processors.
@html
!
!
@end html
@heading @anchor{*-*-freebsd*}*-*-freebsd*
--- 2092,2104 ----
and includes all the necessary compilation tools and libraries.
@html
!
@end html
@heading @anchor{dsp16xx}dsp16xx
A port to the AT&T DSP1610 family of processors.
@html
!
@end html
@heading @anchor{*-*-freebsd*}*-*-freebsd*
*************** results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4
*** 2078,2092 ****
In principle, @option{--enable-threads} is now compatible with
@option{--enable-libgcj} on FreeBSD@. However, it has only been built
! and tested on i386-*-freebsd4.5 and alpha-*-freebsd5.0. The static
library may be incorrectly built (symbols are missing at link time).
There is a rare timing-based startup hang (probably involves an
assupmtion about the thread library). Multi-threaded boehm-gc (required for
libjava) exposes severe threaded signal-handling bugs on FreeBSD before
4.5-RELEASE. The alpha port may not fully bootstrap without some manual
! intervention: gcjh will crash with a floating-point exception while
generating @file{java/lang/Double.h} (just copy the version built on
! i386-*-freebsd* and rerun the top-level gmake with no arguments and it
should properly complete the bootstrap). Other CPU architectures
supported by FreeBSD will require additional configuration tuning in, at
the very least, both boehm-gc and libffi.
--- 2128,2144 ----
In principle, @option{--enable-threads} is now compatible with
@option{--enable-libgcj} on FreeBSD@. However, it has only been built
! and tested on @samp{i386-*-freebsd4.5} and @samp{alpha-*-freebsd5.0}.
! The static
library may be incorrectly built (symbols are missing at link time).
There is a rare timing-based startup hang (probably involves an
assupmtion about the thread library). Multi-threaded boehm-gc (required for
libjava) exposes severe threaded signal-handling bugs on FreeBSD before
4.5-RELEASE. The alpha port may not fully bootstrap without some manual
! intervention: @command{gcjh} will crash with a floating-point exception while
generating @file{java/lang/Double.h} (just copy the version built on
! @samp{i386-*-freebsd*} and rerun the top-level @command{gmake} with no
! arguments and it
should properly complete the bootstrap). Other CPU architectures
supported by FreeBSD will require additional configuration tuning in, at
the very least, both boehm-gc and libffi.
*************** the very least, both boehm-gc and libffi
*** 2094,2101 ****
Shared @file{libgcc_s.so} is now built and installed by default.
@html
!
!
@end html
@heading @anchor{elxsi-elxsi-bsd}elxsi-elxsi-bsd
The Elxsi's C compiler has known limitations that prevent it from
--- 2146,2152 ----
Shared @file{libgcc_s.so} is now built and installed by default.
@html
!
@end html
@heading @anchor{elxsi-elxsi-bsd}elxsi-elxsi-bsd
The Elxsi's C compiler has known limitations that prevent it from
*************** compiling GCC@. Please contact @email{m
*** 2104,2111 ****
Support for this processor is obsoleted in GCC 3.1.
@html
!
!
@end html
@heading @anchor{h8300-hms}h8300-hms
Hitachi H8/300 series of processors.
--- 2155,2161 ----
Support for this processor is obsoleted in GCC 3.1.
@html
!
@end html
@heading @anchor{h8300-hms}h8300-hms
Hitachi H8/300 series of processors.
*************** first three arguments in function calls
*** 2118,2131 ****
longer a multiple of 2 bytes.
@html
!
!
@end html
@heading @anchor{hppa*-hp-hpux*}hppa*-hp-hpux*
We @emph{highly} recommend using gas/binutils 2.8 or newer on all hppa
platforms; you may encounter a variety of problems when using the HP
! assembler.
Specifically, @option{-g} does not work on HP-UX (since that system
uses a peculiar debugging format which GCC does not know about), unless you
--- 2168,2181 ----
longer a multiple of 2 bytes.
@html
!
@end html
@heading @anchor{hppa*-hp-hpux*}hppa*-hp-hpux*
We @emph{highly} recommend using gas/binutils 2.8 or newer on all hppa
platforms; you may encounter a variety of problems when using the HP
! assembler. The HP assembler does not work with the @samp{hppa64-hp-hpux11*}
! port.
Specifically, @option{-g} does not work on HP-UX (since that system
uses a peculiar debugging format which GCC does not know about), unless you
*************** use GAS and GDB and configure GCC with t
*** 2133,2147 ****
@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
@option{--with-as=@dots{}} options.
! If you wish to use pa-risc 2.0 architecture support, you must use either
! the HP assembler, gas/binutils 2.11 or a recent
@uref{ftp://sources.redhat.com/pub/binutils/snapshots,,snapshot of gas}.
More specific information to @samp{hppa*-hp-hpux*} targets follows.
@html
!
!
@end html
@heading @anchor{hppa*-hp-hpux9}hppa*-hp-hpux9
--- 2183,2197 ----
@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
@option{--with-as=@dots{}} options.
! If you wish to use the pa-risc 2.0 architecture support with a 32-bit
! runtime, you must use either the HP assembler, gas/binutils 2.11 or newer,
! or a recent
@uref{ftp://sources.redhat.com/pub/binutils/snapshots,,snapshot of gas}.
More specific information to @samp{hppa*-hp-hpux*} targets follows.
@html
!
@end html
@heading @anchor{hppa*-hp-hpux9}hppa*-hp-hpux9
*************** and @env{SHELL} to @file{/bin/ksh} in yo
*** 2157,2164 ****
@html
!
!
@end html
@heading @anchor{hppa*-hp-hpux10}hppa*-hp-hpux10
--- 2207,2213 ----
@html
!
@end html
@heading @anchor{hppa*-hp-hpux10}hppa*-hp-hpux10
*************** bootstrap}.
*** 2189,2219 ****
@html
!
!
@end html
@heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11
! GCC 3.0 and up support HP-UX 11. You must use GNU binutils 2.11 or above on
! this platform. Thread support is not currently implemented for this
! platform, so @option{--enable-threads} does not work.
! See @uref{http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html}
! and @uref{http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html}.
GCC 2.95.x is not supported under HP-UX 11 and cannot be used to
compile GCC 3.0 and up. Refer to @uref{binaries.html,,binaries} for
information about obtaining precompiled GCC binaries for HP-UX.
@html
!
!
@end html
@heading @anchor{i370-*-*}i370-*-*
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
@html
!
!
@end html
@heading @anchor{*-*-linux-gnu}*-*-linux-gnu
--- 2238,2290 ----
@html
!
@end html
@heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11
! GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there
! are two distinct ports. The @samp{hppa2.0w-hp-hpux11*} port generates
! code for the 32-bit pa-risc runtime architecture. It uses the HP
! linker and is currently the default selected by config.guess. The
! optional @samp{hppa64-hp-hpux11*} port generates 64-bit code for the
! pa-risc 2.0 architecture. It must be explicitly selected using the
! @samp{--host=hppa64-hp-hpux11*} configure option. Different prefixes
! must be used if both ports are to be installed on the same system.
!
! You must use GNU binutils 2.11 or above with the 32-bit port. Thread
! support is not currently implemented, so @option{--enable-threads} does
! not work. See:
!
! @itemize
! @item @uref{http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html}
! @item @uref{http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html}.
! @end itemize
!
GCC 2.95.x is not supported under HP-UX 11 and cannot be used to
compile GCC 3.0 and up. Refer to @uref{binaries.html,,binaries} for
information about obtaining precompiled GCC binaries for HP-UX.
+ GNU binutils 2.13 or later is recommended with the 64-bit port.
+ The HP assembler is not supported. It is @emph{highly} recommended
+ that the GNU linker be used as well. Either binutils must be built
+ prior to gcc, or a binary distribution of gcc or binutils must be
+ obtained for the initial builds. When starting with a HP compiler,
+ it is preferable to use the ANSI compiler as the bundled compiler
+ only supports traditional C. Bootstrapping with the bundled compiler
+ is tested infrequently and problems often arise because of the subtle
+ differences in semantics between traditional and ISO C. There also
+ have been problems reported with various binary distributions. This
+ port still is undergoing significant development.
+
@html
!
@end html
@heading @anchor{i370-*-*}i370-*-*
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
@html
!
@end html
@heading @anchor{*-*-linux-gnu}*-*-linux-gnu
*************** The patch @uref{glibc-2.2.patch,,glibc-2
*** 2223,2229 ****
applied in the GCC source tree, fixes the compatibility problems.
@html
-
@end html
@html
--- 2294,2299 ----
*************** glibc 2.2.4 whether patches for GCC 3.0
*** 2240,2247 ****
2.2.3 with GCC 3.0, just do not try to recompile it.
@html
!
!
@end html
@heading @anchor{ix86-*-linux*oldld}i?86-*-linux*oldld
Use this configuration to generate @file{a.out} binaries on Linux-based
--- 2310,2316 ----
2.2.3 with GCC 3.0, just do not try to recompile it.
@html
!
@end html
@heading @anchor{ix86-*-linux*oldld}i?86-*-linux*oldld
Use this configuration to generate @file{a.out} binaries on Linux-based
*************** installed.
*** 2251,2258 ****
This configuration is obsoleted in GCC 3.1.
@html
!
!
@end html
@heading @anchor{ix86-*-linux*aout}i?86-*-linux*aout
Use this configuration to generate @file{a.out} binaries on Linux-based
--- 2320,2326 ----
This configuration is obsoleted in GCC 3.1.
@html
!
@end html
@heading @anchor{ix86-*-linux*aout}i?86-*-linux*aout
Use this configuration to generate @file{a.out} binaries on Linux-based
*************** GNU systems. This configuration is bein
*** 2260,2267 ****
gas/binutils version 2.5.2 or later.
@html
!
!
@end html
@heading @anchor{ix86-*-linux*}i?86-*-linux*
--- 2328,2334 ----
gas/binutils version 2.5.2 or later.
@html
!
@end html
@heading @anchor{ix86-*-linux*}i?86-*-linux*
*************** possible you have a hardware problem. F
*** 2272,2294 ****
found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.
@html
!
!
@end html
@heading @anchor{ix86-*-sco}i?86-*-sco
Compilation with RCC is recommended. Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.
@html
!
!
@end html
@heading @anchor{ix86-*-sco3.2v4}i?86-*-sco3.2v4
Use this configuration for SCO release 3.2 version 4.
@html
!
!
@end html
@heading @anchor{ix86-*-sco3.2v5*}i?86-*-sco3.2v5*
Use this for the SCO OpenServer Release 5 family of operating systems.
--- 2339,2358 ----
found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.
@html
!
@end html
@heading @anchor{ix86-*-sco}i?86-*-sco
Compilation with RCC is recommended. Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.
@html
!
@end html
@heading @anchor{ix86-*-sco3.2v4}i?86-*-sco3.2v4
Use this configuration for SCO release 3.2 version 4.
@html
!
@end html
@heading @anchor{ix86-*-sco3.2v5*}i?86-*-sco3.2v5*
Use this for the SCO OpenServer Release 5 family of operating systems.
*************** engineering and will hopefully be addres
*** 2363,2370 ****
@html
!
!
@end html
@heading @anchor{ix86-*-udk}i?86-*-udk
--- 2427,2433 ----
@html
!
@end html
@heading @anchor{ix86-*-udk}i?86-*-udk
*************** from the right place) while making the t
*** 2383,2390 ****
building a cross compiler. The easiest way to do this is with a configure
command like this:
! @samp{CC=/udk/usr/ccs/bin/cc @var{/your/path/to}/gcc/configure
! --host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk-}
@emph{You should substitute @samp{i686} in the above command with the appropriate
processor for your host.}
--- 2446,2455 ----
building a cross compiler. The easiest way to do this is with a configure
command like this:
! @example
! CC=/udk/usr/ccs/bin/cc @var{/your/path/to}/gcc/configure \
! --host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk-
! @end example
@emph{You should substitute @samp{i686} in the above command with the appropriate
processor for your host.}
*************** have installed.
*** 2398,2405 ****
@html
!
!
@end html
@heading @anchor{ix86-*-isc}i?86-*-isc
This configuration is obsoleted in GCC 3.1.
--- 2463,2469 ----
@html
!
@end html
@heading @anchor{ix86-*-isc}i?86-*-isc
This configuration is obsoleted in GCC 3.1.
*************** In ISC version 4.1, @command{sed} core d
*** 2411,2418 ****
@file{deduced.h}. Use the version of @command{sed} from version 4.0.
@html
!
!
@end html
@heading @anchor{ix86-ibm-aix}i?86-ibm-aix
This configuration is obsoleted in GCC 3.1.
--- 2475,2481 ----
@file{deduced.h}. Use the version of @command{sed} from version 4.0.
@html
!
@end html
@heading @anchor{ix86-ibm-aix}i?86-ibm-aix
This configuration is obsoleted in GCC 3.1.
*************** You need to use GAS version 2.1 or later
*** 2421,2428 ****
GNU binutils version 2.2 or later.
@html
!
!
@end html
@heading @anchor{ix86-sequent-bsd}i?86-sequent-bsd
This configuration is obsoleted in GCC 3.1.
--- 2484,2490 ----
GNU binutils version 2.2 or later.
@html
!
@end html
@heading @anchor{ix86-sequent-bsd}i?86-sequent-bsd
This configuration is obsoleted in GCC 3.1.
*************** This configuration is obsoleted in GCC 3
*** 2430,2437 ****
Go to the Berkeley universe before compiling.
@html
!
!
@end html
@heading @anchor{ix86-sequent-ptx1*}i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3*
This configuration is obsoleted in GCC 3.1.
--- 2492,2498 ----
Go to the Berkeley universe before compiling.
@html
!
@end html
@heading @anchor{ix86-sequent-ptx1*}i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3*
This configuration is obsoleted in GCC 3.1.
*************** If you encounter this problem, upgrade y
*** 2443,2450 ****
use @command{bash} (the GNU shell) to run @code{fixproto}.
@html
!
!
@end html
@heading @anchor{i860-intel-osf*}i860-intel-osf*
All support for the i860 processor is obsoleted in GCC 3.1.
--- 2504,2510 ----
use @command{bash} (the GNU shell) to run @code{fixproto}.
@html
!
@end html
@heading @anchor{i860-intel-osf*}i860-intel-osf*
All support for the i860 processor is obsoleted in GCC 3.1.
*************** insert the line
*** 2488,2495 ****
These problems don't exist in operating system version 1.1.
@html
!
!
@end html
@heading @anchor{ia64-*-linux}ia64-*-linux
IA-64 processor (also known as IPF, or Itanium Processor Family)
--- 2548,2554 ----
These problems don't exist in operating system version 1.1.
@html
!
@end html
@heading @anchor{ia64-*-linux}ia64-*-linux
IA-64 processor (also known as IPF, or Itanium Processor Family)
*************** GCC 3.0.2 is believed to be fully ABI co
*** 2513,2520 ****
ABI changes are expected.
@html
!
!
@end html
@heading @anchor{*-lynx-lynxos}*-lynx-lynxos
LynxOS 2.2 and earlier comes with GCC 1.x already installed as
--- 2572,2578 ----
ABI changes are expected.
@html
!
@end html
@heading @anchor{*-lynx-lynxos}*-lynx-lynxos
LynxOS 2.2 and earlier comes with GCC 1.x already installed as
*************** COFF format object files and executables
*** 2525,2532 ****
installed tools, which produce @file{a.out} format executables.
@html
!
!
@end html
@heading @anchor{*-ibm-aix*}*-ibm-aix*
--- 2583,2589 ----
installed tools, which produce @file{a.out} format executables.
@html
!
@end html
@heading @anchor{*-ibm-aix*}*-ibm-aix*
*************** interoperate with GCC@.
*** 2554,2559 ****
--- 2611,2645 ----
Building @file{libstdc++.a} requires a fix for a AIX Assembler bug
APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).
+ @samp{libstdc++} in GCC 3.2 increments the major version number of the
+ shared object and GCC installation places the @file{libstdc++.a}
+ shared library in a common location which will overwrite the GCC 3.1
+ version of the shared library. Applications either need to be
+ re-linked against the new shared library or the GCC 3.1 version of the
+ @samp{libstdc++} shared object needs to be available to the AIX
+ runtime loader. The GCC 3.1 @samp{libstdc++.so.4} shared object can
+ be installed for runtime dynamic loading using the following steps to
+ set the @samp{F_LOADONLY} flag in the shared object for @emph{each}
+ multilib @file{libstdc++.a} installed:
+
+ Extract the shared object from each the GCC 3.1 @file{libstdc++.a}
+ archive:
+ @example
+ % ar -x libstdc++.a libstdc++.so.4
+ @end example
+
+ Enable the @samp{F_LOADONLY} flag so that the shared object will be
+ available for runtime dynamic loading, but not linking:
+ @example
+ % strip -e libstdc++.so.4
+ @end example
+
+ Archive the runtime-only shared object in the GCC 3.2
+ @file{libstdc++.a} archive:
+ @example
+ % ar -q libstdc++.a libstdc++.so.4
+ @end example
+
Linking executables and shared libraries may produce warnings of
duplicate symbols. The assembly files generated by GCC for AIX always
have included multiple symbol definitions for certain global variable
*************** A default can be specified with the @opt
*** 2606,2621 ****
switch and using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
!
!
@end html
@heading @anchor{m32r-*-elf}m32r-*-elf
Mitsubishi M32R processor.
This configuration is intended for embedded systems.
@html
!
!
@end html
@heading @anchor{m68000-hp-bsd}m68000-hp-bsd
HP 9000 series 200 running BSD@. Note that the C compiler that comes
--- 2692,2705 ----
switch and using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
!
@end html
@heading @anchor{m32r-*-elf}m32r-*-elf
Mitsubishi M32R processor.
This configuration is intended for embedded systems.
@html
!
@end html
@heading @anchor{m68000-hp-bsd}m68000-hp-bsd
HP 9000 series 200 running BSD@. Note that the C compiler that comes
*************** with this system cannot compile GCC; con
*** 2623,2646 ****
to get binaries of GCC for bootstrapping.
@html
!
!
@end html
@heading @anchor{m6811-elf}m6811-elf
Motorola 68HC11 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
@html
!
!
@end html
@heading @anchor{m6812-elf}m6812-elf
Motorola 68HC12 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
@html
!
!
@end html
@heading @anchor{m68k-altos}m68k-altos
Altos 3068. This configuration is obsoleted in GCC 3.1.
--- 2707,2727 ----
to get binaries of GCC for bootstrapping.
@html
!
@end html
@heading @anchor{m6811-elf}m6811-elf
Motorola 68HC11 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
@html
!
@end html
@heading @anchor{m6812-elf}m6812-elf
Motorola 68HC12 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
@html
!
@end html
@heading @anchor{m68k-altos}m68k-altos
Altos 3068. This configuration is obsoleted in GCC 3.1.
*************** You must use the GNU assembler, linker a
*** 2649,2656 ****
Also, you must fix a kernel bug.
@html
!
!
@end html
@heading @anchor{m68k-apple-aux}m68k-apple-aux
Apple Macintosh running A/UX@.
--- 2730,2736 ----
Also, you must fix a kernel bug.
@html
!
@end html
@heading @anchor{m68k-apple-aux}m68k-apple-aux
Apple Macintosh running A/UX@.
*************** You will also a patched version of @file
*** 2669,2676 ****
raises some of the arbitrary limits found in the original.
@html
!
!
@end html
@heading @anchor{m68k-att-sysv}m68k-att-sysv
AT&T 3b1, a.k.a.@: 7300 PC@. This version of GCC cannot
--- 2749,2755 ----
raises some of the arbitrary limits found in the original.
@html
!
@end html
@heading @anchor{m68k-att-sysv}m68k-att-sysv
AT&T 3b1, a.k.a.@: 7300 PC@. This version of GCC cannot
*************** bootstrap. Binaries are available from
*** 2680,2687 ****
@uref{ftp://archive.cis.ohio-state.edu/pub/att7300/}.
@html
!
!
@end html
@heading @anchor{m68k-bull-sysv}m68k-bull-sysv
Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01.
--- 2759,2765 ----
@uref{ftp://archive.cis.ohio-state.edu/pub/att7300/}.
@html
!
@end html
@heading @anchor{m68k-bull-sysv}m68k-bull-sysv
Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01.
*************** assembler or for availability of the DPX
*** 2696,2703 ****
@email{F.Pierresteguy@@frcl.bull.fr}.
@html
!
!
@end html
@heading @anchor{m68k-crds-unos}m68k-crds-unos
Use @samp{configure unos} for building on Unos.
--- 2774,2780 ----
@email{F.Pierresteguy@@frcl.bull.fr}.
@html
!
@end html
@heading @anchor{m68k-crds-unos}m68k-crds-unos
Use @samp{configure unos} for building on Unos.
*************** If linking @file{cc1} fails, try putting
*** 2736,2743 ****
and linking from that library.
@html
!
!
@end html
@heading @anchor{m68k-hp-hpux}m68k-hp-hpux
HP 9000 series 300 or 400 running HP-UX@. HP-UX version 8.0 has a bug in
--- 2813,2819 ----
and linking from that library.
@html
!
@end html
@heading @anchor{m68k-hp-hpux}m68k-hp-hpux
HP 9000 series 300 or 400 running HP-UX@. HP-UX version 8.0 has a bug in
*************** to look like:
*** 2795,2802 ****
@html
!
!
@end html
@heading @anchor{m68k-*-nextstep*}m68k-*-nextstep*
These configurations are obsoleted in GCC 3.1.
--- 2871,2877 ----
@html
!
@end html
@heading @anchor{m68k-*-nextstep*}m68k-*-nextstep*
These configurations are obsoleted in GCC 3.1.
*************** for this sequence to work.
*** 2846,2853 ****
@end example
@html
!
!
@end html
@heading @anchor{m68k-ncr-*}m68k-ncr-*
On the Tower models 4@var{n}0 and 6@var{n}0, by default a process is not
--- 2921,2927 ----
@end example
@html
!
@end html
@heading @anchor{m68k-ncr-*}m68k-ncr-*
On the Tower models 4@var{n}0 and 6@var{n}0, by default a process is not
*************** MAXUMEM = 4096
*** 2863,2870 ****
@html
!
!
@end html
@heading @anchor{m68k-sun}m68k-sun
Sun 3. We do not provide a configuration file to use the Sun FPA by
--- 2937,2943 ----
@html
!
@end html
@heading @anchor{m68k-sun}m68k-sun
Sun 3. We do not provide a configuration file to use the Sun FPA by
*************** default, because programs that establish
*** 2872,2879 ****
point traps inherently cannot work with the FPA@.
@html
!
!
@end html
@heading @anchor{m68k-sun-sunos4.1.1}m68k-sun-sunos4.1.1
--- 2945,2951 ----
point traps inherently cannot work with the FPA@.
@html
!
@end html
@heading @anchor{m68k-sun-sunos4.1.1}m68k-sun-sunos4.1.1
*************** It is reported that you may need the GNU
*** 2881,2888 ****
@html
!
!
@end html
@heading @anchor{m88k-*-svr3}m88k-*-svr3
Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port.
--- 2953,2959 ----
@html
!
@end html
@heading @anchor{m88k-*-svr3}m88k-*-svr3
Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port.
*************** It is best, however, to use an older ver
*** 2900,2907 ****
if you have one.
@html
!
!
@end html
@heading @anchor{m88k-*-dgux}m88k-*-dgux
Motorola m88k running DG/UX@.
--- 2971,2977 ----
if you have one.
@html
!
@end html
@heading @anchor{m88k-*-dgux}m88k-*-dgux
Motorola m88k running DG/UX@.
*************** If you do not specify a configuration na
*** 2920,2927 ****
configuration based on the current software development environment.
@html
!
!
@end html
@heading @anchor{m88k-tektronix-sysv3}m88k-tektronix-sysv3
Tektronix XD88 running UTekV 3.2e.
--- 2990,2996 ----
configuration based on the current software development environment.
@html
!
@end html
@heading @anchor{m88k-tektronix-sysv3}m88k-tektronix-sysv3
Tektronix XD88 running UTekV 3.2e.
*************** Otherwise you may have trouble getting c
*** 2936,2943 ****
between stages.
@html
!
!
@end html
@heading @anchor{mips-*-*}mips-*-*
If you use the 1.31 version of the MIPS assembler (such as was shipped
--- 3005,3011 ----
between stages.
@html
!
@end html
@heading @anchor{mips-*-*}mips-*-*
If you use the 1.31 version of the MIPS assembler (such as was shipped
*************** If you override the @code{CC} make varia
*** 2990,2997 ****
compilers, you may need to add @option{-Wf,-XNg1500 -Olimit 3000}.
@html
!
!
@end html
@heading @anchor{mips-dec-*}mips-dec-*
These configurations are obsoleted in GCC 3.1.
--- 3058,3064 ----
compilers, you may need to add @option{-Wf,-XNg1500 -Olimit 3000}.
@html
!
@end html
@heading @anchor{mips-dec-*}mips-dec-*
These configurations are obsoleted in GCC 3.1.
*************** If you override the @code{CC} make varia
*** 3024,3031 ****
compilers, you may need to add @option{-Wf,-XNg1500 -Olimit 3000}.
@html
!
!
@end html
@heading @anchor{mips-mips-riscos*}mips-mips-riscos*
These configurations are obsoleted in GCC 3.1.
--- 3091,3097 ----
compilers, you may need to add @option{-Wf,-XNg1500 -Olimit 3000}.
@html
!
@end html
@heading @anchor{mips-mips-riscos*}mips-mips-riscos*
These configurations are obsoleted in GCC 3.1.
*************** BSD 4.3 configuration for RISC-OS, revis
*** 3055,3062 ****
System V.4 configuration for RISC-OS, revision @var{rev}.
@html
!
!
@end html
@item mips-mips-riscos@var{rev}sysv
System V.3 configuration for RISC-OS, revision @var{rev}.
--- 3121,3127 ----
System V.4 configuration for RISC-OS, revision @var{rev}.
@html
!
@end html
@item mips-mips-riscos@var{rev}sysv
System V.3 configuration for RISC-OS, revision @var{rev}.
*************** RISC-OS revision 4 to RISC-OS revision 5
*** 3068,3075 ****
avoiding a linker bug.
@html
!
!
@end html
@heading @anchor{mips-sgi-irix4}mips-sgi-irix4
This configuration is obsoleted in GCC 3.1.
--- 3133,3139 ----
avoiding a linker bug.
@html
!
@end html
@heading @anchor{mips-sgi-irix4}mips-sgi-irix4
This configuration is obsoleted in GCC 3.1.
*************** ignored.
*** 3101,3108 ****
@end example
@html
!
!
@end html
@heading @anchor{mips-sgi-irix5}mips-sgi-irix5
--- 3165,3171 ----
@end example
@html
!
@end html
@heading @anchor{mips-sgi-irix5}mips-sgi-irix5
*************** however, you may have success with @comm
*** 3147,3154 ****
not have GNU @command{make} available.
@html
!
!
@end html
@heading @anchor{mips-sgi-irix6}mips-sgi-irix6
--- 3210,3216 ----
not have GNU @command{make} available.
@html
!
@end html
@heading @anchor{mips-sgi-irix6}mips-sgi-irix6
*************** See @uref{http://freeware.sgi.com/,,http
*** 3247,3254 ****
information about using GCC on IRIX platforms.
@html
!
!
@end html
@heading @anchor{mips-sony-sysv}mips-sony-sysv
Sony MIPS NEWS@. This configuration is obsoleted in GCC 3.1.
--- 3309,3315 ----
information about using GCC on IRIX platforms.
@html
!
@end html
@heading @anchor{mips-sony-sysv}mips-sony-sysv
Sony MIPS NEWS@. This configuration is obsoleted in GCC 3.1.
*************** COFF)@. In particular, the linker does
*** 3258,3265 ****
GCC when shared libraries are linked in.
@html
!
!
@end html
@heading @anchor{ns32k-encore}ns32k-encore
This configuration is obsoleted in GCC 3.1.
--- 3319,3325 ----
GCC when shared libraries are linked in.
@html
!
@end html
@heading @anchor{ns32k-encore}ns32k-encore
This configuration is obsoleted in GCC 3.1.
*************** This configuration is obsoleted in GCC 3
*** 3267,3274 ****
Encore ns32000 system. Encore systems are supported only under BSD@.
@html
!
!
@end html
@heading @anchor{ns32k-*-genix}ns32k-*-genix
National Semiconductor ns32000 system. This configuration is obsoleted
--- 3327,3333 ----
Encore ns32000 system. Encore systems are supported only under BSD@.
@html
!
@end html
@heading @anchor{ns32k-*-genix}ns32k-*-genix
National Semiconductor ns32000 system. This configuration is obsoleted
*************** Genix has bugs in @code{alloca} and @cod
*** 3278,3285 ****
compiled versions of these from GNU Emacs.
@html
!
!
@end html
@heading @anchor{ns32k-sequent}ns32k-sequent
This configuration is obsoleted in GCC 3.1.
--- 3337,3343 ----
compiled versions of these from GNU Emacs.
@html
!
@end html
@heading @anchor{ns32k-sequent}ns32k-sequent
This configuration is obsoleted in GCC 3.1.
*************** This configuration is obsoleted in GCC 3
*** 3287,3294 ****
Go to the Berkeley universe before compiling.
@html
!
!
@end html
@heading @anchor{ns32k-utek}ns32k-utek
UTEK ns32000 system (``merlin''). This configuration is obsoleted in
--- 3345,3351 ----
Go to the Berkeley universe before compiling.
@html
!
@end html
@heading @anchor{ns32k-utek}ns32k-utek
UTEK ns32000 system (``merlin''). This configuration is obsoleted in
*************** The C compiler that comes with this syst
*** 3299,3306 ****
@html
!
!
@end html
@heading @anchor{powerpc*-*-*}powerpc-*-*
--- 3356,3362 ----
@html
!
@end html
@heading @anchor{powerpc*-*-*}powerpc-*-*
*************** You can specify a default version for th
*** 3308,3315 ****
switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
!
!
@end html
@heading @anchor{powerpc-*-darwin*}powerpc-*-darwin*
PowerPC running Darwin (Mac OS X kernel).
--- 3364,3370 ----
switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
!
@end html
@heading @anchor{powerpc-*-darwin*}powerpc-*-darwin*
PowerPC running Darwin (Mac OS X kernel).
*************** binaries are available at
*** 3323,3329 ****
registration required).
Versions of the assembler prior to ``cctools-364'' cannot handle the
! 4-argument form of rlwinm and related mask-using instructions. Darwin
1.3 (Mac OS X 10.0) uses cctools-353 for instance. To get cctools-364,
check out @file{cctools} with tag @samp{Apple-364}, build it, and
install the assembler as @file{usr/bin/as}. See
--- 3378,3384 ----
registration required).
Versions of the assembler prior to ``cctools-364'' cannot handle the
! 4-argument form of @code{rlwinm} and related mask-using instructions. Darwin
1.3 (Mac OS X 10.0) uses cctools-353 for instance. To get cctools-364,
check out @file{cctools} with tag @samp{Apple-364}, build it, and
install the assembler as @file{usr/bin/as}. See
*************** number of extensions not available in a
*** 3342,3366 ****
extensions are generally specific to Mac programming.
@html
!
!
@end html
@heading @anchor{powerpc-*-elf}powerpc-*-elf, powerpc-*-sysv4
PowerPC system in big endian mode, running System V.4.
@html
!
!
@end html
@heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu*
You will need
! @uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.12.90.0.7}
or newer for a working GCC@.
@html
!
!
@end html
@heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd*
PowerPC system in big endian mode running NetBSD@. To build the
--- 3397,3418 ----
extensions are generally specific to Mac programming.
@html
!
@end html
@heading @anchor{powerpc-*-elf}powerpc-*-elf, powerpc-*-sysv4
PowerPC system in big endian mode, running System V.4.
@html
!
@end html
@heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu*
You will need
! @uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.13.90.0.10}
or newer for a working GCC@.
@html
!
@end html
@heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd*
PowerPC system in big endian mode running NetBSD@. To build the
*************** documentation you will need Texinfo vers
*** 3368,3427 ****
Texinfo version 3.12).
@html
!
!
@end html
@heading @anchor{powerpc-*-eabiaix}powerpc-*-eabiaix
Embedded PowerPC system in big endian mode with @option{-mcall-aix} selected as
the default.
@html
!
!
@end html
@heading @anchor{powerpc-*-eabisim}powerpc-*-eabisim
Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.
@html
!
!
@end html
@heading @anchor{powerpc-*-eabi}powerpc-*-eabi
Embedded PowerPC system in big endian mode.
@html
!
!
@end html
@heading @anchor{powerpcle-*-elf}powerpcle-*-elf, powerpcle-*-sysv4
PowerPC system in little endian mode, running System V.4.
@html
!
!
@end html
@heading @anchor{powerpcle-*-eabisim}powerpcle-*-eabisim
Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.
@html
!
!
@end html
@heading @anchor{powerpcle-*-eabi}powerpcle-*-eabi
Embedded PowerPC system in little endian mode.
@html
!
!
@end html
@heading @anchor{powerpcle-*-winnt}powerpcle-*-winnt, powerpcle-*-pe
PowerPC system in little endian mode running Windows NT@.
@html
!
!
@end html
@heading @anchor{romp-*-aos}romp-*-aos, romp-*-mach
These configurations are obsoleted in GCC 3.1.
--- 3420,3471 ----
Texinfo version 3.12).
@html
!
@end html
@heading @anchor{powerpc-*-eabiaix}powerpc-*-eabiaix
Embedded PowerPC system in big endian mode with @option{-mcall-aix} selected as
the default.
@html
!
@end html
@heading @anchor{powerpc-*-eabisim}powerpc-*-eabisim
Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.
@html
!
@end html
@heading @anchor{powerpc-*-eabi}powerpc-*-eabi
Embedded PowerPC system in big endian mode.
@html
!
@end html
@heading @anchor{powerpcle-*-elf}powerpcle-*-elf, powerpcle-*-sysv4
PowerPC system in little endian mode, running System V.4.
@html
!
@end html
@heading @anchor{powerpcle-*-eabisim}powerpcle-*-eabisim
Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.
@html
!
@end html
@heading @anchor{powerpcle-*-eabi}powerpcle-*-eabi
Embedded PowerPC system in little endian mode.
@html
!
@end html
@heading @anchor{powerpcle-*-winnt}powerpcle-*-winnt, powerpcle-*-pe
PowerPC system in little endian mode running Windows NT@.
@html
!
@end html
@heading @anchor{romp-*-aos}romp-*-aos, romp-*-mach
These configurations are obsoleted in GCC 3.1.
*************** floating-point constants and can be safe
*** 3434,3455 ****
is correct.
@html
!
!
@end html
@heading @anchor{s390-*-linux*}s390-*-linux*
S/390 system running Linux for S/390@.
@html
!
!
@end html
@heading @anchor{s390x-*-linux*}s390x-*-linux*
zSeries system (64-bit) running Linux for zSeries@.
@html
!
!
@end html
@c Please use Solaris 2 to refer to all release of Solaris, starting
@c with 2.0 until 2.6, 7, and 8. Solaris 1 was a marketing name for
--- 3478,3496 ----
is correct.
@html
!
@end html
@heading @anchor{s390-*-linux*}s390-*-linux*
S/390 system running Linux for S/390@.
@html
!
@end html
@heading @anchor{s390x-*-linux*}s390x-*-linux*
zSeries system (64-bit) running Linux for zSeries@.
@html
!
@end html
@c Please use Solaris 2 to refer to all release of Solaris, starting
@c with 2.0 until 2.6, 7, and 8. Solaris 1 was a marketing name for
*************** There are patches for Solaris 2.6 (10563
*** 3502,3509 ****
108653-22 for Intel) that fix this bug.
@html
!
!
@end html
@heading @anchor{sparc-sun-solaris2*}sparc-sun-solaris2*
--- 3543,3549 ----
108653-22 for Intel) that fix this bug.
@html
!
@end html
@heading @anchor{sparc-sun-solaris2*}sparc-sun-solaris2*
*************** information.
*** 3515,3522 ****
Sun @command{as} 4.x is broken in that it cannot cope with long symbol names.
A typical error message might look similar to the following:
! @samp{/usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041:
! error: can't compute value of an expression involving an external symbol.}
This is Sun bug 4237974. This is fixed with patch 108908-02 for Solaris
2.6 and has been fixed in later (5.x) versions of the assembler,
--- 3555,3564 ----
Sun @command{as} 4.x is broken in that it cannot cope with long symbol names.
A typical error message might look similar to the following:
! @smallexample
! /usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: error:
! can't compute value of an expression involving an external symbol.
! @end smallexample
This is Sun bug 4237974. This is fixed with patch 108908-02 for Solaris
2.6 and has been fixed in later (5.x) versions of the assembler,
*************** that supports only 32-bit binaries, one
*** 3536,3543 ****
64-bit target libraries.
@html
!
!
@end html
@heading @anchor{sparc-sun-solaris2.7}sparc-sun-solaris2.7
--- 3578,3584 ----
64-bit target libraries.
@html
!
@end html
@heading @anchor{sparc-sun-solaris2.7}sparc-sun-solaris2.7
*************** the Solaris 7 Recommended Patch Cluster.
*** 3579,3585 ****
@html
!
@end html
@heading @anchor{sparc-sun-sunos4*}sparc-sun-sunos4*
--- 3620,3626 ----
@html
!
@end html
@heading @anchor{sparc-sun-sunos4*}sparc-sun-sunos4*
*************** be due to a bug in @command{sh}. You ca
*** 3598,3605 ****
@command{make}.
@html
!
!
@end html
@heading @anchor{sparc-unknown-linux-gnulibc1}sparc-unknown-linux-gnulibc1
--- 3639,3645 ----
@command{make}.
@html
!
@end html
@heading @anchor{sparc-unknown-linux-gnulibc1}sparc-unknown-linux-gnulibc1
*************** for this platform, too.
*** 3609,3616 ****
@html
!
!
@end html
@heading @anchor{sparc-*-linux*}sparc-*-linux*
--- 3649,3655 ----
@html
!
@end html
@heading @anchor{sparc-*-linux*}sparc-*-linux*
*************** releases mishandled unaligned relocation
*** 3620,3627 ****
@html
!
!
@end html
@heading @anchor{sparc64-*-*}sparc64-*-*
--- 3659,3665 ----
@html
!
@end html
@heading @anchor{sparc64-*-*}sparc64-*-*
*************** invocation with an environment that caus
*** 3632,3639 ****
recognize (via @samp{uname -a}) the system as @samp{sparc-*-*} instead.
@html
!
!
@end html
@heading @anchor{sparcv9-*-solaris2*}sparcv9-*-solaris2*
--- 3670,3676 ----
recognize (via @samp{uname -a}) the system as @samp{sparc-*-*} instead.
@html
!
@end html
@heading @anchor{sparcv9-*-solaris2*}sparcv9-*-solaris2*
*************** step in order to bootstrap this target w
*** 3648,3655 ****
specifies the v9 architecture to the Sun linker and assembler.
@html
!
!
@end html
@heading @anchor{#*-*-sysv*}*-*-sysv*
On System V release 3, you may get this error message
--- 3685,3691 ----
specifies the v9 architecture to the Sun linker and assembler.
@html
!
@end html
@heading @anchor{#*-*-sysv*}*-*-sysv*
On System V release 3, you may get this error message
*************** On a System V release 4 system, make sur
*** 3683,3698 ****
@file{/usr/ucb} uses libraries which have bugs.
@html
!
!
@end html
@heading @anchor{vax-dec-ultrix}vax-dec-ultrix
Don't try compiling with VAX C (@code{vcc}). It produces incorrect code
in some cases (for example, when @code{alloca} is used).
@html
!
!
@end html
@heading @anchor{we32k-*-*}we32k-*-*
These computers are also known as the 3b2, 3b5, 3b20 and other similar
--- 3719,3732 ----
@file{/usr/ucb} uses libraries which have bugs.
@html
!
@end html
@heading @anchor{vax-dec-ultrix}vax-dec-ultrix
Don't try compiling with VAX C (@code{vcc}). It produces incorrect code
in some cases (for example, when @code{alloca} is used).
@html
!
@end html
@heading @anchor{we32k-*-*}we32k-*-*
These computers are also known as the 3b2, 3b5, 3b20 and other similar
*************** You may need to raise the ULIMIT setting
*** 3730,3737 ****
as the file @file{cc1plus} is larger than one megabyte.
@html
!
!
@end html
@heading @anchor{xtensa-*-elf}xtensa-*-elf
--- 3764,3770 ----
as the file @file{cc1plus} is larger than one megabyte.
@html
!
@end html
@heading @anchor{xtensa-*-elf}xtensa-*-elf
*************** downloaded files include a customized co
*** 3749,3756 ****
which you can use to replace the default header file.
@html
!
!
@end html
@heading @anchor{xtensa-*-linux*}xtensa-*-linux*
--- 3782,3788 ----
which you can use to replace the default header file.
@html
!
@end html
@heading @anchor{xtensa-*-linux*}xtensa-*-linux*
*************** respects, this target is the same as the
*** 3762,3769 ****
@uref{#xtensa-*-elf,,@samp{xtensa-*-elf}} target.
@html
!
!
@end html
@heading @anchor{windows}Microsoft Windows (32-bit)
--- 3794,3800 ----
@uref{#xtensa-*-elf,,@samp{xtensa-*-elf}} target.
@html
!
@end html
@heading @anchor{windows}Microsoft Windows (32-bit)
*************** Current (as of early 2001) snapshots of
*** 3774,3781 ****
without modification.
@html
!
!
@end html
@heading @anchor{os2}OS/2
--- 3805,3811 ----
without modification.
@html
!
@end html
@heading @anchor{os2}OS/2
*************** An older copy of GCC 2.8.1 is included w
*** 3788,3795 ****
ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/}.
@html
!
!
@end html
@heading @anchor{older}Older systems
--- 3818,3824 ----
ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/}.
@html
!
@end html
@heading @anchor{older}Older systems
*************** about GCC on such systems (which may no
*** 3839,3846 ****
current GCC) is to be found in the GCC texinfo manual.
@html
!
!
@end html
@heading @anchor{elf_targets}all ELF targets (SVR4, Solaris 2, etc.)
--- 3868,3874 ----
current GCC) is to be found in the GCC texinfo manual.
@html
!
@end html
@heading @anchor{elf_targets}all ELF targets (SVR4, Solaris 2, etc.)
*************** automatically.
*** 3851,3858 ****
@html
!
!
@end html
@ifhtml
--- 3879,3885 ----
@html
!
@end html
@ifhtml
*************** automatically.
*** 3864,3871 ****
@ifset oldhtml
@include install-old.texi
@html
!
!
@end html
@ifhtml
--- 3891,3897 ----
@ifset oldhtml
@include install-old.texi
@html
!
@end html
@ifhtml
*************** automatically.
*** 3877,3884 ****
@ifset gfdlhtml
@include fdl.texi
@html
!
!
@end html
@ifhtml
--- 3903,3909 ----
@ifset gfdlhtml
@include fdl.texi
@html
!
@end html
@ifhtml
diff -Nrc3pad gcc-3.2/gcc/doc/invoke.texi gcc-3.2.1/gcc/doc/invoke.texi
*** gcc-3.2/gcc/doc/invoke.texi Thu May 16 10:55:55 2002
--- gcc-3.2.1/gcc/doc/invoke.texi Tue Oct 29 16:35:04 2002
*************** in the following sections.
*** 157,163 ****
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{
-c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol
! -v -### --target-help --help}
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
--- 157,163 ----
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{
-c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol
! -v -### --help --target-help --version}
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
*************** in the following sections.
*** 169,175 ****
-fallow-single-precision -fcond-mismatch @gol
-fsigned-bitfields -fsigned-char @gol
-funsigned-bitfields -funsigned-char @gol
! -fwritable-strings -fshort-wchar}
@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
--- 169,175 ----
-fallow-single-precision -fcond-mismatch @gol
-fsigned-bitfields -fsigned-char @gol
-funsigned-bitfields -funsigned-char @gol
! -fwritable-strings}
@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
*************** in the following sections.
*** 187,193 ****
-fno-optional-diags -fpermissive @gol
-frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol
-fuse-cxa-atexit -fvtable-gc -fno-weak -nostdinc++ @gol
! -fno-default-inline -Wctor-dtor-privacy @gol
-Wnon-virtual-dtor -Wreorder @gol
-Weffc++ -Wno-deprecated @gol
-Wno-non-template-friend -Wold-style-cast @gol
--- 187,193 ----
-fno-optional-diags -fpermissive @gol
-frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol
-fuse-cxa-atexit -fvtable-gc -fno-weak -nostdinc++ @gol
! -fno-default-inline -Wabi -Wctor-dtor-privacy @gol
-Wnon-virtual-dtor -Wreorder @gol
-Weffc++ -Wno-deprecated @gol
-Wno-non-template-friend -Wold-style-cast @gol
*************** in the following sections.
*** 211,217 ****
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{
-fsyntax-only -pedantic -pedantic-errors @gol
! -w -W -Wall -Waggregate-return @gol
-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol
-Wconversion -Wno-deprecated-declarations @gol
-Wdisabled-optimization -Wdiv-by-zero -Werror @gol
--- 211,217 ----
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{
-fsyntax-only -pedantic -pedantic-errors @gol
! -w -W -Wall -Waggregate-return @gol
-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol
-Wconversion -Wno-deprecated-declarations @gol
-Wdisabled-optimization -Wdiv-by-zero -Werror @gol
*************** in the following sections.
*** 222,228 ****
-Werror-implicit-function-declaration @gol
-Wimport -Winline @gol
-Wlarger-than-@var{len} -Wlong-long @gol
! -Wmain -Wmissing-braces -Wmissing-declarations @gol
-Wmissing-format-attribute -Wmissing-noreturn @gol
-Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol
-Wno-import -Wpacked -Wpadded @gol
--- 222,228 ----
-Werror-implicit-function-declaration @gol
-Wimport -Winline @gol
-Wlarger-than-@var{len} -Wlong-long @gol
! -Wmain -Wmissing-braces @gol
-Wmissing-format-attribute -Wmissing-noreturn @gol
-Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol
-Wno-import -Wpacked -Wpadded @gol
*************** in the following sections.
*** 236,242 ****
@item C-only Warning Options
@gccoptlist{
! -Wbad-function-cast -Wmissing-prototypes -Wnested-externs @gol
-Wstrict-prototypes -Wtraditional}
@item Debugging Options
--- 236,243 ----
@item C-only Warning Options
@gccoptlist{
! -Wbad-function-cast -Wmissing-declarations @gol
! -Wmissing-prototypes -Wnested-externs @gol
-Wstrict-prototypes -Wtraditional}
@item Debugging Options
*************** in the following sections.
*** 248,254 ****
-fdump-tree-original@r{[}-@var{n}@r{]} -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
-fmem-report -fpretend-float @gol
! -fprofile-arcs -ftest-coverage -ftime-report @gol
-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol
-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol
-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
--- 249,256 ----
-fdump-tree-original@r{[}-@var{n}@r{]} -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
-fmem-report -fpretend-float @gol
! -fprofile-arcs -fsched-verbose=@var{n} @gol
! -ftest-coverage -ftime-report @gol
-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol
-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol
-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
*************** in the following sections.
*** 261,266 ****
--- 263,269 ----
@gccoptlist{
-falign-functions=@var{n} -falign-jumps=@var{n} @gol
-falign-labels=@var{n} -falign-loops=@var{n} @gol
+ -fbounds-check @gol
-fbranch-probabilities -fcaller-saves -fcprop-registers @gol
-fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol
-fdelayed-branch -fdelete-null-pointer-checks @gol
*************** in the following sections.
*** 269,275 ****
-fgcse -fgcse-lm -fgcse-sm @gol
-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol
! -fmove-all-movables -fno-default-inline -fno-defer-pop @gol
-fno-function-cse -fno-guess-branch-probability @gol
-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
-funsafe-math-optimizations -fno-trapping-math @gol
--- 272,279 ----
-fgcse -fgcse-lm -fgcse-sm @gol
-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol
! -fmove-all-movables -fno-branch-count-reg @gol
! -fno-default-inline -fno-defer-pop @gol
-fno-function-cse -fno-guess-branch-probability @gol
-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
-funsafe-math-optimizations -fno-trapping-math @gol
*************** in the following sections.
*** 278,286 ****
-freduce-all-givs -fregmove -frename-registers @gol
-frerun-cse-after-loop -frerun-loop-opt @gol
-fschedule-insns -fschedule-insns2 @gol
-fsingle-precision-constant -fssa -fssa-ccp -fssa-dce @gol
! -fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv @gol
! -funroll-all-loops -funroll-loops @gol
--param @var{name}=@var{value}
-O -O0 -O1 -O2 -O3 -Os}
--- 282,292 ----
-freduce-all-givs -fregmove -frename-registers @gol
-frerun-cse-after-loop -frerun-loop-opt @gol
-fschedule-insns -fschedule-insns2 @gol
+ -fno-sched-interblock -fno-sched-spec @gol
+ -fsched-spec-load -fsched-spec-load-dangerous @gol
-fsingle-precision-constant -fssa -fssa-ccp -fssa-dce @gol
! -fstrength-reduce -fstrict-aliasing -fthread-jumps @gol
! -ftrapv -funroll-all-loops -funroll-loops @gol
--param @var{name}=@var{value}
-O -O0 -O1 -O2 -O3 -Os}
*************** in the following sections.
*** 444,450 ****
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
-mcall-aix -mcall-sysv -mcall-netbsd @gol
! -maix-struct-return -msvr4-struct-return
-mabi=altivec -mabi=no-altivec @gol
-mprototype -mno-prototype @gol
-msim -mmvme -mads -myellowknife -memb -msdata @gol
--- 450,456 ----
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
-mcall-aix -mcall-sysv -mcall-netbsd @gol
! -maix-struct-return -msvr4-struct-return @gol
-mabi=altivec -mabi=no-altivec @gol
-mprototype -mno-prototype @gol
-msim -mmvme -mads -myellowknife -memb -msdata @gol
*************** in the following sections.
*** 481,491 ****
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
-mno-wide-multiply -mrtd -malign-double @gol
-mpreferred-stack-boundary=@var{num} @gol
! -mmmx -msse -msse2 -msse-math -m3dnow @gol
-mthreads -mno-align-stringops -minline-all-stringops @gol
-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
-m96bit-long-double -mregparm=@var{num} -momit-leaf-frame-pointer @gol
-mno-red-zone@gol
-m32 -m64}
@emph{HPPA Options}
--- 487,498 ----
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
-mno-wide-multiply -mrtd -malign-double @gol
-mpreferred-stack-boundary=@var{num} @gol
! -mmmx -msse -msse2 -m3dnow @gol
-mthreads -mno-align-stringops -minline-all-stringops @gol
-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
-m96bit-long-double -mregparm=@var{num} -momit-leaf-frame-pointer @gol
-mno-red-zone@gol
+ -mcmodel=@var{code-model} @gol
-m32 -m64}
@emph{HPPA Options}
*************** in the following sections.
*** 609,616 ****
@emph{D30V Options}
@gccoptlist{
! -mextmem -mextmemory -monchip -mno-asm-optimize -masm-optimize @gol
! -mbranch-cost=@var{n} -mcond-exec=@var{n}}
@emph{S/390 and zSeries Options}
@gccoptlist{
--- 616,623 ----
@emph{D30V Options}
@gccoptlist{
! -mextmem -mextmemory -monchip -mno-asm-optimize @gol
! -masm-optimize -mbranch-cost=@var{n} -mcond-exec=@var{n}}
@emph{S/390 and zSeries Options}
@gccoptlist{
*************** in the following sections.
*** 669,675 ****
-fno-common -fno-ident -fno-gnu-linker @gol
-fpcc-struct-return -fpic -fPIC @gol
-freg-struct-return -fshared-data -fshort-enums @gol
! -fshort-double -fvolatile @gol
-fvolatile-global -fvolatile-static @gol
-fverbose-asm -fpack-struct -fstack-check @gol
-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
--- 676,682 ----
-fno-common -fno-ident -fno-gnu-linker @gol
-fpcc-struct-return -fpic -fPIC @gol
-freg-struct-return -fshared-data -fshort-enums @gol
! -fshort-double -fshort-wchar -fvolatile @gol
-fvolatile-global -fvolatile-static @gol
-fverbose-asm -fpack-struct -fstack-check @gol
-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
*************** be displayed.
*** 914,919 ****
--- 921,930 ----
@opindex target-help
Print (on the standard output) a description of target specific command
line options for each tool.
+
+ @item --version
+ @opindex version
+ Display the version number and copyrights of the invoked GCC.
@end table
@node Invoking G++
*************** than double precision. If you must use
*** 1296,1307 ****
to use single precision operations when the operands are single
precision, use this option. This option has no effect when compiling
with ISO or GNU C conventions (the default).
-
- @item -fshort-wchar
- @opindex fshort-wchar
- Override the underlying type for @samp{wchar_t} to be @samp{short
- unsigned int} instead of the default for the target. This option is
- useful for building programs to run under WINE@.
@end table
@node C++ Dialect Options
--- 1307,1312 ----
*************** Do not assume @samp{inline} for function
*** 1550,1555 ****
--- 1555,1612 ----
functions will have linkage like inline functions; they just won't be
inlined by default.
+ @item -Wabi @r{(C++ only)}
+ @opindex Wabi
+ Warn when G++ generates code that is probably not compatible with the
+ vendor-neutral C++ ABI. Although an effort has been made to warn about
+ all such cases, there are probably some cases that are not warned about,
+ even though G++ is generating incompatible code. There may also be
+ cases where warnings are emitted even though the code that is generated
+ will be compatible.
+
+ You should rewrite your code to avoid these warnings if you are
+ concerned about the fact that code generated by G++ may not be binary
+ compatible with code generated by other compilers.
+
+ The known incompatibilites at this point include:
+
+ @itemize @bullet
+
+ @item
+ Incorrect handling of tail-padding for bit-fields. G++ may attempt to
+ pack data into the same byte as a base class. For example:
+
+ @smallexample
+ struct A @{ virtual void f(); int f1 : 1; @};
+ struct B : public A @{ int f2 : 1; @};
+ @end smallexample
+
+ @noindent
+ In this case, G++ will place @code{B::f2} into the same byte
+ as@code{A::f1}; other compilers will not. You can avoid this problem
+ by explicitly padding @code{A} so that its size is a multiple of the
+ byte size on your platform; that will cause G++ and other compilers to
+ layout @code{B} identically.
+
+ @item
+ Incorrect handling of tail-padding for virtual bases. G++ does not use
+ tail padding when laying out virtual bases. For example:
+
+ @smallexample
+ struct A @{ virtual void f(); char c1; @};
+ struct B @{ B(); char c2; @};
+ struct C : public A, public virtual B @{@};
+ @end smallexample
+
+ @noindent
+ In this case, G++ will not place @code{B} into the tail-padding for
+ @code{A}; other compilers will. You can avoid this problem by
+ explicitly padding @code{A} so that its size is a multiple of its
+ alignment (ignoring virtual base classes); that will cause G++ and other
+ compilers to layout @code{C} identically.
+
+ @end itemize
+
@item -Wctor-dtor-privacy @r{(C++ only)}
@opindex Wctor-dtor-privacy
Warn when a class seems unusable, because all the constructors or
*************** optimization and code generation options
*** 2876,2893 ****
Control Optimization}).
The other use of @option{-fprofile-arcs} is for use with @code{gcov},
! when it is used with the @option{-ftest-coverage} option. GCC
! supports two methods of determining code coverage: the options that
! support @code{gcov}, and options @option{-a} and @option{-ax}, which
! write information to text files. The options that support @code{gcov}
! do not need to instrument every arc in the program, so a program compiled
! with them runs faster than a program compiled with @option{-a}, which
! adds instrumentation code to every basic block in the program. The
! tradeoff: since @code{gcov} does not have execution counts for all
! branches, it must start with the execution counts for the instrumented
! branches, and then iterate over the program flow graph until the entire
! graph has been solved. Hence, @code{gcov} runs a little more slowly than
! a program which uses information from @option{-a} and @option{-ax}.
With @option{-fprofile-arcs}, for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the graph.
--- 2933,2939 ----
Control Optimization}).
The other use of @option{-fprofile-arcs} is for use with @code{gcov},
! when it is used with the @option{-ftest-coverage} option.
With @option{-fprofile-arcs}, for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the graph.
*************** executed. When an arc is the only exit
*** 2897,2907 ****
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.
- This option makes it possible to estimate branch probabilities and to
- calculate basic block execution counts. In general, basic block
- execution counts as provided by @option{-a} do not give enough
- information to estimate all branch probabilities.
-
@need 2000
@item -ftest-coverage
@opindex ftest-coverage
--- 2943,2948 ----
*************** Dump after all tree based optimization,
*** 3133,3138 ****
--- 3174,3196 ----
Dump after function inlining, to @file{@var{file}.inlined}.
@end table
+ @item -fsched-verbose=@var{n}
+ @opindex fsched-verbose
+ On targets that use instruction scheduling, this option controls the
+ amount of debugging output the scheduler prints. This information is
+ written to standard error, unless @option{-dS} or @option{-dR} is
+ specified, in which case it is output to the usual dump
+ listing file, @file{.sched} or @file{.sched2} respectively. However
+ for @var{n} greater than nine, the output is always printed to standard
+ error.
+
+ For @var{n} greater than zero, @option{-fsched-verbose} outputs the
+ same information as @option{-dRS}. For @var{n} greater than one, it
+ also output basic block probabilities, detailed ready list information
+ and unit/insn info. For @var{n} greater than two, it includes RTL
+ at abort point, control-flow and regions info. And for @var{n} over
+ four, @option{-fsched-verbose} also includes dependence info.
+
@item -fpretend-float
@opindex fpretend-float
When running a cross-compiler, pretend that the target machine uses the
*************** types. Languages like C or C++ require
*** 3437,3442 ****
--- 3495,3508 ----
have distinct location, so using this option will result in non-conforming
behavior.
+ @item -fno-branch-count-reg
+ @opindex fno-branch-count-reg
+ Do not use ``decrement and branch'' instructions on a count register,
+ but instead generate a sequence of instructions that decrement a
+ register, compare it against zero, then branch based upon the result.
+ This option is only meaningful on architectures that support such
+ instructions, which include x86, PowerPC, IA-64 and S/390.
+
@item -fno-function-cse
@opindex fno-function-cse
Do not put function addresses in registers; make each instruction that
*************** an exact implementation of IEEE or ISO r
*** 3499,3504 ****
--- 3565,3578 ----
math functions.
The default is @option{-ftrapping-math}.
+
+ @item -fbounds-check
+ @opindex fbounds-check
+ For front-ends that support it, generate additional code to check that
+ indices used to access arrays are within the declared range. This is
+ currenly only supported by the Java and Fortran 77 front-ends, where
+ this option defaults to true and false respectively.
+
@end table
The following options control specific optimizations. The @option{-O2}
*************** instruction scheduling after register al
*** 3626,3631 ****
--- 3700,3729 ----
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.
+ @item -fno-sched-interblock
+ @opindex fno-sched-interblock
+ Don't schedule instructions across basic blocks. This is normally
+ enabled by default when scheduling before register allocation, i.e.@:
+ with @option{-fschedule-insns} or at @option{-O2} or higher.
+
+ @item -fno-sched-spec
+ @opindex fno-sched-spec
+ Don't allow speculative motion of non-load instructions. This is normally
+ enabled by default when scheduling before register allocation, i.e.@:
+ with @option{-fschedule-insns} or at @option{-O2} or higher.
+
+ @item -fsched-spec-load
+ @opindex fsched-spec-load
+ Allow speculative motion of some load instructions. This only makes
+ sense when scheduling before register allocation, i.e.@: with
+ @option{-fschedule-insns} or at @option{-O2} or higher.
+
+ @item -fsched-spec-load-dangerous
+ @opindex fsched-spec-load-dangerous
+ Allow speculative motion of more load instructions. This only makes
+ sense when scheduling before register allocation, i.e.@: with
+ @option{-fschedule-insns} or at @option{-O2} or higher.
+
@item -ffunction-sections
@itemx -fdata-sections
@opindex ffunction-sections
*************** one @option{-I} option, the directories
*** 4199,4213 ****
order; the standard system directories come after.
If a standard system include directory, or a directory specified with
! @option{-isystem}, is also specified with @option{-I}, it will be
! searched only in the position requested by @option{-I}. Also, it will
! not be considered a system include directory. If that directory really
! does contain system headers, there is a good chance that they will
! break. For instance, if GCC's installation procedure edited the headers
! in @file{/usr/include} to fix bugs, @samp{-I/usr/include} will cause the
! original, buggy headers to be found instead of the corrected ones. GCC
! will issue a warning when a system include directory is hidden in this
! way.
@item -I-
@opindex I-
--- 4297,4309 ----
order; the standard system directories come after.
If a standard system include directory, or a directory specified with
! @option{-isystem}, is also specified with @option{-I}, the @option{-I}
! option will be ignored. The directory will still be searched but as a
! system directory at its normal position in the system include chain.
! This is to ensure that GCC's procedure to fix buggy system headers and
! the ordering for the include_next directive are not inadvertantly changed.
! If you really need to change the search order for system directories,
! use the @option{-nostdinc} and/or @option{-isystem} options.
@item -I-
@opindex I-
*************** direct access to the MMX, SSE and 3Dnow
*** 7530,7535 ****
--- 7626,7634 ----
@xref{X86 Built-in Functions}, for details of the functions enabled
and disabled by these switches.
+ To have SSE/SSE2 instructions generated automatically from floating-point code,
+ see @option{-mfpmath=sse}.
+
@item -mpush-args
@itemx -mno-push-args
@opindex mpush-args
*************** by the x86-64 ABI, it is a 128-byte area
*** 7598,7603 ****
--- 7697,7728 ----
stack pointer that will not be modified by signal or interrupt handlers
and therefore can be used for temporary data without adjusting the stack
pointer. The flag @option{-mno-red-zone} disables this red zone.
+
+ @item -mcmodel=small
+ @opindex mcmodel=small
+ Generate code for the small code model: the program and its symbols must
+ be linked in the lower 2 GB of the address space. Pointers are 64 bits.
+ Programs can be statically or dynamically linked. This is the default
+ code model.
+
+ @item -mcmodel=kernel
+ @opindex mcmodel=kernel
+ Generate code for the kernel code model. The kernel runs in the
+ negative 2 GB of the address space.
+ This model has to be used for Linux kernel code.
+
+ @item -mcmodel=medium
+ @opindex mcmodel=medium
+ Generate code for the medium model: The program is linked in the lower 2
+ GB of the address space but symbols can be located anywhere in the
+ address space. Programs can be statically or dynamically linked, but
+ building of shared libraries are not supported with the medium model.
+
+ @item -mcmodel=large
+ @opindex mcmodel=large
+ Generate code for the large model: This model makes no assumptions
+ about addresses and sizes of sections. Currently GCC does not implement
+ this model.
@end table
@node HPPA Options
*************** unwinding from asynchronous events (such
*** 9637,9643 ****
Return ``short'' @code{struct} and @code{union} values in memory like
longer ones, rather than in registers. This convention is less
efficient, but it has the advantage of allowing intercallability between
! GCC-compiled files and files compiled with other compilers.
The precise convention for returning structures in memory depends
on the target configuration macros.
--- 9762,9769 ----
Return ``short'' @code{struct} and @code{union} values in memory like
longer ones, rather than in registers. This convention is less
efficient, but it has the advantage of allowing intercallability between
! GCC-compiled files and files compiled with other compilers, particularly
! the Portable C Compiler (pcc).
The precise convention for returning structures in memory depends
on the target configuration macros.
*************** on the target configuration macros.
*** 9645,9650 ****
--- 9771,9781 ----
Short structures and unions are those whose size and alignment match
that of some integer type.
+ @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
+ switch is not binary compatible with code compiled with the
+ @option{-freg-struct-return} switch.
+ Use it to conform to a non-default application binary interface.
+
@item -freg-struct-return
@opindex freg-struct-return
Return @code{struct} and @code{union} values in registers when possible.
*************** defaults to @option{-fpcc-struct-return}
*** 9658,9673 ****
--- 9789,9827 ----
the principal compiler. In those cases, we can choose the standard, and
we chose the more efficient register return alternative.
+ @strong{Warning:} code compiled with the @option{-freg-struct-return}
+ switch is not binary compatible with code compiled with the
+ @option{-fpcc-struct-return} switch.
+ Use it to conform to a non-default application binary interface.
+
@item -fshort-enums
@opindex fshort-enums
Allocate to an @code{enum} type only as many bytes as it needs for the
declared range of possible values. Specifically, the @code{enum} type
will be equivalent to the smallest integer type which has enough room.
+ @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
+ code that is not binary compatible with code generated without that switch.
+ Use it to conform to a non-default application binary interface.
+
@item -fshort-double
@opindex fshort-double
Use the same size for @code{double} as for @code{float}.
+ @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
+ code that is not binary compatible with code generated without that switch.
+ Use it to conform to a non-default application binary interface.
+
+ @item -fshort-wchar
+ @opindex fshort-wchar
+ Override the underlying type for @samp{wchar_t} to be @samp{short
+ unsigned int} instead of the default for the target. This option is
+ useful for building programs to run under WINE@.
+
+ @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
+ code that is not binary compatible with code generated without that switch.
+ Use it to conform to a non-default application binary interface.
+
@item -fshared-data
@opindex fshared-data
Requests that the data and non-@code{const} variables of this
*************** three-way choice.
*** 9809,9817 ****
@item -fpack-struct
@opindex fpack-struct
! Pack all structure members together without holes. Usually you would
! not want to use this option, since it makes the code suboptimal, and
! the offsets of structure members won't agree with system libraries.
@item -finstrument-functions
@opindex finstrument-functions
--- 9963,9974 ----
@item -fpack-struct
@opindex fpack-struct
! Pack all structure members together without holes.
!
! @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
! code that is not binary compatible with code generated without that switch.
! Additionally, it makes the code suboptimial.
! Use it to conform to a non-default application binary interface.
@item -finstrument-functions
@opindex finstrument-functions
*************** This option and its counterpart, @option
*** 9908,9915 ****
change the way C symbols are represented in the object file. One use
is to help link with legacy assembly code.
! Be warned that you should know what you are doing when invoking this
! option, and that not all targets provide complete support for it.
@end table
@c man end
--- 10065,10074 ----
change the way C symbols are represented in the object file. One use
is to help link with legacy assembly code.
! @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
! generate code that is not binary compatible with code generated without that
! switch. Use it to conform to a non-default application binary interface.
! Not all targets provide complete support for this switch.
@end table
@c man end
diff -Nrc3pad gcc-3.2/gcc/doc/makefile.texi gcc-3.2.1/gcc/doc/makefile.texi
*** gcc-3.2/gcc/doc/makefile.texi Thu Jan 10 16:04:23 2002
--- gcc-3.2.1/gcc/doc/makefile.texi Wed Sep 11 16:40:28 2002
*************** You can specify specific tests by settin
*** 48,56 ****
of the @file{.exp} file, optionally followed by (for some tests) an equals
and a file wildcard, like:
! @example
make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
! @end example
Note that running the testsuite may require additional tools be
installed, such as TCL or dejagnu.
--- 48,56 ----
of the @file{.exp} file, optionally followed by (for some tests) an equals
and a file wildcard, like:
! @smallexample
make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
! @end smallexample
Note that running the testsuite may require additional tools be
installed, such as TCL or dejagnu.
diff -Nrc3pad gcc-3.2/gcc/doc/rtl.texi gcc-3.2.1/gcc/doc/rtl.texi
*** gcc-3.2/gcc/doc/rtl.texi Sat Feb 23 12:59:08 2002
--- gcc-3.2.1/gcc/doc/rtl.texi Wed Sep 11 16:40:28 2002
*************** An hypothetical example might be a patte
*** 2316,2326 ****
either wrap around or use saturating addition depending on the value
of a special control register:
! @example
(parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
(reg:SI 4)] 0))
(use (reg:SI 1))])
! @end example
@noindent
--- 2316,2326 ----
either wrap around or use saturating addition depending on the value
of a special control register:
! @smallexample
(parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
(reg:SI 4)] 0))
(use (reg:SI 1))])
! @end smallexample
@noindent
*************** where @var{z} is an index register and @
*** 2552,2561 ****
Here is an example of its use:
! @example
(mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
(reg:SI 48))))
! @end example
This says to modify pseudo register 42 by adding the contents of pseudo
register 48 to it, after the use of what ever 42 points to.
--- 2552,2561 ----
Here is an example of its use:
! @smallexample
(mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
(reg:SI 48))))
! @end smallexample
This says to modify pseudo register 42 by adding the contents of pseudo
register 48 to it, after the use of what ever 42 points to.
diff -Nrc3pad gcc-3.2/gcc/doc/sourcebuild.texi gcc-3.2.1/gcc/doc/sourcebuild.texi
*** gcc-3.2/gcc/doc/sourcebuild.texi Mon Apr 15 18:59:52 2002
--- gcc-3.2.1/gcc/doc/sourcebuild.texi Wed Nov 13 21:17:09 2002
*************** here; FIXME: document the others.
*** 738,743 ****
--- 738,744 ----
@menu
* Test Idioms:: Idioms used in test suite code.
* C Tests:: The C language test suites.
+ * libgcj Tests:: The Java library test suites.
@end menu
@node Test Idioms
*************** shouldn't.
*** 870,872 ****
--- 871,893 ----
FIXME: merge in @file{testsuite/README.gcc} and discuss the format of
test cases and magic comments more.
+
+ @node libgcj Tests
+ @subsection The Java library test suites.
+
+ Runtime tests are executed via @samp{make check} from the @samp{testsuite}
+ directory of the libjava hierarchy in the build tree. Additional runtime
+ tests can be checked into this testsuite.
+
+ Regression testing of the core packages in libgcj is also covered by the
+ Mauve test suite. The @uref{http://sources.redhat.com/mauve/,,Mauve Project}
+ develops tests for the Java Class Libraries. These tests are run as part
+ of libgcj testing by specifying the location of the Mauve tree when invoking
+ @samp{make}, as in @samp{make MAUVEDIR=~/mauve check}.
+
+ The @uref{http://oss.software.ibm.com/developerworks/opensource/jacks/,,
+ Jacks} project provides a test suite for Java compilers that can be used
+ to test changes that affect the GCJ front end. There is no automated
+ mechanism to run the Jacks suite as part of GCJ testing.
+
+ We encourage developers to contribute test cases to Mauve and Jacks.
diff -Nrc3pad gcc-3.2/gcc/doc/standards.texi gcc-3.2.1/gcc/doc/standards.texi
*** gcc-3.2/gcc/doc/standards.texi Mon Apr 15 18:59:52 2002
--- gcc-3.2.1/gcc/doc/standards.texi Wed Sep 11 16:40:28 2002
*************** information concerning the history of C
*** 168,178 ****
There is no formal written standard for Objective-C@. The most
authoritative manual is ``Object-Oriented Programming and the
! Objective-C Language'', available at a number of web sites;
! @uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/} has a
! recent version, while @uref{http://www.toodarkpark.org/computers/objc/}
! is an older example. @uref{http://www.gnustep.org} includes useful
! information as well.
@xref{Top, GNAT Reference Manual, About This Guide, gnat_rm,
GNAT Reference Manual}, for information on standard
--- 168,186 ----
There is no formal written standard for Objective-C@. The most
authoritative manual is ``Object-Oriented Programming and the
! Objective-C Language'', available at a number of web sites
!
! @itemize
! @item
! @uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/}
! is a recent version
! @item
! @uref{http://www.toodarkpark.org/computers/objc/}
! is an older example
! @item
! @uref{http://www.gnustep.org}
! has additional useful information
! @end itemize
@xref{Top, GNAT Reference Manual, About This Guide, gnat_rm,
GNAT Reference Manual}, for information on standard
diff -Nrc3pad gcc-3.2/gcc/doc/tm.texi gcc-3.2.1/gcc/doc/tm.texi
*** gcc-3.2/gcc/doc/tm.texi Wed Aug 7 18:10:57 2002
--- gcc-3.2.1/gcc/doc/tm.texi Sat Sep 14 00:26:38 2002
*************** such as one option that enables many opt
*** 156,166 ****
multilibs. Example nonsensical definition, where @code{-malt-abi},
@code{-EB}, and @code{-mspoo} cause different multilibs to be chosen:
! @example
#define TARGET_OPTION_TRANSLATE_TABLE \
@{ "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" @}, \
@{ "-compat", "-EB -malign=4 -mspoo" @}
! @end example
@findex CPP_SPEC
@item CPP_SPEC
--- 156,166 ----
multilibs. Example nonsensical definition, where @code{-malt-abi},
@code{-EB}, and @code{-mspoo} cause different multilibs to be chosen:
! @smallexample
#define TARGET_OPTION_TRANSLATE_TABLE \
@{ "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" @}, \
@{ "-compat", "-EB -malign=4 -mspoo" @}
! @end smallexample
@findex CPP_SPEC
@item CPP_SPEC
*************** argument @var{name} is the name of an as
*** 7423,7428 ****
--- 7423,7433 ----
@item DBX_OUTPUT_RBRAC (@var{stream}, @var{name})
Like @code{DBX_OUTPUT_LBRAC}, but for the end of a scope level.
+ @findex DBX_OUTPUT_NFUN
+ @item DBX_OUTPUT_NFUN (@var{stream}, @var{lscope_label}, @var{decl})
+ Define this macro if the target machine requires special handling to
+ output an @code{N_FUN} entry for the function @var{decl}.
+
@findex DBX_OUTPUT_ENUM
@item DBX_OUTPUT_ENUM (@var{stream}, @var{type})
Define this macro if the target machine requires special handling to
diff -Nrc3pad gcc-3.2/gcc/doc/trouble.texi gcc-3.2.1/gcc/doc/trouble.texi
*** gcc-3.2/gcc/doc/trouble.texi Thu Jan 17 22:45:21 2002
--- gcc-3.2.1/gcc/doc/trouble.texi Wed Sep 11 16:40:29 2002
*************** libraries and debuggers on certain syste
*** 105,115 ****
@itemize @bullet
@item
! G++ does not do name mangling in the same way as other C++
! compilers. This means that object files compiled with one compiler
! cannot be used with another.
! This effect is intentional, to protect you from more subtle problems.
Compilers differ as to many internal details of C++ implementation,
including: how class instances are laid out, how multiple inheritance is
implemented, and how virtual function calls are handled. If the name
--- 105,117 ----
@itemize @bullet
@item
! On many platforms, GCC supports a different ABI for C++ than do other
! compilers, so the object files compiled by GCC cannot be used with object
! files generated by another C++ compiler.
! An area where the difference is most apparent is name mangling. The use
! of different name mangling is intentional, to protect you from more subtle
! problems.
Compilers differ as to many internal details of C++ implementation,
including: how class instances are laid out, how multiple inheritance is
implemented, and how virtual function calls are handled. If the name
diff -Nrc3pad gcc-3.2/gcc/doloop.c gcc-3.2.1/gcc/doloop.c
*** gcc-3.2/gcc/doloop.c Fri Jan 4 02:00:26 2002
--- gcc-3.2.1/gcc/doloop.c Thu Sep 26 23:10:38 2002
*************** doloop_modify_runtime (loop, iterations_
*** 552,557 ****
--- 552,558 ----
{
const struct loop_info *loop_info = LOOP_INFO (loop);
HOST_WIDE_INT abs_inc;
+ HOST_WIDE_INT abs_loop_inc;
int neg_inc;
rtx diff;
rtx sequence;
*************** doloop_modify_runtime (loop, iterations_
*** 591,603 ****
n = abs (final - initial) / abs_inc;
n += (abs (final - initial) % abs_inc) != 0;
! If the loop has been unrolled, then the loop body has been
! preconditioned to iterate a multiple of unroll_number times. If
! abs_inc is != 1, the full calculation is
! t1 = abs_inc * unroll_number;
! n = abs (final - initial) / t1;
! n += (abs (final - initial) % t1) > t1 - abs_inc;
The division and modulo operations can be avoided by requiring
that the increment is a power of 2 (precondition_loop_p enforces
--- 592,613 ----
n = abs (final - initial) / abs_inc;
n += (abs (final - initial) % abs_inc) != 0;
! But when abs_inc is a power of two, the summation won't overflow
! except in cases where the loop never terminates. So we don't
! need to use this more costly calculation.
! If the loop has been unrolled, the full calculation is
!
! t1 = abs_inc * unroll_number; increment per loop
! n = abs (final - initial) / t1; full loops
! n += (abs (final - initial) % t1) != 0; partial loop
!
! However, in certain cases the unrolled loop will be preconditioned
! by emitting copies of the loop body with conditional branches,
! so that the unrolled loop is always a full loop and thus needs
! no exit tests. In this case we don't want to add the partial
! loop count. As above, when t1 is a power of two we don't need to
! worry about overflow.
The division and modulo operations can be avoided by requiring
that the increment is a power of 2 (precondition_loop_p enforces
*************** doloop_modify_runtime (loop, iterations_
*** 658,715 ****
fprintf (loop_dump_stream,
"Doloop: Basic induction var skips initial incr.\n");
! diff = expand_simple_binop (mode, PLUS, diff, increment, diff,
! unsigned_p, OPTAB_LIB_WIDEN);
}
}
! if (abs_inc * loop_info->unroll_number != 1)
{
int shift_count;
- rtx extra;
- rtx label;
- unsigned HOST_WIDE_INT limit;
! shift_count = exact_log2 (abs_inc * loop_info->unroll_number);
if (shift_count < 0)
abort ();
! /* abs (final - initial) / (abs_inc * unroll_number) */
! iterations = expand_simple_binop (GET_MODE (diff), LSHIFTRT,
! diff, GEN_INT (shift_count),
! NULL_RTX, 1,
! OPTAB_LIB_WIDEN);
!
! if (abs_inc != 1)
! {
! /* abs (final - initial) % (abs_inc * unroll_number) */
! rtx count = GEN_INT (abs_inc * loop_info->unroll_number - 1);
! extra = expand_simple_binop (GET_MODE (iterations), AND,
! diff, count, NULL_RTX, 1,
! OPTAB_LIB_WIDEN);
!
! /* If (abs (final - initial) % (abs_inc * unroll_number)
! <= abs_inc * (unroll - 1)),
! jump past following increment instruction. */
! label = gen_label_rtx ();
! limit = abs_inc * (loop_info->unroll_number - 1);
! emit_cmp_and_jump_insns (extra, GEN_INT (limit),
! limit == 0 ? EQ : LEU, NULL_RTX,
! GET_MODE (extra), 0, label);
! JUMP_LABEL (get_last_insn ()) = label;
! LABEL_NUSES (label)++;
!
! /* Increment the iteration count by one. */
! iterations = expand_simple_binop (GET_MODE (iterations), PLUS,
! iterations, GEN_INT (1),
! iterations, 1,
! OPTAB_LIB_WIDEN);
! emit_label (label);
! }
}
! else
! iterations = diff;
/* If there is a NOTE_INSN_LOOP_VTOP, we have a `for' or `while'
style loop, with a loop exit test at the start. Thus, we can
--- 668,699 ----
fprintf (loop_dump_stream,
"Doloop: Basic induction var skips initial incr.\n");
! diff = expand_simple_binop (mode, PLUS, diff, GEN_INT (abs_inc),
! diff, unsigned_p, OPTAB_LIB_WIDEN);
}
}
! abs_loop_inc = abs_inc * loop_info->unroll_number;
! if (abs_loop_inc != 1)
{
int shift_count;
! shift_count = exact_log2 (abs_loop_inc);
if (shift_count < 0)
abort ();
! if (!loop_info->preconditioned)
! diff = expand_simple_binop (GET_MODE (diff), PLUS,
! diff, GEN_INT (abs_loop_inc - 1),
! diff, 1, OPTAB_LIB_WIDEN);
! /* (abs (final - initial) + abs_inc * unroll_number - 1)
! / (abs_inc * unroll_number) */
! diff = expand_simple_binop (GET_MODE (diff), LSHIFTRT,
! diff, GEN_INT (shift_count),
! diff, 1, OPTAB_LIB_WIDEN);
}
! iterations = diff;
/* If there is a NOTE_INSN_LOOP_VTOP, we have a `for' or `while'
style loop, with a loop exit test at the start. Thus, we can
*************** doloop_modify_runtime (loop, iterations_
*** 722,738 ****
iteration count to one if necessary. */
if (! loop->vtop)
{
- rtx label;
-
if (loop_dump_stream)
fprintf (loop_dump_stream, "Doloop: Do-while loop.\n");
! /* A `do-while' loop must iterate at least once. If the
! iteration count is bogus, we set the iteration count to 1.
Note that if the loop has been unrolled, then the loop body
! is guaranteed to execute at least once. */
! if (loop_info->unroll_number == 1)
{
/* Emit insns to test if the loop will immediately
terminate and to set the iteration count to 1 if true. */
label = gen_label_rtx();
--- 706,725 ----
iteration count to one if necessary. */
if (! loop->vtop)
{
if (loop_dump_stream)
fprintf (loop_dump_stream, "Doloop: Do-while loop.\n");
! /* A `do-while' loop must iterate at least once. For code like
! i = initial; do { ... } while (++i < final);
! we will calculate a bogus iteration count if initial > final.
! So detect this and set the iteration count to 1.
Note that if the loop has been unrolled, then the loop body
! is guaranteed to execute at least once. Also, when the
! comparison is NE, our calculated count will be OK. */
! if (loop_info->unroll_number == 1 && comparison_code != NE)
{
+ rtx label;
+
/* Emit insns to test if the loop will immediately
terminate and to set the iteration count to 1 if true. */
label = gen_label_rtx();
diff -Nrc3pad gcc-3.2/gcc/emit-rtl.c gcc-3.2.1/gcc/emit-rtl.c
*** gcc-3.2/gcc/emit-rtl.c Mon Jul 1 21:50:14 2002
--- gcc-3.2.1/gcc/emit-rtl.c Thu Sep 12 02:27:13 2002
*************** set_mem_offset (mem, offset)
*** 1903,1908 ****
--- 1903,1919 ----
offset, MEM_SIZE (mem), MEM_ALIGN (mem),
GET_MODE (mem));
}
+
+ /* Set the size of MEM to SIZE. */
+
+ void
+ set_mem_size (mem, size)
+ rtx mem, size;
+ {
+ MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ MEM_OFFSET (mem), size, MEM_ALIGN (mem),
+ GET_MODE (mem));
+ }
/* Return a memory reference like MEMREF, but with its mode changed to MODE
and its address changed to ADDR. (VOIDmode means don't change the mode.
diff -Nrc3pad gcc-3.2/gcc/explow.c gcc-3.2.1/gcc/explow.c
*** gcc-3.2/gcc/explow.c Thu Feb 21 23:06:14 2002
--- gcc-3.2.1/gcc/explow.c Fri Aug 23 12:00:35 2002
*************** Software Foundation, 59 Temple Place - S
*** 34,39 ****
--- 34,40 ----
#include "insn-config.h"
#include "ggc.h"
#include "recog.h"
+ #include "langhooks.h"
static rtx break_out_memory_refs PARAMS ((rtx));
static void emit_stack_probe PARAMS ((rtx));
*************** rtx
*** 285,304 ****
expr_size (exp)
tree exp;
{
! tree size;
!
! if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd'
! && DECL_SIZE_UNIT (exp) != 0)
! size = DECL_SIZE_UNIT (exp);
! else
! size = size_in_bytes (TREE_TYPE (exp));
if (TREE_CODE (size) != INTEGER_CST
&& contains_placeholder_p (size))
size = build (WITH_RECORD_EXPR, sizetype, size, exp);
return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0);
}
/* Return a copy of X in which all memory references
--- 286,318 ----
expr_size (exp)
tree exp;
{
! tree size = (*lang_hooks.expr_size) (exp);
if (TREE_CODE (size) != INTEGER_CST
&& contains_placeholder_p (size))
size = build (WITH_RECORD_EXPR, sizetype, size, exp);
return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0);
+ }
+
+ /* Return a wide integer for the size in bytes of the value of EXP, or -1
+ if the size can vary or is larger than an integer. */
+
+ HOST_WIDE_INT
+ int_expr_size (exp)
+ tree exp;
+ {
+ tree t = (*lang_hooks.expr_size) (exp);
+
+ if (t == 0
+ || TREE_CODE (t) != INTEGER_CST
+ || TREE_OVERFLOW (t)
+ || TREE_INT_CST_HIGH (t) != 0
+ /* If the result would appear negative, it's too big to represent. */
+ || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
+ return -1;
+ return TREE_INT_CST_LOW (t);
}
/* Return a copy of X in which all memory references
diff -Nrc3pad gcc-3.2/gcc/expmed.c gcc-3.2.1/gcc/expmed.c
*** gcc-3.2/gcc/expmed.c Mon Jun 24 16:50:42 2002
--- gcc-3.2.1/gcc/expmed.c Mon Nov 4 18:39:45 2002
*************** extract_bit_field (str_rtx, bitsize, bit
*** 1144,1150 ****
/* Else we've got some float mode source being extracted into
a different float mode destination -- this combination of
subregs results in Severe Tire Damage. */
! abort ();
}
if (GET_CODE (op0) == REG)
op0 = gen_rtx_SUBREG (mode1, op0, byte_offset);
--- 1144,1150 ----
/* Else we've got some float mode source being extracted into
a different float mode destination -- this combination of
subregs results in Severe Tire Damage. */
! goto no_subreg_mode_swap;
}
if (GET_CODE (op0) == REG)
op0 = gen_rtx_SUBREG (mode1, op0, byte_offset);
*************** extract_bit_field (str_rtx, bitsize, bit
*** 1155,1160 ****
--- 1155,1161 ----
return convert_to_mode (tmode, op0, unsignedp);
return op0;
}
+ no_subreg_mode_swap:
/* Handle fields bigger than a word. */
diff -Nrc3pad gcc-3.2/gcc/expr.c gcc-3.2.1/gcc/expr.c
*** gcc-3.2/gcc/expr.c Tue May 7 05:43:11 2002
--- gcc-3.2.1/gcc/expr.c Thu Nov 7 17:46:15 2002
*************** Software Foundation, 59 Temple Place - S
*** 54,62 ****
--- 54,64 ----
#ifdef PUSH_ROUNDING
+ #ifndef PUSH_ARGS_REVERSED
#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
#define PUSH_ARGS_REVERSED /* If it's last to first. */
#endif
+ #endif
#endif
*************** rtx
*** 5434,5449 ****
force_operand (value, target)
rtx value, target;
{
! optab binoptab = 0;
! /* Use a temporary to force order of execution of calls to
! `force_operand'. */
! rtx tmp;
! rtx op2;
/* Use subtarget as the target for operand 0 of a binary operation. */
rtx subtarget = get_subtarget (target);
/* Check for a PIC address load. */
! if ((GET_CODE (value) == PLUS || GET_CODE (value) == MINUS)
&& XEXP (value, 0) == pic_offset_table_rtx
&& (GET_CODE (XEXP (value, 1)) == SYMBOL_REF
|| GET_CODE (XEXP (value, 1)) == LABEL_REF
--- 5436,5448 ----
force_operand (value, target)
rtx value, target;
{
! rtx op1, op2;
/* Use subtarget as the target for operand 0 of a binary operation. */
rtx subtarget = get_subtarget (target);
+ enum rtx_code code = GET_CODE (value);
/* Check for a PIC address load. */
! if ((code == PLUS || code == MINUS)
&& XEXP (value, 0) == pic_offset_table_rtx
&& (GET_CODE (XEXP (value, 1)) == SYMBOL_REF
|| GET_CODE (XEXP (value, 1)) == LABEL_REF
*************** force_operand (value, target)
*** 5455,5514 ****
return subtarget;
}
! if (GET_CODE (value) == PLUS)
! binoptab = add_optab;
! else if (GET_CODE (value) == MINUS)
! binoptab = sub_optab;
! else if (GET_CODE (value) == MULT)
{
! op2 = XEXP (value, 1);
! if (!CONSTANT_P (op2)
! && !(GET_CODE (op2) == REG && op2 != subtarget))
! subtarget = 0;
! tmp = force_operand (XEXP (value, 0), subtarget);
! return expand_mult (GET_MODE (value), tmp,
! force_operand (op2, NULL_RTX),
! target, 1);
}
! if (binoptab)
{
op2 = XEXP (value, 1);
! if (!CONSTANT_P (op2)
! && !(GET_CODE (op2) == REG && op2 != subtarget))
subtarget = 0;
! if (binoptab == sub_optab && GET_CODE (op2) == CONST_INT)
{
! binoptab = add_optab;
op2 = negate_rtx (GET_MODE (value), op2);
}
/* Check for an addition with OP2 a constant integer and our first
! operand a PLUS of a virtual register and something else. In that
! case, we want to emit the sum of the virtual register and the
! constant first and then add the other value. This allows virtual
! register instantiation to simply modify the constant rather than
! creating another one around this addition. */
! if (binoptab == add_optab && GET_CODE (op2) == CONST_INT
&& GET_CODE (XEXP (value, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (value, 0), 0)) == REG
&& REGNO (XEXP (XEXP (value, 0), 0)) >= FIRST_VIRTUAL_REGISTER
&& REGNO (XEXP (XEXP (value, 0), 0)) <= LAST_VIRTUAL_REGISTER)
{
! rtx temp = expand_binop (GET_MODE (value), binoptab,
! XEXP (XEXP (value, 0), 0), op2,
! subtarget, 0, OPTAB_LIB_WIDEN);
! return expand_binop (GET_MODE (value), binoptab, temp,
! force_operand (XEXP (XEXP (value, 0), 1), 0),
! target, 0, OPTAB_LIB_WIDEN);
}
! tmp = force_operand (XEXP (value, 0), subtarget);
! return expand_binop (GET_MODE (value), binoptab, tmp,
! force_operand (op2, NULL_RTX),
! target, 0, OPTAB_LIB_WIDEN);
! /* We give UNSIGNEDP = 0 to expand_binop
! because the only operations we are expanding here are signed ones. */
}
#ifdef INSN_SCHEDULING
--- 5454,5541 ----
return subtarget;
}
! if (code == ZERO_EXTEND || code == SIGN_EXTEND)
{
! if (!target)
! target = gen_reg_rtx (GET_MODE (value));
! convert_move (target, force_operand (XEXP (value, 0), NULL),
! code == ZERO_EXTEND);
! return target;
}
! if (GET_RTX_CLASS (code) == '2' || GET_RTX_CLASS (code) == 'c')
{
op2 = XEXP (value, 1);
! if (!CONSTANT_P (op2) && !(GET_CODE (op2) == REG && op2 != subtarget))
subtarget = 0;
! if (code == MINUS && GET_CODE (op2) == CONST_INT)
{
! code = PLUS;
op2 = negate_rtx (GET_MODE (value), op2);
}
/* Check for an addition with OP2 a constant integer and our first
! operand a PLUS of a virtual register and something else. In that
! case, we want to emit the sum of the virtual register and the
! constant first and then add the other value. This allows virtual
! register instantiation to simply modify the constant rather than
! creating another one around this addition. */
! if (code == PLUS && GET_CODE (op2) == CONST_INT
&& GET_CODE (XEXP (value, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (value, 0), 0)) == REG
&& REGNO (XEXP (XEXP (value, 0), 0)) >= FIRST_VIRTUAL_REGISTER
&& REGNO (XEXP (XEXP (value, 0), 0)) <= LAST_VIRTUAL_REGISTER)
{
! rtx temp = expand_simple_binop (GET_MODE (value), code,
! XEXP (XEXP (value, 0), 0), op2,
! subtarget, 0, OPTAB_LIB_WIDEN);
! return expand_simple_binop (GET_MODE (value), code, temp,
! force_operand (XEXP (XEXP (value,
! 0), 1), 0),
! target, 0, OPTAB_LIB_WIDEN);
}
! op1 = force_operand (XEXP (value, 0), subtarget);
! op2 = force_operand (op2, NULL_RTX);
! switch (code)
! {
! case MULT:
! return expand_mult (GET_MODE (value), op1, op2, target, 1);
! case DIV:
! if (!INTEGRAL_MODE_P (GET_MODE (value)))
! return expand_simple_binop (GET_MODE (value), code, op1, op2,
! target, 1, OPTAB_LIB_WIDEN);
! else
! return expand_divmod (0,
! FLOAT_MODE_P (GET_MODE (value))
! ? RDIV_EXPR : TRUNC_DIV_EXPR,
! GET_MODE (value), op1, op2, target, 0);
! break;
! case MOD:
! return expand_divmod (1, TRUNC_MOD_EXPR, GET_MODE (value), op1, op2,
! target, 0);
! break;
! case UDIV:
! return expand_divmod (0, TRUNC_DIV_EXPR, GET_MODE (value), op1, op2,
! target, 1);
! break;
! case UMOD:
! return expand_divmod (1, TRUNC_MOD_EXPR, GET_MODE (value), op1, op2,
! target, 1);
! break;
! case ASHIFTRT:
! return expand_simple_binop (GET_MODE (value), code, op1, op2,
! target, 0, OPTAB_LIB_WIDEN);
! break;
! default:
! return expand_simple_binop (GET_MODE (value), code, op1, op2,
! target, 1, OPTAB_LIB_WIDEN);
! }
! }
! if (GET_RTX_CLASS (code) == '1')
! {
! op1 = force_operand (XEXP (value, 0), NULL_RTX);
! return expand_simple_unop (GET_MODE (value), code, op1, target, 0);
}
#ifdef INSN_SCHEDULING
*************** expand_expr (exp, target, tmode, modifie
*** 6202,6208 ****
}
case PARM_DECL:
! if (DECL_RTL (exp) == 0)
{
error_with_decl (exp, "prior parameter's size depends on `%s'");
return CONST0_RTX (mode);
--- 6229,6235 ----
}
case PARM_DECL:
! if (! DECL_RTL_SET_P (exp))
{
error_with_decl (exp, "prior parameter's size depends on `%s'");
return CONST0_RTX (mode);
*************** expand_expr (exp, target, tmode, modifie
*** 6661,6668 ****
* TYPE_QUAL_CONST))),
0, TREE_ADDRESSABLE (exp), 1);
! store_constructor (exp, target, 0,
! int_size_in_bytes (TREE_TYPE (exp)));
return target;
}
--- 6688,6694 ----
* TYPE_QUAL_CONST))),
0, TREE_ADDRESSABLE (exp), 1);
! store_constructor (exp, target, 0, int_expr_size (exp));
return target;
}
*************** expand_expr (exp, target, tmode, modifie
*** 7564,7579 ****
}
}
/* No sense saving up arithmetic to be done
if it's all in the wrong mode to form part of an address.
And force_operand won't know whether to sign-extend or
zero-extend. */
if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
|| mode != ptr_mode)
! goto binop;
!
! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
! subtarget = 0;
op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier);
op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier);
--- 7590,7613 ----
}
}
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
+ subtarget = 0;
+
/* No sense saving up arithmetic to be done
if it's all in the wrong mode to form part of an address.
And force_operand won't know whether to sign-extend or
zero-extend. */
if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
|| mode != ptr_mode)
! {
! op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
! op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
! if (op0 == const0_rtx)
! return op1;
! if (op1 == const0_rtx)
! return op0;
! goto binop2;
! }
op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier);
op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier);
diff -Nrc3pad gcc-3.2/gcc/expr.h gcc-3.2.1/gcc/expr.h
*** gcc-3.2/gcc/expr.h Sun Mar 31 09:42:05 2002
--- gcc-3.2.1/gcc/expr.h Thu Sep 12 02:27:13 2002
*************** extern unsigned int case_values_threshol
*** 548,553 ****
--- 548,557 ----
/* Return an rtx for the size in bytes of the value of an expr. */
extern rtx expr_size PARAMS ((tree));
+ /* Return a wide integer for the size in bytes of the value of EXP, or -1
+ if the size can vary or is larger than an integer. */
+ extern HOST_WIDE_INT int_expr_size PARAMS ((tree));
+
extern rtx lookup_static_chain PARAMS ((tree));
/* Convert a stack slot address ADDR valid in function FNDECL
*************** extern void set_mem_expr PARAMS ((rtx, t
*** 608,613 ****
--- 612,620 ----
/* Set the offset for MEM to OFFSET. */
extern void set_mem_offset PARAMS ((rtx, rtx));
+ /* Set the size for MEM to SIZE. */
+ extern void set_mem_size PARAMS ((rtx, rtx));
+
/* Return a memory reference like MEMREF, but with its mode changed
to MODE and its address changed to ADDR.
(VOIDmode means don't change the mode.
diff -Nrc3pad gcc-3.2/gcc/flags.h gcc-3.2.1/gcc/flags.h
*** gcc-3.2/gcc/flags.h Thu Mar 21 23:12:21 2002
--- gcc-3.2.1/gcc/flags.h Sun Oct 6 23:02:05 2002
*************** extern int align_labels_max_skip;
*** 604,609 ****
--- 604,613 ----
extern int align_functions;
extern int align_functions_log;
+ /* Like align_functions_log above, but used by front-ends to force the
+ minimum function alignment. Zero means no alignment is forced. */
+ extern int force_align_functions_log;
+
/* Nonzero if we dump in VCG format, not plain text. */
extern int dump_for_graph;
diff -Nrc3pad gcc-3.2/gcc/flow.c gcc-3.2.1/gcc/flow.c
*** gcc-3.2/gcc/flow.c Thu Apr 18 20:21:09 2002
--- gcc-3.2.1/gcc/flow.c Sat Nov 16 00:46:44 2002
*************** life_analysis (f, file, flags)
*** 499,504 ****
--- 499,507 ----
}
}
#endif
+
+ rebuild_jump_labels (get_insns ());
+
/* Removing dead insns should've made jumptables really dead. */
delete_dead_jumptables ();
}
*************** propagate_one_insn (pbi, insn)
*** 1626,1632 ****
if (libcall_is_dead)
prev = propagate_block_delete_libcall ( insn, note);
else
! propagate_block_delete_insn (pbi->bb, insn);
return prev;
}
--- 1629,1670 ----
if (libcall_is_dead)
prev = propagate_block_delete_libcall ( insn, note);
else
! {
!
! /* If INSN contains a RETVAL note and is dead, but the libcall
! as a whole is not dead, then we want to remove INSN, but
! not the whole libcall sequence.
!
! However, we need to also remove the dangling REG_LIBCALL
! note so that we do not have mis-matched LIBCALL/RETVAL
! notes. In theory we could find a new location for the
! REG_RETVAL note, but it hardly seems worth the effort.
!
! NOTE at this point will be the RETVAL note if it exists. */
! if (note)
! {
! rtx libcall_note;
!
! libcall_note
! = find_reg_note (XEXP (note, 0), REG_LIBCALL, NULL_RTX);
! remove_note (XEXP (note, 0), libcall_note);
! }
!
! /* Similarly if INSN contains a LIBCALL note, remove the
! dangling REG_RETVAL note. */
! note = find_reg_note (insn, REG_LIBCALL, NULL_RTX);
! if (note)
! {
! rtx retval_note;
!
! retval_note
! = find_reg_note (XEXP (note, 0), REG_RETVAL, NULL_RTX);
! remove_note (XEXP (note, 0), retval_note);
! }
!
! /* Now delete INSN. */
! propagate_block_delete_insn (pbi->bb, insn);
! }
return prev;
}
diff -Nrc3pad gcc-3.2/gcc/fold-const.c gcc-3.2.1/gcc/fold-const.c
*** gcc-3.2/gcc/fold-const.c Sat Jun 15 00:42:25 2002
--- gcc-3.2.1/gcc/fold-const.c Tue Oct 22 09:06:18 2002
*************** fold_binary_op_with_conditional_arg (cod
*** 4869,4874 ****
--- 4869,4875 ----
/* And these are the types of the expressions. */
tree lhs_type = type;
tree rhs_type = type;
+ int save = 0;
if (cond_first_p)
{
*************** fold_binary_op_with_conditional_arg (cod
*** 4927,4937 ****
if an arm is a COND_EXPR since we get exponential behavior
in that case. */
! if (TREE_CODE (arg) != SAVE_EXPR && ! TREE_CONSTANT (arg)
! && global_bindings_p () == 0
! && ((TREE_CODE (arg) != VAR_DECL
! && TREE_CODE (arg) != PARM_DECL)
! || TREE_SIDE_EFFECTS (arg)))
{
if (TREE_CODE (true_value) != COND_EXPR)
lhs = fold (build (lhs_code, lhs_type, *true_lhs, *true_rhs));
--- 4928,4939 ----
if an arm is a COND_EXPR since we get exponential behavior
in that case. */
! if (TREE_CODE (arg) == SAVE_EXPR)
! save = 1;
! else if (! TREE_CONSTANT (arg)
! && global_bindings_p () == 0
! && ((TREE_CODE (arg) != VAR_DECL && TREE_CODE (arg) != PARM_DECL)
! || TREE_SIDE_EFFECTS (arg)))
{
if (TREE_CODE (true_value) != COND_EXPR)
lhs = fold (build (lhs_code, lhs_type, *true_lhs, *true_rhs));
*************** fold_binary_op_with_conditional_arg (cod
*** 4941,4947 ****
if ((lhs == 0 || ! TREE_CONSTANT (lhs))
&& (rhs == 0 || !TREE_CONSTANT (rhs)))
! arg = save_expr (arg), lhs = rhs = 0;
}
if (lhs == 0)
--- 4943,4953 ----
if ((lhs == 0 || ! TREE_CONSTANT (lhs))
&& (rhs == 0 || !TREE_CONSTANT (rhs)))
! {
! arg = save_expr (arg);
! lhs = rhs = 0;
! save = 1;
! }
}
if (lhs == 0)
*************** fold_binary_op_with_conditional_arg (cod
*** 4951,4957 ****
test = fold (build (COND_EXPR, type, test, lhs, rhs));
! if (TREE_CODE (arg) == SAVE_EXPR)
return build (COMPOUND_EXPR, type,
convert (void_type_node, arg),
strip_compound_expr (test, arg));
--- 4957,4963 ----
test = fold (build (COND_EXPR, type, test, lhs, rhs));
! if (save)
return build (COMPOUND_EXPR, type,
convert (void_type_node, arg),
strip_compound_expr (test, arg));
*************** fold (expr)
*** 6535,6541 ****
else if (TREE_INT_CST_HIGH (arg1) == -1
&& (TREE_INT_CST_LOW (arg1)
! == ((unsigned HOST_WIDE_INT) 1 << (width - 1)))
&& ! TREE_UNSIGNED (TREE_TYPE (arg1)))
switch (TREE_CODE (t))
{
--- 6541,6547 ----
else if (TREE_INT_CST_HIGH (arg1) == -1
&& (TREE_INT_CST_LOW (arg1)
! == ((unsigned HOST_WIDE_INT) -1 << (width - 1)))
&& ! TREE_UNSIGNED (TREE_TYPE (arg1)))
switch (TREE_CODE (t))
{
diff -Nrc3pad gcc-3.2/gcc/function.c gcc-3.2.1/gcc/function.c
*** gcc-3.2/gcc/function.c Sat Jun 22 14:29:26 2002
--- gcc-3.2.1/gcc/function.c Mon Oct 14 21:04:17 2002
*************** Software Foundation, 59 Temple Place - S
*** 59,64 ****
--- 59,65 ----
#include "ggc.h"
#include "tm_p.h"
#include "integrate.h"
+ #include "langhooks.h"
#ifndef TRAMPOLINE_ALIGNMENT
#define TRAMPOLINE_ALIGNMENT FUNCTION_BOUNDARY
*************** assign_stack_temp_for_type (mode, size,
*** 826,832 ****
/* If a type is specified, set the relevant flags. */
if (type != 0)
{
! RTX_UNCHANGING_P (slot) = TYPE_READONLY (type);
MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
MEM_SET_IN_STRUCT_P (slot, AGGREGATE_TYPE_P (type));
}
--- 827,834 ----
/* If a type is specified, set the relevant flags. */
if (type != 0)
{
! RTX_UNCHANGING_P (slot) = (lang_hooks.honor_readonly
! && TYPE_READONLY (type));
MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
MEM_SET_IN_STRUCT_P (slot, AGGREGATE_TYPE_P (type));
}
diff -Nrc3pad gcc-3.2/gcc/gcc.c gcc-3.2.1/gcc/gcc.c
*** gcc-3.2/gcc/gcc.c Thu Aug 1 20:14:57 2002
--- gcc-3.2.1/gcc/gcc.c Mon Oct 14 21:55:26 2002
*************** static const char *print_prog_name = NUL
*** 172,177 ****
--- 172,182 ----
static int print_multi_directory;
+ /* Flag saying to print the relative path we'd use to
+ find OS libraries given the current compiler flags. */
+
+ static int print_multi_os_directory;
+
/* Flag saying to print the list of subdirectories and
compiler flags used to select them in a standard form. */
*************** static struct compiler *lookup_compiler
*** 285,293 ****
static char *build_search_list PARAMS ((struct path_prefix *, const char *, int));
static void putenv_from_prefixes PARAMS ((struct path_prefix *, const char *));
static int access_check PARAMS ((const char *, int));
! static char *find_a_file PARAMS ((struct path_prefix *, const char *, int));
static void add_prefix PARAMS ((struct path_prefix *, const char *,
! const char *, int, int, int *));
static void translate_options PARAMS ((int *, const char *const **));
static char *skip_whitespace PARAMS ((char *));
static void delete_if_ordinary PARAMS ((const char *));
--- 290,299 ----
static char *build_search_list PARAMS ((struct path_prefix *, const char *, int));
static void putenv_from_prefixes PARAMS ((struct path_prefix *, const char *));
static int access_check PARAMS ((const char *, int));
! static char *find_a_file PARAMS ((struct path_prefix *, const char *,
! int, int));
static void add_prefix PARAMS ((struct path_prefix *, const char *,
! const char *, int, int, int *, int));
static void translate_options PARAMS ((int *, const char *const **));
static char *skip_whitespace PARAMS ((char *));
static void delete_if_ordinary PARAMS ((const char *));
*************** static const char *link_libgcc_spec = LI
*** 668,679 ****
static const char *trad_capable_cpp =
"%{traditional|ftraditional|traditional-cpp:trad}cpp0";
static const char *cpp_unique_options =
"%{C:%{!E:%eGNU C does not support -C without using -E}}\
%{nostdinc*} %{C} %{v} %{I*} %{P} %{$} %I\
! %{MD:-MD %W{!o: %b.d}%W{o*:%.d%*}}\
! %{MMD:-MMD %W{!o: %b.d}%W{o*:%.d%*}}\
! %{M} %{MM} %W{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
%{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\
%{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3 -D__GXX_ABI_VERSION=102}\
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
--- 674,688 ----
static const char *trad_capable_cpp =
"%{traditional|ftraditional|traditional-cpp:trad}cpp0";
+ /* We don't wrap .d files in %W{} since a missing .d file, and
+ therefore no dependency entry, confuses make into thinking a .o
+ file that happens to exist is up-to-date. */
static const char *cpp_unique_options =
"%{C:%{!E:%eGNU C does not support -C without using -E}}\
%{nostdinc*} %{C} %{v} %{I*} %{P} %{$} %I\
! %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\
! %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\
! %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
%{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\
%{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3 -D__GXX_ABI_VERSION=102}\
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
*************** static const struct option_map option_ma
*** 963,968 ****
--- 972,978 ----
{"--print-missing-file-dependencies", "-MG", 0},
{"--print-multi-lib", "-print-multi-lib", 0},
{"--print-multi-directory", "-print-multi-directory", 0},
+ {"--print-multi-os-directory", "-print-multi-os-directory", 0},
{"--print-prog-name", "-print-prog-name=", "aj"},
{"--profile", "-p", 0},
{"--profile-blocks", "-a", 0},
*************** struct prefix_list
*** 1248,1254 ****
int require_machine_suffix; /* Don't use without machine_suffix. */
/* 2 means try both machine_suffix and just_machine_suffix. */
int *used_flag_ptr; /* 1 if a file was found with this prefix. */
! int priority; /* Sort key - priority within list */
};
struct path_prefix
--- 1258,1266 ----
int require_machine_suffix; /* Don't use without machine_suffix. */
/* 2 means try both machine_suffix and just_machine_suffix. */
int *used_flag_ptr; /* 1 if a file was found with this prefix. */
! int priority; /* Sort key - priority within list. */
! int os_multilib; /* 1 if OS multilib scheme should be used,
! 0 for GCC multilib scheme. */
};
struct path_prefix
*************** static const char *const standard_bindir
*** 1337,1342 ****
--- 1349,1359 ----
set_multilib_dir based on the compilation options. */
static const char *multilib_dir;
+
+ /* Subdirectory to use for locating libraries in OS conventions. Set by
+ set_multilib_dir based on the compilation options. */
+
+ static const char *multilib_os_dir;
/* Structure to keep track of the specs that have been defined so far.
These are accessed using %(specname) or %[specname] in a compiler
*************** static struct spec_list static_specs[] =
*** 1390,1395 ****
--- 1407,1413 ----
INIT_STATIC_SPEC ("multilib_extra", &multilib_extra),
INIT_STATIC_SPEC ("multilib_matches", &multilib_matches),
INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions),
+ INIT_STATIC_SPEC ("multilib_options", &multilib_options),
INIT_STATIC_SPEC ("linker", &linker_name_spec),
INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec),
INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix),
*************** read_specs (filename, main_p)
*** 1832,1838 ****
(long) (p1 - buffer + 1));
p[-2] = '\0';
! new_filename = find_a_file (&startfile_prefixes, p1, R_OK);
read_specs (new_filename ? new_filename : p1, FALSE);
continue;
}
--- 1850,1856 ----
(long) (p1 - buffer + 1));
p[-2] = '\0';
! new_filename = find_a_file (&startfile_prefixes, p1, R_OK, 0);
read_specs (new_filename ? new_filename : p1, FALSE);
continue;
}
*************** read_specs (filename, main_p)
*** 1851,1857 ****
(long) (p1 - buffer + 1));
p[-2] = '\0';
! new_filename = find_a_file (&startfile_prefixes, p1, R_OK);
if (new_filename)
read_specs (new_filename, FALSE);
else if (verbose_flag)
--- 1869,1875 ----
(long) (p1 - buffer + 1));
p[-2] = '\0';
! new_filename = find_a_file (&startfile_prefixes, p1, R_OK, 0);
if (new_filename)
read_specs (new_filename, FALSE);
else if (verbose_flag)
*************** access_check (name, mode)
*** 2480,2495 ****
Return 0 if not found, otherwise return its name, allocated with malloc. */
static char *
! find_a_file (pprefix, name, mode)
struct path_prefix *pprefix;
const char *name;
! int mode;
{
char *temp;
const char *const file_suffix =
((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "");
struct prefix_list *pl;
int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1;
#ifdef DEFAULT_ASSEMBLER
if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0)
--- 2498,2514 ----
Return 0 if not found, otherwise return its name, allocated with malloc. */
static char *
! find_a_file (pprefix, name, mode, multilib)
struct path_prefix *pprefix;
const char *name;
! int mode, multilib;
{
char *temp;
const char *const file_suffix =
((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "");
struct prefix_list *pl;
int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1;
+ const char *multilib_name, *multilib_os_name;
#ifdef DEFAULT_ASSEMBLER
if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0)
*************** find_a_file (pprefix, name, mode)
*** 2504,2509 ****
--- 2523,2544 ----
if (machine_suffix)
len += strlen (machine_suffix);
+ multilib_name = name;
+ multilib_os_name = name;
+ if (multilib && multilib_os_dir)
+ {
+ int len1 = multilib_dir ? strlen (multilib_dir) + 1 : 0;
+ int len2 = strlen (multilib_os_dir) + 1;
+
+ len += len1 > len2 ? len1 : len2;
+ if (multilib_dir)
+ multilib_name = ACONCAT ((multilib_dir, dir_separator_str, name,
+ NULL));
+ if (strcmp (multilib_os_dir, ".") != 0)
+ multilib_os_name = ACONCAT ((multilib_os_dir, dir_separator_str, name,
+ NULL));
+ }
+
temp = xmalloc (len);
/* Determine the filename to execute (special case for absolute paths). */
*************** find_a_file (pprefix, name, mode)
*** 2519,2524 ****
--- 2554,2562 ----
else
for (pl = pprefix->plist; pl; pl = pl->next)
{
+ const char *this_name
+ = pl->os_multilib ? multilib_os_name : multilib_name;
+
if (machine_suffix)
{
/* Some systems have a suffix for executable files.
*************** find_a_file (pprefix, name, mode)
*** 2527,2533 ****
{
strcpy (temp, pl->prefix);
strcat (temp, machine_suffix);
! strcat (temp, name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
--- 2565,2571 ----
{
strcpy (temp, pl->prefix);
strcat (temp, machine_suffix);
! strcat (temp, multilib_name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
*************** find_a_file (pprefix, name, mode)
*** 2537,2546 ****
}
}
! /* Now try just the name. */
strcpy (temp, pl->prefix);
strcat (temp, machine_suffix);
! strcat (temp, name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
--- 2575,2584 ----
}
}
! /* Now try just the multilib_name. */
strcpy (temp, pl->prefix);
strcat (temp, machine_suffix);
! strcat (temp, multilib_name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
*************** find_a_file (pprefix, name, mode)
*** 2559,2565 ****
{
strcpy (temp, pl->prefix);
strcat (temp, just_machine_suffix);
! strcat (temp, name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
--- 2597,2603 ----
{
strcpy (temp, pl->prefix);
strcat (temp, just_machine_suffix);
! strcat (temp, multilib_name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
*************** find_a_file (pprefix, name, mode)
*** 2571,2577 ****
strcpy (temp, pl->prefix);
strcat (temp, just_machine_suffix);
! strcat (temp, name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
--- 2609,2615 ----
strcpy (temp, pl->prefix);
strcat (temp, just_machine_suffix);
! strcat (temp, multilib_name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
*************** find_a_file (pprefix, name, mode)
*** 2589,2595 ****
if (file_suffix[0] != 0)
{
strcpy (temp, pl->prefix);
! strcat (temp, name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
--- 2627,2633 ----
if (file_suffix[0] != 0)
{
strcpy (temp, pl->prefix);
! strcat (temp, this_name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
*************** find_a_file (pprefix, name, mode)
*** 2600,2606 ****
}
strcpy (temp, pl->prefix);
! strcat (temp, name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
--- 2638,2644 ----
}
strcpy (temp, pl->prefix);
! strcat (temp, this_name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
*************** enum path_prefix_priority
*** 2638,2650 ****
2 means try both machine_suffix and just_machine_suffix. */
static void
! add_prefix (pprefix, prefix, component, priority, require_machine_suffix, warn)
struct path_prefix *pprefix;
const char *prefix;
const char *component;
/* enum prefix_priority */ int priority;
int require_machine_suffix;
int *warn;
{
struct prefix_list *pl, **prev;
int len;
--- 2676,2690 ----
2 means try both machine_suffix and just_machine_suffix. */
static void
! add_prefix (pprefix, prefix, component, priority, require_machine_suffix,
! warn, os_multilib)
struct path_prefix *pprefix;
const char *prefix;
const char *component;
/* enum prefix_priority */ int priority;
int require_machine_suffix;
int *warn;
+ int os_multilib;
{
struct prefix_list *pl, **prev;
int len;
*************** add_prefix (pprefix, prefix, component,
*** 2666,2671 ****
--- 2706,2712 ----
pl->require_machine_suffix = require_machine_suffix;
pl->used_flag_ptr = warn;
pl->priority = priority;
+ pl->os_multilib = os_multilib;
if (warn)
*warn = 0;
*************** execute ()
*** 2709,2715 ****
commands[0].prog = argbuf[0]; /* first command. */
commands[0].argv = &argbuf[0];
! string = find_a_file (&exec_prefixes, commands[0].prog, X_OK);
if (string)
commands[0].argv[0] = string;
--- 2750,2756 ----
commands[0].prog = argbuf[0]; /* first command. */
commands[0].argv = &argbuf[0];
! string = find_a_file (&exec_prefixes, commands[0].prog, X_OK, 0);
if (string)
commands[0].argv[0] = string;
*************** execute ()
*** 2723,2729 ****
argbuf[i] = 0; /* termination of command args. */
commands[n_commands].prog = argbuf[i + 1];
commands[n_commands].argv = &argbuf[i + 1];
! string = find_a_file (&exec_prefixes, commands[n_commands].prog, X_OK);
if (string)
commands[n_commands].argv[0] = string;
n_commands++;
--- 2764,2771 ----
argbuf[i] = 0; /* termination of command args. */
commands[n_commands].prog = argbuf[i + 1];
commands[n_commands].argv = &argbuf[i + 1];
! string = find_a_file (&exec_prefixes, commands[n_commands].prog,
! X_OK, 0);
if (string)
commands[n_commands].argv[0] = string;
n_commands++;
*************** display_help ()
*** 3041,3046 ****
--- 3083,3089 ----
fputs (_("\
-print-multi-lib Display the mapping between command line options and\n\
multiple library search directories\n"), stdout);
+ fputs (_(" -print-multi-os-directory Display the relative path to OS libraries\n"), stdout);
fputs (_(" -Wa, Pass comma-separated on to the assembler\n"), stdout);
fputs (_(" -Wp, Pass comma-separated on to the preprocessor\n"), stdout);
fputs (_(" -Wl, Pass comma-separated on to the linker\n"), stdout);
*************** process_command (argc, argv)
*** 3202,3210 ****
set_std_prefix (gcc_exec_prefix, len);
add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL);
}
/* COMPILER_PATH and LIBRARY_PATH have values
--- 3245,3253 ----
set_std_prefix (gcc_exec_prefix, len);
add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL, 0);
}
/* COMPILER_PATH and LIBRARY_PATH have values
*************** process_command (argc, argv)
*** 3232,3241 ****
else
nstore[endp - startp] = 0;
add_prefix (&exec_prefixes, nstore, 0,
! PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&include_prefixes,
concat (nstore, "include", NULL),
! 0, PREFIX_PRIORITY_LAST, 0, NULL);
if (*endp == 0)
break;
endp = startp = endp + 1;
--- 3275,3284 ----
else
nstore[endp - startp] = 0;
add_prefix (&exec_prefixes, nstore, 0,
! PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&include_prefixes,
concat (nstore, "include", NULL),
! 0, PREFIX_PRIORITY_LAST, 0, NULL, 0);
if (*endp == 0)
break;
endp = startp = endp + 1;
*************** process_command (argc, argv)
*** 3267,3273 ****
else
nstore[endp - startp] = 0;
add_prefix (&startfile_prefixes, nstore, NULL,
! PREFIX_PRIORITY_LAST, 0, NULL);
if (*endp == 0)
break;
endp = startp = endp + 1;
--- 3310,3316 ----
else
nstore[endp - startp] = 0;
add_prefix (&startfile_prefixes, nstore, NULL,
! PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*endp == 0)
break;
endp = startp = endp + 1;
*************** process_command (argc, argv)
*** 3300,3306 ****
else
nstore[endp - startp] = 0;
add_prefix (&startfile_prefixes, nstore, NULL,
! PREFIX_PRIORITY_LAST, 0, NULL);
if (*endp == 0)
break;
endp = startp = endp + 1;
--- 3343,3349 ----
else
nstore[endp - startp] = 0;
add_prefix (&startfile_prefixes, nstore, NULL,
! PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*endp == 0)
break;
endp = startp = endp + 1;
*************** warranty; not even for MERCHANTABILITY o
*** 3401,3406 ****
--- 3444,3451 ----
print_multi_lib = 1;
else if (! strcmp (argv[i], "-print-multi-directory"))
print_multi_directory = 1;
+ else if (! strcmp (argv[i], "-print-multi-os-directory"))
+ print_multi_os_directory = 1;
else if (! strncmp (argv[i], "-Wa,", 4))
{
int prev, j;
*************** warranty; not even for MERCHANTABILITY o
*** 3570,3576 ****
{
if (len == 7)
add_prefix (&include_prefixes, "include", NULL,
! PREFIX_PRIORITY_B_OPT, 0, NULL);
else
{
char * string = xmalloc (len + 1);
--- 3615,3621 ----
{
if (len == 7)
add_prefix (&include_prefixes, "include", NULL,
! PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
else
{
char * string = xmalloc (len + 1);
*************** warranty; not even for MERCHANTABILITY o
*** 3578,3593 ****
strncpy (string, value, len - 7);
strcpy (string + len - 7, "include");
add_prefix (&include_prefixes, string, NULL,
! PREFIX_PRIORITY_B_OPT, 0, NULL);
}
}
add_prefix (&exec_prefixes, value, NULL,
! PREFIX_PRIORITY_B_OPT, 0, &warn_B);
add_prefix (&startfile_prefixes, value, NULL,
! PREFIX_PRIORITY_B_OPT, 0, &warn_B);
add_prefix (&include_prefixes, concat (value, "include", NULL),
! NULL, PREFIX_PRIORITY_B_OPT, 0, NULL);
n_switches++;
}
break;
--- 3623,3638 ----
strncpy (string, value, len - 7);
strcpy (string + len - 7, "include");
add_prefix (&include_prefixes, string, NULL,
! PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
}
}
add_prefix (&exec_prefixes, value, NULL,
! PREFIX_PRIORITY_B_OPT, 0, &warn_B, 0);
add_prefix (&startfile_prefixes, value, NULL,
! PREFIX_PRIORITY_B_OPT, 0, &warn_B, 0);
add_prefix (&include_prefixes, concat (value, "include", NULL),
! NULL, PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
n_switches++;
}
break;
*************** warranty; not even for MERCHANTABILITY o
*** 3760,3776 ****
as well as trying the machine and the version. */
#ifndef OS2
add_prefix (&exec_prefixes, standard_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 1, warn_std_ptr);
add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
! PREFIX_PRIORITY_LAST, 2, warn_std_ptr);
add_prefix (&exec_prefixes, standard_exec_prefix_1, "BINUTILS",
! PREFIX_PRIORITY_LAST, 2, warn_std_ptr);
#endif
add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
! PREFIX_PRIORITY_LAST, 1, warn_std_ptr);
add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS",
! PREFIX_PRIORITY_LAST, 1, warn_std_ptr);
tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
dir_separator_str, NULL);
--- 3805,3821 ----
as well as trying the machine and the version. */
#ifndef OS2
add_prefix (&exec_prefixes, standard_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
! PREFIX_PRIORITY_LAST, 2, warn_std_ptr, 0);
add_prefix (&exec_prefixes, standard_exec_prefix_1, "BINUTILS",
! PREFIX_PRIORITY_LAST, 2, warn_std_ptr, 0);
#endif
add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
! PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS",
! PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
dir_separator_str, NULL);
*************** warranty; not even for MERCHANTABILITY o
*** 3793,3803 ****
add_prefix (&exec_prefixes,
concat (gcc_exec_tooldir_prefix, "bin",
dir_separator_str, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&startfile_prefixes,
concat (gcc_exec_tooldir_prefix, "lib",
dir_separator_str, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL);
}
tooldir_prefix = concat (standard_exec_prefix, spec_machine,
--- 3838,3848 ----
add_prefix (&exec_prefixes,
concat (gcc_exec_tooldir_prefix, "bin",
dir_separator_str, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes,
concat (gcc_exec_tooldir_prefix, "lib",
dir_separator_str, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
}
tooldir_prefix = concat (standard_exec_prefix, spec_machine,
*************** warranty; not even for MERCHANTABILITY o
*** 3807,3816 ****
add_prefix (&exec_prefixes,
concat (tooldir_prefix, "bin", dir_separator_str, NULL),
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&startfile_prefixes,
concat (tooldir_prefix, "lib", dir_separator_str, NULL),
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
/* More prefixes are enabled in main, after we read the specs file
and determine whether this is cross-compilation or not. */
--- 3852,3861 ----
add_prefix (&exec_prefixes,
concat (tooldir_prefix, "bin", dir_separator_str, NULL),
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes,
concat (tooldir_prefix, "lib", dir_separator_str, NULL),
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
/* More prefixes are enabled in main, after we read the specs file
and determine whether this is cross-compilation or not. */
*************** warranty; not even for MERCHANTABILITY o
*** 3860,3865 ****
--- 3905,3912 ----
;
else if (! strcmp (argv[i], "-print-multi-directory"))
;
+ else if (! strcmp (argv[i], "-print-multi-os-directory"))
+ ;
else if (! strcmp (argv[i], "-ftarget-help"))
;
else if (! strcmp (argv[i], "-fhelp"))
*************** do_spec_1 (spec, inswitch, soft_matched_
*** 4363,4371 ****
continue;
#endif
/* Try subdirectory if there is one. */
! if (multilib_dir != NULL)
{
! if (machine_suffix)
{
if (strlen (pl->prefix) + strlen (machine_suffix)
>= bufsize)
--- 4410,4423 ----
continue;
#endif
/* Try subdirectory if there is one. */
! if (multilib_dir != NULL
! || (pl->os_multilib && multilib_os_dir != NULL))
{
! const char *multi_dir;
!
! multi_dir = pl->os_multilib ? multilib_os_dir
! : multilib_dir;
! if (machine_suffix && multilib_dir)
{
if (strlen (pl->prefix) + strlen (machine_suffix)
>= bufsize)
*************** do_spec_1 (spec, inswitch, soft_matched_
*** 4388,4401 ****
}
if (!pl->require_machine_suffix)
{
! if (is_directory (pl->prefix, multilib_dir, 1))
{
do_spec_1 ("-L", 0, NULL);
#ifdef SPACE_AFTER_L_OPTION
do_spec_1 (" ", 0, NULL);
#endif
do_spec_1 (pl->prefix, 1, NULL);
! do_spec_1 (multilib_dir, 1, NULL);
/* Make this a separate argument. */
do_spec_1 (" ", 0, NULL);
}
--- 4440,4453 ----
}
if (!pl->require_machine_suffix)
{
! if (is_directory (pl->prefix, multi_dir, 1))
{
do_spec_1 ("-L", 0, NULL);
#ifdef SPACE_AFTER_L_OPTION
do_spec_1 (" ", 0, NULL);
#endif
do_spec_1 (pl->prefix, 1, NULL);
! do_spec_1 (multi_dir, 1, NULL);
/* Make this a separate argument. */
do_spec_1 (" ", 0, NULL);
}
*************** find_file (name)
*** 5616,5626 ****
char *newname;
/* Try multilib_dir if it is defined. */
! if (multilib_dir != NULL)
{
! const char *const try = ACONCAT ((multilib_dir, dir_separator_str, name, NULL));
!
! newname = find_a_file (&startfile_prefixes, try, R_OK);
/* If we don't find it in the multi library dir, then fall
through and look for it in the normal places. */
--- 5668,5676 ----
char *newname;
/* Try multilib_dir if it is defined. */
! if (multilib_os_dir != NULL)
{
! newname = find_a_file (&startfile_prefixes, name, R_OK, 1);
/* If we don't find it in the multi library dir, then fall
through and look for it in the normal places. */
*************** find_file (name)
*** 5628,5634 ****
return newname;
}
! newname = find_a_file (&startfile_prefixes, name, R_OK);
return newname ? newname : name;
}
--- 5678,5684 ----
return newname;
}
! newname = find_a_file (&startfile_prefixes, name, R_OK, 0);
return newname ? newname : name;
}
*************** main (argc, argv)
*** 5863,5869 ****
spec_version, dir_separator_str, NULL);
just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
! specs_file = find_a_file (&startfile_prefixes, "specs", R_OK);
/* Read the specs file unless it is a default one. */
if (specs_file != 0 && strcmp (specs_file, "specs"))
read_specs (specs_file, TRUE);
--- 5913,5919 ----
spec_version, dir_separator_str, NULL);
just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
! specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, 0);
/* Read the specs file unless it is a default one. */
if (specs_file != 0 && strcmp (specs_file, "specs"))
read_specs (specs_file, TRUE);
*************** main (argc, argv)
*** 5888,5905 ****
if (*md_exec_prefix)
{
add_prefix (&exec_prefixes, md_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&startfile_prefixes, md_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL);
}
if (*md_startfile_prefix)
add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL);
if (*md_startfile_prefix_1)
add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL);
/* If standard_startfile_prefix is relative, base it on
standard_exec_prefix. This lets us move the installed tree
--- 5938,5955 ----
if (*md_exec_prefix)
{
add_prefix (&exec_prefixes, md_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes, md_exec_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL, 0);
}
if (*md_startfile_prefix)
add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*md_startfile_prefix_1)
add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC",
! PREFIX_PRIORITY_LAST, 0, NULL, 1);
/* If standard_startfile_prefix is relative, base it on
standard_exec_prefix. This lets us move the installed tree
*************** main (argc, argv)
*** 5907,5934 ****
standard_startfile_prefix on that as well. */
if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix))
add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS",
! PREFIX_PRIORITY_LAST, 0, NULL);
else
{
if (gcc_exec_prefix)
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&startfile_prefixes,
concat (standard_exec_prefix,
machine_suffix,
standard_startfile_prefix, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL);
}
add_prefix (&startfile_prefixes, standard_startfile_prefix_1,
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
add_prefix (&startfile_prefixes, standard_startfile_prefix_2,
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
#if 0 /* Can cause surprises, and one can use -B./ instead. */
add_prefix (&startfile_prefixes, "./", NULL,
! PREFIX_PRIORITY_LAST, 1, NULL);
#endif
}
else
--- 5957,5984 ----
standard_startfile_prefix on that as well. */
if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix))
add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS",
! PREFIX_PRIORITY_LAST, 0, NULL, 1);
else
{
if (gcc_exec_prefix)
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
add_prefix (&startfile_prefixes,
concat (standard_exec_prefix,
machine_suffix,
standard_startfile_prefix, NULL),
! NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
}
add_prefix (&startfile_prefixes, standard_startfile_prefix_1,
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
add_prefix (&startfile_prefixes, standard_startfile_prefix_2,
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
#if 0 /* Can cause surprises, and one can use -B./ instead. */
add_prefix (&startfile_prefixes, "./", NULL,
! PREFIX_PRIORITY_LAST, 1, NULL, 0);
#endif
}
else
*************** main (argc, argv)
*** 5938,5951 ****
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL),
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
}
/* Process any user specified specs in the order given on the command
line. */
for (uptr = user_specs_head; uptr; uptr = uptr->next)
{
! char *filename = find_a_file (&startfile_prefixes, uptr->filename, R_OK);
read_specs (filename ? filename : uptr->filename, FALSE);
}
--- 5988,6002 ----
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL),
! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
}
/* Process any user specified specs in the order given on the command
line. */
for (uptr = user_specs_head; uptr; uptr = uptr->next)
{
! char *filename = find_a_file (&startfile_prefixes, uptr->filename,
! R_OK, 0);
read_specs (filename ? filename : uptr->filename, FALSE);
}
*************** main (argc, argv)
*** 5987,5993 ****
if (print_prog_name)
{
! char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK);
printf ("%s\n", (newname ? newname : print_prog_name));
return (0);
}
--- 6038,6044 ----
if (print_prog_name)
{
! char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK, 0);
printf ("%s\n", (newname ? newname : print_prog_name));
return (0);
}
*************** main (argc, argv)
*** 6007,6012 ****
--- 6058,6072 ----
return (0);
}
+ if (print_multi_os_directory)
+ {
+ if (multilib_os_dir == NULL)
+ printf (".\n");
+ else
+ printf ("%s\n", multilib_os_dir);
+ return (0);
+ }
+
if (target_help_flag)
{
/* Print if any target specific options. */
*************** main (argc, argv)
*** 6166,6172 ****
/* We'll use ld if we can't find collect2. */
if (! strcmp (linker_name_spec, "collect2"))
{
! char *s = find_a_file (&exec_prefixes, "collect2", X_OK);
if (s == NULL)
linker_name_spec = "ld";
}
--- 6226,6232 ----
/* We'll use ld if we can't find collect2. */
if (! strcmp (linker_name_spec, "collect2"))
{
! char *s = find_a_file (&exec_prefixes, "collect2", X_OK, 0);
if (s == NULL)
linker_name_spec = "ld";
}
*************** next_member:
*** 6460,6465 ****
--- 6520,6534 ----
goto next_member;
}
+ struct mdswitchstr
+ {
+ const char *str;
+ int len;
+ };
+
+ static struct mdswitchstr *mdswitches;
+ static int n_mdswitches;
+
/* Check whether a particular argument was used. The first time we
canonicalize the switches to keep only the ones we care about. */
*************** used_arg (p, len)
*** 6525,6532 ****
xmalloc from calling fatal, and prevents us from re-executing this
block of code. */
mswitches
! = (struct mswitchstr *) xmalloc ((sizeof (struct mswitchstr))
! * (n_switches ? n_switches : 1));
for (i = 0; i < n_switches; i++)
{
int xlen = strlen (switches[i].part1);
--- 6594,6602 ----
xmalloc from calling fatal, and prevents us from re-executing this
block of code. */
mswitches
! = (struct mswitchstr *)
! xmalloc (sizeof (struct mswitchstr)
! * (n_mdswitches + (n_switches ? n_switches : 1)));
for (i = 0; i < n_switches; i++)
{
int xlen = strlen (switches[i].part1);
*************** used_arg (p, len)
*** 6542,6547 ****
--- 6612,6668 ----
break;
}
}
+
+ /* Add MULTILIB_DEFAULTS switches too, as long as they were not present
+ on the command line nor any options mutually incompatible with
+ them. */
+ for (i = 0; i < n_mdswitches; i++)
+ {
+ const char *r;
+
+ for (q = multilib_options; *q != '\0'; q++)
+ {
+ while (*q == ' ')
+ q++;
+
+ r = q;
+ while (strncmp (q, mdswitches[i].str, mdswitches[i].len) != 0
+ || strchr (" /", q[mdswitches[i].len]) == NULL)
+ {
+ while (*q != ' ' && *q != '/' && *q != '\0')
+ q++;
+ if (*q != '/')
+ break;
+ q++;
+ }
+
+ if (*q != ' ' && *q != '\0')
+ {
+ while (*r != ' ' && *r != '\0')
+ {
+ q = r;
+ while (*q != ' ' && *q != '/' && *q != '\0')
+ q++;
+
+ if (used_arg (r, q - r))
+ break;
+
+ if (*q != '/')
+ {
+ mswitches[n_mswitches].str = mdswitches[i].str;
+ mswitches[n_mswitches].len = mdswitches[i].len;
+ mswitches[n_mswitches].replace = (char *) 0;
+ mswitches[n_mswitches].rep_len = 0;
+ n_mswitches++;
+ break;
+ }
+
+ r = q + 1;
+ }
+ break;
+ }
+ }
+ }
}
for (i = 0; i < n_mswitches; i++)
*************** default_arg (p, len)
*** 6556,6580 ****
const char *p;
int len;
{
! const char *start, *end;
!
! for (start = multilib_defaults; *start != '\0'; start = end + 1)
! {
! while (*start == ' ' || *start == '\t')
! start++;
!
! if (*start == '\0')
! break;
!
! for (end = start + 1; *end != ' ' && *end != '\t' && *end != '\0'; end++)
! ;
!
! if ((end - start) == len && strncmp (p, start, len) == 0)
! return 1;
! if (*end == '\0')
! break;
! }
return 0;
}
--- 6677,6687 ----
const char *p;
int len;
{
! int i;
! for (i = 0; i < n_mdswitches; i++)
! if (len == mdswitches[i].len && ! strncmp (p, mdswitches[i].str, len))
! return 1;
return 0;
}
*************** set_multilib_dir ()
*** 6596,6603 ****
const char *p;
unsigned int this_path_len;
const char *this_path, *this_arg;
int not_arg;
! int ok;
p = multilib_exclusions;
while (*p != '\0')
--- 6703,6753 ----
const char *p;
unsigned int this_path_len;
const char *this_path, *this_arg;
+ const char *start, *end;
int not_arg;
! int ok, ndfltok, first;
!
! n_mdswitches = 0;
! start = multilib_defaults;
! while (*start == ' ' || *start == '\t')
! start++;
! while (*start != '\0')
! {
! n_mdswitches++;
! while (*start != ' ' && *start != '\t' && *start != '\0')
! start++;
! while (*start == ' ' || *start == '\t')
! start++;
! }
!
! if (n_mdswitches)
! {
! int i = 0;
!
! mdswitches
! = (struct mdswitchstr *) xmalloc (sizeof (struct mdswitchstr)
! * n_mdswitches);
! for (start = multilib_defaults; *start != '\0'; start = end + 1)
! {
! while (*start == ' ' || *start == '\t')
! start++;
!
! if (*start == '\0')
! break;
!
! for (end = start + 1;
! *end != ' ' && *end != '\t' && *end != '\0'; end++)
! ;
!
! obstack_grow (&multilib_obstack, start, end - start);
! obstack_1grow (&multilib_obstack, 0);
! mdswitches[i].str = obstack_finish (&multilib_obstack);
! mdswitches[i++].len = end - start;
!
! if (*end == '\0')
! break;
! }
! }
p = multilib_exclusions;
while (*p != '\0')
*************** set_multilib_dir ()
*** 6652,6657 ****
--- 6802,6808 ----
++p;
}
+ first = 1;
p = multilib_select;
while (*p != '\0')
{
*************** set_multilib_dir ()
*** 6674,6679 ****
--- 6825,6831 ----
/* Check the arguments. */
ok = 1;
+ ndfltok = 1;
++p;
while (*p != ';')
{
*************** set_multilib_dir ()
*** 6709,6740 ****
there is a more specific library which uses this
argument. If this argument is a default, we need not
consider that more specific library. */
! if (! default_arg (this_arg, p - this_arg))
! {
! ok = used_arg (this_arg, p - this_arg);
! if (not_arg)
! ok = ! ok;
! }
if (*p == ' ')
++p;
}
! if (ok)
{
if (this_path_len != 1
|| this_path[0] != '.')
{
char *new_multilib_dir = xmalloc (this_path_len + 1);
strncpy (new_multilib_dir, this_path, this_path_len);
new_multilib_dir[this_path_len] = '\0';
multilib_dir = new_multilib_dir;
}
! break;
}
++p;
}
}
/* Print out the multiple library subdirectory selection
--- 6861,6925 ----
there is a more specific library which uses this
argument. If this argument is a default, we need not
consider that more specific library. */
! ok = used_arg (this_arg, p - this_arg);
! if (not_arg)
! ok = ! ok;
!
! if (! ok)
! ndfltok = 0;
!
! if (default_arg (this_arg, p - this_arg))
! ok = 1;
if (*p == ' ')
++p;
}
! if (ok && first)
{
if (this_path_len != 1
|| this_path[0] != '.')
{
char *new_multilib_dir = xmalloc (this_path_len + 1);
+ char *q;
+
strncpy (new_multilib_dir, this_path, this_path_len);
new_multilib_dir[this_path_len] = '\0';
+ q = strchr (new_multilib_dir, ':');
+ if (q != NULL)
+ *q = '\0';
multilib_dir = new_multilib_dir;
}
! first = 0;
! }
!
! if (ndfltok)
! {
! const char *q = this_path, *end = this_path + this_path_len;
!
! while (q < end && *q != ':')
! q++;
! if (q < end)
! {
! char *new_multilib_os_dir = xmalloc (end - q);
! memcpy (new_multilib_os_dir, q + 1, end - q - 1);
! new_multilib_os_dir[end - q - 1] = '\0';
! multilib_os_dir = new_multilib_os_dir;
! break;
! }
}
++p;
}
+
+ if (multilib_dir == NULL && multilib_os_dir != NULL
+ && strcmp (multilib_os_dir, ".") == 0)
+ {
+ free ((char *) multilib_os_dir);
+ multilib_os_dir = NULL;
+ }
+ else if (multilib_dir != NULL && multilib_os_dir == NULL)
+ multilib_os_dir = multilib_dir;
}
/* Print out the multiple library subdirectory selection
*************** print_multilib_info ()
*** 6774,6779 ****
--- 6959,6970 ----
++p;
}
+ /* When --disable-multilib was used but target defines
+ MULTILIB_OSDIRNAMES, entries starting with .: are there just
+ to find multilib_os_dir, so skip them from output. */
+ if (this_path[0] == '.' && this_path[1] == ':')
+ skip = 1;
+
/* Check for matches with the multilib_exclusions. We don't bother
with the '!' in either list. If any of the exclusion rules match
all of its options with the select rule, we skip it. */
*************** print_multilib_info ()
*** 6915,6921 ****
{
const char *p1;
! for (p1 = last_path; p1 < p; p1++)
putchar (*p1);
putchar (';');
}
--- 7106,7112 ----
{
const char *p1;
! for (p1 = last_path; p1 < p && *p1 != ':'; p1++)
putchar (*p1);
putchar (';');
}
diff -Nrc3pad gcc-3.2/gcc/genmultilib gcc-3.2.1/gcc/genmultilib
*** gcc-3.2/gcc/genmultilib Sun Oct 7 18:02:43 2001
--- gcc-3.2.1/gcc/genmultilib Sat Oct 5 21:32:06 2002
***************
*** 63,68 ****
--- 63,76 ----
# for the rule to exclude a set. Options can be preceded with a '!' to
# match a logical NOT.
+ # The optional sevenths argument is a list of OS subdirectory names.
+ # The format is the same as of the second argument.
+ # The difference is that second argument describes multilib directories
+ # in GCC conventions, while this one the OS multilib convention.
+
+ # The last option should be "yes" if multilibs are enabled. If it is not
+ # "yes", all GCC multilib dir names will be ".".
+
# The output looks like
# #define MULTILIB_MATCHES "\
# SUBDIRECTORY OPTIONS;\
***************
*** 79,95 ****
# Here is an example (this is from the actual sparc64 case):
# genmultilib 'm64/m32 mno-app-regs|mcmodel=medany' '64 32 alt'
# 'mcmodel?medany=mcmodel?medmid' 'm32/mno-app-regs* m32/mcmodel=*'
! # 'm32/!m64/mno-app-regs m32/!m64/mcmodel=medany'
# This produces:
# ". !m64 !m32 !mno-app-regs !mcmodel=medany;",
! # "64 m64 !m32 !mno-app-regs !mcmodel=medany;",
! # "32 !m64 m32 !mno-app-regs !mcmodel=medany;",
# "alt !m64 !m32 mno-app-regs mcmodel=medany;",
# "alt !m64 !m32 mno-app-regs !mcmodel=medany;",
# "alt !m64 !m32 !mno-app-regs mcmodel=medany;",
! # "64/alt m64 !m32 mno-app-regs mcmodel=medany;",
! # "64/alt m64 !m32 mno-app-regs !mcmodel=medany;",
! # "64/alt m64 !m32 !mno-app-regs mcmodel=medany;",
#
# The effect is that `gcc -mno-app-regs' (for example) will append "alt"
# to the directory name when searching for libraries or startup files and
--- 87,104 ----
# Here is an example (this is from the actual sparc64 case):
# genmultilib 'm64/m32 mno-app-regs|mcmodel=medany' '64 32 alt'
# 'mcmodel?medany=mcmodel?medmid' 'm32/mno-app-regs* m32/mcmodel=*'
! # '' 'm32/!m64/mno-app-regs m32/!m64/mcmodel=medany'
! # '../lib64 ../lib32 alt' yes
# This produces:
# ". !m64 !m32 !mno-app-regs !mcmodel=medany;",
! # "64:../lib64 m64 !m32 !mno-app-regs !mcmodel=medany;",
! # "32:../lib32 !m64 m32 !mno-app-regs !mcmodel=medany;",
# "alt !m64 !m32 mno-app-regs mcmodel=medany;",
# "alt !m64 !m32 mno-app-regs !mcmodel=medany;",
# "alt !m64 !m32 !mno-app-regs mcmodel=medany;",
! # "64/alt:../lib64/alt m64 !m32 mno-app-regs mcmodel=medany;",
! # "64/alt:../lib64/alt m64 !m32 mno-app-regs !mcmodel=medany;",
! # "64/alt:../lib64/alt m64 !m32 !mno-app-regs mcmodel=medany;",
#
# The effect is that `gcc -mno-app-regs' (for example) will append "alt"
# to the directory name when searching for libraries or startup files and
*************** matches=$3
*** 106,111 ****
--- 115,122 ----
exceptions=$4
extra=$5
exclusions=$6
+ osdirnames=$7
+ enable_multilib=$8
echo "static const char *const multilib_raw[] = {"
*************** if [ -n "${dirnames}" ]; then
*** 202,207 ****
--- 213,241 ----
done
fi
+ # Construct a sed pattern which will convert option names to OS directory
+ # names.
+ toosdirnames=
+ if [ -n "${osdirnames}" ]; then
+ set x ${osdirnames}
+ shift
+ for set in ${options}; do
+ for opts in `echo ${set} | sed -e 's|/| |'g`; do
+ patt="/"
+ for opt in `echo ${opts} | sed -e 's_|_ _'g`; do
+ if [ "$1" != "${opt}" ]; then
+ toosdirnames="${toosdirnames} -e s|/${opt}/|/${1}/|g"
+ patt="${patt}${1}/"
+ if [ "${patt}" != "/${1}/" ]; then
+ toosdirnames="${toosdirnames} -e s|${patt}|/${1}/|g"
+ fi
+ fi
+ done
+ shift
+ done
+ done
+ fi
+
# We need another recursive shell script to correctly handle positive
# matches. If we are invoked as
# genmultilib "opt1 opt2" "" "opt1=nopt1 opt2=nopt2"
*************** for combo in ${combinations}; do
*** 257,262 ****
--- 291,315 ----
# Remove the leading and trailing slashes.
dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/$||g'`
+ # Use the OS directory names rather than the option names.
+ if [ -n "${toosdirnames}" ]; then
+ osdirout=`echo ${combo} | sed ${toosdirnames}`
+ # Remove the leading and trailing slashes.
+ osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/$||g'`
+ if [ "x${enable_multilib}" != xyes ]; then
+ dirout=".:${osdirout}"
+ else
+ dirout="${dirout}:${osdirout}"
+ fi
+ else
+ if [ "x${enable_multilib}" != xyes ]; then
+ # genmultilib with --disable-multilib should be
+ # called with '' '' '' '' '' '' '' no
+ # if MULTILIB_OSDIRNAMES is empty.
+ exit 1
+ fi
+ fi
+
# Look through the options. We must output each option that is
# present, and negate each option that is not present.
optout=
*************** done
*** 313,318 ****
--- 366,376 ----
echo "NULL"
echo "};"
+ # Output the options now
+ moptions=`echo ${options} | sed -e 's,[ ][ ]*, ,g'`
+ echo ""
+ echo "static const char *multilib_options = \"${moptions}\";"
+
rm -f tmpmultilib2
exit 0
diff -Nrc3pad gcc-3.2/gcc/haifa-sched.c gcc-3.2.1/gcc/haifa-sched.c
*** gcc-3.2/gcc/haifa-sched.c Thu Feb 28 18:29:05 2002
--- gcc-3.2.1/gcc/haifa-sched.c Mon Aug 19 18:59:31 2002
*************** move_insn (insn, last)
*** 1601,1606 ****
--- 1601,1608 ----
retval = reemit_notes (insn, insn);
else
reemit_notes (insn, insn);
+ /* Consume SCHED_GROUP_P flag. */
+ SCHED_GROUP_P (insn) = 0;
insn = prev;
}
*************** schedule_block (b, rgn_n_insns)
*** 1764,1770 ****
can_issue_more =
(*targetm.sched.variable_issue) (sched_dump, sched_verbose,
insn, can_issue_more);
! else
can_issue_more--;
schedule_insn (insn, &ready, clock_var);
--- 1766,1775 ----
can_issue_more =
(*targetm.sched.variable_issue) (sched_dump, sched_verbose,
insn, can_issue_more);
! /* A naked CLOBBER or USE generates no instruction, so do
! not count them against the issue rate. */
! else if (GET_CODE (PATTERN (insn)) != USE
! && GET_CODE (PATTERN (insn)) != CLOBBER)
can_issue_more--;
schedule_insn (insn, &ready, clock_var);
diff -Nrc3pad gcc-3.2/gcc/hooks.c gcc-3.2.1/gcc/hooks.c
*** gcc-3.2/gcc/hooks.c Thu May 23 17:57:27 2002
--- gcc-3.2.1/gcc/hooks.c Fri Oct 25 22:11:08 2002
*************** hook_void_bool_false ()
*** 38,40 ****
--- 38,48 ----
{
return false;
}
+
+ /* Generic hook that takes (tree) and returns false. */
+ bool
+ hook_tree_bool_false (a)
+ tree a ATTRIBUTE_UNUSED;
+ {
+ return false;
+ }
diff -Nrc3pad gcc-3.2/gcc/hooks.h gcc-3.2.1/gcc/hooks.h
*** gcc-3.2/gcc/hooks.h Thu May 23 17:57:27 2002
--- gcc-3.2.1/gcc/hooks.h Fri Oct 25 22:11:08 2002
*************** Foundation, 59 Temple Place - Suite 330,
*** 24,28 ****
--- 24,29 ----
bool hook_void_bool_false PARAMS ((void));
void hook_void_void PARAMS ((void));
+ bool hook_tree_bool_false PARAMS ((tree));
#endif
diff -Nrc3pad gcc-3.2/gcc/intl/ChangeLog gcc-3.2.1/gcc/intl/ChangeLog
*** gcc-3.2/gcc/intl/ChangeLog Wed Aug 14 09:00:18 2002
--- gcc-3.2.1/gcc/intl/ChangeLog Tue Nov 19 17:49:05 2002
***************
*** 1,3 ****
--- 1,15 ----
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-18 Release Manager
+
+ * GCC 3.2.1 Released.
+
2002-08-14 Release Manager
* GCC 3.2 Released.
diff -Nrc3pad gcc-3.2/gcc/jump.c gcc-3.2.1/gcc/jump.c
*** gcc-3.2/gcc/jump.c Tue Apr 9 20:38:58 2002
--- gcc-3.2.1/gcc/jump.c Sat Nov 16 01:55:47 2002
*************** simplejump_p (insn)
*** 1076,1081 ****
--- 1076,1096 ----
&& GET_CODE (SET_DEST (PATTERN (insn))) == PC
&& GET_CODE (SET_SRC (PATTERN (insn))) == LABEL_REF);
}
+ /* Return 1 if INSN is an tablejump. */
+
+ int
+ tablejump_p (insn)
+ rtx insn;
+ {
+ rtx table;
+ return (GET_CODE (insn) == JUMP_INSN
+ && JUMP_LABEL (insn)
+ && NEXT_INSN (JUMP_LABEL (insn))
+ && (table = next_active_insn (JUMP_LABEL (insn)))
+ && GET_CODE (table) == JUMP_INSN
+ && (GET_CODE (PATTERN (table)) == ADDR_VEC
+ || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC));
+ }
/* Return nonzero if INSN is a (possibly) conditional jump
and nothing more.
*************** true_regnum (x)
*** 2428,2430 ****
--- 2443,2457 ----
}
return -1;
}
+
+ /* Return regno of the register REG and handle subregs too. */
+ unsigned int
+ reg_or_subregno (reg)
+ rtx reg;
+ {
+ if (REG_P (reg))
+ return REGNO (reg);
+ if (GET_CODE (reg) == SUBREG)
+ return REGNO (SUBREG_REG (reg));
+ abort ();
+ }
diff -Nrc3pad gcc-3.2/gcc/langhooks-def.h gcc-3.2.1/gcc/langhooks-def.h
*** gcc-3.2/gcc/langhooks-def.h Thu May 23 17:57:27 2002
--- gcc-3.2.1/gcc/langhooks-def.h Fri Oct 25 22:11:08 2002
*************** extern int lhd_staticp PARAMS ((tree));
*** 48,53 ****
--- 48,54 ----
extern void lhd_clear_binding_stack PARAMS ((void));
extern void lhd_print_tree_nothing PARAMS ((FILE *, tree, int));
extern void lhd_set_yydebug PARAMS ((int));
+ extern tree lhd_expr_size PARAMS ((tree));
/* Declarations of default tree inlining hooks. */
tree lhd_tree_inlining_walk_subtrees PARAMS ((tree *, int *,
*************** tree lhd_tree_inlining_convert_parm_for_
*** 85,90 ****
--- 86,92 ----
#define LANG_HOOKS_PRINT_TYPE lhd_print_tree_nothing
#define LANG_HOOKS_PRINT_IDENTIFIER lhd_print_tree_nothing
#define LANG_HOOKS_SET_YYDEBUG lhd_set_yydebug
+ #define LANG_HOOKS_EXPR_SIZE lhd_expr_size
/* Tree inlining hooks. */
#define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES lhd_tree_inlining_walk_subtrees
*************** tree lhd_tree_inlining_convert_parm_for_
*** 102,107 ****
--- 104,111 ----
lhd_tree_inlining_copy_res_decl_for_inlining
#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
lhd_tree_inlining_anon_aggr_type_p
+ #define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P \
+ hook_tree_bool_false
#define LANG_HOOKS_TREE_INLINING_START_INLINING \
lhd_tree_inlining_start_inlining
#define LANG_HOOKS_TREE_INLINING_END_INLINING \
*************** tree lhd_tree_inlining_convert_parm_for_
*** 118,123 ****
--- 122,128 ----
LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P, \
LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING, \
LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P, \
+ LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \
LANG_HOOKS_TREE_INLINING_START_INLINING, \
LANG_HOOKS_TREE_INLINING_END_INLINING, \
LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
*************** int lhd_tree_dump_type_quals PARAMS ((
*** 156,161 ****
--- 161,167 ----
LANG_HOOKS_PRINT_TYPE, \
LANG_HOOKS_PRINT_IDENTIFIER, \
LANG_HOOKS_SET_YYDEBUG, \
+ LANG_HOOKS_EXPR_SIZE, \
LANG_HOOKS_TREE_INLINING_INITIALIZER, \
LANG_HOOKS_TREE_DUMP_INITIALIZER \
}
diff -Nrc3pad gcc-3.2/gcc/langhooks.c gcc-3.2.1/gcc/langhooks.c
*** gcc-3.2/gcc/langhooks.c Thu Mar 21 23:12:21 2002
--- gcc-3.2.1/gcc/langhooks.c Fri Aug 23 12:00:37 2002
*************** lhd_tree_dump_type_quals (t)
*** 303,305 ****
--- 303,318 ----
return TYPE_QUALS (t);
}
+ /* lang_hooks.expr_size: Determine the size of the value of an expression T
+ in a language-specific way. Returns a tree for the size in bytes. */
+
+ tree
+ lhd_expr_size (exp)
+ tree exp;
+ {
+ if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd'
+ && DECL_SIZE_UNIT (exp) != 0)
+ return DECL_SIZE_UNIT (exp);
+ else
+ return size_in_bytes (TREE_TYPE (exp));
+ }
diff -Nrc3pad gcc-3.2/gcc/langhooks.h gcc-3.2.1/gcc/langhooks.h
*** gcc-3.2/gcc/langhooks.h Thu May 23 17:57:28 2002
--- gcc-3.2.1/gcc/langhooks.h Fri Oct 25 22:11:09 2002
*************** struct lang_hooks_for_tree_inlining
*** 46,51 ****
--- 46,52 ----
void *, int *,
void *));
int (*anon_aggr_type_p) PARAMS ((union tree_node *));
+ bool (*var_mod_type_p) PARAMS ((union tree_node *));
int (*start_inlining) PARAMS ((union tree_node *));
void (*end_inlining) PARAMS ((union tree_node *));
union tree_node *(*convert_parm_for_inlining) PARAMS ((union tree_node *,
*************** struct lang_hooks
*** 156,161 ****
--- 157,168 ----
warning that the front end does not use such a parser. */
void (*set_yydebug) PARAMS ((int));
+ /* Called from expr_size to calculate the size of the value of an
+ expression in a language-dependent way. Returns a tree for the size
+ in bytes. A frontend can call lhd_expr_size to get the default
+ semantics in cases that it doesn't want to handle specially. */
+ tree (*expr_size) PARAMS ((tree));
+
struct lang_hooks_for_tree_inlining tree_inlining;
struct lang_hooks_for_tree_dump tree_dump;
diff -Nrc3pad gcc-3.2/gcc/libgcc2.c gcc-3.2.1/gcc/libgcc2.c
*** gcc-3.2/gcc/libgcc2.c Tue May 21 23:44:38 2002
--- gcc-3.2.1/gcc/libgcc2.c Wed Oct 9 00:33:12 2002
***************
*** 1,7 ****
/* More subroutines needed by GCC output code on some machines. */
/* Compile this one with gcc. */
/* Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
! 2000, 2001 Free Software Foundation, Inc.
This file is part of GCC.
--- 1,7 ----
/* More subroutines needed by GCC output code on some machines. */
/* Compile this one with gcc. */
/* Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
! 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GCC.
*************** Software Foundation, 59 Temple Place - S
*** 36,43 ****
#include "tconfig.h"
#include "tsystem.h"
- #include "machmode.h"
-
/* Don't use `fancy_abort' here even if config.h says to use it. */
#ifdef abort
#undef abort
--- 36,41 ----
*************** __floatdisf (DWtype u)
*** 1117,1123 ****
&& u < ((DWtype) 1 << DF_SIZE)))
{
if ((UDWtype) u & (REP_BIT - 1))
! u |= REP_BIT;
}
}
f = (Wtype) (u >> WORD_SIZE);
--- 1115,1124 ----
&& u < ((DWtype) 1 << DF_SIZE)))
{
if ((UDWtype) u & (REP_BIT - 1))
! {
! u &= ~ (REP_BIT - 1);
! u |= REP_BIT;
! }
}
}
f = (Wtype) (u >> WORD_SIZE);
diff -Nrc3pad gcc-3.2/gcc/loop.c gcc-3.2.1/gcc/loop.c
*** gcc-3.2/gcc/loop.c Sat Jun 15 01:12:04 2002
--- gcc-3.2.1/gcc/loop.c Tue Oct 15 14:42:52 2002
*************** scan_loop (loop, flags)
*** 640,645 ****
--- 640,646 ----
int threshold;
/* Nonzero if we are scanning instructions in a sub-loop. */
int loop_depth = 0;
+ int in_libcall;
loop->top = 0;
*************** scan_loop (loop, flags)
*** 756,1045 ****
When MAYBE_NEVER is 0, all insns will be executed at least once
so that is not a problem. */
! for (p = next_insn_in_loop (loop, loop->scan_start);
p != NULL_RTX;
p = next_insn_in_loop (loop, p))
{
! if (GET_CODE (p) == INSN
! && (set = single_set (p))
! && GET_CODE (SET_DEST (set)) == REG
#ifdef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
! && SET_DEST (set) != pic_offset_table_rtx
#endif
! && ! regs->array[REGNO (SET_DEST (set))].may_not_optimize)
! {
! int tem1 = 0;
! int tem2 = 0;
! int move_insn = 0;
! rtx src = SET_SRC (set);
! rtx dependencies = 0;
! /* Figure out what to use as a source of this insn. If a REG_EQUIV
! note is given or if a REG_EQUAL note with a constant operand is
! specified, use it as the source and mark that we should move
! this insn by calling emit_move_insn rather that duplicating the
! insn.
! Otherwise, only use the REG_EQUAL contents if a REG_RETVAL note
! is present. */
! temp = find_reg_note (p, REG_EQUIV, NULL_RTX);
! if (temp)
! src = XEXP (temp, 0), move_insn = 1;
! else
! {
! temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
! if (temp && CONSTANT_P (XEXP (temp, 0)))
src = XEXP (temp, 0), move_insn = 1;
! if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
{
! src = XEXP (temp, 0);
! /* A libcall block can use regs that don't appear in
! the equivalent expression. To move the libcall,
! we must move those regs too. */
! dependencies = libcall_other_reg (p, src);
}
- }
! /* For parallels, add any possible uses to the depencies, as we can't move
! the insn without resolving them first. */
! if (GET_CODE (PATTERN (p)) == PARALLEL)
! {
! for (i = 0; i < XVECLEN (PATTERN (p), 0); i++)
{
! rtx x = XVECEXP (PATTERN (p), 0, i);
! if (GET_CODE (x) == USE)
! dependencies = gen_rtx_EXPR_LIST (VOIDmode, XEXP (x, 0), dependencies);
}
- }
! /* Don't try to optimize a register that was made
! by loop-optimization for an inner loop.
! We don't know its life-span, so we can't compute the benefit. */
! if (REGNO (SET_DEST (set)) >= max_reg_before_loop)
! ;
! else if (/* The register is used in basic blocks other
! than the one where it is set (meaning that
! something after this point in the loop might
! depend on its value before the set). */
! ! reg_in_basic_block_p (p, SET_DEST (set))
! /* And the set is not guaranteed to be executed once
! the loop starts, or the value before the set is
! needed before the set occurs...
!
! ??? Note we have quadratic behaviour here, mitigated
! by the fact that the previous test will often fail for
! large loops. Rather than re-scanning the entire loop
! each time for register usage, we should build tables
! of the register usage and use them here instead. */
! && (maybe_never
! || loop_reg_used_before_p (loop, set, p)))
! /* It is unsafe to move the set.
!
! This code used to consider it OK to move a set of a variable
! which was not created by the user and not used in an exit test.
! That behavior is incorrect and was removed. */
! ;
! else if ((tem = loop_invariant_p (loop, src))
! && (dependencies == 0
! || (tem2 = loop_invariant_p (loop, dependencies)) != 0)
! && (regs->array[REGNO (SET_DEST (set))].set_in_loop == 1
! || (tem1
! = consec_sets_invariant_p
! (loop, SET_DEST (set),
! regs->array[REGNO (SET_DEST (set))].set_in_loop,
! p)))
! /* If the insn can cause a trap (such as divide by zero),
! can't move it unless it's guaranteed to be executed
! once loop is entered. Even a function call might
! prevent the trap insn from being reached
! (since it might exit!) */
! && ! ((maybe_never || call_passed)
! && may_trap_p (src)))
! {
! struct movable *m;
! int regno = REGNO (SET_DEST (set));
!
! /* A potential lossage is where we have a case where two insns
! can be combined as long as they are both in the loop, but
! we move one of them outside the loop. For large loops,
! this can lose. The most common case of this is the address
! of a function being called.
!
! Therefore, if this register is marked as being used exactly
! once if we are in a loop with calls (a "large loop"), see if
! we can replace the usage of this register with the source
! of this SET. If we can, delete this insn.
! Don't do this if P has a REG_RETVAL note or if we have
! SMALL_REGISTER_CLASSES and SET_SRC is a hard register. */
! if (loop_info->has_call
! && regs->array[regno].single_usage != 0
! && regs->array[regno].single_usage != const0_rtx
! && REGNO_FIRST_UID (regno) == INSN_UID (p)
! && (REGNO_LAST_UID (regno)
! == INSN_UID (regs->array[regno].single_usage))
! && regs->array[regno].set_in_loop == 1
! && GET_CODE (SET_SRC (set)) != ASM_OPERANDS
! && ! side_effects_p (SET_SRC (set))
! && ! find_reg_note (p, REG_RETVAL, NULL_RTX)
! && (! SMALL_REGISTER_CLASSES
! || (! (GET_CODE (SET_SRC (set)) == REG
! && REGNO (SET_SRC (set)) < FIRST_PSEUDO_REGISTER)))
! /* This test is not redundant; SET_SRC (set) might be
! a call-clobbered register and the life of REGNO
! might span a call. */
! && ! modified_between_p (SET_SRC (set), p,
! regs->array[regno].single_usage)
! && no_labels_between_p (p, regs->array[regno].single_usage)
! && validate_replace_rtx (SET_DEST (set), SET_SRC (set),
! regs->array[regno].single_usage))
{
! /* Replace any usage in a REG_EQUAL note. Must copy the
! new source, so that we don't get rtx sharing between the
! SET_SOURCE and REG_NOTES of insn p. */
! REG_NOTES (regs->array[regno].single_usage)
! = replace_rtx (REG_NOTES (regs->array[regno].single_usage),
! SET_DEST (set), copy_rtx (SET_SRC (set)));
!
! delete_insn (p);
! for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++)
! regs->array[regno+i].set_in_loop = 0;
! continue;
! }
! m = (struct movable *) xmalloc (sizeof (struct movable));
! m->next = 0;
! m->insn = p;
! m->set_src = src;
! m->dependencies = dependencies;
! m->set_dest = SET_DEST (set);
! m->force = 0;
! m->consec = regs->array[REGNO (SET_DEST (set))].set_in_loop - 1;
! m->done = 0;
! m->forces = 0;
! m->partial = 0;
! m->move_insn = move_insn;
! m->move_insn_first = 0;
! m->is_equiv = (find_reg_note (p, REG_EQUIV, NULL_RTX) != 0);
! m->savemode = VOIDmode;
! m->regno = regno;
! /* Set M->cond if either loop_invariant_p
! or consec_sets_invariant_p returned 2
! (only conditionally invariant). */
! m->cond = ((tem | tem1 | tem2) > 1);
! m->global = LOOP_REG_GLOBAL_P (loop, regno);
! m->match = 0;
! m->lifetime = LOOP_REG_LIFETIME (loop, regno);
! m->savings = regs->array[regno].n_times_set;
! if (find_reg_note (p, REG_RETVAL, NULL_RTX))
! m->savings += libcall_benefit (p);
! for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++)
! regs->array[regno+i].set_in_loop = move_insn ? -2 : -1;
! /* Add M to the end of the chain MOVABLES. */
! loop_movables_add (movables, m);
! if (m->consec > 0)
! {
! /* It is possible for the first instruction to have a
! REG_EQUAL note but a non-invariant SET_SRC, so we must
! remember the status of the first instruction in case
! the last instruction doesn't have a REG_EQUAL note. */
! m->move_insn_first = m->move_insn;
! /* Skip this insn, not checking REG_LIBCALL notes. */
! p = next_nonnote_insn (p);
! /* Skip the consecutive insns, if there are any. */
! p = skip_consec_insns (p, m->consec);
! /* Back up to the last insn of the consecutive group. */
! p = prev_nonnote_insn (p);
! /* We must now reset m->move_insn, m->is_equiv, and possibly
! m->set_src to correspond to the effects of all the
! insns. */
! temp = find_reg_note (p, REG_EQUIV, NULL_RTX);
! if (temp)
! m->set_src = XEXP (temp, 0), m->move_insn = 1;
! else
{
! temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
! if (temp && CONSTANT_P (XEXP (temp, 0)))
! m->set_src = XEXP (temp, 0), m->move_insn = 1;
! else
! m->move_insn = 0;
}
! m->is_equiv = (find_reg_note (p, REG_EQUIV, NULL_RTX) != 0);
! }
! }
! /* If this register is always set within a STRICT_LOW_PART
! or set to zero, then its high bytes are constant.
! So clear them outside the loop and within the loop
! just load the low bytes.
! We must check that the machine has an instruction to do so.
! Also, if the value loaded into the register
! depends on the same register, this cannot be done. */
! else if (SET_SRC (set) == const0_rtx
! && GET_CODE (NEXT_INSN (p)) == INSN
! && (set1 = single_set (NEXT_INSN (p)))
! && GET_CODE (set1) == SET
! && (GET_CODE (SET_DEST (set1)) == STRICT_LOW_PART)
! && (GET_CODE (XEXP (SET_DEST (set1), 0)) == SUBREG)
! && (SUBREG_REG (XEXP (SET_DEST (set1), 0))
! == SET_DEST (set))
! && !reg_mentioned_p (SET_DEST (set), SET_SRC (set1)))
! {
! int regno = REGNO (SET_DEST (set));
! if (regs->array[regno].set_in_loop == 2)
! {
! struct movable *m;
m = (struct movable *) xmalloc (sizeof (struct movable));
m->next = 0;
m->insn = p;
m->set_dest = SET_DEST (set);
- m->dependencies = 0;
m->force = 0;
! m->consec = 0;
m->done = 0;
m->forces = 0;
! m->move_insn = 0;
m->move_insn_first = 0;
! m->partial = 1;
! /* If the insn may not be executed on some cycles,
! we can't clear the whole reg; clear just high part.
! Not even if the reg is used only within this loop.
! Consider this:
! while (1)
! while (s != t) {
! if (foo ()) x = *s;
! use (x);
! }
! Clearing x before the inner loop could clobber a value
! being saved from the last time around the outer loop.
! However, if the reg is not used outside this loop
! and all uses of the register are in the same
! basic block as the store, there is no problem.
!
! If this insn was made by loop, we don't know its
! INSN_LUID and hence must make a conservative
! assumption. */
! m->global = (INSN_UID (p) >= max_uid_for_loop
! || LOOP_REG_GLOBAL_P (loop, regno)
! || (labels_in_range_p
! (p, REGNO_FIRST_LUID (regno))));
! if (maybe_never && m->global)
! m->savemode = GET_MODE (SET_SRC (set1));
! else
! m->savemode = VOIDmode;
m->regno = regno;
! m->cond = 0;
m->match = 0;
m->lifetime = LOOP_REG_LIFETIME (loop, regno);
! m->savings = 1;
for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++)
! regs->array[regno+i].set_in_loop = -1;
/* Add M to the end of the chain MOVABLES. */
loop_movables_add (movables, m);
}
}
}
--- 757,1067 ----
When MAYBE_NEVER is 0, all insns will be executed at least once
so that is not a problem. */
! for (in_libcall = 0, p = next_insn_in_loop (loop, loop->scan_start);
p != NULL_RTX;
p = next_insn_in_loop (loop, p))
{
! if (in_libcall && INSN_P (p) && find_reg_note (p, REG_RETVAL, NULL_RTX))
! in_libcall--;
! if (GET_CODE (p) == INSN)
! {
! temp = find_reg_note (p, REG_LIBCALL, NULL_RTX);
! if (temp)
! in_libcall++;
! if (! in_libcall
! && (set = single_set (p))
! && GET_CODE (SET_DEST (set)) == REG
#ifdef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
! && SET_DEST (set) != pic_offset_table_rtx
#endif
! && ! regs->array[REGNO (SET_DEST (set))].may_not_optimize)
! {
! int tem1 = 0;
! int tem2 = 0;
! int move_insn = 0;
! rtx src = SET_SRC (set);
! rtx dependencies = 0;
! /* Figure out what to use as a source of this insn. If a
! REG_EQUIV note is given or if a REG_EQUAL note with a
! constant operand is specified, use it as the source and
! mark that we should move this insn by calling
! emit_move_insn rather that duplicating the insn.
! Otherwise, only use the REG_EQUAL contents if a REG_RETVAL
! note is present. */
! temp = find_reg_note (p, REG_EQUIV, NULL_RTX);
! if (temp)
src = XEXP (temp, 0), move_insn = 1;
! else
{
! temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
! if (temp && CONSTANT_P (XEXP (temp, 0)))
! src = XEXP (temp, 0), move_insn = 1;
! if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
! {
! src = XEXP (temp, 0);
! /* A libcall block can use regs that don't appear in
! the equivalent expression. To move the libcall,
! we must move those regs too. */
! dependencies = libcall_other_reg (p, src);
! }
}
! /* For parallels, add any possible uses to the depencies, as
! we can't move the insn without resolving them first. */
! if (GET_CODE (PATTERN (p)) == PARALLEL)
{
! for (i = 0; i < XVECLEN (PATTERN (p), 0); i++)
! {
! rtx x = XVECEXP (PATTERN (p), 0, i);
! if (GET_CODE (x) == USE)
! dependencies
! = gen_rtx_EXPR_LIST (VOIDmode, XEXP (x, 0),
! dependencies);
! }
}
! /* Don't try to optimize a register that was made
! by loop-optimization for an inner loop.
! We don't know its life-span, so we can't compute
! the benefit. */
! if (REGNO (SET_DEST (set)) >= max_reg_before_loop)
! ;
! else if (/* The register is used in basic blocks other
! than the one where it is set (meaning that
! something after this point in the loop might
! depend on its value before the set). */
! ! reg_in_basic_block_p (p, SET_DEST (set))
! /* And the set is not guaranteed to be executed once
! the loop starts, or the value before the set is
! needed before the set occurs...
! ??? Note we have quadratic behaviour here, mitigated
! by the fact that the previous test will often fail for
! large loops. Rather than re-scanning the entire loop
! each time for register usage, we should build tables
! of the register usage and use them here instead. */
! && (maybe_never
! || loop_reg_used_before_p (loop, set, p)))
! /* It is unsafe to move the set.
! This code used to consider it OK to move a set of a variable
! which was not created by the user and not used in an exit
! test.
! That behavior is incorrect and was removed. */
! ;
! else if ((tem = loop_invariant_p (loop, src))
! && (dependencies == 0
! || (tem2
! = loop_invariant_p (loop, dependencies)) != 0)
! && (regs->array[REGNO (SET_DEST (set))].set_in_loop == 1
! || (tem1
! = consec_sets_invariant_p
! (loop, SET_DEST (set),
! regs->array[REGNO (SET_DEST (set))].set_in_loop,
! p)))
! /* If the insn can cause a trap (such as divide by zero),
! can't move it unless it's guaranteed to be executed
! once loop is entered. Even a function call might
! prevent the trap insn from being reached
! (since it might exit!) */
! && ! ((maybe_never || call_passed)
! && may_trap_p (src)))
{
! struct movable *m;
! int regno = REGNO (SET_DEST (set));
! /* A potential lossage is where we have a case where two insns
! can be combined as long as they are both in the loop, but
! we move one of them outside the loop. For large loops,
! this can lose. The most common case of this is the address
! of a function being called.
! Therefore, if this register is marked as being used
! exactly once if we are in a loop with calls
! (a "large loop"), see if we can replace the usage of
! this register with the source of this SET. If we can,
! delete this insn.
! Don't do this if P has a REG_RETVAL note or if we have
! SMALL_REGISTER_CLASSES and SET_SRC is a hard register. */
! if (loop_info->has_call
! && regs->array[regno].single_usage != 0
! && regs->array[regno].single_usage != const0_rtx
! && REGNO_FIRST_UID (regno) == INSN_UID (p)
! && (REGNO_LAST_UID (regno)
! == INSN_UID (regs->array[regno].single_usage))
! && regs->array[regno].set_in_loop == 1
! && GET_CODE (SET_SRC (set)) != ASM_OPERANDS
! && ! side_effects_p (SET_SRC (set))
! && ! find_reg_note (p, REG_RETVAL, NULL_RTX)
! && (! SMALL_REGISTER_CLASSES
! || (! (GET_CODE (SET_SRC (set)) == REG
! && (REGNO (SET_SRC (set))
! < FIRST_PSEUDO_REGISTER))))
! /* This test is not redundant; SET_SRC (set) might be
! a call-clobbered register and the life of REGNO
! might span a call. */
! && ! modified_between_p (SET_SRC (set), p,
! regs->array[regno].single_usage)
! && no_labels_between_p (p,
! regs->array[regno].single_usage)
! && validate_replace_rtx (SET_DEST (set), SET_SRC (set),
! regs->array[regno].single_usage))
{
! /* Replace any usage in a REG_EQUAL note. Must copy
! the new source, so that we don't get rtx sharing
! between the SET_SOURCE and REG_NOTES of insn p. */
! REG_NOTES (regs->array[regno].single_usage)
! = (replace_rtx
! (REG_NOTES (regs->array[regno].single_usage),
! SET_DEST (set), copy_rtx (SET_SRC (set))));
+ delete_insn (p);
+ for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set));
+ i++)
+ regs->array[regno+i].set_in_loop = 0;
+ continue;
}
!
m = (struct movable *) xmalloc (sizeof (struct movable));
m->next = 0;
m->insn = p;
+ m->set_src = src;
+ m->dependencies = dependencies;
m->set_dest = SET_DEST (set);
m->force = 0;
! m->consec
! = regs->array[REGNO (SET_DEST (set))].set_in_loop - 1;
m->done = 0;
m->forces = 0;
! m->partial = 0;
! m->move_insn = move_insn;
m->move_insn_first = 0;
! m->is_equiv = (find_reg_note (p, REG_EQUIV, NULL_RTX) != 0);
! m->savemode = VOIDmode;
m->regno = regno;
! /* Set M->cond if either loop_invariant_p
! or consec_sets_invariant_p returned 2
! (only conditionally invariant). */
! m->cond = ((tem | tem1 | tem2) > 1);
! m->global = LOOP_REG_GLOBAL_P (loop, regno);
m->match = 0;
m->lifetime = LOOP_REG_LIFETIME (loop, regno);
! m->savings = regs->array[regno].n_times_set;
! if (find_reg_note (p, REG_RETVAL, NULL_RTX))
! m->savings += libcall_benefit (p);
for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++)
! regs->array[regno+i].set_in_loop = move_insn ? -2 : -1;
/* Add M to the end of the chain MOVABLES. */
loop_movables_add (movables, m);
+
+ if (m->consec > 0)
+ {
+ /* It is possible for the first instruction to have a
+ REG_EQUAL note but a non-invariant SET_SRC, so we must
+ remember the status of the first instruction in case
+ the last instruction doesn't have a REG_EQUAL note. */
+ m->move_insn_first = m->move_insn;
+
+ /* Skip this insn, not checking REG_LIBCALL notes. */
+ p = next_nonnote_insn (p);
+ /* Skip the consecutive insns, if there are any. */
+ p = skip_consec_insns (p, m->consec);
+ /* Back up to the last insn of the consecutive group. */
+ p = prev_nonnote_insn (p);
+
+ /* We must now reset m->move_insn, m->is_equiv, and
+ possibly m->set_src to correspond to the effects of
+ all the insns. */
+ temp = find_reg_note (p, REG_EQUIV, NULL_RTX);
+ if (temp)
+ m->set_src = XEXP (temp, 0), m->move_insn = 1;
+ else
+ {
+ temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
+ if (temp && CONSTANT_P (XEXP (temp, 0)))
+ m->set_src = XEXP (temp, 0), m->move_insn = 1;
+ else
+ m->move_insn = 0;
+
+ }
+ m->is_equiv
+ = (find_reg_note (p, REG_EQUIV, NULL_RTX) != 0);
+ }
+ }
+ /* If this register is always set within a STRICT_LOW_PART
+ or set to zero, then its high bytes are constant.
+ So clear them outside the loop and within the loop
+ just load the low bytes.
+ We must check that the machine has an instruction to do so.
+ Also, if the value loaded into the register
+ depends on the same register, this cannot be done. */
+ else if (SET_SRC (set) == const0_rtx
+ && GET_CODE (NEXT_INSN (p)) == INSN
+ && (set1 = single_set (NEXT_INSN (p)))
+ && GET_CODE (set1) == SET
+ && (GET_CODE (SET_DEST (set1)) == STRICT_LOW_PART)
+ && (GET_CODE (XEXP (SET_DEST (set1), 0)) == SUBREG)
+ && (SUBREG_REG (XEXP (SET_DEST (set1), 0))
+ == SET_DEST (set))
+ && !reg_mentioned_p (SET_DEST (set), SET_SRC (set1)))
+ {
+ int regno = REGNO (SET_DEST (set));
+ if (regs->array[regno].set_in_loop == 2)
+ {
+ struct movable *m;
+ m = (struct movable *) xmalloc (sizeof (struct movable));
+ m->next = 0;
+ m->insn = p;
+ m->set_dest = SET_DEST (set);
+ m->dependencies = 0;
+ m->force = 0;
+ m->consec = 0;
+ m->done = 0;
+ m->forces = 0;
+ m->move_insn = 0;
+ m->move_insn_first = 0;
+ m->partial = 1;
+ /* If the insn may not be executed on some cycles,
+ we can't clear the whole reg; clear just high part.
+ Not even if the reg is used only within this loop.
+ Consider this:
+ while (1)
+ while (s != t) {
+ if (foo ()) x = *s;
+ use (x);
+ }
+ Clearing x before the inner loop could clobber a value
+ being saved from the last time around the outer loop.
+ However, if the reg is not used outside this loop
+ and all uses of the register are in the same
+ basic block as the store, there is no problem.
+
+ If this insn was made by loop, we don't know its
+ INSN_LUID and hence must make a conservative
+ assumption. */
+ m->global = (INSN_UID (p) >= max_uid_for_loop
+ || LOOP_REG_GLOBAL_P (loop, regno)
+ || (labels_in_range_p
+ (p, REGNO_FIRST_LUID (regno))));
+ if (maybe_never && m->global)
+ m->savemode = GET_MODE (SET_SRC (set1));
+ else
+ m->savemode = VOIDmode;
+ m->regno = regno;
+ m->cond = 0;
+ m->match = 0;
+ m->lifetime = LOOP_REG_LIFETIME (loop, regno);
+ m->savings = 1;
+ for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set));
+ i++)
+ regs->array[regno+i].set_in_loop = -1;
+ /* Add M to the end of the chain MOVABLES. */
+ loop_movables_add (movables, m);
+ }
}
}
}
*************** move_movables (loop, movables, threshold
*** 1911,1920 ****
for (count = m->consec; count >= 0; count--)
{
/* If this is the first insn of a library call sequence,
! skip to the end. */
if (GET_CODE (p) != NOTE
&& (temp = find_reg_note (p, REG_LIBCALL, NULL_RTX)))
! p = XEXP (temp, 0);
/* If this is the last insn of a libcall sequence, then
delete every insn in the sequence except the last.
--- 1933,1942 ----
for (count = m->consec; count >= 0; count--)
{
/* If this is the first insn of a library call sequence,
! something is very wrong. */
if (GET_CODE (p) != NOTE
&& (temp = find_reg_note (p, REG_LIBCALL, NULL_RTX)))
! abort ();
/* If this is the last insn of a libcall sequence, then
delete every insn in the sequence except the last.
*************** emit_prefetch_instructions (loop)
*** 4090,4100 ****
{
rtx reg = gen_reg_rtx (Pmode);
rtx loop_start = loop->start;
rtx add_val = simplify_gen_binary (PLUS, Pmode,
info[i].giv->add_val,
GEN_INT (y * PREFETCH_BLOCK));
! loop_iv_add_mult_emit_before (loop, info[i].class->initial_value,
info[i].giv->mult_val,
add_val, reg, 0, loop_start);
emit_insn_before (gen_prefetch (reg, GEN_INT (info[i].write),
--- 4112,4128 ----
{
rtx reg = gen_reg_rtx (Pmode);
rtx loop_start = loop->start;
+ rtx init_val = info[i].class->initial_value;
rtx add_val = simplify_gen_binary (PLUS, Pmode,
info[i].giv->add_val,
GEN_INT (y * PREFETCH_BLOCK));
! /* Functions called by LOOP_IV_ADD_EMIT_BEFORE expect a
! non-constant INIT_VAL to have the same mode as REG, which
! in this case we know to be Pmode. */
! if (GET_MODE (init_val) != Pmode && !CONSTANT_P (init_val))
! init_val = convert_to_mode (Pmode, init_val, 0);
! loop_iv_add_mult_emit_before (loop, init_val,
info[i].giv->mult_val,
add_val, reg, 0, loop_start);
emit_insn_before (gen_prefetch (reg, GEN_INT (info[i].write),
*************** canonicalize_condition (insn, cond, reve
*** 9264,9270 ****
{
case LE:
if ((unsigned HOST_WIDE_INT) const_val != max_val >> 1)
! code = LT, op1 = GEN_INT (const_val + 1);
break;
/* When cross-compiling, const_val might be sign-extended from
--- 9292,9298 ----
{
case LE:
if ((unsigned HOST_WIDE_INT) const_val != max_val >> 1)
! code = LT, op1 = gen_int_mode (const_val + 1, GET_MODE (op0));
break;
/* When cross-compiling, const_val might be sign-extended from
*************** canonicalize_condition (insn, cond, reve
*** 9273,9289 ****
if ((HOST_WIDE_INT) (const_val & max_val)
!= (((HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (GET_MODE (op0)) - 1))))
! code = GT, op1 = GEN_INT (const_val - 1);
break;
case LEU:
if (uconst_val < max_val)
! code = LTU, op1 = GEN_INT (uconst_val + 1);
break;
case GEU:
if (uconst_val != 0)
! code = GTU, op1 = GEN_INT (uconst_val - 1);
break;
default:
--- 9301,9317 ----
if ((HOST_WIDE_INT) (const_val & max_val)
!= (((HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (GET_MODE (op0)) - 1))))
! code = GT, op1 = gen_int_mode (const_val - 1, GET_MODE (op0));
break;
case LEU:
if (uconst_val < max_val)
! code = LTU, op1 = gen_int_mode (uconst_val + 1, GET_MODE (op0));
break;
case GEU:
if (uconst_val != 0)
! code = GTU, op1 = gen_int_mode (uconst_val - 1, GET_MODE (op0));
break;
default:
*************** loop_regs_scan (loop, extra_size)
*** 9532,9537 ****
--- 9560,9584 ----
if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == JUMP_INSN)
memset (last_set, 0, regs->num * sizeof (rtx));
+
+ /* Invalidate all registers used for function argument passing.
+ We check rtx_varies_p for the same reason as below, to allow
+ optimizing PIC calculations. */
+ if (GET_CODE (insn) == CALL_INSN)
+ {
+ rtx link;
+ for (link = CALL_INSN_FUNCTION_USAGE (insn);
+ link;
+ link = XEXP (link, 1))
+ {
+ rtx op, reg;
+
+ if (GET_CODE (op = XEXP (link, 0)) == USE
+ && GET_CODE (reg = XEXP (op, 0)) == REG
+ && rtx_varies_p (reg, 1))
+ regs->array[REGNO (reg)].may_not_optimize = 1;
+ }
+ }
}
/* Invalidate all hard registers clobbered by calls. With one exception:
diff -Nrc3pad gcc-3.2/gcc/loop.h gcc-3.2.1/gcc/loop.h
*** gcc-3.2/gcc/loop.h Wed Apr 3 07:53:51 2002
--- gcc-3.2.1/gcc/loop.h Tue Sep 17 03:25:06 2002
*************** struct loop_info
*** 314,319 ****
--- 314,322 ----
int has_multiple_exit_targets;
/* Nonzero if there is an indirect jump in the current function. */
int has_indirect_jump;
+ /* Whether loop unrolling has emitted copies of the loop body so
+ that the main loop needs no exit tests. */
+ int preconditioned;
/* Register or constant initial loop value. */
rtx initial_value;
/* Register or constant value used for comparison test. */
diff -Nrc3pad gcc-3.2/gcc/mklibgcc.in gcc-3.2.1/gcc/mklibgcc.in
*** gcc-3.2/gcc/mklibgcc.in Thu May 9 17:35:21 2002
--- gcc-3.2.1/gcc/mklibgcc.in Sat Oct 5 21:32:06 2002
***************
*** 32,38 ****
# SHLIB_MAPFILES
# SHLIB_NM_FLAGS
# SHLIB_INSTALL
! # SHLIB_SLIBDIR_SUFFIXES
# Make needs VPATH to be literal.
echo 'srcdir = @srcdir@'
--- 32,38 ----
# SHLIB_MAPFILES
# SHLIB_NM_FLAGS
# SHLIB_INSTALL
! # MULTILIB_OSDIRNAMES
# Make needs VPATH to be literal.
echo 'srcdir = @srcdir@'
*************** for ml in $MULTILIBS; do
*** 317,338 ****
fi
shlib_so_name="$shlib_base_name"
shlib_dir=
! if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then
if [ "$dir" != . ]; then
shlib_dir="$dir"/
! for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do
! base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'`
! if [ "$dir" = "$base_ml_dir" ]; then
! shlib_so_name=libgcc_s
! break
! else
! canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"`
! if [ -n "$canon_dir" ]; then
! shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g`
! break
! fi
! fi
! done
fi
fi
echo ""
--- 317,334 ----
fi
shlib_so_name="$shlib_base_name"
shlib_dir=
! if [ -n "$MULTILIB_OSDIRNAMES" ]; then
if [ "$dir" != . ]; then
+ gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
+ os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
shlib_dir="$dir"/
! gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
! os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
! if [ -z "$os_multilib_base" ]; then
! shlib_so_name=libgcc_s
! else
! shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
! fi
fi
fi
echo ""
*************** echo ""
*** 438,443 ****
--- 434,440 ----
echo "install: $all"
for ml in $MULTILIBS; do
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
+ flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
if [ $dir != . ]; then
ldir='$(libsubdir)'/$dir
echo " if [ -d $ldir ]; then true; else mkdir $ldir; chmod a+rx $ldir; fi;"
*************** for ml in $MULTILIBS; do
*** 460,498 ****
shlib_so_name="$shlib_base_name"
shlib_dir=
shlib_slibdir_qual=
! if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then
! shlib_slibdir_qual=none
if [ "$dir" != . ]; then
shlib_dir="$dir"/
- for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do
- base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'`
- if [ "$dir" = "$base_ml_dir" ]; then
- shlib_so_name=libgcc_s
- shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'`
- break
- else
- canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"`
- if [ -n "$canon_dir" ]; then
- shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g`
- shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'`
- break
- fi
- fi
- done
fi
! if [ "$shlib_slibdir_qual" = none ]; then
! for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do
! base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'`
! shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'`
! for ml2 in $MULTILIBS; do
! dir2=`echo ${ml2} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
! if [ "$base_ml_dir" = "$dir2" ]; then
! shlib_slibdir_qual=
! break
! fi
! done
! if [ -n "$shlib_slibdir_qual" ]; then break; fi
! done
fi
fi
echo " $SHLIB_INSTALL" \
--- 457,478 ----
shlib_so_name="$shlib_base_name"
shlib_dir=
shlib_slibdir_qual=
! if [ -n "$MULTILIB_OSDIRNAMES" ]; then
! gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
! os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
if [ "$dir" != . ]; then
shlib_dir="$dir"/
fi
! gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
! os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
! if [ -z "$os_multilib_base" ]; then
! shlib_so_name=libgcc_s
! if [ "$os_multilib_dir" != "." ]; then
! shlib_slibdir_qual="/$os_multilib_dir"
! fi
! else
! shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
! shlib_slibdir_qual="/$os_multilib_base"
fi
fi
echo " $SHLIB_INSTALL" \
diff -Nrc3pad gcc-3.2/gcc/optabs.c gcc-3.2.1/gcc/optabs.c
*** gcc-3.2/gcc/optabs.c Fri Apr 5 19:13:00 2002
--- gcc-3.2.1/gcc/optabs.c Wed Sep 4 22:29:13 2002
*************** expand_binop (mode, binoptab, op0, op1,
*** 752,774 ****
}
/* In case the insn wants input operands in modes different from
! the result, convert the operands. It would seem that we
! don't need to convert CONST_INTs, but we do, so that they're
! a properly sign-extended for their modes; we choose the
! widest mode between mode and mode[01], so that, in a widening
! operation, we call convert_modes with different FROM and TO
! modes, which ensures the value is sign-extended. Shift
! operations are an exception, because the second operand needs
! not be extended to the mode of the result. */
if (GET_MODE (op0) != mode0
&& mode0 != VOIDmode)
xop0 = convert_modes (mode0,
GET_MODE (op0) != VOIDmode
? GET_MODE (op0)
! : GET_MODE_SIZE (mode) > GET_MODE_SIZE (mode0)
! ? mode
! : mode0,
xop0, unsignedp);
if (GET_MODE (xop1) != mode1
--- 752,769 ----
}
/* In case the insn wants input operands in modes different from
! those of the actual operands, convert the operands. It would
! seem that we don't need to convert CONST_INTs, but we do, so
! that they're properly zero-extended or sign-extended for their
! modes; shift operations are an exception, because the second
! operand needs not be extended to the mode of the result. */
if (GET_MODE (op0) != mode0
&& mode0 != VOIDmode)
xop0 = convert_modes (mode0,
GET_MODE (op0) != VOIDmode
? GET_MODE (op0)
! : mode,
xop0, unsignedp);
if (GET_MODE (xop1) != mode1
*************** expand_binop (mode, binoptab, op0, op1,
*** 776,783 ****
xop1 = convert_modes (mode1,
GET_MODE (op1) != VOIDmode
? GET_MODE (op1)
! : (GET_MODE_SIZE (mode) > GET_MODE_SIZE (mode1)
! && ! shift_op)
? mode
: mode1,
xop1, unsignedp);
--- 771,777 ----
xop1 = convert_modes (mode1,
GET_MODE (op1) != VOIDmode
? GET_MODE (op1)
! : ! shift_op
? mode
: mode1,
xop1, unsignedp);
*************** expand_binop (mode, binoptab, op0, op1,
*** 1192,1200 ****
{
int i;
optab otheroptab = binoptab == add_optab ? sub_optab : add_optab;
! unsigned int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD;
rtx carry_in = NULL_RTX, carry_out = NULL_RTX;
! rtx xop0, xop1;
/* We can handle either a 1 or -1 value for the carry. If STORE_FLAG
value is one of those, use it. Otherwise, use 1 since it is the
--- 1186,1194 ----
{
int i;
optab otheroptab = binoptab == add_optab ? sub_optab : add_optab;
! int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD;
rtx carry_in = NULL_RTX, carry_out = NULL_RTX;
! rtx xop0, xop1, xtarget;
/* We can handle either a 1 or -1 value for the carry. If STORE_FLAG
value is one of those, use it. Otherwise, use 1 since it is the
*************** expand_binop (mode, binoptab, op0, op1,
*** 1209,1227 ****
xop0 = force_reg (mode, op0);
xop1 = force_reg (mode, op1);
! if (target == 0 || GET_CODE (target) != REG
! || target == xop0 || target == xop1)
! target = gen_reg_rtx (mode);
/* Indicate for flow that the entire target reg is being set. */
if (GET_CODE (target) == REG)
! emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
/* Do the actual arithmetic. */
for (i = 0; i < nwords; i++)
{
int index = (WORDS_BIG_ENDIAN ? nwords - i - 1 : i);
! rtx target_piece = operand_subword (target, index, 1, mode);
rtx op0_piece = operand_subword_force (xop0, index, mode);
rtx op1_piece = operand_subword_force (xop1, index, mode);
rtx x;
--- 1203,1222 ----
xop0 = force_reg (mode, op0);
xop1 = force_reg (mode, op1);
! xtarget = gen_reg_rtx (mode);
!
! if (target == 0 || GET_CODE (target) != REG)
! target = xtarget;
/* Indicate for flow that the entire target reg is being set. */
if (GET_CODE (target) == REG)
! emit_insn (gen_rtx_CLOBBER (VOIDmode, xtarget));
/* Do the actual arithmetic. */
for (i = 0; i < nwords; i++)
{
int index = (WORDS_BIG_ENDIAN ? nwords - i - 1 : i);
! rtx target_piece = operand_subword (xtarget, index, 1, mode);
rtx op0_piece = operand_subword_force (xop0, index, mode);
rtx op1_piece = operand_subword_force (xop1, index, mode);
rtx x;
*************** expand_binop (mode, binoptab, op0, op1,
*** 1281,1287 ****
{
if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
{
! rtx temp = emit_move_insn (target, target);
set_unique_reg_note (temp,
REG_EQUAL,
--- 1276,1282 ----
{
if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
{
! rtx temp = emit_move_insn (target, xtarget);
set_unique_reg_note (temp,
REG_EQUAL,
*************** expand_binop (mode, binoptab, op0, op1,
*** 1443,1448 ****
--- 1438,1446 ----
rtx temp = expand_binop (word_mode, binoptab, op0_low, op1_xhigh,
NULL_RTX, 0, OPTAB_DIRECT);
+ if (!REG_P (product_high))
+ product_high = force_reg (word_mode, product_high);
+
if (temp != 0)
temp = expand_binop (word_mode, add_optab, temp, product_high,
product_high, 0, next_methods);
*************** expand_binop (mode, binoptab, op0, op1,
*** 1462,1467 ****
--- 1460,1467 ----
if (temp != 0 && temp != product_high)
emit_move_insn (product_high, temp);
+ emit_move_insn (operand_subword (product, high, 1, mode), product_high);
+
if (temp != 0)
{
if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
diff -Nrc3pad gcc-3.2/gcc/po/ChangeLog gcc-3.2.1/gcc/po/ChangeLog
*** gcc-3.2/gcc/po/ChangeLog Wed Aug 14 09:00:29 2002
--- gcc-3.2.1/gcc/po/ChangeLog Tue Nov 19 17:49:16 2002
***************
*** 1,3 ****
--- 1,15 ----
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-18 Release Manager
+
+ * GCC 3.2.1 Released.
+
2002-08-14 Release Manager
* GCC 3.2 Released.
diff -Nrc3pad gcc-3.2/gcc/reload.c gcc-3.2.1/gcc/reload.c
*** gcc-3.2/gcc/reload.c Thu Jun 13 16:08:12 2002
--- gcc-3.2.1/gcc/reload.c Thu Oct 24 08:59:49 2002
*************** static int push_secondary_reload PARAMS
*** 242,248 ****
#endif
static enum reg_class find_valid_class PARAMS ((enum machine_mode, int,
unsigned int));
! static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode));
static void push_replacement PARAMS ((rtx *, int, enum machine_mode));
static void combine_reloads PARAMS ((void));
static int find_reusable_reload PARAMS ((rtx *, rtx, enum reg_class,
--- 242,248 ----
#endif
static enum reg_class find_valid_class PARAMS ((enum machine_mode, int,
unsigned int));
! static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode, int));
static void push_replacement PARAMS ((rtx *, int, enum machine_mode));
static void combine_reloads PARAMS ((void));
static int find_reusable_reload PARAMS ((rtx *, rtx, enum reg_class,
*************** find_reusable_reload (p_in, out, class,
*** 794,802 ****
SUBREG_REG expression. */
static int
! reload_inner_reg_of_subreg (x, mode)
rtx x;
enum machine_mode mode;
{
rtx inner;
--- 794,803 ----
SUBREG_REG expression. */
static int
! reload_inner_reg_of_subreg (x, mode, output)
rtx x;
enum machine_mode mode;
+ int output;
{
rtx inner;
*************** reload_inner_reg_of_subreg (x, mode)
*** 824,829 ****
--- 825,831 ----
word and the number of regs for INNER is not the same as the
number of words in INNER, then INNER will need reloading. */
return (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
+ && output
&& GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
&& ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
!= HARD_REGNO_NREGS (REGNO (inner), GET_MODE (inner))));
*************** push_reload (in, out, inloc, outloc, cla
*** 1047,1053 ****
/* Similar issue for (SUBREG constant ...) if it was not handled by the
code above. This can happen if SUBREG_BYTE != 0. */
! if (in != 0 && reload_inner_reg_of_subreg (in, inmode))
{
enum reg_class in_class = class;
--- 1049,1055 ----
/* Similar issue for (SUBREG constant ...) if it was not handled by the
code above. This can happen if SUBREG_BYTE != 0. */
! if (in != 0 && reload_inner_reg_of_subreg (in, inmode, 0))
{
enum reg_class in_class = class;
*************** push_reload (in, out, inloc, outloc, cla
*** 1144,1150 ****
However, we must reload the inner reg *as well as* the subreg in
that case. In this case, the inner reg is an in-out reload. */
! if (out != 0 && reload_inner_reg_of_subreg (out, outmode))
{
/* This relies on the fact that emit_reload_insns outputs the
instructions for output reloads of type RELOAD_OTHER in reverse
--- 1146,1152 ----
However, we must reload the inner reg *as well as* the subreg in
that case. In this case, the inner reg is an in-out reload. */
! if (out != 0 && reload_inner_reg_of_subreg (out, outmode, 1))
{
/* This relies on the fact that emit_reload_insns outputs the
instructions for output reloads of type RELOAD_OTHER in reverse
*************** push_reload (in, out, inloc, outloc, cla
*** 1283,1294 ****
So add an additional reload. */
#ifdef SECONDARY_MEMORY_NEEDED
! /* If a memory location is needed for the copy, make one. */
! if (in != 0 && GET_CODE (in) == REG
! && REGNO (in) < FIRST_PSEUDO_REGISTER
! && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
! class, inmode))
! get_secondary_mem (in, inmode, opnum, type);
#endif
i = n_reloads;
--- 1285,1301 ----
So add an additional reload. */
#ifdef SECONDARY_MEMORY_NEEDED
! {
! int regnum;
!
! /* If a memory location is needed for the copy, make one. */
! if (in != 0
! && ((regnum = true_regnum (in)) >= 0)
! && regnum < FIRST_PSEUDO_REGISTER
! && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (regnum),
! class, inmode))
! get_secondary_mem (in, inmode, opnum, type);
! }
#endif
i = n_reloads;
*************** push_reload (in, out, inloc, outloc, cla
*** 1314,1324 ****
n_reloads++;
#ifdef SECONDARY_MEMORY_NEEDED
! if (out != 0 && GET_CODE (out) == REG
! && REGNO (out) < FIRST_PSEUDO_REGISTER
! && SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (REGNO (out)),
! outmode))
! get_secondary_mem (out, outmode, opnum, type);
#endif
}
else
--- 1321,1336 ----
n_reloads++;
#ifdef SECONDARY_MEMORY_NEEDED
! {
! int regnum;
!
! if (out != 0
! && ((regnum = true_regnum (out)) >= 0)
! && regnum < FIRST_PSEUDO_REGISTER
! && SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (regnum),
! outmode))
! get_secondary_mem (out, outmode, opnum, type);
! }
#endif
}
else
*************** combine_reloads ()
*** 1712,1718 ****
&& ! (GET_CODE (rld[i].in) == REG
&& reg_overlap_mentioned_for_reload_p (rld[i].in,
rld[output_reload].out))))
! && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode)
&& (reg_class_size[(int) rld[i].class]
|| SMALL_REGISTER_CLASSES)
/* We will allow making things slightly worse by combining an
--- 1724,1731 ----
&& ! (GET_CODE (rld[i].in) == REG
&& reg_overlap_mentioned_for_reload_p (rld[i].in,
rld[output_reload].out))))
! && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode,
! rld[i].when_needed != RELOAD_FOR_INPUT)
&& (reg_class_size[(int) rld[i].class]
|| SMALL_REGISTER_CLASSES)
/* We will allow making things slightly worse by combining an
*************** find_reloads (insn, replace, ind_levels,
*** 2643,2649 ****
;
else if (constraints[i][0] == 'p')
{
! find_reloads_address (VOIDmode, (rtx*) 0,
recog_data.operand[i],
recog_data.operand_loc[i],
i, operand_type[i], ind_levels, insn);
--- 2656,2662 ----
;
else if (constraints[i][0] == 'p')
{
! find_reloads_address (recog_data.operand_mode[i], (rtx*) 0,
recog_data.operand[i],
recog_data.operand_loc[i],
i, operand_type[i], ind_levels, insn);
*************** find_reloads_toplev (x, opnum, type, ind
*** 4414,4433 ****
reg_equiv_constant[regno])) != 0)
return tem;
! if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
! && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
! && reg_equiv_constant[regno] != 0
! && (tem = operand_subword (reg_equiv_constant[regno],
! SUBREG_BYTE (x) / UNITS_PER_WORD, 0,
! GET_MODE (SUBREG_REG (x)))) != 0)
{
! /* TEM is now a word sized constant for the bits from X that
! we wanted. However, TEM may be the wrong representation.
!
! Use gen_lowpart_common to convert a CONST_INT into a
! CONST_DOUBLE and vice versa as needed according to by the mode
! of the SUBREG. */
! tem = gen_lowpart_common (GET_MODE (x), tem);
if (!tem)
abort ();
return tem;
--- 4427,4438 ----
reg_equiv_constant[regno])) != 0)
return tem;
! if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
! && reg_equiv_constant[regno] != 0)
{
! tem =
! simplify_gen_subreg (GET_MODE (x), reg_equiv_constant[regno],
! GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
if (!tem)
abort ();
return tem;
diff -Nrc3pad gcc-3.2/gcc/reload1.c gcc-3.2.1/gcc/reload1.c
*** gcc-3.2/gcc/reload1.c Tue May 21 23:42:54 2002
--- gcc-3.2.1/gcc/reload1.c Thu Oct 10 15:40:20 2002
*************** static void delete_output_reload PARAMS
*** 440,446 ****
static void delete_address_reloads PARAMS ((rtx, rtx));
static void delete_address_reloads_1 PARAMS ((rtx, rtx, rtx));
static rtx inc_for_reload PARAMS ((rtx, rtx, rtx, int));
- static int constraint_accepts_reg_p PARAMS ((const char *, rtx));
static void reload_cse_regs_1 PARAMS ((rtx));
static int reload_cse_noop_set_p PARAMS ((rtx));
static int reload_cse_simplify_set PARAMS ((rtx, rtx));
--- 440,445 ----
*************** emit_input_reload_insns (chain, rl, old,
*** 6384,6421 ****
&& SET_DEST (PATTERN (temp)) == old
/* Make sure we can access insn_operand_constraint. */
&& asm_noperands (PATTERN (temp)) < 0
- /* This is unsafe if prev insn rejects our reload reg. */
- && constraint_accepts_reg_p (insn_data[recog_memoized (temp)].operand[0].constraint,
- reloadreg)
/* This is unsafe if operand occurs more than once in current
insn. Perhaps some occurrences aren't reloaded. */
! && count_occurrences (PATTERN (insn), old, 0) == 1
! /* Don't risk splitting a matching pair of operands. */
! && ! reg_mentioned_p (old, SET_SRC (PATTERN (temp))))
{
/* Store into the reload register instead of the pseudo. */
SET_DEST (PATTERN (temp)) = reloadreg;
! /* If the previous insn is an output reload, the source is
! a reload register, and its spill_reg_store entry will
! contain the previous destination. This is now
! invalid. */
! if (GET_CODE (SET_SRC (PATTERN (temp))) == REG
! && REGNO (SET_SRC (PATTERN (temp))) < FIRST_PSEUDO_REGISTER)
{
! spill_reg_store[REGNO (SET_SRC (PATTERN (temp)))] = 0;
! spill_reg_stored_to[REGNO (SET_SRC (PATTERN (temp)))] = 0;
! }
! /* If these are the only uses of the pseudo reg,
! pretend for GDB it lives in the reload reg we used. */
! if (REG_N_DEATHS (REGNO (old)) == 1
! && REG_N_SETS (REGNO (old)) == 1)
{
! reg_renumber[REGNO (old)] = REGNO (rl->reg_rtx);
! alter_reg (REGNO (old), -1);
}
- special = 1;
}
}
--- 6383,6425 ----
&& SET_DEST (PATTERN (temp)) == old
/* Make sure we can access insn_operand_constraint. */
&& asm_noperands (PATTERN (temp)) < 0
/* This is unsafe if operand occurs more than once in current
insn. Perhaps some occurrences aren't reloaded. */
! && count_occurrences (PATTERN (insn), old, 0) == 1)
{
+ rtx old = SET_DEST (PATTERN (temp));
/* Store into the reload register instead of the pseudo. */
SET_DEST (PATTERN (temp)) = reloadreg;
! /* Verify that resulting insn is valid. */
! extract_insn (temp);
! if (constrain_operands (1))
{
! /* If the previous insn is an output reload, the source is
! a reload register, and its spill_reg_store entry will
! contain the previous destination. This is now
! invalid. */
! if (GET_CODE (SET_SRC (PATTERN (temp))) == REG
! && REGNO (SET_SRC (PATTERN (temp))) < FIRST_PSEUDO_REGISTER)
! {
! spill_reg_store[REGNO (SET_SRC (PATTERN (temp)))] = 0;
! spill_reg_stored_to[REGNO (SET_SRC (PATTERN (temp)))] = 0;
! }
! /* If these are the only uses of the pseudo reg,
! pretend for GDB it lives in the reload reg we used. */
! if (REG_N_DEATHS (REGNO (old)) == 1
! && REG_N_SETS (REGNO (old)) == 1)
! {
! reg_renumber[REGNO (old)] = REGNO (rl->reg_rtx);
! alter_reg (REGNO (old), -1);
! }
! special = 1;
! }
! else
{
! SET_DEST (PATTERN (temp)) = old;
}
}
}
*************** gen_reload (out, in, opnum, type)
*** 7354,7359 ****
--- 7358,7366 ----
{
rtx last = get_last_insn ();
rtx tem;
+ #ifdef SECONDARY_MEMORY_NEEDED
+ int in_regnum, out_regnum;
+ #endif
/* If IN is a paradoxical SUBREG, remove it and try to put the
opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
*************** gen_reload (out, in, opnum, type)
*** 7516,7535 ****
#ifdef SECONDARY_MEMORY_NEEDED
/* If we need a memory location to do the move, do it that way. */
! else if (GET_CODE (in) == REG && REGNO (in) < FIRST_PSEUDO_REGISTER
! && GET_CODE (out) == REG && REGNO (out) < FIRST_PSEUDO_REGISTER
! && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
! REGNO_REG_CLASS (REGNO (out)),
GET_MODE (out)))
{
/* Get the memory to use and rewrite both registers to its mode. */
rtx loc = get_secondary_mem (in, GET_MODE (out), opnum, type);
if (GET_MODE (loc) != GET_MODE (out))
! out = gen_rtx_REG (GET_MODE (loc), REGNO (out));
if (GET_MODE (loc) != GET_MODE (in))
! in = gen_rtx_REG (GET_MODE (loc), REGNO (in));
gen_reload (loc, in, opnum, type);
gen_reload (out, loc, opnum, type);
--- 7523,7544 ----
#ifdef SECONDARY_MEMORY_NEEDED
/* If we need a memory location to do the move, do it that way. */
! else if ((in_regnum = true_regnum (in)) >= 0
! && in_regnum < FIRST_PSEUDO_REGISTER
! && (out_regnum = true_regnum (out)) >= 0
! && out_regnum < FIRST_PSEUDO_REGISTER
! && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (in_regnum),
! REGNO_REG_CLASS (out_regnum),
GET_MODE (out)))
{
/* Get the memory to use and rewrite both registers to its mode. */
rtx loc = get_secondary_mem (in, GET_MODE (out), opnum, type);
if (GET_MODE (loc) != GET_MODE (out))
! out = gen_rtx_REG (GET_MODE (loc), out_regnum);
if (GET_MODE (loc) != GET_MODE (in))
! in = gen_rtx_REG (GET_MODE (loc), in_regnum);
gen_reload (loc, in, opnum, type);
gen_reload (out, loc, opnum, type);
*************** delete_output_reload (insn, j, last_relo
*** 7581,7586 ****
--- 7590,7600 ----
rtx i1;
rtx substed;
+ /* It is possible that this reload has been only used to set another reload
+ we eliminated earlier and thus deleted this instruction too. */
+ if (INSN_DELETED_P (output_reload_insn))
+ return;
+
/* Get the raw pseudo-register referred to. */
while (GET_CODE (reg) == SUBREG)
*************** inc_for_reload (reloadreg, in, value, in
*** 7981,8031 ****
return store;
}
- /* Return 1 if we are certain that the constraint-string STRING allows
- the hard register REG. Return 0 if we can't be sure of this. */
-
- static int
- constraint_accepts_reg_p (string, reg)
- const char *string;
- rtx reg;
- {
- int value = 0;
- int regno = true_regnum (reg);
- int c;
-
- /* Initialize for first alternative. */
- value = 0;
- /* Check that each alternative contains `g' or `r'. */
- while (1)
- switch (c = *string++)
- {
- case 0:
- /* If an alternative lacks `g' or `r', we lose. */
- return value;
- case ',':
- /* If an alternative lacks `g' or `r', we lose. */
- if (value == 0)
- return 0;
- /* Initialize for next alternative. */
- value = 0;
- break;
- case 'g':
- case 'r':
- /* Any general reg wins for this alternative. */
- if (TEST_HARD_REG_BIT (reg_class_contents[(int) GENERAL_REGS], regno))
- value = 1;
- break;
- default:
- /* Any reg in specified class wins for this alternative. */
- {
- enum reg_class class = REG_CLASS_FROM_LETTER (c);
-
- if (TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno))
- value = 1;
- }
- }
- }
-
/* INSN is a no-op; delete it.
If this sets the return value of the function, we must keep a USE around,
in case this is in a different basic block than the final USE. Otherwise,
--- 7995,8000 ----
diff -Nrc3pad gcc-3.2/gcc/rtl.h gcc-3.2.1/gcc/rtl.h
*** gcc-3.2/gcc/rtl.h Sun May 19 09:05:27 2002
--- gcc-3.2.1/gcc/rtl.h Sat Nov 16 01:55:47 2002
*************** extern rtx pc_set PARAMS ((rtx));
*** 1804,1809 ****
--- 1804,1810 ----
extern rtx condjump_label PARAMS ((rtx));
extern int simplejump_p PARAMS ((rtx));
extern int returnjump_p PARAMS ((rtx));
+ extern int tablejump_p PARAMS ((rtx));
extern int onlyjump_p PARAMS ((rtx));
extern int only_sets_cc0_p PARAMS ((rtx));
extern int sets_cc0_p PARAMS ((rtx));
*************** extern int invert_jump_1 PARAMS ((rtx,
*** 1811,1816 ****
--- 1812,1818 ----
extern int invert_jump PARAMS ((rtx, rtx, int));
extern int rtx_renumbered_equal_p PARAMS ((rtx, rtx));
extern int true_regnum PARAMS ((rtx));
+ extern unsigned int reg_or_subregno PARAMS ((rtx));
extern int redirect_jump_1 PARAMS ((rtx, rtx));
extern int redirect_jump PARAMS ((rtx, rtx, int));
extern void rebuild_jump_labels PARAMS ((rtx));
diff -Nrc3pad gcc-3.2/gcc/sched-deps.c gcc-3.2.1/gcc/sched-deps.c
*** gcc-3.2/gcc/sched-deps.c Tue Feb 19 02:53:10 2002
--- gcc-3.2.1/gcc/sched-deps.c Fri Sep 27 01:13:27 2002
*************** sched_analyze_insn (deps, x, insn, loop_
*** 923,929 ****
code = GET_CODE (x);
}
if (code == SET || code == CLOBBER)
! sched_analyze_1 (deps, x, insn);
else if (code == PARALLEL)
{
int i;
--- 923,937 ----
code = GET_CODE (x);
}
if (code == SET || code == CLOBBER)
! {
! sched_analyze_1 (deps, x, insn);
!
! /* Bare clobber insns are used for letting life analysis, reg-stack
! and others know that a value is dead. Depend on the last call
! instruction so that reg-stack won't get confused. */
! if (code == CLOBBER)
! add_dependence_list (insn, deps->last_function_call, REG_DEP_OUTPUT);
! }
else if (code == PARALLEL)
{
int i;
*************** sched_analyze_insn (deps, x, insn, loop_
*** 1118,1125 ****
EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i,
{
struct deps_reg *reg_last = &deps->reg_last[i];
- add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT);
- add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI);
if (reg_last->uses_length > MAX_PENDING_LIST_LENGTH
|| reg_last->clobbers_length > MAX_PENDING_LIST_LENGTH)
{
--- 1126,1131 ----
*************** sched_analyze_insn (deps, x, insn, loop_
*** 1129,1134 ****
--- 1135,1141 ----
REG_DEP_ANTI);
add_dependence_list_and_free (insn, ®_last->clobbers,
REG_DEP_OUTPUT);
+ reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets);
reg_last->clobbers_length = 0;
reg_last->uses_length = 0;
}
*************** sched_analyze_insn (deps, x, insn, loop_
*** 1163,1168 ****
--- 1170,1185 ----
CLEAR_REG_SET (reg_pending_clobbers);
CLEAR_REG_SET (reg_pending_sets);
+ /* If we are currently in a libcall scheduling group, then mark the
+ current insn as being in a scheduling group and that it can not
+ be moved into a different basic block. */
+
+ if (deps->libcall_block_tail_insn)
+ {
+ set_sched_group_p (insn);
+ CANT_MOVE (insn) = 1;
+ }
+
/* If a post-call group is still open, see if it should remain so.
This insn must be a simple move of a hard reg to a pseudo or
vice-versa.
*************** sched_analyze (deps, head, tail)
*** 1226,1231 ****
--- 1243,1250 ----
for (insn = head;; insn = NEXT_INSN (insn))
{
+ rtx link, end_seq, r0, set, note;
+
if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN)
{
/* Clear out the stale LOG_LINKS from flow. */
*************** sched_analyze (deps, head, tail)
*** 1252,1260 ****
{
int i;
- /* Clear out stale SCHED_GROUP_P. */
- SCHED_GROUP_P (insn) = 0;
-
CANT_MOVE (insn) = 1;
/* Clear out the stale LOG_LINKS from flow. */
--- 1271,1276 ----
*************** sched_analyze (deps, head, tail)
*** 1356,1361 ****
--- 1372,1417 ----
if (current_sched_info->use_cselib)
cselib_process_insn (insn);
+
+ /* Now that we have completed handling INSN, check and see if it is
+ a CLOBBER beginning a libcall block. If it is, record the
+ end of the libcall sequence.
+
+ We want to schedule libcall blocks as a unit before reload. While
+ this restricts scheduling, it preserves the meaning of a libcall
+ block.
+
+ As a side effect, we may get better code due to decreased register
+ pressure as well as less chance of a foreign insn appearing in
+ a libcall block. */
+ if (!reload_completed
+ /* Note we may have nested libcall sequences. We only care about
+ the outermost libcall sequence. */
+ && deps->libcall_block_tail_insn == 0
+ /* The sequence must start with a clobber of a register. */
+ && GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == CLOBBER
+ && (r0 = XEXP (PATTERN (insn), 0), GET_CODE (r0) == REG)
+ && GET_CODE (XEXP (PATTERN (insn), 0)) == REG
+ /* The CLOBBER must also have a REG_LIBCALL note attached. */
+ && (link = find_reg_note (insn, REG_LIBCALL, NULL_RTX)) != 0
+ && (end_seq = XEXP (link, 0)) != 0
+ /* The insn referenced by the REG_LIBCALL note must be a
+ simple nop copy with the same destination as the register
+ mentioned in the clobber. */
+ && (set = single_set (end_seq)) != 0
+ && SET_DEST (set) == r0 && SET_SRC (set) == r0
+ /* And finally the insn referenced by the REG_LIBCALL must
+ also contain a REG_EQUAL note and a REG_RETVAL note. */
+ && find_reg_note (end_seq, REG_EQUAL, NULL_RTX) != 0
+ && find_reg_note (end_seq, REG_RETVAL, NULL_RTX) != 0)
+ deps->libcall_block_tail_insn = XEXP (link, 0);
+
+ /* If we have reached the end of a libcall block, then close the
+ block. */
+ if (deps->libcall_block_tail_insn == insn)
+ deps->libcall_block_tail_insn = 0;
+
if (insn == tail)
{
if (current_sched_info->use_cselib)
*************** init_deps (deps)
*** 1449,1454 ****
--- 1505,1511 ----
deps->last_function_call = 0;
deps->sched_before_next_call = 0;
deps->in_post_call_group_p = false;
+ deps->libcall_block_tail_insn = 0;
}
/* Free insn lists found in DEPS. */
diff -Nrc3pad gcc-3.2/gcc/sched-int.h gcc-3.2.1/gcc/sched-int.h
*** gcc-3.2/gcc/sched-int.h Thu Feb 28 18:29:07 2002
--- gcc-3.2.1/gcc/sched-int.h Mon Aug 19 18:59:31 2002
*************** struct deps
*** 83,88 ****
--- 83,94 ----
the call. */
bool in_post_call_group_p;
+ /* Set to the tail insn of the outermost libcall block.
+
+ When nonzero, we will mark each insn processed by sched_analyze_insn
+ with SCHED_GROUP_P to ensure libcalls are scheduled as a unit. */
+ rtx libcall_block_tail_insn;
+
/* The maximum register number for the following arrays. Before reload
this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER. */
int max_reg;
diff -Nrc3pad gcc-3.2/gcc/sibcall.c gcc-3.2.1/gcc/sibcall.c
*** gcc-3.2/gcc/sibcall.c Sat Apr 6 19:37:38 2002
--- gcc-3.2.1/gcc/sibcall.c Tue Sep 17 21:20:26 2002
*************** optimize_sibling_and_tail_recursive_call
*** 574,581 ****
rtx insn, insns;
basic_block alternate_exit = EXIT_BLOCK_PTR;
bool no_sibcalls_this_function = false;
! int successful_sibling_call = 0;
! int replaced_call_placeholder = 0;
edge e;
insns = get_insns ();
--- 574,581 ----
rtx insn, insns;
basic_block alternate_exit = EXIT_BLOCK_PTR;
bool no_sibcalls_this_function = false;
! bool successful_replacement = false;
! bool replaced_call_placeholder = false;
edge e;
insns = get_insns ();
*************** optimize_sibling_and_tail_recursive_call
*** 715,724 ****
/* Select a set of insns to implement the call and emit them.
Tail recursion is the most efficient, so select it over
a tail/sibling call. */
- if (sibcall)
- successful_sibling_call = 1;
! replaced_call_placeholder = 1;
replace_call_placeholder (insn,
tailrecursion != 0
? sibcall_use_tail_recursion
--- 715,725 ----
/* Select a set of insns to implement the call and emit them.
Tail recursion is the most efficient, so select it over
a tail/sibling call. */
! if (sibcall || tailrecursion)
! successful_replacement = true;
! replaced_call_placeholder = true;
!
replace_call_placeholder (insn,
tailrecursion != 0
? sibcall_use_tail_recursion
*************** optimize_sibling_and_tail_recursive_call
*** 728,734 ****
}
}
! if (successful_sibling_call)
{
rtx insn;
tree arg;
--- 729,735 ----
}
}
! if (successful_replacement)
{
rtx insn;
tree arg;
diff -Nrc3pad gcc-3.2/gcc/stmt.c gcc-3.2.1/gcc/stmt.c
*** gcc-3.2/gcc/stmt.c Wed Apr 17 01:43:57 2002
--- gcc-3.2.1/gcc/stmt.c Mon Nov 11 20:52:29 2002
*************** tail_recursion_args (actuals, formals)
*** 3351,3358 ****
if (GET_MODE (DECL_RTL (f)) == GET_MODE (argvec[i]))
emit_move_insn (DECL_RTL (f), argvec[i]);
else
! convert_move (DECL_RTL (f), argvec[i],
! TREE_UNSIGNED (TREE_TYPE (TREE_VALUE (a))));
}
free_temp_slots ();
--- 3351,3368 ----
if (GET_MODE (DECL_RTL (f)) == GET_MODE (argvec[i]))
emit_move_insn (DECL_RTL (f), argvec[i]);
else
! {
! rtx tmp = argvec[i];
!
! if (DECL_MODE (f) != GET_MODE (DECL_RTL (f)))
! {
! tmp = gen_reg_rtx (DECL_MODE (f));
! convert_move (tmp, argvec[i],
! TREE_UNSIGNED (TREE_TYPE (TREE_VALUE (a))));
! }
! convert_move (DECL_RTL (f), tmp,
! TREE_UNSIGNED (TREE_TYPE (TREE_VALUE (a))));
! }
}
free_temp_slots ();
diff -Nrc3pad gcc-3.2/gcc/toplev.c gcc-3.2.1/gcc/toplev.c
*** gcc-3.2/gcc/toplev.c Mon May 27 05:48:15 2002
--- gcc-3.2.1/gcc/toplev.c Sat Nov 2 00:57:23 2002
*************** int align_labels_max_skip;
*** 879,884 ****
--- 879,888 ----
int align_functions;
int align_functions_log;
+ /* Like align_functions_log above, but used by front-ends to force the
+ minimum function alignment. Zero means no alignment is forced. */
+ int force_align_functions_log;
+
/* Table of supported debugging formats. */
static const struct
{
*************** rest_of_compilation (decl)
*** 2407,2412 ****
--- 2411,2419 ----
DECL_INITIAL (decl) = 0;
goto exit_rest_of_compilation;
}
+ else if (TYPE_P (parent))
+ /* A function in a local class should be treated normally. */
+ break;
/* If requested, consider whether to make this function inline. */
if ((DECL_INLINE (decl) && !flag_no_inline)
*************** rest_of_compilation (decl)
*** 3016,3028 ****
block. The loop infrastructure does the real job for us. */
flow_loops_find (&loops, LOOP_TREE);
/* Estimate using heuristics if no profiling info is available. */
if (flag_guess_branch_prob)
estimate_probability (&loops);
- if (rtl_dump_file)
- flow_loops_dump (&loops, rtl_dump_file, NULL, 0);
-
flow_loops_free (&loops);
}
life_analysis (insns, rtl_dump_file, PROP_FINAL);
--- 3023,3035 ----
block. The loop infrastructure does the real job for us. */
flow_loops_find (&loops, LOOP_TREE);
+ if (rtl_dump_file)
+ flow_loops_dump (&loops, rtl_dump_file, NULL, 0);
+
/* Estimate using heuristics if no profiling info is available. */
if (flag_guess_branch_prob)
estimate_probability (&loops);
flow_loops_free (&loops);
}
life_analysis (insns, rtl_dump_file, PROP_FINAL);
diff -Nrc3pad gcc-3.2/gcc/tradcpp.c gcc-3.2.1/gcc/tradcpp.c
*** gcc-3.2/gcc/tradcpp.c Wed May 22 05:58:48 2002
--- gcc-3.2.1/gcc/tradcpp.c Mon Nov 11 06:38:47 2002
*************** output_line_command (ip, op, conditional
*** 4104,4110 ****
sprintf (line_cmd_buf, "# %d \"%s\"", ip->lineno, ip->fname);
if (file_change != same_file)
strcat (line_cmd_buf, file_change == enter_file ? " 1" : " 2");
! if (system_include_depth > 0)
strcat (line_cmd_buf, " 3");
len = strlen (line_cmd_buf);
line_cmd_buf[len++] = '\n';
--- 4104,4110 ----
sprintf (line_cmd_buf, "# %d \"%s\"", ip->lineno, ip->fname);
if (file_change != same_file)
strcat (line_cmd_buf, file_change == enter_file ? " 1" : " 2");
! if (system_include_depth > (file_change == leave_file))
strcat (line_cmd_buf, " 3");
len = strlen (line_cmd_buf);
line_cmd_buf[len++] = '\n';
diff -Nrc3pad gcc-3.2/gcc/tree-inline.c gcc-3.2.1/gcc/tree-inline.c
*** gcc-3.2/gcc/tree-inline.c Wed Apr 17 01:43:57 2002
--- gcc-3.2.1/gcc/tree-inline.c Fri Oct 25 22:11:09 2002
*************** expand_call_inline (tp, walk_subtrees, d
*** 762,767 ****
--- 762,768 ----
inline_data *id;
tree t;
tree expr;
+ tree stmt;
tree chain;
tree fn;
tree scope_stmt;
*************** expand_call_inline (tp, walk_subtrees, d
*** 853,862 ****
for the return statements within the function to jump to. The
type of the statement expression is the return type of the
function call. */
! expr = build1 (STMT_EXPR, TREE_TYPE (TREE_TYPE (fn)), NULL_TREE);
/* There is no scope associated with the statement-expression. */
STMT_EXPR_NO_SCOPE (expr) = 1;
!
/* Local declarations will be replaced by their equivalents in this
map. */
st = id->decl_map;
--- 854,863 ----
for the return statements within the function to jump to. The
type of the statement expression is the return type of the
function call. */
! expr = build1 (STMT_EXPR, TREE_TYPE (TREE_TYPE (fn)), make_node (COMPOUND_STMT));
/* There is no scope associated with the statement-expression. */
STMT_EXPR_NO_SCOPE (expr) = 1;
! stmt = STMT_EXPR_STMT (expr);
/* Local declarations will be replaced by their equivalents in this
map. */
st = id->decl_map;
*************** expand_call_inline (tp, walk_subtrees, d
*** 871,877 ****
parameters. */
expand_calls_inline (&arg_inits, id);
/* And add them to the tree. */
! STMT_EXPR_STMT (expr) = chainon (STMT_EXPR_STMT (expr), arg_inits);
/* Record the function we are about to inline so that we can avoid
recursing into it. */
--- 872,878 ----
parameters. */
expand_calls_inline (&arg_inits, id);
/* And add them to the tree. */
! COMPOUND_BODY (stmt) = chainon (COMPOUND_BODY (stmt), arg_inits);
/* Record the function we are about to inline so that we can avoid
recursing into it. */
*************** expand_call_inline (tp, walk_subtrees, d
*** 906,913 ****
SCOPE_BEGIN_P (scope_stmt) = 1;
SCOPE_NO_CLEANUPS_P (scope_stmt) = 1;
remap_block (scope_stmt, DECL_ARGUMENTS (fn), id);
! TREE_CHAIN (scope_stmt) = STMT_EXPR_STMT (expr);
! STMT_EXPR_STMT (expr) = scope_stmt;
/* Tell the debugging backends that this block represents the
outermost scope of the inlined function. */
--- 907,914 ----
SCOPE_BEGIN_P (scope_stmt) = 1;
SCOPE_NO_CLEANUPS_P (scope_stmt) = 1;
remap_block (scope_stmt, DECL_ARGUMENTS (fn), id);
! TREE_CHAIN (scope_stmt) = COMPOUND_BODY (stmt);
! COMPOUND_BODY (stmt) = scope_stmt;
/* Tell the debugging backends that this block represents the
outermost scope of the inlined function. */
*************** expand_call_inline (tp, walk_subtrees, d
*** 915,948 ****
BLOCK_ABSTRACT_ORIGIN (SCOPE_STMT_BLOCK (scope_stmt)) = DECL_ORIGIN (fn);
/* Declare the return variable for the function. */
! STMT_EXPR_STMT (expr)
! = chainon (STMT_EXPR_STMT (expr),
declare_return_variable (id, &use_stmt));
/* After we've initialized the parameters, we insert the body of the
function itself. */
! inlined_body = &STMT_EXPR_STMT (expr);
while (*inlined_body)
inlined_body = &TREE_CHAIN (*inlined_body);
*inlined_body = copy_body (id);
- /* Close the block for the parameters. */
- scope_stmt = build_stmt (SCOPE_STMT, DECL_INITIAL (fn));
- SCOPE_NO_CLEANUPS_P (scope_stmt) = 1;
- remap_block (scope_stmt, NULL_TREE, id);
- STMT_EXPR_STMT (expr)
- = chainon (STMT_EXPR_STMT (expr), scope_stmt);
-
/* After the body of the function comes the RET_LABEL. This must come
before we evaluate the returned value below, because that evalulation
may cause RTL to be generated. */
! STMT_EXPR_STMT (expr)
! = chainon (STMT_EXPR_STMT (expr),
build_stmt (LABEL_STMT, id->ret_label));
/* Finally, mention the returned value so that the value of the
statement-expression is the returned value of the function. */
! STMT_EXPR_STMT (expr) = chainon (STMT_EXPR_STMT (expr), use_stmt);
/* Clean up. */
splay_tree_delete (id->decl_map);
--- 916,949 ----
BLOCK_ABSTRACT_ORIGIN (SCOPE_STMT_BLOCK (scope_stmt)) = DECL_ORIGIN (fn);
/* Declare the return variable for the function. */
! COMPOUND_BODY (stmt)
! = chainon (COMPOUND_BODY (stmt),
declare_return_variable (id, &use_stmt));
/* After we've initialized the parameters, we insert the body of the
function itself. */
! inlined_body = &COMPOUND_BODY (stmt);
while (*inlined_body)
inlined_body = &TREE_CHAIN (*inlined_body);
*inlined_body = copy_body (id);
/* After the body of the function comes the RET_LABEL. This must come
before we evaluate the returned value below, because that evalulation
may cause RTL to be generated. */
! COMPOUND_BODY (stmt)
! = chainon (COMPOUND_BODY (stmt),
build_stmt (LABEL_STMT, id->ret_label));
/* Finally, mention the returned value so that the value of the
statement-expression is the returned value of the function. */
! COMPOUND_BODY (stmt) = chainon (COMPOUND_BODY (stmt), use_stmt);
!
! /* Close the block for the parameters. */
! scope_stmt = build_stmt (SCOPE_STMT, DECL_INITIAL (fn));
! SCOPE_NO_CLEANUPS_P (scope_stmt) = 1;
! remap_block (scope_stmt, NULL_TREE, id);
! COMPOUND_BODY (stmt)
! = chainon (COMPOUND_BODY (stmt), scope_stmt);
/* Clean up. */
splay_tree_delete (id->decl_map);
*************** walk_tree (tp, func, data, htab_)
*** 1223,1228 ****
--- 1224,1235 ----
{
WALK_SUBTREE_TAIL (TREE_TYPE (*tp));
}
+ else if (TREE_CODE_CLASS (code) == 't')
+ {
+ WALK_SUBTREE (TYPE_SIZE (*tp));
+ WALK_SUBTREE (TYPE_SIZE_UNIT (*tp));
+ /* Also examine various special fields, below. */
+ }
result = (*lang_hooks.tree_inlining.walk_subtrees) (tp, &walk_subtrees, func,
data, htab);
*************** walk_tree (tp, func, data, htab_)
*** 1319,1324 ****
--- 1326,1332 ----
return NULL_TREE;
#undef WALK_SUBTREE
+ #undef WALK_SUBTREE_TAIL
}
/* Like walk_tree, but does not walk duplicate nodes more than
*************** copy_tree_r (tp, walk_subtrees, data)
*** 1377,1384 ****
if (TREE_CODE (*tp) == SCOPE_STMT)
SCOPE_STMT_BLOCK (*tp) = NULL_TREE;
}
! else if (TREE_CODE_CLASS (code) == 't')
! /* There's no need to copy types, or anything beneath them. */
*walk_subtrees = 0;
return NULL_TREE;
--- 1385,1392 ----
if (TREE_CODE (*tp) == SCOPE_STMT)
SCOPE_STMT_BLOCK (*tp) = NULL_TREE;
}
! else if (TREE_CODE_CLASS (code) == 't' && !variably_modified_type_p (*tp))
! /* Types only need to be copied if they are variably modified. */
*walk_subtrees = 0;
return NULL_TREE;
diff -Nrc3pad gcc-3.2/gcc/tree.c gcc-3.2.1/gcc/tree.c
*** gcc-3.2/gcc/tree.c Fri Apr 26 23:46:01 2002
--- gcc-3.2.1/gcc/tree.c Fri Oct 25 22:11:09 2002
*************** tree_size (node)
*** 286,292 ****
case '1': /* a unary arithmetic expression */
case '2': /* a binary arithmetic expression */
return (sizeof (struct tree_exp)
! + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
case 'c': /* a constant */
/* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
--- 286,292 ----
case '1': /* a unary arithmetic expression */
case '2': /* a binary arithmetic expression */
return (sizeof (struct tree_exp)
! + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
case 'c': /* a constant */
/* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
*************** tree_size (node)
*** 304,315 ****
case 'x': /* something random, like an identifier. */
{
! size_t length;
! length = (sizeof (struct tree_common)
! + TREE_CODE_LENGTH (code) * sizeof (char *));
! if (code == TREE_VEC)
! length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
! return length;
}
default:
--- 304,315 ----
case 'x': /* something random, like an identifier. */
{
! size_t length;
! length = (sizeof (struct tree_common)
! + TREE_CODE_LENGTH (code) * sizeof (char *));
! if (code == TREE_VEC)
! length += TREE_VEC_LENGTH (node) * sizeof (char *) - sizeof (char *);
! return length;
}
default:
*************** int_fits_type_p (c, type)
*** 4335,4340 ****
--- 4335,4399 ----
}
}
+ /* Returns true if T is, contains, or refers to a type with variable
+ size. This concept is more general than that of C99 'variably
+ modified types': in C99, a struct type is never variably modified
+ because a VLA may not appear as a structure member. However, in
+ GNU C code like:
+
+ struct S { int i[f()]; };
+
+ is valid, and other languages may define similar constructs. */
+
+ bool
+ variably_modified_type_p (type)
+ tree type;
+ {
+ /* If TYPE itself has variable size, it is variably modified.
+
+ We do not yet have a representation of the C99 '[*]' syntax.
+ When a representation is chosen, this function should be modified
+ to test for that case as well. */
+ if (TYPE_SIZE (type)
+ && TYPE_SIZE (type) != error_mark_node
+ && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
+ return true;
+
+ /* If TYPE is a pointer or reference, it is variably modified if
+ the type pointed to is variably modified. */
+ if ((TREE_CODE (type) == POINTER_TYPE
+ || TREE_CODE (type) == REFERENCE_TYPE)
+ && variably_modified_type_p (TREE_TYPE (type)))
+ return true;
+
+ /* If TYPE is an array, it is variably modified if the array
+ elements are. (Note that the VLA case has already been checked
+ above.) */
+ if (TREE_CODE (type) == ARRAY_TYPE
+ && variably_modified_type_p (TREE_TYPE (type)))
+ return true;
+
+ /* If TYPE is a function type, it is variably modified if any of the
+ parameters or the return type are variably modified. */
+ if (TREE_CODE (type) == FUNCTION_TYPE
+ || TREE_CODE (type) == METHOD_TYPE)
+ {
+ tree parm;
+
+ if (variably_modified_type_p (TREE_TYPE (type)))
+ return true;
+ for (parm = TYPE_ARG_TYPES (type);
+ parm && parm != void_list_node;
+ parm = TREE_CHAIN (parm))
+ if (variably_modified_type_p (TREE_VALUE (parm)))
+ return true;
+ }
+
+ /* The current language may have other cases to check, but in general,
+ all other types are not variably modified. */
+ return (*lang_hooks.tree_inlining.var_mod_type_p) (type);
+ }
+
/* Given a DECL or TYPE, return the scope in which it was declared, or
NULL_TREE if there is no containing scope. */
diff -Nrc3pad gcc-3.2/gcc/tree.h gcc-3.2.1/gcc/tree.h
*** gcc-3.2/gcc/tree.h Wed Apr 17 01:43:57 2002
--- gcc-3.2.1/gcc/tree.h Fri Oct 25 22:11:09 2002
*************** extern tree integer_types[itk_none];
*** 2052,2057 ****
--- 2052,2084 ----
#define long_long_unsigned_type_node integer_types[itk_unsigned_long_long]
+ /* A pointer-to-function member type looks like:
+
+ struct {
+ __P __pfn;
+ ptrdiff_t __delta;
+ };
+
+ If __pfn is NULL, it is a NULL pointer-to-member-function.
+
+ (Because the vtable is always the first thing in the object, we
+ don't need its offset.) If the function is virtual, then PFN is
+ one plus twice the index into the vtable; otherwise, it is just a
+ pointer to the function.
+
+ Unfortunately, using the lowest bit of PFN doesn't work in
+ architectures that don't impose alignment requirements on function
+ addresses, or that use the lowest bit to tell one ISA from another,
+ for example. For such architectures, we use the lowest bit of
+ DELTA instead of the lowest bit of the PFN, and DELTA will be
+ multiplied by 2. */
+
+ enum ptrmemfunc_vbit_where_t
+ {
+ ptrmemfunc_vbit_in_pfn,
+ ptrmemfunc_vbit_in_delta
+ };
+
#define NULL_TREE (tree) NULL
/* Approximate positive square root of a host double. This is for
*************** struct obstack;
*** 2911,2916 ****
--- 2938,2944 ----
/* In tree.c */
extern int really_constant_p PARAMS ((tree));
extern int int_fits_type_p PARAMS ((tree, tree));
+ extern bool variably_modified_type_p PARAMS ((tree));
extern int tree_log2 PARAMS ((tree));
extern int tree_floor_log2 PARAMS ((tree));
extern void preserve_data PARAMS ((void));
diff -Nrc3pad gcc-3.2/gcc/unroll.c gcc-3.2.1/gcc/unroll.c
*** gcc-3.2/gcc/unroll.c Sat Jun 15 01:12:06 2002
--- gcc-3.2.1/gcc/unroll.c Thu Oct 3 19:40:44 2002
*************** unroll_loop (loop, insn_count, strength_
*** 1188,1193 ****
--- 1188,1196 ----
/* Keep track of the unroll factor for the loop. */
loop_info->unroll_number = unroll_number;
+ /* And whether the loop has been preconditioned. */
+ loop_info->preconditioned = loop_preconditioned;
+
/* For each biv and giv, determine whether it can be safely split into
a different variable for each unrolled copy of the loop body.
We precalculate and save this info here, since computing it is
*************** find_splittable_givs (loop, bl, unroll_t
*** 2868,2874 ****
value = tem;
}
! splittable_regs[REGNO (v->new_reg)] = value;
}
else
{
--- 2871,2877 ----
value = tem;
}
! splittable_regs[reg_or_subregno (v->new_reg)] = value;
}
else
{
*************** find_splittable_givs (loop, bl, unroll_t
*** 3047,3067 ****
itself does not have to be splittable. */
if (v->same && v->same->giv_type == DEST_REG)
! addr_combined_regs[REGNO (v->same->new_reg)] = v->same;
if (GET_CODE (v->new_reg) == REG)
{
/* This giv maybe hasn't been combined with any others.
Make sure that it's giv is marked as splittable here. */
! splittable_regs[REGNO (v->new_reg)] = value;
/* Make it appear to depend upon itself, so that the
giv will be properly split in the main loop above. */
if (! v->same)
{
v->same = v;
! addr_combined_regs[REGNO (v->new_reg)] = v;
}
}
--- 3050,3070 ----
itself does not have to be splittable. */
if (v->same && v->same->giv_type == DEST_REG)
! addr_combined_regs[reg_or_subregno (v->same->new_reg)] = v->same;
if (GET_CODE (v->new_reg) == REG)
{
/* This giv maybe hasn't been combined with any others.
Make sure that it's giv is marked as splittable here. */
! splittable_regs[reg_or_subregno (v->new_reg)] = value;
/* Make it appear to depend upon itself, so that the
giv will be properly split in the main loop above. */
if (! v->same)
{
v->same = v;
! addr_combined_regs[reg_or_subregno (v->new_reg)] = v;
}
}
*************** find_splittable_givs (loop, bl, unroll_t
*** 3098,3104 ****
if (! v->ignore)
count = REG_IV_CLASS (ivs, REGNO (v->src_reg))->biv_count;
! splittable_regs_updates[REGNO (v->new_reg)] = count;
}
result++;
--- 3101,3107 ----
if (! v->ignore)
count = REG_IV_CLASS (ivs, REGNO (v->src_reg))->biv_count;
! splittable_regs_updates[reg_or_subregno (v->new_reg)] = count;
}
result++;
*************** loop_iterations (loop)
*** 3997,4008 ****
}
return 0;
}
- else if (comparison_code == EQ)
- {
- if (loop_dump_stream)
- fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n");
- return 0;
- }
else if (GET_CODE (final_value) != CONST_INT)
{
if (loop_dump_stream)
--- 4000,4005 ----
*************** loop_iterations (loop)
*** 4014,4019 ****
--- 4011,4053 ----
}
return 0;
}
+ else if (comparison_code == EQ)
+ {
+ rtx inc_once;
+
+ if (loop_dump_stream)
+ fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n");
+
+ inc_once = gen_int_mode (INTVAL (initial_value) + INTVAL (increment),
+ GET_MODE (iteration_var));
+
+ if (inc_once == final_value)
+ {
+ /* The iterator value once through the loop is equal to the
+ comparision value. Either we have an infinite loop, or
+ we'll loop twice. */
+ if (increment == const0_rtx)
+ return 0;
+ loop_info->n_iterations = 2;
+ }
+ else
+ loop_info->n_iterations = 1;
+
+ if (GET_CODE (loop_info->initial_value) == CONST_INT)
+ loop_info->final_value
+ = gen_int_mode ((INTVAL (loop_info->initial_value)
+ + loop_info->n_iterations * INTVAL (increment)),
+ GET_MODE (iteration_var));
+ else
+ loop_info->final_value
+ = plus_constant (loop_info->initial_value,
+ loop_info->n_iterations * INTVAL (increment));
+ loop_info->final_equiv_value
+ = gen_int_mode ((INTVAL (initial_value)
+ + loop_info->n_iterations * INTVAL (increment)),
+ GET_MODE (iteration_var));
+ return loop_info->n_iterations;
+ }
/* Final_larger is 1 if final larger, 0 if they are equal, otherwise -1. */
if (unsigned_p)
diff -Nrc3pad gcc-3.2/gcc/varasm.c gcc-3.2.1/gcc/varasm.c
*** gcc-3.2/gcc/varasm.c Mon Jun 10 21:44:41 2002
--- gcc-3.2.1/gcc/varasm.c Wed Oct 30 19:20:18 2002
*************** asm_output_aligned_bss (file, decl, name
*** 535,541 ****
const char *name;
int size, align;
{
- ASM_GLOBALIZE_LABEL (file, name);
bss_section ();
ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
#ifdef ASM_DECLARE_OBJECT_NAME
--- 535,540 ----
*************** assemble_start_function (decl, fnname)
*** 1194,1199 ****
--- 1193,1200 ----
/* Tell assembler to move to target machine's alignment for functions. */
align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
+ if (align < force_align_functions_log)
+ align = force_align_functions_log;
if (align > 0)
{
ASM_OUTPUT_ALIGN (asm_out_file, align);
diff -Nrc3pad gcc-3.2/gcc/version.c gcc-3.2.1/gcc/version.c
*** gcc-3.2/gcc/version.c Wed Aug 14 09:01:17 2002
--- gcc-3.2.1/gcc/version.c Tue Nov 19 08:04:31 2002
***************
*** 1,4 ****
#include "ansidecl.h"
#include "version.h"
! const char *const version_string = "3.2";
--- 1,4 ----
#include "ansidecl.h"
#include "version.h"
! const char *const version_string = "3.2.1";
diff -Nrc3pad gcc-3.2/gnats.html gcc-3.2.1/gnats.html
*** gcc-3.2/gnats.html Wed Aug 14 09:31:13 2002
--- gcc-3.2.1/gnats.html Tue Nov 19 18:11:48 2002
***************
*** 4,30 ****
Submitting Bug Reports using GNATS
! gccbug and gnatsweb
! GNATS is the GNU
! bug tracking system, and it is now used to track GCC bug reports, as
! well. Before submitting a bug report, please read the general instructions.
! The preferred way of submitting a bug report is by means of the gccbug
! program that is automatically installed with current versions of GCC
! and submits the bug report by e-mail.
!
! If this is not possible, please use the gnatsweb
! interface. Make sure you include an e-mail address, so we can inform
you when the status of your report changes.
! Both techniques use the same bug database.
! Filling out a report
The bug report form provides a number of fields; you'll need to
fill-out most of those (as indicated below) to provide a complete
--- 4,30 ----
Submitting Bug Reports using GNATS
+ Submitting Bug Reports using GNATS
+
! gnatsweb and gccbug
! GNATS, the GNU bug tracking system, is used to track GCC bug reports.
! Before submitting a bug report, please read the general instructions.
! The preferred way to submit a bug report is by means of the
! gnatsweb
! interface. Make sure you include an e-mail address, so we can inform
you when the status of your report changes.
! Another way is to use the gccbug program that is
! automatically installed with current versions of GCC, which submits the bug
! report by e-mail.
+ Both techniques use the same GNATS bug database.
! Filling out a report
The bug report form provides a number of fields; you'll need to
fill-out most of those (as indicated below) to provide a complete
diff -Nrc3pad gcc-3.2/include/ChangeLog gcc-3.2.1/include/ChangeLog
*** gcc-3.2/include/ChangeLog Wed Aug 14 09:00:39 2002
--- gcc-3.2.1/include/ChangeLog Tue Nov 19 17:49:31 2002
***************
*** 1,3 ****
--- 1,20 ----
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-18 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-03 Roger Sayle
+ DJ Delorie
+
+ * getopt.h: Avoid prototyping getopt with no arguments in C++.
+
2002-08-14 Release Manager
* GCC 3.2 Released.
diff -Nrc3pad gcc-3.2/include/getopt.h gcc-3.2.1/include/getopt.h
*** gcc-3.2/include/getopt.h Wed Mar 14 19:44:38 2001
--- gcc-3.2.1/include/getopt.h Sun Nov 3 23:45:49 2002
*************** struct option
*** 111,117 ****
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
! # if !defined (HAVE_DECL_GETOPT)
extern int getopt ();
# endif
#endif /* __GNU_LIBRARY__ */
--- 111,117 ----
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
! # if !defined (HAVE_DECL_GETOPT) && !defined (__cplusplus)
extern int getopt ();
# endif
#endif /* __GNU_LIBRARY__ */
diff -Nrc3pad gcc-3.2/libiberty/ChangeLog gcc-3.2.1/libiberty/ChangeLog
*** gcc-3.2/libiberty/ChangeLog Wed Aug 14 09:00:49 2002
--- gcc-3.2.1/libiberty/ChangeLog Tue Nov 19 17:49:53 2002
***************
*** 1,3 ****
--- 1,19 ----
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-18 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-10-07 Kaveh R. Ghazi
+
+ * Makefile.in (all): Fix multilib parallel build.
+
2002-08-14 Release Manager
* GCC 3.2 Released.
diff -Nrc3pad gcc-3.2/libiberty/Makefile.in gcc-3.2.1/libiberty/Makefile.in
*** gcc-3.2/libiberty/Makefile.in Tue Jan 22 20:03:29 2002
--- gcc-3.2.1/libiberty/Makefile.in Mon Oct 7 04:37:03 2002
*************** SUBDIRS = testsuite
*** 99,105 ****
# FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
! @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
.PHONY: check installcheck
check: check-subdir
--- 99,105 ----
# FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
! @: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
.PHONY: check installcheck
check: check-subdir
diff -Nrc3pad gcc-3.2/maintainer-scripts/ChangeLog gcc-3.2.1/maintainer-scripts/ChangeLog
*** gcc-3.2/maintainer-scripts/ChangeLog Wed Aug 14 09:01:12 2002
--- gcc-3.2.1/maintainer-scripts/ChangeLog Tue Nov 19 17:50:16 2002
***************
*** 1,3 ****
--- 1,15 ----
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-19 Release Manager
+
+ * GCC 3.2.1 Released.
+
+ 2002-11-18 Release Manager
+
+ * GCC 3.2.1 Released.
+
2002-08-14 Release Manager
* GCC 3.2 Released.