diff -Nrcpad gcc-3.3.5/.brik gcc-3.3.6/.brik *** gcc-3.3.5/.brik 2004-09-30 18:14:41.000000000 +0000 --- gcc-3.3.6/.brik 2005-05-03 13:23:37.000000000 +0000 *************** *** 14,20 **** 2411687152b ./boehm-gc/BCC_MAKEFILE 394605993b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs ! 577226963b ./boehm-gc/ChangeLog 2542310219b ./boehm-gc/checksums.c 1272640704b ./boehm-gc/config.guess 4182969326b ./boehm-gc/config.sub --- 14,20 ---- 2411687152b ./boehm-gc/BCC_MAKEFILE 394605993b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs ! 3657493513b ./boehm-gc/ChangeLog 2542310219b ./boehm-gc/checksums.c 1272640704b ./boehm-gc/config.guess 4182969326b ./boehm-gc/config.sub *************** *** 94,100 **** 3792791209b ./boehm-gc/include/new_gc_alloc.h 1547838704b ./boehm-gc/include/private/cord_pos.h 902196938b ./boehm-gc/include/private/dbg_mlc.h ! 2015574914b ./boehm-gc/include/private/gcconfig.h 1215170430b ./boehm-gc/include/private/gc_hdrs.h 3411375301b ./boehm-gc/include/private/gc_locks.h 583510369b ./boehm-gc/include/private/gc_pmark.h --- 94,100 ---- 3792791209b ./boehm-gc/include/new_gc_alloc.h 1547838704b ./boehm-gc/include/private/cord_pos.h 902196938b ./boehm-gc/include/private/dbg_mlc.h ! 1533190376b ./boehm-gc/include/private/gcconfig.h 1215170430b ./boehm-gc/include/private/gc_hdrs.h 3411375301b ./boehm-gc/include/private/gc_locks.h 583510369b ./boehm-gc/include/private/gc_pmark.h *************** *** 134,140 **** 3607948475b ./boehm-gc/NT_THREADS_MAKEFILE 1361724709b ./boehm-gc/obj_map.c 3289014202b ./boehm-gc/OS2_MAKEFILE ! 2236606828b ./boehm-gc/os_dep.c 600864111b ./boehm-gc/pc_excludes 735852084b ./boehm-gc/pcr_interface.c 2438519321b ./boehm-gc/PCR-Makefile --- 134,140 ---- 3607948475b ./boehm-gc/NT_THREADS_MAKEFILE 1361724709b ./boehm-gc/obj_map.c 3289014202b ./boehm-gc/OS2_MAKEFILE ! 1650057833b ./boehm-gc/os_dep.c 600864111b ./boehm-gc/pc_excludes 735852084b ./boehm-gc/pcr_interface.c 2438519321b ./boehm-gc/PCR-Makefile *************** *** 162,172 **** 332085760b ./boehm-gc/version.h 205379550b ./boehm-gc/WCC_MAKEFILE 62682092b ./boehm-gc/win32_threads.c ! 2067166407b ./BUGS ! 4058550636b ./bugs.html ! 351732429b ./ChangeLog 430854799b ./config/acinclude.m4 ! 867933103b ./config/ChangeLog 3794184949b ./config.guess 2016379063b ./config.if 636889995b ./config/mh-a68bsd --- 162,172 ---- 332085760b ./boehm-gc/version.h 205379550b ./boehm-gc/WCC_MAKEFILE 62682092b ./boehm-gc/win32_threads.c ! 4258616351b ./BUGS ! 3053090177b ./bugs.html ! 2079774539b ./ChangeLog 430854799b ./config/acinclude.m4 ! 1661631816b ./config/ChangeLog 3794184949b ./config.guess 2016379063b ./config.if 636889995b ./config/mh-a68bsd *************** *** 220,226 **** 1002720878b ./configure 4078400456b ./configure.in 1948950130b ./contrib/analyze_brprob ! 3894601490b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c --- 220,226 ---- 1002720878b ./configure 4078400456b ./configure.in 1948950130b ./contrib/analyze_brprob ! 2145867046b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c *************** *** 233,239 **** 3683285493b ./contrib/newcvsroot 3406928738b ./contrib/paranoia.cc 3661855799b ./contrib/regression/btest-gcc.sh ! 188827307b ./contrib/regression/ChangeLog 1435553453b ./contrib/regression/objs-gcc.sh 1757898889b ./contrib/regression/README 3103378580b ./contrib/regression/site.exp --- 233,239 ---- 3683285493b ./contrib/newcvsroot 3406928738b ./contrib/paranoia.cc 3661855799b ./contrib/regression/btest-gcc.sh ! 3685542240b ./contrib/regression/ChangeLog 1435553453b ./contrib/regression/objs-gcc.sh 1757898889b ./contrib/regression/README 3103378580b ./contrib/regression/site.exp *************** *** 249,255 **** 3707094886b ./fastjar/acinclude.m4 1841193068b ./fastjar/aclocal.m4 1005262133b ./fastjar/AUTHORS ! 3309079359b ./fastjar/ChangeLog 1745615150b ./fastjar/CHANGES 2132087313b ./fastjar/compress.c 1156006004b ./fastjar/compress.h --- 249,255 ---- 3707094886b ./fastjar/acinclude.m4 1841193068b ./fastjar/aclocal.m4 1005262133b ./fastjar/AUTHORS ! 120090275b ./fastjar/ChangeLog 1745615150b ./fastjar/CHANGES 2132087313b ./fastjar/compress.c 1156006004b ./fastjar/compress.h *************** *** 260,272 **** 3707811223b ./fastjar/.cvsignore 2553867110b ./fastjar/dostime.c 446939748b ./fastjar/dostime.h ! 2431741161b ./fastjar/fastjar.info 3589129523b ./fastjar/fastjar.texi ! 621831981b ./fastjar/grepjar.1 2770615802b ./fastjar/INSTALL 2331671736b ./fastjar/install-defs.sh.in 1178077958b ./fastjar/install-sh ! 1197046835b ./fastjar/jar.1 2281221680b ./fastjar/jargrep.c 4062871816b ./fastjar/jargrep.h 2905933595b ./fastjar/jartool.c --- 260,272 ---- 3707811223b ./fastjar/.cvsignore 2553867110b ./fastjar/dostime.c 446939748b ./fastjar/dostime.h ! 2070173811b ./fastjar/fastjar.info 3589129523b ./fastjar/fastjar.texi ! 4244037912b ./fastjar/grepjar.1 2770615802b ./fastjar/INSTALL 2331671736b ./fastjar/install-defs.sh.in 1178077958b ./fastjar/install-sh ! 718462203b ./fastjar/jar.1 2281221680b ./fastjar/jargrep.c 4062871816b ./fastjar/jargrep.h 2905933595b ./fastjar/jartool.c *************** *** 284,290 **** 2215240433b ./gcc/ABOUT-GCC-NLS 1413896246b ./gcc/ABOUT-NLS 3729933059b ./gcc/acconfig.h ! 4067360570b ./gcc/aclocal.m4 3476755371b ./gcc/ada/1aexcept.adb 3022880533b ./gcc/ada/1aexcept.ads 2251433832b ./gcc/ada/1ic.ads --- 284,290 ---- 2215240433b ./gcc/ABOUT-GCC-NLS 1413896246b ./gcc/ABOUT-NLS 3729933059b ./gcc/acconfig.h ! 459838291b ./gcc/aclocal.m4 3476755371b ./gcc/ada/1aexcept.adb 3022880533b ./gcc/ada/1aexcept.ads 2251433832b ./gcc/ada/1ic.ads *************** *** 725,731 **** 819907824b ./gcc/ada/casing.adb 383971693b ./gcc/ada/casing.ads 2658802005b ./gcc/ada/ceinfo.adb ! 3697807245b ./gcc/ada/ChangeLog 2766796861b ./gcc/ada/checks.adb 2020343191b ./gcc/ada/checks.ads 1422160412b ./gcc/ada/cio.c --- 725,731 ---- 819907824b ./gcc/ada/casing.adb 383971693b ./gcc/ada/casing.ads 2658802005b ./gcc/ada/ceinfo.adb ! 627556892b ./gcc/ada/ChangeLog 2766796861b ./gcc/ada/checks.adb 2020343191b ./gcc/ada/checks.ads 1422160412b ./gcc/ada/cio.c *************** *** 1671,1677 **** 3573112600b ./gcc/ada/xsinfo.adb 4190686960b ./gcc/ada/xsnames.adb 511048883b ./gcc/ada/xtreeprs.adb ! 497115330b ./gcc/alias.c 3329204760b ./gcc/attribs.c 661204297b ./gcc/basic-block.h 3868878276b ./gcc/bb-reorder.c --- 1671,1677 ---- 3573112600b ./gcc/ada/xsinfo.adb 4190686960b ./gcc/ada/xsnames.adb 511048883b ./gcc/ada/xtreeprs.adb ! 863405714b ./gcc/alias.c 3329204760b ./gcc/attribs.c 661204297b ./gcc/basic-block.h 3868878276b ./gcc/bb-reorder.c *************** *** 1701,1707 **** 3649311558b ./gcc/cfgloop.c 1528447670b ./gcc/cfgrtl.c 1308520655b ./gcc/c-format.c ! 4175967886b ./gcc/ChangeLog 4112479902b ./gcc/ChangeLog.0 3216066841b ./gcc/ChangeLog.1 2323556130b ./gcc/ChangeLog.2 --- 1701,1707 ---- 3649311558b ./gcc/cfgloop.c 1528447670b ./gcc/cfgrtl.c 1308520655b ./gcc/c-format.c ! 2995661085b ./gcc/ChangeLog 4112479902b ./gcc/ChangeLog.0 3216066841b ./gcc/ChangeLog.1 2323556130b ./gcc/ChangeLog.2 *************** *** 1716,1728 **** 3974543740b ./gcc/c-objc-common.c 879130284b ./gcc/collect2.c 1843868705b ./gcc/collect2.h ! 3282324606b ./gcc/combine.c 4122382037b ./gcc/conditions.h 3915788506b ./gcc/config/alpha/alpha32.h ! 350504332b ./gcc/config/alpha/alpha.c ! 1652632776b ./gcc/config/alpha/alpha.h 1081521208b ./gcc/config/alpha/alpha-interix.h ! 2260956100b ./gcc/config/alpha/alpha.md 1148890194b ./gcc/config/alpha/alpha-protos.h 1407988137b ./gcc/config/alpha/crtfastmath.c 1689355033b ./gcc/config/alpha/elf.h --- 1716,1728 ---- 3974543740b ./gcc/c-objc-common.c 879130284b ./gcc/collect2.c 1843868705b ./gcc/collect2.h ! 4160878358b ./gcc/combine.c 4122382037b ./gcc/conditions.h 3915788506b ./gcc/config/alpha/alpha32.h ! 3754366833b ./gcc/config/alpha/alpha.c ! 387059406b ./gcc/config/alpha/alpha.h 1081521208b ./gcc/config/alpha/alpha-interix.h ! 3449252181b ./gcc/config/alpha/alpha.md 1148890194b ./gcc/config/alpha/alpha-protos.h 1407988137b ./gcc/config/alpha/crtfastmath.c 1689355033b ./gcc/config/alpha/elf.h *************** *** 1738,1744 **** 3083238444b ./gcc/config/alpha/openbsd.h 2917376975b ./gcc/config/alpha/osf5.h 2934606255b ./gcc/config/alpha/osf.h ! 1190572001b ./gcc/config/alpha/qrnnd.asm 2672344824b ./gcc/config/alpha/t-alpha 2436402688b ./gcc/config/alpha/t-crtfm 3084092578b ./gcc/config/alpha/t-ieee --- 1738,1744 ---- 3083238444b ./gcc/config/alpha/openbsd.h 2917376975b ./gcc/config/alpha/osf5.h 2934606255b ./gcc/config/alpha/osf.h ! 1352954939b ./gcc/config/alpha/qrnnd.asm 2672344824b ./gcc/config/alpha/t-alpha 2436402688b ./gcc/config/alpha/t-crtfm 3084092578b ./gcc/config/alpha/t-ieee *************** *** 1886,1892 **** 3920011053b ./gcc/config/freebsd6.h 3873089153b ./gcc/config/freebsd.h 3532526787b ./gcc/config/freebsd-nthr.h ! 3606513384b ./gcc/config/freebsd-spec.h 927977764b ./gcc/config/frv/cmovd.c 1433509166b ./gcc/config/frv/cmovh.c 2671877583b ./gcc/config/frv/cmovw.c --- 1886,1892 ---- 3920011053b ./gcc/config/freebsd6.h 3873089153b ./gcc/config/freebsd.h 3532526787b ./gcc/config/freebsd-nthr.h ! 1896289970b ./gcc/config/freebsd-spec.h 927977764b ./gcc/config/frv/cmovd.c 1433509166b ./gcc/config/frv/cmovh.c 2671877583b ./gcc/config/frv/cmovw.c *************** *** 1955,1969 **** 240648641b ./gcc/config/i386/gstabs.h 798942156b ./gcc/config/i386/gthr-win32.c 3155216183b ./gcc/config/i386/i386-aout.h ! 1321068495b ./gcc/config/i386/i386.c 2124176398b ./gcc/config/i386/i386-coff.h 3652974168b ./gcc/config/i386/i386elf.h ! 3999975198b ./gcc/config/i386/i386.h 1579586996b ./gcc/config/i386/i386-interix3.h 1295044612b ./gcc/config/i386/i386-interix.h ! 1308483456b ./gcc/config/i386/i386.md 1349730319b ./gcc/config/i386/i386-modes.def ! 1963183629b ./gcc/config/i386/i386-protos.h 3010218896b ./gcc/config/i386/k6.md 877642037b ./gcc/config/i386/libgcc-x86_64-glibc.ver 1143030283b ./gcc/config/i386/linux64.h --- 1955,1969 ---- 240648641b ./gcc/config/i386/gstabs.h 798942156b ./gcc/config/i386/gthr-win32.c 3155216183b ./gcc/config/i386/i386-aout.h ! 4120456540b ./gcc/config/i386/i386.c 2124176398b ./gcc/config/i386/i386-coff.h 3652974168b ./gcc/config/i386/i386elf.h ! 2274405572b ./gcc/config/i386/i386.h 1579586996b ./gcc/config/i386/i386-interix3.h 1295044612b ./gcc/config/i386/i386-interix.h ! 3949450264b ./gcc/config/i386/i386.md 1349730319b ./gcc/config/i386/i386-modes.def ! 4273088724b ./gcc/config/i386/i386-protos.h 3010218896b ./gcc/config/i386/k6.md 877642037b ./gcc/config/i386/libgcc-x86_64-glibc.ver 1143030283b ./gcc/config/i386/linux64.h *************** *** 2054,2060 **** 2020318486b ./gcc/config/ia64/freebsd.h 89320936b ./gcc/config/ia64/hpux.h 3568056609b ./gcc/config/ia64/hpux_longdouble.h ! 1967841566b ./gcc/config/ia64/ia64.c 1964471896b ./gcc/config/ia64/ia64-c.c 1078623376b ./gcc/config/ia64/ia64.h 2966325857b ./gcc/config/ia64/ia64intrin.h --- 2054,2060 ---- 2020318486b ./gcc/config/ia64/freebsd.h 89320936b ./gcc/config/ia64/hpux.h 3568056609b ./gcc/config/ia64/hpux_longdouble.h ! 1267016296b ./gcc/config/ia64/ia64.c 1964471896b ./gcc/config/ia64/ia64-c.c 1078623376b ./gcc/config/ia64/ia64.h 2966325857b ./gcc/config/ia64/ia64intrin.h *************** *** 2071,2077 **** 1051208108b ./gcc/config/ia64/t-hpux 308156643b ./gcc/config/ia64/t-ia64 2759923269b ./gcc/config/ia64/unwind-aix.c ! 2016093184b ./gcc/config/ia64/unwind-ia64.c 2355075302b ./gcc/config/ia64/unwind-ia64.h 1003831241b ./gcc/config.in 3221870490b ./gcc/config/interix3.h --- 2071,2077 ---- 1051208108b ./gcc/config/ia64/t-hpux 308156643b ./gcc/config/ia64/t-ia64 2759923269b ./gcc/config/ia64/unwind-aix.c ! 1193523677b ./gcc/config/ia64/unwind-ia64.c 2355075302b ./gcc/config/ia64/unwind-ia64.h 1003831241b ./gcc/config.in 3221870490b ./gcc/config/interix3.h *************** *** 2102,2108 **** 2108112324b ./gcc/config/m68hc11/m68hc11.md 3203494610b ./gcc/config/m68hc11/m68hc11-protos.h 900567272b ./gcc/config/m68hc11/m68hc12.h ! 414967778b ./gcc/config/m68hc11/t-m68hc11-gas 4152566641b ./gcc/config/m68k/3b1g.h 950165799b ./gcc/config/m68k/3b1.h 3699861513b ./gcc/config/m68k/amix.h --- 2102,2108 ---- 2108112324b ./gcc/config/m68hc11/m68hc11.md 3203494610b ./gcc/config/m68hc11/m68hc11-protos.h 900567272b ./gcc/config/m68hc11/m68hc12.h ! 623482719b ./gcc/config/m68hc11/t-m68hc11-gas 4152566641b ./gcc/config/m68k/3b1g.h 950165799b ./gcc/config/m68k/3b1.h 3699861513b ./gcc/config/m68k/amix.h *************** *** 2217,2226 **** 3658812670b ./gcc/config/mips/irix6-libc-compat.c 1675872610b ./gcc/config/mips/linux.h 2024693888b ./gcc/config/mips/mips16.S ! 3380342822b ./gcc/config/mips/mips.c ! 2942767704b ./gcc/config/mips/mips.h ! 3890715545b ./gcc/config/mips/mips.md ! 4197939422b ./gcc/config/mips/mips-protos.h 405403345b ./gcc/config/mips/netbsd.h 391873849b ./gcc/config/mips/openbsd-be.h 3247383226b ./gcc/config/mips/openbsd.h --- 2217,2226 ---- 3658812670b ./gcc/config/mips/irix6-libc-compat.c 1675872610b ./gcc/config/mips/linux.h 2024693888b ./gcc/config/mips/mips16.S ! 4163709729b ./gcc/config/mips/mips.c ! 2578034508b ./gcc/config/mips/mips.h ! 2217723786b ./gcc/config/mips/mips.md ! 3166230154b ./gcc/config/mips/mips-protos.h 405403345b ./gcc/config/mips/netbsd.h 391873849b ./gcc/config/mips/openbsd-be.h 3247383226b ./gcc/config/mips/openbsd.h *************** *** 2287,2293 **** 454965220b ./gcc/config/pa/lib2funcs.asm 3163635737b ./gcc/config/pa/long_double.h 446221591b ./gcc/config/pa/milli64.S ! 2968109913b ./gcc/config/pa/pa32-linux.h 4077989132b ./gcc/config/pa/pa32-regs.h 1229145373b ./gcc/config/pa/pa-64.h 831299985b ./gcc/config/pa/pa64-hpux.h --- 2287,2293 ---- 454965220b ./gcc/config/pa/lib2funcs.asm 3163635737b ./gcc/config/pa/long_double.h 446221591b ./gcc/config/pa/milli64.S ! 1555675971b ./gcc/config/pa/pa32-linux.h 4077989132b ./gcc/config/pa/pa32-regs.h 1229145373b ./gcc/config/pa/pa-64.h 831299985b ./gcc/config/pa/pa64-hpux.h *************** *** 2303,2309 **** 3124002443b ./gcc/config/pa/pa-hpux9.h 605433968b ./gcc/config/pa/pa-hpux.h 469628573b ./gcc/config/pa/pa-linux.h ! 455291729b ./gcc/config/pa/pa.md 1508149926b ./gcc/config/pa/pa-modes.def 3618123809b ./gcc/config/pa/pa-oldas.h 2438052750b ./gcc/config/pa/pa-osf.h --- 2303,2309 ---- 3124002443b ./gcc/config/pa/pa-hpux9.h 605433968b ./gcc/config/pa/pa-hpux.h 469628573b ./gcc/config/pa/pa-linux.h ! 4044772020b ./gcc/config/pa/pa.md 1508149926b ./gcc/config/pa/pa-modes.def 3618123809b ./gcc/config/pa/pa-oldas.h 2438052750b ./gcc/config/pa/pa-osf.h *************** *** 2370,2379 **** 3596315410b ./gcc/config/rs6000/netbsd.h 1801910688b ./gcc/config/rs6000/ppc64-fp.c 1765497648b ./gcc/config/rs6000/ppc-asm.h ! 1041172543b ./gcc/config/rs6000/rs6000.c 1345436052b ./gcc/config/rs6000/rs6000-c.c 3955032986b ./gcc/config/rs6000/rs6000.h ! 395480338b ./gcc/config/rs6000/rs6000.md 3173719444b ./gcc/config/rs6000/rs6000-modes.def 528775605b ./gcc/config/rs6000/rs6000-protos.h 255651415b ./gcc/config/rs6000/rtems.h --- 2370,2379 ---- 3596315410b ./gcc/config/rs6000/netbsd.h 1801910688b ./gcc/config/rs6000/ppc64-fp.c 1765497648b ./gcc/config/rs6000/ppc-asm.h ! 841719810b ./gcc/config/rs6000/rs6000.c 1345436052b ./gcc/config/rs6000/rs6000-c.c 3955032986b ./gcc/config/rs6000/rs6000.h ! 2720464678b ./gcc/config/rs6000/rs6000.md 3173719444b ./gcc/config/rs6000/rs6000-modes.def 528775605b ./gcc/config/rs6000/rs6000-protos.h 255651415b ./gcc/config/rs6000/rtems.h *************** *** 2407,2413 **** 287768826b ./gcc/config/s390/linux.h 839045485b ./gcc/config/s390/s390.c 3430773218b ./gcc/config/s390/s390.h ! 3611037021b ./gcc/config/s390/s390.md 3010749633b ./gcc/config/s390/s390-modes.def 1579136093b ./gcc/config/s390/s390-protos.h 3998835120b ./gcc/config/s390/s390x.h --- 2407,2413 ---- 287768826b ./gcc/config/s390/linux.h 839045485b ./gcc/config/s390/s390.c 3430773218b ./gcc/config/s390/s390.h ! 3277180700b ./gcc/config/s390/s390.md 3010749633b ./gcc/config/s390/s390-modes.def 1579136093b ./gcc/config/s390/s390-protos.h 3998835120b ./gcc/config/s390/s390x.h *************** *** 2488,2497 **** 3549760155b ./gcc/config/sparc/sp64-elf.h 3128199560b ./gcc/config/sparc/sp86x-aout.h 632930923b ./gcc/config/sparc/sp86x-elf.h ! 3693004404b ./gcc/config/sparc/sparc.c 2309109580b ./gcc/config/sparc/sparc.h 113806067b ./gcc/config/sparc/sparclet.md ! 1063877605b ./gcc/config/sparc/sparc.md 5497380b ./gcc/config/sparc/sparc-modes.def 2791789262b ./gcc/config/sparc/sparc-protos.h 842964351b ./gcc/config/sparc/splet.h --- 2488,2497 ---- 3549760155b ./gcc/config/sparc/sp64-elf.h 3128199560b ./gcc/config/sparc/sp86x-aout.h 632930923b ./gcc/config/sparc/sp86x-elf.h ! 1636045042b ./gcc/config/sparc/sparc.c 2309109580b ./gcc/config/sparc/sparc.h 113806067b ./gcc/config/sparc/sparclet.md ! 108304672b ./gcc/config/sparc/sparc.md 5497380b ./gcc/config/sparc/sparc-modes.def 2791789262b ./gcc/config/sparc/sparc-protos.h 842964351b ./gcc/config/sparc/splet.h *************** *** 2502,2508 **** 2995591816b ./gcc/config/sparc/sysv4.h 2782836992b ./gcc/config/sparc/t-chorus-elf 2056024669b ./gcc/config/sparc/t-crtfm ! 3744055768b ./gcc/config/sparc/t-elf 1582758741b ./gcc/config/sparc/t-halos 4294967295b ./gcc/config/sparc/t-linux 2435625847b ./gcc/config/sparc/t-linux64 --- 2502,2508 ---- 2995591816b ./gcc/config/sparc/sysv4.h 2782836992b ./gcc/config/sparc/t-chorus-elf 2056024669b ./gcc/config/sparc/t-crtfm ! 1981233176b ./gcc/config/sparc/t-elf 1582758741b ./gcc/config/sparc/t-halos 4294967295b ./gcc/config/sparc/t-linux 2435625847b ./gcc/config/sparc/t-linux64 *************** *** 2553,2559 **** 321200235b ./gcc/config/t-svr4 937080303b ./gcc/config/udivmod.c 2590328114b ./gcc/config/udivmodsi4.c ! 2503935890b ./gcc/configure 2239237249b ./gcc/configure.frag 3562026117b ./gcc/configure.in 1401546799b ./gcc/config/usegas.h --- 2553,2559 ---- 321200235b ./gcc/config/t-svr4 937080303b ./gcc/config/udivmod.c 2590328114b ./gcc/config/udivmodsi4.c ! 1423742411b ./gcc/configure 2239237249b ./gcc/configure.frag 3562026117b ./gcc/configure.in 1401546799b ./gcc/config/usegas.h *************** *** 2572,2580 **** 3271953013b ./gcc/config/vax/openbsd1.h 3310399842b ./gcc/config/vax/openbsd.h 958978039b ./gcc/config/vax/ultrix.h ! 717787243b ./gcc/config/vax/vax.c ! 1777867058b ./gcc/config/vax/vax.h ! 1389545853b ./gcc/config/vax/vax.md 826363414b ./gcc/config/vax/vax-protos.h 1161511202b ./gcc/config/vax/vaxv.h 2954412003b ./gcc/config/vax/vms.h --- 2572,2580 ---- 3271953013b ./gcc/config/vax/openbsd1.h 3310399842b ./gcc/config/vax/openbsd.h 958978039b ./gcc/config/vax/ultrix.h ! 3216552682b ./gcc/config/vax/vax.c ! 3275068014b ./gcc/config/vax/vax.h ! 1109389259b ./gcc/config/vax/vax.md 826363414b ./gcc/config/vax/vax-protos.h 1161511202b ./gcc/config/vax/vaxv.h 2954412003b ./gcc/config/vax/vms.h *************** *** 2596,2608 **** 327769972b ./gcc/c-opts.c 2171125041b ./gcc/COPYING 508743035b ./gcc/COPYING.LIB ! 3373355995b ./gcc/c-parse.c ! 2637246862b ./gcc/c-parse.in ! 1656602684b ./gcc/c-parse.y ! 3324639670b ./gcc/cp/call.c 2726184849b ./gcc/cp/cfns.gperf 3403558692b ./gcc/cp/cfns.h ! 4077889151b ./gcc/cp/ChangeLog 190176486b ./gcc/cp/ChangeLog.1 97583749b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs --- 2596,2608 ---- 327769972b ./gcc/c-opts.c 2171125041b ./gcc/COPYING 508743035b ./gcc/COPYING.LIB ! 1522414514b ./gcc/c-parse.c ! 2202932527b ./gcc/c-parse.in ! 2977391480b ./gcc/c-parse.y ! 2960661507b ./gcc/cp/call.c 2726184849b ./gcc/cp/cfns.gperf 3403558692b ./gcc/cp/cfns.h ! 2028259635b ./gcc/cp/ChangeLog 190176486b ./gcc/cp/ChangeLog.1 97583749b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs *************** *** 2612,2629 **** 2277233898b ./gcc/cp/cp-tree.def 222408911b ./gcc/cp/cp-tree.h 1230086821b ./gcc/cp/.cvsignore ! 3579835497b ./gcc/cp/cvt.c 368933091b ./gcc/cp/decl2.c 3607783248b ./gcc/cp/decl.c 1385119476b ./gcc/cp/decl.h 757230858b ./gcc/cp/dump.c ! 961952465b ./gcc/cp/error.c 3855464245b ./gcc/cp/except.c 1201332681b ./gcc/cp/expr.c 1270190491b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 729602332b ./gcc/cp/g++spec.c ! 689025136b ./gcc/cp/init.c 1486125690b ./gcc/cp/lang-options.h 2659645047b ./gcc/cp/lang-specs.h 2140565483b ./gcc/cp/lex.c --- 2612,2629 ---- 2277233898b ./gcc/cp/cp-tree.def 222408911b ./gcc/cp/cp-tree.h 1230086821b ./gcc/cp/.cvsignore ! 3699398869b ./gcc/cp/cvt.c 368933091b ./gcc/cp/decl2.c 3607783248b ./gcc/cp/decl.c 1385119476b ./gcc/cp/decl.h 757230858b ./gcc/cp/dump.c ! 3914362997b ./gcc/cp/error.c 3855464245b ./gcc/cp/except.c 1201332681b ./gcc/cp/expr.c 1270190491b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 729602332b ./gcc/cp/g++spec.c ! 949379886b ./gcc/cp/init.c 1486125690b ./gcc/cp/lang-options.h 2659645047b ./gcc/cp/lang-specs.h 2140565483b ./gcc/cp/lex.c *************** *** 2634,2641 **** 1213810021b ./gcc/cp/NEWS 3193855424b ./gcc/cp/operators.def 1390979693b ./gcc/cp/optimize.c ! 1035087867b ./gcc/cp/parse.c ! 2922840037b ./gcc/cp/parse.h 2206367944b ./gcc/cp/parse.y 3576138321b ./gcc/cppdefault.c 438802138b ./gcc/cppdefault.h --- 2634,2641 ---- 1213810021b ./gcc/cp/NEWS 3193855424b ./gcc/cp/operators.def 1390979693b ./gcc/cp/optimize.c ! 3357396544b ./gcc/cp/parse.c ! 599383002b ./gcc/cp/parse.h 2206367944b ./gcc/cp/parse.y 3576138321b ./gcc/cppdefault.c 438802138b ./gcc/cppdefault.h *************** *** 2693,2702 **** 3399730921b ./gcc/doc/configterms.texi 3745635095b ./gcc/doc/contrib.texi 2272556046b ./gcc/doc/contribute.texi ! 2633029809b ./gcc/doc/cpp.1 4226490983b ./gcc/doc/cppenv.texi ! 2172987202b ./gcc/doc/cpp.info ! 1685544580b ./gcc/doc/cppinternals.info 1958814700b ./gcc/doc/cppinternals.texi 1294675045b ./gcc/doc/cppopts.texi 2327079292b ./gcc/doc/cpp.texi --- 2693,2702 ---- 3399730921b ./gcc/doc/configterms.texi 3745635095b ./gcc/doc/contrib.texi 2272556046b ./gcc/doc/contribute.texi ! 1092525859b ./gcc/doc/cpp.1 4226490983b ./gcc/doc/cppenv.texi ! 2874393377b ./gcc/doc/cpp.info ! 4184483725b ./gcc/doc/cppinternals.info 1958814700b ./gcc/doc/cppinternals.texi 1294675045b ./gcc/doc/cppopts.texi 2327079292b ./gcc/doc/cpp.texi *************** *** 2705,2735 **** 1616293727b ./gcc/doc/extend.texi 803819253b ./gcc/doc/fragments.texi 2401477723b ./gcc/doc/frontends.texi ! 2801128091b ./gcc/doc/fsf-funding.7 ! 1933393558b ./gcc/doc/gcc.1 ! 4159744174b ./gcc/doc/gcc.info ! 1656924264b ./gcc/doc/gccinstall.info ! 346403535b ./gcc/doc/gccint.info 141162277b ./gcc/doc/gccint.texi 1998340815b ./gcc/doc/gcc.texi ! 1493293706b ./gcc/doc/gcov.1 799484262b ./gcc/doc/gcov.texi ! 1089079324b ./gcc/doc/gfdl.7 4217859569b ./gcc/doc/gnu.texi ! 1723075844b ./gcc/doc/gpl.7 2598049702b ./gcc/doc/gty.texi 2874371193b ./gcc/doc/headerdirs.texi 1425599017b ./gcc/doc/hostconfig.texi 3288537183b ./gcc/doc/include/fdl.texi 2048065465b ./gcc/doc/include/funding.texi ! 3812417904b ./gcc/doc/include/gcc-common.texi 3092587370b ./gcc/doc/include/gpl.texi 124394628b ./gcc/doc/include/texinfo.tex 3427634226b ./gcc/doc/install-old.texi ! 2723098307b ./gcc/doc/install.texi 1451529977b ./gcc/doc/install.texi2html 3000332536b ./gcc/doc/interface.texi ! 620278634b ./gcc/doc/invoke.texi 1327866291b ./gcc/doc/languages.texi 904420347b ./gcc/doc/makefile.texi 347913363b ./gcc/doc/md.texi --- 2705,2735 ---- 1616293727b ./gcc/doc/extend.texi 803819253b ./gcc/doc/fragments.texi 2401477723b ./gcc/doc/frontends.texi ! 4141745811b ./gcc/doc/fsf-funding.7 ! 2006277882b ./gcc/doc/gcc.1 ! 775722159b ./gcc/doc/gcc.info ! 2432043176b ./gcc/doc/gccinstall.info ! 2628780477b ./gcc/doc/gccint.info 141162277b ./gcc/doc/gccint.texi 1998340815b ./gcc/doc/gcc.texi ! 1957486456b ./gcc/doc/gcov.1 799484262b ./gcc/doc/gcov.texi ! 2194057233b ./gcc/doc/gfdl.7 4217859569b ./gcc/doc/gnu.texi ! 3819417761b ./gcc/doc/gpl.7 2598049702b ./gcc/doc/gty.texi 2874371193b ./gcc/doc/headerdirs.texi 1425599017b ./gcc/doc/hostconfig.texi 3288537183b ./gcc/doc/include/fdl.texi 2048065465b ./gcc/doc/include/funding.texi ! 666262832b ./gcc/doc/include/gcc-common.texi 3092587370b ./gcc/doc/include/gpl.texi 124394628b ./gcc/doc/include/texinfo.tex 3427634226b ./gcc/doc/install-old.texi ! 3438655477b ./gcc/doc/install.texi 1451529977b ./gcc/doc/install.texi2html 3000332536b ./gcc/doc/interface.texi ! 3494563703b ./gcc/doc/invoke.texi 1327866291b ./gcc/doc/languages.texi 904420347b ./gcc/doc/makefile.texi 347913363b ./gcc/doc/md.texi *************** *** 2740,2746 **** 1759580304b ./gcc/doc/service.texi 3166516007b ./gcc/doc/sourcebuild.texi 3565606796b ./gcc/doc/standards.texi ! 1055177840b ./gcc/doc/tm.texi 2535263828b ./gcc/doc/trouble.texi 3258612192b ./gcc/doloop.c 1146162220b ./gcc/dominance.c --- 2740,2746 ---- 1759580304b ./gcc/doc/service.texi 3166516007b ./gcc/doc/sourcebuild.texi 3565606796b ./gcc/doc/standards.texi ! 889955594b ./gcc/doc/tm.texi 2535263828b ./gcc/doc/trouble.texi 3258612192b ./gcc/doloop.c 1146162220b ./gcc/dominance.c *************** *** 2753,2759 **** 3517290530b ./gcc/dwarf2out.h 109276966b ./gcc/dwarf.h 3351836985b ./gcc/dwarfout.c ! 708876009b ./gcc/emit-rtl.c 2953931641b ./gcc/errors.c 3556563741b ./gcc/errors.h 100350032b ./gcc/et-forest.c --- 2753,2759 ---- 3517290530b ./gcc/dwarf2out.h 109276966b ./gcc/dwarf.h 3351836985b ./gcc/dwarfout.c ! 434843805b ./gcc/emit-rtl.c 2953931641b ./gcc/errors.c 3556563741b ./gcc/errors.h 100350032b ./gcc/et-forest.c *************** *** 2761,2768 **** 901121420b ./gcc/except.c 3819344801b ./gcc/except.h 490409806b ./gcc/explow.c ! 2338822673b ./gcc/expmed.c ! 2165326436b ./gcc/expr.c 1872989667b ./gcc/expr.h 1934744031b ./gcc/f/ansify.c 1172411862b ./gcc/f/bad.c --- 2761,2768 ---- 901121420b ./gcc/except.c 3819344801b ./gcc/except.h 490409806b ./gcc/explow.c ! 3334681589b ./gcc/expmed.c ! 4150336309b ./gcc/expr.c 1872989667b ./gcc/expr.h 1934744031b ./gcc/f/ansify.c 1172411862b ./gcc/f/bad.c *************** *** 2773,2782 **** 3553474552b ./gcc/f/bld.c 3286267604b ./gcc/f/bld.h 2128697889b ./gcc/f/bld-op.def ! 4176343242b ./gcc/f/BUGS 235013049b ./gcc/f/bugs0.texi 3922562500b ./gcc/f/bugs.texi ! 998585438b ./gcc/f/ChangeLog 3233190569b ./gcc/f/ChangeLog.0 1487956635b ./gcc/f/com.c 3386200382b ./gcc/f/com.h --- 2773,2782 ---- 3553474552b ./gcc/f/bld.c 3286267604b ./gcc/f/bld.h 2128697889b ./gcc/f/bld-op.def ! 2899306747b ./gcc/f/BUGS 235013049b ./gcc/f/bugs0.texi 3922562500b ./gcc/f/bugs.texi ! 2449683766b ./gcc/f/ChangeLog 3233190569b ./gcc/f/ChangeLog.0 1487956635b ./gcc/f/com.c 3386200382b ./gcc/f/com.h *************** *** 2791,2798 **** 417834755b ./gcc/f/expr.h 333493781b ./gcc/f/ffe.texi 782070966b ./gcc/f/fini.c ! 3522452591b ./gcc/f/g77.1 ! 2984402452b ./gcc/f/g77.info 1023118578b ./gcc/f/g77spec.c 3544733467b ./gcc/f/g77.texi 4062822261b ./gcc/f/global.c --- 2791,2798 ---- 417834755b ./gcc/f/expr.h 333493781b ./gcc/f/ffe.texi 782070966b ./gcc/f/fini.c ! 2630082201b ./gcc/f/g77.1 ! 1437698051b ./gcc/f/g77.info 1023118578b ./gcc/f/g77spec.c 3544733467b ./gcc/f/g77.texi 4062822261b ./gcc/f/global.c *************** *** 2831,2837 **** 2003329934b ./gcc/fixinc/genfixes 2190395998b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 886552226b ./gcc/fixinc/inclhack.def 333067513b ./gcc/fixinc/Makefile.in 3144429405b ./gcc/fixinc/mkfixinc.sh 1834585069b ./gcc/fixinc/procopen.c --- 2831,2837 ---- 2003329934b ./gcc/fixinc/genfixes 2190395998b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 669705611b ./gcc/fixinc/inclhack.def 333067513b ./gcc/fixinc/Makefile.in 3144429405b ./gcc/fixinc/mkfixinc.sh 1834585069b ./gcc/fixinc/procopen.c *************** *** 2874,2880 **** 778394431b ./gcc/fixinc/tests/base/rpc/svc.h 1831085175b ./gcc/fixinc/tests/base/rpcsvc/rstat.h 2162639252b ./gcc/fixinc/tests/base/rpcsvc/rusers.h ! 164451816b ./gcc/fixinc/tests/base/rpc/xdr.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h 876451122b ./gcc/fixinc/tests/base/stdio.h 1529509815b ./gcc/fixinc/tests/base/stdio_tag.h --- 2874,2880 ---- 778394431b ./gcc/fixinc/tests/base/rpc/svc.h 1831085175b ./gcc/fixinc/tests/base/rpcsvc/rstat.h 2162639252b ./gcc/fixinc/tests/base/rpcsvc/rusers.h ! 2598242188b ./gcc/fixinc/tests/base/rpc/xdr.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h 876451122b ./gcc/fixinc/tests/base/stdio.h 1529509815b ./gcc/fixinc/tests/base/stdio_tag.h *************** *** 2923,2935 **** 3588095999b ./gcc/f/lex.c 722310274b ./gcc/f/lex.h 1465737068b ./gcc/floatlib.c ! 1733713569b ./gcc/flow.c 3329871744b ./gcc/f/Make-lang.in 3929672430b ./gcc/f/malloc.c 1633854048b ./gcc/f/malloc.h 2687881356b ./gcc/f/name.c 558328466b ./gcc/f/name.h ! 2065643487b ./gcc/f/NEWS 3453379674b ./gcc/f/news0.texi 2025578594b ./gcc/f/news.texi 2469930711b ./gcc/fold-const.c --- 2923,2935 ---- 3588095999b ./gcc/f/lex.c 722310274b ./gcc/f/lex.h 1465737068b ./gcc/floatlib.c ! 3628278041b ./gcc/flow.c 3329871744b ./gcc/f/Make-lang.in 3929672430b ./gcc/f/malloc.c 1633854048b ./gcc/f/malloc.h 2687881356b ./gcc/f/name.c 558328466b ./gcc/f/name.h ! 984274020b ./gcc/f/NEWS 3453379674b ./gcc/f/news0.texi 2025578594b ./gcc/f/news.texi 2469930711b ./gcc/fold-const.c *************** *** 2987,2999 **** 2232338664b ./gcc/f/top.h 3443401298b ./gcc/f/type.c 2499934202b ./gcc/f/type.h ! 748773970b ./gcc/function.c 660035943b ./gcc/function.h 3058774034b ./gcc/future.options 316201735b ./gcc/f/where.c 3857741668b ./gcc/f/where.h 3783840564b ./gcc/gbl-ctors.h ! 1115769236b ./gcc/gccbug.in 2480988432b ./gcc/gcc.c 4230721321b ./gcc/gcc.h 3093644366b ./gcc/gcc.hlp --- 2987,2999 ---- 2232338664b ./gcc/f/top.h 3443401298b ./gcc/f/type.c 2499934202b ./gcc/f/type.h ! 3514216956b ./gcc/function.c 660035943b ./gcc/function.h 3058774034b ./gcc/future.options 316201735b ./gcc/f/where.c 3857741668b ./gcc/f/where.h 3783840564b ./gcc/gbl-ctors.h ! 3934793569b ./gcc/gccbug.in 2480988432b ./gcc/gcc.c 4230721321b ./gcc/gcc.h 3093644366b ./gcc/gcc.hlp *************** *** 3017,3026 **** 904540311b ./gcc/gengenrtl.c 2765427045b ./gcc/gengtype.c 1706925807b ./gcc/gengtype.h ! 3845782591b ./gcc/gengtype-lex.c 3137000585b ./gcc/gengtype-lex.l ! 2936685877b ./gcc/gengtype-yacc.c ! 3373752516b ./gcc/gengtype-yacc.h 1642276134b ./gcc/gengtype-yacc.y 2574485728b ./gcc/genmultilib 3934270274b ./gcc/genopinit.c --- 3017,3026 ---- 904540311b ./gcc/gengenrtl.c 2765427045b ./gcc/gengtype.c 1706925807b ./gcc/gengtype.h ! 3389813381b ./gcc/gengtype-lex.c 3137000585b ./gcc/gengtype-lex.l ! 2997175798b ./gcc/gengtype-yacc.c ! 1889271983b ./gcc/gengtype-yacc.h 1642276134b ./gcc/gengtype-yacc.y 2574485728b ./gcc/genmultilib 3934270274b ./gcc/genopinit.c *************** *** 3066,3079 **** 3947874044b ./gcc/hooks.c 2537183437b ./gcc/hooks.h 4221207654b ./gcc/hwint.h ! 1775598304b ./gcc/ifcvt.c 1952228975b ./gcc/input.h 3384627434b ./gcc/insn-addr.h 2417292013b ./gcc/integrate.c 3129523647b ./gcc/integrate.h 3847321727b ./gcc/intl/bindtextdom.c 3277280645b ./gcc/intl.c ! 835509107b ./gcc/intl/ChangeLog 3698301396b ./gcc/intl/config.charset 3683549278b ./gcc/intl/dcgettext.c 1537282354b ./gcc/intl/dcigettext.c --- 3066,3079 ---- 3947874044b ./gcc/hooks.c 2537183437b ./gcc/hooks.h 4221207654b ./gcc/hwint.h ! 1841108629b ./gcc/ifcvt.c 1952228975b ./gcc/input.h 3384627434b ./gcc/insn-addr.h 2417292013b ./gcc/integrate.c 3129523647b ./gcc/integrate.h 3847321727b ./gcc/intl/bindtextdom.c 3277280645b ./gcc/intl.c ! 2155030375b ./gcc/intl/ChangeLog 3698301396b ./gcc/intl/config.charset 3683549278b ./gcc/intl/dcgettext.c 1537282354b ./gcc/intl/dcigettext.c *************** *** 3108,3114 **** 674770997b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h 2471190840b ./gcc/java/builtins.c ! 3454404553b ./gcc/java/ChangeLog 2409493226b ./gcc/java/chartables.h 1669534513b ./gcc/java/check-init.c 1987085295b ./gcc/java/class.c --- 3108,3114 ---- 674770997b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h 2471190840b ./gcc/java/builtins.c ! 3811502524b ./gcc/java/ChangeLog 2409493226b ./gcc/java/chartables.h 1669534513b ./gcc/java/check-init.c 1987085295b ./gcc/java/class.c *************** *** 3119,3130 **** 2447326245b ./gcc/java/decl.c 808662179b ./gcc/java/except.c 3550734029b ./gcc/java/expr.c ! 2217314188b ./gcc/java/gcj.1 ! 1316983391b ./gcc/java/gcjh.1 ! 2453636522b ./gcc/java/gcj.info 3613529008b ./gcc/java/gcj.texi 533046670b ./gcc/java/gen-table.pl ! 4062461220b ./gcc/java/gij.1 871232158b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h 1953641142b ./gcc/java/java-opcodes.h --- 3119,3130 ---- 2447326245b ./gcc/java/decl.c 808662179b ./gcc/java/except.c 3550734029b ./gcc/java/expr.c ! 1607902340b ./gcc/java/gcj.1 ! 3727505571b ./gcc/java/gcjh.1 ! 967238808b ./gcc/java/gcj.info 3613529008b ./gcc/java/gcj.texi 533046670b ./gcc/java/gen-table.pl ! 3813964236b ./gcc/java/gij.1 871232158b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h 1953641142b ./gcc/java/java-opcodes.h *************** *** 3133,3139 **** 2113802419b ./gcc/java/java-tree.def 1585333829b ./gcc/java/java-tree.h 1618392854b ./gcc/java/jcf-depend.c ! 483441700b ./gcc/java/jcf-dump.1 989986345b ./gcc/java/jcf-dump.c 1096034698b ./gcc/java/jcf.h 265802933b ./gcc/java/jcf-io.c --- 3133,3139 ---- 2113802419b ./gcc/java/java-tree.def 1585333829b ./gcc/java/java-tree.h 1618392854b ./gcc/java/jcf-depend.c ! 3117837710b ./gcc/java/jcf-dump.1 989986345b ./gcc/java/jcf-dump.c 1096034698b ./gcc/java/jcf.h 265802933b ./gcc/java/jcf-io.c *************** *** 3141,3149 **** 3649177865b ./gcc/java/jcf-path.c 3469145485b ./gcc/java/jcf-reader.c 2779561656b ./gcc/java/jcf-write.c ! 3315888059b ./gcc/java/jv-convert.1 3805988298b ./gcc/java/jvgenmain.c ! 2940276466b ./gcc/java/jv-scan.1 1608362154b ./gcc/java/jv-scan.c 1503112447b ./gcc/java/jvspec.c 1823669543b ./gcc/java/keyword.gperf --- 3141,3149 ---- 3649177865b ./gcc/java/jcf-path.c 3469145485b ./gcc/java/jcf-reader.c 2779561656b ./gcc/java/jcf-write.c ! 245355799b ./gcc/java/jv-convert.1 3805988298b ./gcc/java/jvgenmain.c ! 1180590102b ./gcc/java/jv-scan.1 1608362154b ./gcc/java/jv-scan.c 1503112447b ./gcc/java/jvspec.c 1823669543b ./gcc/java/keyword.gperf *************** *** 3156,3168 **** 827934844b ./gcc/java/Make-lang.in 3475732428b ./gcc/java/mangle.c 1178542691b ./gcc/java/mangle_name.c ! 1215065709b ./gcc/java/parse.c 1819635606b ./gcc/java/parse.h ! 3960580495b ./gcc/java/parse-scan.c 222108707b ./gcc/java/parse-scan.y 794022336b ./gcc/java/parse.y ! 2549091570b ./gcc/java/rmic.1 ! 3743937535b ./gcc/java/rmiregistry.1 4133292138b ./gcc/java/typeck.c 3461608157b ./gcc/java/verify.c 3887545656b ./gcc/java/win32-host.c --- 3156,3168 ---- 827934844b ./gcc/java/Make-lang.in 3475732428b ./gcc/java/mangle.c 1178542691b ./gcc/java/mangle_name.c ! 3798002382b ./gcc/java/parse.c 1819635606b ./gcc/java/parse.h ! 1809670830b ./gcc/java/parse-scan.c 222108707b ./gcc/java/parse-scan.y 794022336b ./gcc/java/parse.y ! 1470951840b ./gcc/java/rmic.1 ! 2302840624b ./gcc/java/rmiregistry.1 4133292138b ./gcc/java/typeck.c 3461608157b ./gcc/java/verify.c 3887545656b ./gcc/java/win32-host.c *************** *** 3215,3222 **** 1816865798b ./gcc/objc/objc-act.c 288378628b ./gcc/objc/objc-act.h 1462887932b ./gcc/objc/objc-lang.c ! 1589819567b ./gcc/objc/objc-parse.c ! 2857922994b ./gcc/objc/objc-parse.y 688475759b ./gcc/objc/objc-tree.def 3823063152b ./gcc/objc/README 1799560872b ./gcc/ONEWS --- 3215,3222 ---- 1816865798b ./gcc/objc/objc-act.c 288378628b ./gcc/objc/objc-act.h 1462887932b ./gcc/objc/objc-lang.c ! 357756684b ./gcc/objc/objc-parse.c ! 736048536b ./gcc/objc/objc-parse.y 688475759b ./gcc/objc/objc-tree.def 3823063152b ./gcc/objc/README 1799560872b ./gcc/ONEWS *************** *** 3230,3236 **** 2095359229b ./gcc/po/be.po 4127882944b ./gcc/po/ca.gmo 3020694974b ./gcc/po/ca.po ! 1223975996b ./gcc/po/ChangeLog 3477757828b ./gcc/po/da.gmo 770435044b ./gcc/po/da.po 3139180654b ./gcc/po/de.gmo --- 3230,3236 ---- 2095359229b ./gcc/po/be.po 4127882944b ./gcc/po/ca.gmo 3020694974b ./gcc/po/ca.po ! 1308128764b ./gcc/po/ChangeLog 3477757828b ./gcc/po/da.gmo 770435044b ./gcc/po/da.po 3139180654b ./gcc/po/de.gmo *************** *** 3243,3253 **** 1546479817b ./gcc/po/exgettext 1413648343b ./gcc/po/fr.gmo 2179384167b ./gcc/po/fr.po ! 1930890857b ./gcc/po/gcc.pot 3008828447b ./gcc/po/ja.gmo 2590678436b ./gcc/po/ja.po 2578977527b ./gcc/po/nl.gmo 3243705577b ./gcc/po/nl.po 3860930468b ./gcc/po/sv.gmo 1280363272b ./gcc/po/sv.po 2399217721b ./gcc/po/tr.gmo --- 3243,3255 ---- 1546479817b ./gcc/po/exgettext 1413648343b ./gcc/po/fr.gmo 2179384167b ./gcc/po/fr.po ! 707241730b ./gcc/po/gcc.pot 3008828447b ./gcc/po/ja.gmo 2590678436b ./gcc/po/ja.po 2578977527b ./gcc/po/nl.gmo 3243705577b ./gcc/po/nl.po + 1025728340b ./gcc/po/rw.gmo + 2257826311b ./gcc/po/rw.po 3860930468b ./gcc/po/sv.gmo 1280363272b ./gcc/po/sv.po 2399217721b ./gcc/po/tr.gmo *************** *** 3276,3287 **** 2102844529b ./gcc/real.h 1280779673b ./gcc/recog.c 3658154165b ./gcc/recog.h ! 1445421371b ./gcc/regclass.c 1380845695b ./gcc/regmove.c 886698666b ./gcc/regrename.c ! 4261713084b ./gcc/regs.h 1537960625b ./gcc/reg-stack.c ! 879003438b ./gcc/reload1.c 1474155121b ./gcc/reload.c 3481272321b ./gcc/reload.h 3164110364b ./gcc/reorg.c --- 3278,3289 ---- 2102844529b ./gcc/real.h 1280779673b ./gcc/recog.c 3658154165b ./gcc/recog.h ! 2868816597b ./gcc/regclass.c 1380845695b ./gcc/regmove.c 886698666b ./gcc/regrename.c ! 2178134961b ./gcc/regs.h 1537960625b ./gcc/reg-stack.c ! 4026152575b ./gcc/reload1.c 1474155121b ./gcc/reload.c 3481272321b ./gcc/reload.h 3164110364b ./gcc/reorg.c *************** *** 3291,3297 **** 2941705038b ./gcc/rtl.c 3774845754b ./gcc/rtl.def 3586047414b ./gcc/rtl-error.c ! 1765792475b ./gcc/rtl.h 1290811844b ./gcc/sbitmap.c 7124827b ./gcc/sbitmap.h 75721905b ./gcc/scan.c --- 3293,3299 ---- 2941705038b ./gcc/rtl.c 3774845754b ./gcc/rtl.def 3586047414b ./gcc/rtl-error.c ! 1294237681b ./gcc/rtl.h 1290811844b ./gcc/sbitmap.c 7124827b ./gcc/sbitmap.h 75721905b ./gcc/scan.c *************** *** 3323,3329 **** 482558466b ./gcc/sys-types.h 833215330b ./gcc/target-def.h 1550490872b ./gcc/target.h ! 2749305170b ./gcc/testsuite/ChangeLog 1101480727b ./gcc/testsuite/config/default.exp 3657217366b ./gcc/testsuite/consistency.vlad/layout/a-char.c 2814769741b ./gcc/testsuite/consistency.vlad/layout/a-double.c --- 3325,3331 ---- 482558466b ./gcc/sys-types.h 833215330b ./gcc/target-def.h 1550490872b ./gcc/target.h ! 1042612681b ./gcc/testsuite/ChangeLog 1101480727b ./gcc/testsuite/config/default.exp 3657217366b ./gcc/testsuite/consistency.vlad/layout/a-char.c 2814769741b ./gcc/testsuite/consistency.vlad/layout/a-double.c *************** *** 5881,5887 **** 1625459055b ./gcc/testsuite/gcc.c-torture/execute/20020619-1.c 2876236122b ./gcc/testsuite/gcc.c-torture/execute/20020716-1.c 2090219848b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.c ! 1392513436b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.x 1859138834b ./gcc/testsuite/gcc.c-torture/execute/20020805-1.c 492121497b ./gcc/testsuite/gcc.c-torture/execute/20020904-1.c 572636623b ./gcc/testsuite/gcc.c-torture/execute/20020911-1.c --- 5883,5889 ---- 1625459055b ./gcc/testsuite/gcc.c-torture/execute/20020619-1.c 2876236122b ./gcc/testsuite/gcc.c-torture/execute/20020716-1.c 2090219848b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.c ! 4058526867b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.x 1859138834b ./gcc/testsuite/gcc.c-torture/execute/20020805-1.c 492121497b ./gcc/testsuite/gcc.c-torture/execute/20020904-1.c 572636623b ./gcc/testsuite/gcc.c-torture/execute/20020911-1.c *************** *** 5924,5929 **** --- 5926,5932 ---- 3100722732b ./gcc/testsuite/gcc.c-torture/execute/20040307-1.c 482019764b ./gcc/testsuite/gcc.c-torture/execute/20040313-1.c 3076819546b ./gcc/testsuite/gcc.c-torture/execute/20040331-1.c + 2796290175b ./gcc/testsuite/gcc.c-torture/execute/20050124-1.c 37158978b ./gcc/testsuite/gcc.c-torture/execute/900409-1.c 1241514475b ./gcc/testsuite/gcc.c-torture/execute/920202-1.c 651529975b ./gcc/testsuite/gcc.c-torture/execute/920302-1.c *************** *** 6370,6375 **** --- 6373,6379 ---- 1246182987b ./gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c 1048909723b ./gcc/testsuite/gcc.c-torture/execute/pure-1.c 146053249b ./gcc/testsuite/gcc.c-torture/execute/regstack-1.c + 1367031858b ./gcc/testsuite/gcc.c-torture/execute/restrict-1.c 1827676873b ./gcc/testsuite/gcc.c-torture/execute/scope-1.c 990025742b ./gcc/testsuite/gcc.c-torture/execute/scope-2.c 3788353048b ./gcc/testsuite/gcc.c-torture/execute/shiftdi.c *************** *** 6830,6835 **** --- 6834,6840 ---- 32314160b ./gcc/testsuite/gcc.dg/20030120-1.c 6501003b ./gcc/testsuite/gcc.dg/20030123-1.c 2206154706b ./gcc/testsuite/gcc.dg/20030129-1.c + 2895777314b ./gcc/testsuite/gcc.dg/20030204-1.c 4052537013b ./gcc/testsuite/gcc.dg/20030213-1.c 1045670620b ./gcc/testsuite/gcc.dg/20030225-1.c 11242163b ./gcc/testsuite/gcc.dg/20030309-1.c *************** *** 6920,6926 **** 3512856485b ./gcc/testsuite/gcc.dg/asm-6.c 459130722b ./gcc/testsuite/gcc.dg/asm-7.c 2560291160b ./gcc/testsuite/gcc.dg/asm-fs-1.c ! 1287172903b ./gcc/testsuite/gcc.dg/asm-names.c 1099611642b ./gcc/testsuite/gcc.dg/asmreg-1.c 2801105283b ./gcc/testsuite/gcc.dg/attr-alwaysinline.c 3087367494b ./gcc/testsuite/gcc.dg/attr-invalid.c --- 6925,6931 ---- 3512856485b ./gcc/testsuite/gcc.dg/asm-6.c 459130722b ./gcc/testsuite/gcc.dg/asm-7.c 2560291160b ./gcc/testsuite/gcc.dg/asm-fs-1.c ! 3467883753b ./gcc/testsuite/gcc.dg/asm-names.c 1099611642b ./gcc/testsuite/gcc.dg/asmreg-1.c 2801105283b ./gcc/testsuite/gcc.dg/attr-alwaysinline.c 3087367494b ./gcc/testsuite/gcc.dg/attr-invalid.c *************** *** 7490,7495 **** --- 7495,7501 ---- 2286477942b ./gcc/testsuite/gcc.dg/inline-5.c 247919548b ./gcc/testsuite/gcc.dg/loop-1.c 264507121b ./gcc/testsuite/gcc.dg/loop-4.c + 3938015578b ./gcc/testsuite/gcc.dg/loop-6.c 775331063b ./gcc/testsuite/gcc.dg/lvalue1.c 208843907b ./gcc/testsuite/gcc.dg/mips-args-1.c 3921207576b ./gcc/testsuite/gcc.dg/mips-args-2.c *************** *** 7562,7567 **** --- 7568,7575 ---- 1186813764b ./gcc/testsuite/gcc.dg/pr14289-1.c 840178763b ./gcc/testsuite/gcc.dg/pr14289-2.c 2802493289b ./gcc/testsuite/gcc.dg/pr14289-3.c + 665208539b ./gcc/testsuite/gcc.dg/pr14765-1.c + 2080585051b ./gcc/testsuite/gcc.dg/pr9771-1.c 3395691298b ./gcc/testsuite/gcc.dg/pragma-align.c 2976918557b ./gcc/testsuite/gcc.dg/pragma-darwin.c 2313186581b ./gcc/testsuite/gcc.dg/pragma-ep-1.c *************** *** 7577,7582 **** --- 7585,7592 ---- 2879526504b ./gcc/testsuite/gcc.dg/return-type-3.c 3862146754b ./gcc/testsuite/gcc.dg/sequence-pt-1.c 3997091992b ./gcc/testsuite/gcc.dg/setjmp-1.c + 2215995245b ./gcc/testsuite/gcc.dg/short-compare-1.c + 2239063803b ./gcc/testsuite/gcc.dg/short-compare-2.c 4257734656b ./gcc/testsuite/gcc.dg/sibcall-1.c 2394881430b ./gcc/testsuite/gcc.dg/sibcall-2.c 2328366575b ./gcc/testsuite/gcc.dg/sibcall-3.c *************** *** 8064,8070 **** 1258096580b ./gcc/testsuite/g++.dg/inherit/operator2.C 413899805b ./gcc/testsuite/g++.dg/inherit/override1.C 285424903b ./gcc/testsuite/g++.dg/inherit/template-as-base.C ! 3055716699b ./gcc/testsuite/g++.dg/inherit/thunk1.C 2075297623b ./gcc/testsuite/g++.dg/inherit/typedef1.C 3091040169b ./gcc/testsuite/g++.dg/inherit/typeinfo1.C 3799679971b ./gcc/testsuite/g++.dg/inherit/using1.C --- 8074,8080 ---- 1258096580b ./gcc/testsuite/g++.dg/inherit/operator2.C 413899805b ./gcc/testsuite/g++.dg/inherit/override1.C 285424903b ./gcc/testsuite/g++.dg/inherit/template-as-base.C ! 774870630b ./gcc/testsuite/g++.dg/inherit/thunk1.C 2075297623b ./gcc/testsuite/g++.dg/inherit/typedef1.C 3091040169b ./gcc/testsuite/g++.dg/inherit/typeinfo1.C 3799679971b ./gcc/testsuite/g++.dg/inherit/using1.C *************** *** 8074,8079 **** --- 8084,8091 ---- 1409346264b ./gcc/testsuite/g++.dg/init/aggr1.C 1584350907b ./gcc/testsuite/g++.dg/init/array10.C 1025630251b ./gcc/testsuite/g++.dg/init/array11.C + 3987189451b ./gcc/testsuite/g++.dg/init/array15.C + 3686588416b ./gcc/testsuite/g++.dg/init/array16.C 4149172890b ./gcc/testsuite/g++.dg/init/array1.C 3157994593b ./gcc/testsuite/g++.dg/init/array2.C 3175368870b ./gcc/testsuite/g++.dg/init/array3.C *************** *** 8186,8191 **** --- 8198,8204 ---- 373643534b ./gcc/testsuite/g++.dg/opt/local1.C 3146403914b ./gcc/testsuite/g++.dg/opt/longbranch1.C 3172021311b ./gcc/testsuite/g++.dg/opt/longbranch2.C + 561845890b ./gcc/testsuite/g++.dg/opt/max1.C 2026702440b ./gcc/testsuite/g++.dg/opt/mmx1.C 368993153b ./gcc/testsuite/g++.dg/opt/noreturn-1.C 2857034604b ./gcc/testsuite/g++.dg/opt/nrv1.C *************** *** 8221,8226 **** --- 8234,8240 ---- 2359273471b ./gcc/testsuite/g++.dg/other/big-struct.C 1768430122b ./gcc/testsuite/g++.dg/other/bitfield1.C 2708764484b ./gcc/testsuite/g++.dg/other/classkey1.C + 3683473178b ./gcc/testsuite/g++.dg/other/complex1.C 867943500b ./gcc/testsuite/g++.dg/other/component1.C 4045861590b ./gcc/testsuite/g++.dg/other/const1.C 109747091b ./gcc/testsuite/g++.dg/other/const2.C *************** *** 8505,8510 **** --- 8519,8525 ---- 2024522680b ./gcc/testsuite/g++.dg/warn/weak1.C 837914458b ./gcc/testsuite/g++.dg/warn/Winline-1.C 3687727353b ./gcc/testsuite/g++.dg/warn/Winline-2.C + 4283351842b ./gcc/testsuite/g++.dg/warn/Winline-4.C 730621002b ./gcc/testsuite/g++.dg/warn/Woverloaded-1.C 155956907b ./gcc/testsuite/g++.dg/warn/Wreorder-1.C 140007329b ./gcc/testsuite/g++.dg/warn/Wshadow-1.C *************** *** 9567,9573 **** 3616427734b ./gcc/testsuite/g++.old-deja/g++.jason/warning6.C 1089399134b ./gcc/testsuite/g++.old-deja/g++.jason/warning7.C 2423657184b ./gcc/testsuite/g++.old-deja/g++.jason/warning8.C ! 2936679445b ./gcc/testsuite/g++.old-deja/g++.jason/warning9.C 2476588872b ./gcc/testsuite/g++.old-deja/g++.law/access1.C 1417723751b ./gcc/testsuite/g++.old-deja/g++.law/access2.C 1986081483b ./gcc/testsuite/g++.old-deja/g++.law/access3.C --- 9582,9588 ---- 3616427734b ./gcc/testsuite/g++.old-deja/g++.jason/warning6.C 1089399134b ./gcc/testsuite/g++.old-deja/g++.jason/warning7.C 2423657184b ./gcc/testsuite/g++.old-deja/g++.jason/warning8.C ! 605551168b ./gcc/testsuite/g++.old-deja/g++.jason/warning9.C 2476588872b ./gcc/testsuite/g++.old-deja/g++.law/access1.C 1417723751b ./gcc/testsuite/g++.old-deja/g++.law/access2.C 1986081483b ./gcc/testsuite/g++.old-deja/g++.law/access3.C *************** *** 10320,10326 **** 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 1915003823b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C --- 10335,10341 ---- 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 2904746549b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C *************** *** 11942,11948 **** 459055346b ./gcc/testsuite/treelang/a01gcci01.c 2293023639b ./gcc/testsuite/treelang/a01gcci01.tree 1160413650b ./gcc/testsuite/treelang/a01gcco01runpgm ! 1132551788b ./gcc/testsuite/treelang/ChangeLog 2484589993b ./gcc/testsuite/treelang/Makefile.in 1917546689b ./gcc/testsuite/treelang/treetests.exp 1194399710b ./gcc/timevar.c --- 11957,11963 ---- 459055346b ./gcc/testsuite/treelang/a01gcci01.c 2293023639b ./gcc/testsuite/treelang/a01gcci01.tree 1160413650b ./gcc/testsuite/treelang/a01gcco01runpgm ! 1927244741b ./gcc/testsuite/treelang/ChangeLog 2484589993b ./gcc/testsuite/treelang/Makefile.in 1917546689b ./gcc/testsuite/treelang/treetests.exp 1194399710b ./gcc/timevar.c *************** *** 11957,11965 **** 3233962690b ./gcc/tree-dump.c 3355334157b ./gcc/tree-dump.h 2808711120b ./gcc/tree.h ! 3693992938b ./gcc/tree-inline.c 3754771676b ./gcc/tree-inline.h ! 3825086411b ./gcc/treelang/ChangeLog 1636615662b ./gcc/treelang/config-lang.in 1245022634b ./gcc/treelang/.cvsignore 3755575041b ./gcc/treelang/lang-options.h --- 11972,11980 ---- 3233962690b ./gcc/tree-dump.c 3355334157b ./gcc/tree-dump.h 2808711120b ./gcc/tree.h ! 1991441028b ./gcc/tree-inline.c 3754771676b ./gcc/tree-inline.h ! 249245396b ./gcc/treelang/ChangeLog 1636615662b ./gcc/treelang/config-lang.in 1245022634b ./gcc/treelang/.cvsignore 3755575041b ./gcc/treelang/lang-options.h *************** *** 11975,11983 **** 4292976636b ./gcc/treelang/treetree.h 2170053915b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h ! 3037639127b ./gcc/unroll.c 853732038b ./gcc/unwind-c.c ! 269773062b ./gcc/unwind-dw2.c 4197489626b ./gcc/unwind-dw2-fde.c 2891582256b ./gcc/unwind-dw2-fde-darwin.c 4043744940b ./gcc/unwind-dw2-fde-glibc.c --- 11990,11998 ---- 4292976636b ./gcc/treelang/treetree.h 2170053915b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h ! 2892660244b ./gcc/unroll.c 853732038b ./gcc/unwind-c.c ! 2911383367b ./gcc/unwind-dw2.c 4197489626b ./gcc/unwind-dw2-fde.c 2891582256b ./gcc/unwind-dw2-fde-darwin.c 4043744940b ./gcc/unwind-dw2-fde-glibc.c *************** *** 11990,12003 **** 405552653b ./gcc/varasm.c 2835975751b ./gcc/varray.c 1175263363b ./gcc/varray.h ! 1551033367b ./gcc/version.c 3311075015b ./gcc/version.h 1174103923b ./gcc/vmsdbg.h 3947609636b ./gcc/vmsdbgout.c 1306126748b ./gcc/xcoffout.c 1199287060b ./gcc/xcoffout.h 815071723b ./include/ansidecl.h ! 961279213b ./include/ChangeLog 2171125041b ./include/COPYING 3196744694b ./include/demangle.h 524172850b ./include/dyn-string.h --- 12005,12018 ---- 405552653b ./gcc/varasm.c 2835975751b ./gcc/varray.c 1175263363b ./gcc/varray.h ! 3576635231b ./gcc/version.c 3311075015b ./gcc/version.h 1174103923b ./gcc/vmsdbg.h 3947609636b ./gcc/vmsdbgout.c 1306126748b ./gcc/xcoffout.c 1199287060b ./gcc/xcoffout.h 815071723b ./include/ansidecl.h ! 2789489996b ./include/ChangeLog 2171125041b ./include/COPYING 3196744694b ./include/demangle.h 524172850b ./include/dyn-string.h *************** *** 12018,12037 **** 1386762946b ./include/ternary.h 1261882580b ./include/xregex2.h 1151436348b ./include/xregex.h ! 303581813b ./INSTALL/binaries.html ! 2232425815b ./INSTALL/build.html ! 3660754465b ./INSTALL/configure.html ! 3933846405b ./INSTALL/download.html ! 2450465854b ./INSTALL/finalinstall.html ! 4116854235b ./INSTALL/gfdl.html ! 845406174b ./INSTALL/index.html ! 1350977176b ./INSTALL/old.html 2229468985b ./INSTALL/README 656627656b ./install-sh ! 1536085686b ./INSTALL/specific.html ! 1504976741b ./INSTALL/test.html 2266217259b ./libf2c/aclocal.m4 ! 3020188036b ./libf2c/ChangeLog 1973941211b ./libf2c/changes.netlib 1349304150b ./libf2c/configure 2026513347b ./libf2c/configure.in --- 12033,12052 ---- 1386762946b ./include/ternary.h 1261882580b ./include/xregex2.h 1151436348b ./include/xregex.h ! 665432946b ./INSTALL/binaries.html ! 1967970494b ./INSTALL/build.html ! 3363331207b ./INSTALL/configure.html ! 2055842432b ./INSTALL/download.html ! 1887182490b ./INSTALL/finalinstall.html ! 496594071b ./INSTALL/gfdl.html ! 4191414021b ./INSTALL/index.html ! 3503093116b ./INSTALL/old.html 2229468985b ./INSTALL/README 656627656b ./install-sh ! 1152628628b ./INSTALL/specific.html ! 2677701980b ./INSTALL/test.html 2266217259b ./libf2c/aclocal.m4 ! 1480058971b ./libf2c/ChangeLog 1973941211b ./libf2c/changes.netlib 1349304150b ./libf2c/configure 2026513347b ./libf2c/configure.in *************** *** 12290,12296 **** 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 724319761b ./libffi/aclocal.m4 ! 179472095b ./libffi/ChangeLog 2702617959b ./libffi/ChangeLog.libgcj 1481682558b ./libffi/ChangeLog.v1 4222507888b ./libffi/configure --- 12305,12311 ---- 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 724319761b ./libffi/aclocal.m4 ! 418109358b ./libffi/ChangeLog 2702617959b ./libffi/ChangeLog.libgcj 1481682558b ./libffi/ChangeLog.v1 4222507888b ./libffi/configure *************** *** 12357,12363 **** 1033916047b ./libiberty/bsearch.c 2389959529b ./libiberty/bzero.c 1591293922b ./libiberty/calloc.c ! 73193471b ./libiberty/ChangeLog 2264262326b ./libiberty/choose-temp.c 2557767520b ./libiberty/clock.c 3170582338b ./libiberty/concat.c --- 12372,12378 ---- 1033916047b ./libiberty/bsearch.c 2389959529b ./libiberty/bzero.c 1591293922b ./libiberty/calloc.c ! 615362517b ./libiberty/ChangeLog 2264262326b ./libiberty/choose-temp.c 2557767520b ./libiberty/clock.c 3170582338b ./libiberty/concat.c *************** *** 12468,12474 **** 3744134120b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk 1162779077b ./libjava/boehm.cc ! 829867765b ./libjava/ChangeLog 3473562392b ./libjava/ChangeLog-1999 2385951174b ./libjava/ChangeLog-2001 2311827252b ./libjava/configure --- 12483,12489 ---- 3744134120b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk 1162779077b ./libjava/boehm.cc ! 1572272014b ./libjava/ChangeLog 3473562392b ./libjava/ChangeLog-1999 2385951174b ./libjava/ChangeLog-2001 2311827252b ./libjava/configure *************** *** 14388,14394 **** 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 ! 2570939434b ./libjava/libltdl/ChangeLog 3229611250b ./libjava/libltdl/config.h.in 3663840013b ./libjava/libltdl/configure 586017012b ./libjava/libltdl/configure.in --- 14403,14409 ---- 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 ! 2294730984b ./libjava/libltdl/ChangeLog 3229611250b ./libjava/libltdl/config.h.in 3663840013b ./libjava/libltdl/configure 586017012b ./libjava/libltdl/configure.in *************** *** 14491,14497 **** 2334349943b ./libjava/sysdep/sh/locks.h 2903495760b ./libjava/sysdep/sparc/locks.h 1725741696b ./libjava/sysdep/x86-64/locks.h ! 1967054318b ./libjava/testsuite/ChangeLog 1230501773b ./libjava/testsuite/config/default.exp 3718926011b ./libjava/testsuite/libjava.compile/abstr.java 2888415448b ./libjava/testsuite/libjava.compile/abstr.xfail --- 14506,14512 ---- 2334349943b ./libjava/sysdep/sh/locks.h 2903495760b ./libjava/sysdep/sparc/locks.h 1725741696b ./libjava/sysdep/x86-64/locks.h ! 1035297351b ./libjava/testsuite/ChangeLog 1230501773b ./libjava/testsuite/config/default.exp 3718926011b ./libjava/testsuite/libjava.compile/abstr.java 2888415448b ./libjava/testsuite/libjava.compile/abstr.xfail *************** *** 14986,14992 **** 295719627b ./libjava/win32-threads.cc 3981227345b ./libobjc/aclocal.m4 2023635858b ./libobjc/archive.c ! 2867668917b ./libobjc/ChangeLog 1187612736b ./libobjc/class.c 1748737547b ./libobjc/config.h.in 2029120684b ./libobjc/configure --- 15001,15007 ---- 295719627b ./libjava/win32-threads.cc 3981227345b ./libobjc/aclocal.m4 2023635858b ./libobjc/archive.c ! 673382168b ./libobjc/ChangeLog 1187612736b ./libobjc/class.c 1748737547b ./libobjc/config.h.in 2029120684b ./libobjc/configure *************** *** 15040,15048 **** 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c 1476631381b ./libstdc++-v3/acconfig.h ! 1695739764b ./libstdc++-v3/acinclude.m4 1154438994b ./libstdc++-v3/aclocal.m4 ! 1172473463b ./libstdc++-v3/ChangeLog 1996982572b ./libstdc++-v3/ChangeLog-2000 3665233589b ./libstdc++-v3/ChangeLog-2001 3829016086b ./libstdc++-v3/config/abi/alpha-freebsd5/baseline_symbols.txt --- 15055,15063 ---- 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c 1476631381b ./libstdc++-v3/acconfig.h ! 3332420784b ./libstdc++-v3/acinclude.m4 1154438994b ./libstdc++-v3/aclocal.m4 ! 4080914937b ./libstdc++-v3/ChangeLog 1996982572b ./libstdc++-v3/ChangeLog-2000 3665233589b ./libstdc++-v3/ChangeLog-2001 3829016086b ./libstdc++-v3/config/abi/alpha-freebsd5/baseline_symbols.txt *************** *** 15062,15068 **** 3088308555b ./libstdc++-v3/config/cpu/generic/atomicity.h 2413817322b ./libstdc++-v3/config/cpu/hppa/atomicity.h 4160964918b ./libstdc++-v3/config/cpu/i386/atomicity.h ! 1602541359b ./libstdc++-v3/config/cpu/i486/atomicity.h 193432505b ./libstdc++-v3/config/cpu/ia64/atomicity.h 2353535463b ./libstdc++-v3/config/cpu/m68k/atomicity.h 4070465676b ./libstdc++-v3/config/cpu/mips/atomicity.h --- 15077,15083 ---- 3088308555b ./libstdc++-v3/config/cpu/generic/atomicity.h 2413817322b ./libstdc++-v3/config/cpu/hppa/atomicity.h 4160964918b ./libstdc++-v3/config/cpu/i386/atomicity.h ! 2245985740b ./libstdc++-v3/config/cpu/i486/atomicity.h 193432505b ./libstdc++-v3/config/cpu/ia64/atomicity.h 2353535463b ./libstdc++-v3/config/cpu/m68k/atomicity.h 4070465676b ./libstdc++-v3/config/cpu/mips/atomicity.h *************** *** 15288,15294 **** 2377036917b ./libstdc++-v3/include/bits/basic_string.h 2617734007b ./libstdc++-v3/include/bits/basic_string.tcc 3875598835b ./libstdc++-v3/include/bits/boost_concept_check.h ! 4194844798b ./libstdc++-v3/include/bits/c++config 994369839b ./libstdc++-v3/include/bits/char_traits.h 694818237b ./libstdc++-v3/include/bits/codecvt.h 4105193573b ./libstdc++-v3/include/bits/concept_check.h --- 15303,15309 ---- 2377036917b ./libstdc++-v3/include/bits/basic_string.h 2617734007b ./libstdc++-v3/include/bits/basic_string.tcc 3875598835b ./libstdc++-v3/include/bits/boost_concept_check.h ! 716188831b ./libstdc++-v3/include/bits/c++config 994369839b ./libstdc++-v3/include/bits/char_traits.h 694818237b ./libstdc++-v3/include/bits/codecvt.h 4105193573b ./libstdc++-v3/include/bits/concept_check.h *************** *** 15301,15307 **** 1117238130b ./libstdc++-v3/include/bits/gslice.h 3095889165b ./libstdc++-v3/include/bits/indirect_array.h 1700217390b ./libstdc++-v3/include/bits/ios_base.h ! 912571726b ./libstdc++-v3/include/bits/istream.tcc 2520058311b ./libstdc++-v3/include/bits/list.tcc 1753104675b ./libstdc++-v3/include/bits/locale_classes.h 1832292610b ./libstdc++-v3/include/bits/locale_facets.h --- 15316,15322 ---- 1117238130b ./libstdc++-v3/include/bits/gslice.h 3095889165b ./libstdc++-v3/include/bits/indirect_array.h 1700217390b ./libstdc++-v3/include/bits/ios_base.h ! 3414742847b ./libstdc++-v3/include/bits/istream.tcc 2520058311b ./libstdc++-v3/include/bits/list.tcc 1753104675b ./libstdc++-v3/include/bits/locale_classes.h 1832292610b ./libstdc++-v3/include/bits/locale_facets.h *************** *** 15323,15329 **** 1904359658b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h 1450548210b ./libstdc++-v3/include/bits/stl_iterator_base_types.h 1129412815b ./libstdc++-v3/include/bits/stl_iterator.h ! 1475754507b ./libstdc++-v3/include/bits/stl_list.h 1933538770b ./libstdc++-v3/include/bits/stl_map.h 742036372b ./libstdc++-v3/include/bits/stl_multimap.h 3296857953b ./libstdc++-v3/include/bits/stl_multiset.h --- 15338,15344 ---- 1904359658b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h 1450548210b ./libstdc++-v3/include/bits/stl_iterator_base_types.h 1129412815b ./libstdc++-v3/include/bits/stl_iterator.h ! 1022910495b ./libstdc++-v3/include/bits/stl_list.h 1933538770b ./libstdc++-v3/include/bits/stl_map.h 742036372b ./libstdc++-v3/include/bits/stl_multimap.h 3296857953b ./libstdc++-v3/include/bits/stl_multiset.h *************** *** 15337,15343 **** 458911618b ./libstdc++-v3/include/bits/stl_stack.h 745396233b ./libstdc++-v3/include/bits/stl_tempbuf.h 1207025674b ./libstdc++-v3/include/bits/stl_threads.h ! 119104515b ./libstdc++-v3/include/bits/stl_tree.h 1954571679b ./libstdc++-v3/include/bits/stl_uninitialized.h 6253542b ./libstdc++-v3/include/bits/stl_vector.h 4258920603b ./libstdc++-v3/include/bits/streambuf_iterator.h --- 15352,15358 ---- 458911618b ./libstdc++-v3/include/bits/stl_stack.h 745396233b ./libstdc++-v3/include/bits/stl_tempbuf.h 1207025674b ./libstdc++-v3/include/bits/stl_threads.h ! 3875529483b ./libstdc++-v3/include/bits/stl_tree.h 1954571679b ./libstdc++-v3/include/bits/stl_uninitialized.h 6253542b ./libstdc++-v3/include/bits/stl_vector.h 4258920603b ./libstdc++-v3/include/bits/streambuf_iterator.h *************** *** 15451,15457 **** 4158492065b ./libstdc++-v3/include/std/std_utility.h 2660730597b ./libstdc++-v3/include/std/std_valarray.h 3713138538b ./libstdc++-v3/include/std/std_vector.h ! 2771043043b ./libstdc++-v3/libio/ChangeLog 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c 2019924297b ./libstdc++-v3/libio/_G_config.h --- 15466,15472 ---- 4158492065b ./libstdc++-v3/include/std/std_utility.h 2660730597b ./libstdc++-v3/include/std/std_valarray.h 3713138538b ./libstdc++-v3/include/std/std_vector.h ! 507055750b ./libstdc++-v3/libio/ChangeLog 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c 2019924297b ./libstdc++-v3/libio/_G_config.h *************** *** 15840,15859 **** 1172596206b ./libstdc++-v3/testsuite/testsuite_allocator.h 4015920727b ./libstdc++-v3/testsuite/testsuite_hooks.cc 3986991287b ./libstdc++-v3/testsuite/testsuite_hooks.h ! 1100965735b ./libstdc++-v3/testsuite/thread/pthread1.cc ! 1386230452b ./libstdc++-v3/testsuite/thread/pthread2.cc ! 1095152806b ./libstdc++-v3/testsuite/thread/pthread3.cc ! 1685222676b ./libstdc++-v3/testsuite/thread/pthread4.cc ! 3647024336b ./libstdc++-v3/testsuite/thread/pthread5.cc ! 1701874201b ./libstdc++-v3/testsuite/thread/pthread6.cc 3382288367b ./libtool.m4 3680999751b ./ltcf-c.sh 809573867b ./ltcf-cxx.sh 2744413125b ./ltcf-gcj.sh 1656951777b ./ltconfig 1562969795b ./ltmain.sh ! 387185131b ./MAINTAINERS ! 675470294b ./maintainer-scripts/ChangeLog 3655238705b ./maintainer-scripts/crontab 4171969357b ./maintainer-scripts/doc_exclude 2933910739b ./maintainer-scripts/gcc_release --- 15855,15874 ---- 1172596206b ./libstdc++-v3/testsuite/testsuite_allocator.h 4015920727b ./libstdc++-v3/testsuite/testsuite_hooks.cc 3986991287b ./libstdc++-v3/testsuite/testsuite_hooks.h ! 1167450486b ./libstdc++-v3/testsuite/thread/pthread1.cc ! 2580252930b ./libstdc++-v3/testsuite/thread/pthread2.cc ! 3720388024b ./libstdc++-v3/testsuite/thread/pthread3.cc ! 2428540696b ./libstdc++-v3/testsuite/thread/pthread4.cc ! 2289378124b ./libstdc++-v3/testsuite/thread/pthread5.cc ! 2741419106b ./libstdc++-v3/testsuite/thread/pthread6.cc 3382288367b ./libtool.m4 3680999751b ./ltcf-c.sh 809573867b ./ltcf-cxx.sh 2744413125b ./ltcf-gcj.sh 1656951777b ./ltconfig 1562969795b ./ltmain.sh ! 1719902192b ./MAINTAINERS ! 1790352134b ./maintainer-scripts/ChangeLog 3655238705b ./maintainer-scripts/crontab 4171969357b ./maintainer-scripts/doc_exclude 2933910739b ./maintainer-scripts/gcc_release *************** *** 15871,15877 **** 2656466409b ./mkdep 4236112450b ./mkinstalldirs 902556840b ./move-if-change ! 2319809823b ./NEWS 3697693037b ./README 3286946454b ./README.SCO 1077958069b ./symlink-tree --- 15886,15892 ---- 2656466409b ./mkdep 4236112450b ./mkinstalldirs 902556840b ./move-if-change ! 2487933970b ./NEWS 3697693037b ./README 3286946454b ./README.SCO 1077958069b ./symlink-tree *************** *** 15882,15888 **** 2360440520b ./zlib/algorithm.txt 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas ! 1007579238b ./zlib/ChangeLog 642840868b ./zlib/ChangeLog.gcj 869749416b ./zlib/compress.c 1944249901b ./zlib/configure --- 15897,15903 ---- 2360440520b ./zlib/algorithm.txt 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas ! 3700188677b ./zlib/ChangeLog 642840868b ./zlib/ChangeLog.gcj 869749416b ./zlib/compress.c 1944249901b ./zlib/configure diff -Nrcpad gcc-3.3.5/BUGS gcc-3.3.6/BUGS *** gcc-3.3.5/BUGS 2004-09-30 17:34:24.000000000 +0000 --- gcc-3.3.6/BUGS 2005-05-03 12:37:19.000000000 +0000 *************** References *** 837,840 **** 36. http://www.ncits.org/cplusplus.htm 37. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html 38. http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html ! 39. http://gcc.gnu.org/onlinedocs/gcc/C---Misunderstandings.html --- 837,840 ---- 36. http://www.ncits.org/cplusplus.htm 37. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html 38. http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html ! 39. http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Misunderstandings.html diff -Nrcpad gcc-3.3.5/bugs.html gcc-3.3.6/bugs.html *** gcc-3.3.5/bugs.html 2004-09-30 17:34:22.000000000 +0000 --- gcc-3.3.6/bugs.html 2005-05-03 12:37:14.000000000 +0000 *************** also contain C++ code, so you might want *** 779,786 **** be safe. It should not be necessary to recompile if you have changed to a bug-fix release of the same version of the compiler; bug-fix releases are careful to avoid ABI changes. See also the ! compatibility section ! of the GCC manual.

Remark: A major release is designated by a change to the first or second component of the two- or three-part version number. A minor (bug-fix) --- 779,786 ---- be safe. It should not be necessary to recompile if you have changed to a bug-fix release of the same version of the compiler; bug-fix releases are careful to avoid ABI changes. See also the ! compatibility ! section of the GCC manual.

Remark: A major release is designated by a change to the first or second component of the two- or three-part version number. A minor (bug-fix) *************** template <typename T> struct B : A *** 932,939 ****

In addition to the problems listed above, the manual contains a section on ! Common ! Misunderstandings with GNU C++.

--- 932,939 ----

In addition to the problems listed above, the manual contains a section on ! ! Common Misunderstandings with GNU C++.

diff -Nrcpad gcc-3.3.5/ChangeLog gcc-3.3.6/ChangeLog *** gcc-3.3.5/ChangeLog 2004-09-30 16:47:59.000000000 +0000 --- gcc-3.3.6/ChangeLog 2005-05-03 10:56:01.000000000 +0000 *************** *** 1,3 **** --- 1,11 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + + 2004-10-06 Josef Zlomek + + * MAINTAINERS: Update my e-mail address. + 2004-09-30 Release Manager * GCC 3.3.5 Released. diff -Nrcpad gcc-3.3.5/config/ChangeLog gcc-3.3.6/config/ChangeLog *** gcc-3.3.5/config/ChangeLog 2004-09-30 16:47:37.000000000 +0000 --- gcc-3.3.6/config/ChangeLog 2005-05-03 10:55:31.000000000 +0000 *************** *** 1,3 **** --- 1,7 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + 2004-09-30 Release Manager * GCC 3.3.5 Released. diff -Nrcpad gcc-3.3.5/contrib/ChangeLog gcc-3.3.6/contrib/ChangeLog *** gcc-3.3.5/contrib/ChangeLog 2004-09-30 16:46:32.000000000 +0000 --- gcc-3.3.6/contrib/ChangeLog 2005-05-03 10:54:32.000000000 +0000 *************** *** 1,3 **** --- 1,7 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + 2004-09-30 Release Manager * GCC 3.3.5 Released. diff -Nrcpad gcc-3.3.5/contrib/regression/ChangeLog gcc-3.3.6/contrib/regression/ChangeLog *** gcc-3.3.5/contrib/regression/ChangeLog 2004-09-30 16:46:20.000000000 +0000 --- gcc-3.3.6/contrib/regression/ChangeLog 2005-05-03 10:54:26.000000000 +0000 *************** *** 1,3 **** --- 1,7 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + 2004-09-30 Release Manager * GCC 3.3.5 Released. diff -Nrcpad gcc-3.3.5/gcc/aclocal.m4 gcc-3.3.6/gcc/aclocal.m4 *** gcc-3.3.5/gcc/aclocal.m4 2003-10-01 21:56:34.000000000 +0000 --- gcc-3.3.6/gcc/aclocal.m4 2004-12-04 01:51:47.000000000 +0000 *************** else *** 413,419 **** # read() to the same fd. The only system known to have a problem here # is VMS, where text files have record structure. case "$host_os" in ! vms*) gcc_cv_func_mmap_file=no ;; *) gcc_cv_func_mmap_file=yes;; --- 413,419 ---- # read() to the same fd. The only system known to have a problem here # is VMS, where text files have record structure. case "$host_os" in ! vms* | ultrix*) gcc_cv_func_mmap_file=no ;; *) gcc_cv_func_mmap_file=yes;; diff -Nrcpad gcc-3.3.5/gcc/alias.c gcc-3.3.6/gcc/alias.c *** gcc-3.3.5/gcc/alias.c 2004-05-28 17:27:27.000000000 +0000 --- gcc-3.3.6/gcc/alias.c 2004-12-10 17:25:00.000000000 +0000 *************** get_alias_set (t) *** 508,513 **** --- 508,515 ---- /* If we haven't computed the actual alias set, do it now. */ if (DECL_POINTER_ALIAS_SET (decl) == -2) { + tree pointed_to_type = TREE_TYPE (TREE_TYPE (decl)); + /* No two restricted pointers can point at the same thing. However, a restricted pointer can point at the same thing as an unrestricted pointer, if that unrestricted pointer *************** get_alias_set (t) *** 516,526 **** alias set for the type pointed to by the type of the decl. */ HOST_WIDE_INT pointed_to_alias_set ! = get_alias_set (TREE_TYPE (TREE_TYPE (decl))); if (pointed_to_alias_set == 0) /* It's not legal to make a subset of alias set zero. */ ! ; else { DECL_POINTER_ALIAS_SET (decl) = new_alias_set (); --- 518,539 ---- alias set for the type pointed to by the type of the decl. */ HOST_WIDE_INT pointed_to_alias_set ! = get_alias_set (pointed_to_type); if (pointed_to_alias_set == 0) /* It's not legal to make a subset of alias set zero. */ ! DECL_POINTER_ALIAS_SET (decl) = 0; ! else if (AGGREGATE_TYPE_P (pointed_to_type)) ! /* For an aggregate, we must treat the restricted ! pointer the same as an ordinary pointer. If we ! were to make the type pointed to by the ! restricted pointer a subset of the pointed-to ! type, then we would believe that other subsets ! of the pointed-to type (such as fields of that ! type) do not conflict with the type pointed to ! by the restricted pointer. */ ! DECL_POINTER_ALIAS_SET (decl) ! = pointed_to_alias_set; else { DECL_POINTER_ALIAS_SET (decl) = new_alias_set (); diff -Nrcpad gcc-3.3.5/gcc/ChangeLog gcc-3.3.6/gcc/ChangeLog *** gcc-3.3.5/gcc/ChangeLog 2004-09-30 16:45:01.000000000 +0000 --- gcc-3.3.6/gcc/ChangeLog 2005-05-03 10:52:09.000000000 +0000 *************** *** 1,3 **** --- 1,378 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + + 2005-05-01 Roger Sayle + + PR rtl-optimization/19579 + Backport from mainline + 2005-01-26 Jakub Jelinek + * ifcvt.c (noce_try_cmove_arith): If emitting instructions to set up + both A and B, see if they don't clobber registers the other expr uses. + + 2005-04-30 Gabriel Dos Reis + + PR 14884 + * Apply: + 2004-03-25 Joseph S. Myers + + * fixinc/inclhack.def (rpc_xdr_lvalue_cast_a, + rpc_xdr_lvalue_cast_b): New fixes. + * fixinc/tests/base/rpc/xdr.h: Add new tests. + + 2005-04-30 Gabriel Dos Reis + + * Apply: + 2004-10-21 Aldy Hernandez + + PR target/18004. + * expmed.c (store_bit_field): Pass original 'value' before + recursing. + + 2005-04-22 Eric Botcazou + + * doc/invoke.texi (SPARC options): Document that -mapp-regs + is turned off by default on Solaris. + + 2005-04-06 James E. Wilson + + PR target/20670 + * unwind-ia64.c (uw_intall_context): Add missing load of r27. + + 2005-04-04 Gabriel Dos Reis + + PR c++/18644 + * doc/invoke.texi (-Wsynth): Remove documentation. + + 2005-03-28 James E Wilson + + PR target/20286. + * config/ia64/ia64.c (ia64_encode_section_info): Only abort if encoding + or symbol_str[1] is 's'. + + 2005-02-23 Michael Beach + + PR target/20159 + * config/sparc/t-elf (startup files): Assemble with CPP. + + 2005-02-11 John David Anglin + + PR middle-end/19697 + 2005-01-30 Roger Sayle + * config/pa/pa.md (anddi3, iordi3): On HPPA64, disallow an integer + constant as the second operand and a register as the third. + + 2005-01-29 Alan Modra + + * unwind-dw2.c (execute_stack_op): Add missing cases for + DW_OP_shl, DW_OP_shr, DW_OP_shra, DW_OP_xor. + + 2005-01-28 Stephane Carrez + + PR target/15384 + * config/m68hc11/t-m68hc11-gas (dp-bit.c): Fix typo causing a + configuration part of dp-bit.c to be lost. + + 2005-01-27 Ulrich Weigand + + PR target/17771 + Backport from mainline: + * config/s390/s390.md ("reload_outti"): Remove predicate for + output operand. Abort if operand is not a MEM. + ("reload_outdi", "reload_outdf"): Likewise. + + 2005-01-22 Roger Sayle + + PR target/18402 + Backport from mainline + 2003-02-05 Jakub Jelinek + + PR optimization/8555 + * config/i386/i386.md (sse_mov?fcc split): Handle op2 == op3 case + instead of aborting. + + 2005-01-21 Giovanni Bajo + + * gccbug.in: Update optimization -> tree-optimization/rtl-optimization. + + 2005-01-21 Giovanni Bajo + + PR c++/17115 + * tree-inline.c (expand_call_inline): Do not warn for functions + marked with attribute noinline. + + 2005-01-18 Eric Botcazou + + PR rtl-optimization/19296 + * combine.c (simplify_comparison): Rewrite the condition under + which a non-paradoxical SUBREG of a PLUS can be lifted when + compared against a constant. + + 2004-01-14 David Mosberger + James E Wilson + + PR target/18987 + * config/ia64/ia64.c (process_set): For alloc insn, only call + process_epilogue is !frame_pointer_needed. + + PR target/13158 + * config/ia64/ia64.c (ia64_expand_epilogue): Set RTX_FRAME_RELATED_P on + sibcall alloc instruction. + (process_set): Handle sibcall alloc instruction. + + 2005-01-13 David O'Brien + + Backport from mainline: + * config/freebsd-spec.h: Use KSE pthread lib for -pthread. + + 2005-01-08 Sergey M. Samoylov + + Backport: + 2004-02-12 Richard Sandiford + PR bootstrap/13617 + * config/mips/mips-protos.h (mips_output_aligned_decl_common): Declare. + (mips_declare_object): Make variadic. + * config/mips/mips.h (ASM_OUTPUT_ALIGNED_DECL_COMMON): Use + mips_output_aligned_decl_common. + * config/mips/mips.c (mips_output_aligned_decl_common): New function. + (mips_declare_object): Make variadic. + + 2005-01-08 Richard Sandiford + + PR target/17565 + * config/mips/mips.md (define_asm_attributes): Set can_delay to no. + + 2004-12-27 John David Anglin + + * vax.c (vax_address_cost, vax_rtx_cost): Correct casts. + (vax_rtx_cost): Handle small offsets for both PLUS and MINUS. + + 2004-12-27 Steven Bosscher + John David Anglin + + rtl-optimization/12863 + * config/vax/vax.h (CASE_DROPS_THROUGH): Don't define. + * config/vax/vax.md (casesi): Emit a test-and-branch to make sure + that the case is in range, to make sure the casesi insn is always + in range and never falls through. + (casesi1): Add comment to explain why casesi never falls through. + Remove the unnamed special case casesi pattern. + + 2004-12-26 John David Anglin + + PR target/17643 + * config/pa/pa32-linux.h (FUNCTION_OK_FOR_SIBCALL): Return false when + TARGET_PORTABLE_RUNTIME is true. + + 2004-12-25 Alan Modra + + PR target/19147 + * config/rs6000/rs6000.md (andsi3_internal7, andsi3_internal8): Delete. + + 2004-12-21 Joseph S. Myers + + PR c/14765 + * c-parse.in (compstmt_primary_start): Set last_expr_type to + NULL_TREE. + + 2004-12-19 Roger Sayle + + PR middle-end/19068 + * expr.c (expand_expr_real_1) : Ensure that target, op0 + and op1 are all registers (or constants) before expanding the RTL + comparison sequence [to avoid reg_overlap_mentioned (target, op1)]. + + 2004-12-16 Eric Botcazou + + PR middle-end/18882 + * function.c (assign_stack_local_1): Use BITS_PER_UNIT alignment + when passed -2 as 'align'. + (put_var_into_stack): Adjust calls to put_reg_into_stack. + When passed a CONCAT, instruct put_reg_into_stack to use + a consecutive stack slot for the second part. + (put_reg_into_stack): Remove 'promoted_mode' parameter, add + 'consecutive_p' parameter. Retrieve the register mode from 'reg'. + When consecutive_p is true, instruct assign_stack_local_1 to use + BITS_PER_UNIT alignment. + (put_addressof_into_stack): Adjust call to put_reg_into_stack. + + 2004-12-16 Eric Botcazou + + PR middle-end/18590 + * function.c (fixup_var_refs_insns_with_hash): Do not invoke + fixup_var_refs_insn on insns marked as deleted. + + 2004-12-15 Richard Henderson + + PR target/19005 + * config/i386/i386.md (swaphi_1): Swap with swaphi_2, allow with + optimize_size. + (swapqi_1): Rename from swapqi. Enable only for no partial reg + stall and optimize_size. + (swapqi_2): New. + (swaphi_1, swaphi_2, swapqi_1): Add athlon_decode. + (swapsi, swaphi_1, swaphi_2, swapqi_1, swapdi): Remove modrm override. + + 2004-12-13 John David Anglin + + PR middle-end/18730 + * emit-rtl.c (get_first_nonnote_insn, get_last_nonnote_insn): When + the first/last insn is a sequence, return the first/last insn of the + sequence. + + 2004-12-12 Richard Henderson + + PR target/18932 + * config/i386/i386.md (all splits and peepholes): Use flags_reg_operand + and compare_operator to propagate the input CC mode to the output. + * config/i386/i386.c (flags_reg_operand, compare_operator): New. + * config/i386/i386.h (PREDICATE_CODES): Add them. + * config/i386/i386-protos.h: Update. + + 2004-12-10 Volker Reichelt + + PR rtl-optimization/16536 + Backport from mainline: + 2004-06-25 Mark Mitchell + * alias.c (get_alias_set): Adjust setting of + DECL_POINTER_ALIAS_SET for pointers to aggregates. + + 2004-12-09 Richard Henderson + + PR target/17025 + * config/i386/i386.md (testqi_1_maybe_si, andqi_2_maybe_si): New. + (test_qi_1, andqi_2): Do not promote to simode. + + 2004-12-07 David Mosberger + + PR target/18443 + * config/ia64/ia64.c (ia64_assemble_integer): Add support for + emitting unaligned pointer-sized integers. + + 2004-12-05 Richard Henderson + + PR target/18841 + * config/alpha/alpha.md (UNSPECV_SETJMPR_ER): New. + (builtin_setjmp_receiver_er_sl_1): Use it. + (builtin_setjmp_receiver_er_1): Likewise. + (builtin_setjmp_receiver_er, exception_receiver_er): Remove. + (builtin_setjmp_receiver): Don't split for explicit relocs until + after reload. + (exception_receiver): Likewise. + + 2004-12-03 John David Anglin + + 2003-10-31 John David Anglin + Backport from mainline + * aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Blacklist ultrix*. + * configure: Rebuilt. + + 2004-12-03 Richard Henderson + + 2004-09-24 Richard Henderson + PR rtl-opt/17503 + * regclass.c (subregs_of_mode): Turn into an htab. Make static. + (som_hash, som_eq): New. + (init_subregs_of_mode, record_subregs_of_mode): New. + (cannot_change_mode_set_regs): Rewrite for htab implementation. + (invalid_mode_change_p): Likewise. + * combine.c (gen_lowpart_for_combine): Use record_subregs_of_mode. + * flow.c (mark_used_regs): Likewise. + (life_analysis): Use init_subregs_of_mode. + * regs.h (subregs_of_mode): Remove. + * rtl.h (init_subregs_of_mode, record_subregs_of_mode): Declare. + + 2004-12-03 Roger Sayle + + PR target/9908 + * config/i386/i386.md (*call_value_1): Correct Intel assembler + syntax by using %A1 instead of %*%1. + + 2004-12-01 Alan Modra + + PR target/12817 + * config/rs6000/rs6000.c (rs6000_emit_prologue): Use r0 for vrsave. + + 2004-11-29 Roger Sayle + + PR rtl-optimization/9771 + * regclass.c (CALL_REALLY_USED_REGNO_P): New macro to eliminate + conditional compilation in init_reg_sets_1. + (init_reg_sets_1): Let global_regs[i] take priority over the frame + (but not stack) pointer exceptions to regs_invalidated_by_call. + (globalize_reg): Globalizing a fixed register may need to update + regs_invalidated_by_call. + + 2004-11-27 Falk Hueffner + Eric Botcazou + + PR optimization/18577 + * unroll.c (unroll_loop): Test both REGNO_LAST_UID and + REGNO_LAST_NOTE_UID to decide whether a pseudo is local + to the loop. + + 2004-11-27 Alan Modra + + PR target/12769 + * config/rs6000/rs6000.c (init_cumulative_args): Set call_cookie + from rs6000_default_long_calls for libcalls. + + 2004-11-25 Richard Henderson + + PR c++/6764 + * reload1.c (set_initial_eh_label_offset): New. + (set_initial_label_offsets): Use it. + + 2004-11-22 John David Anglin + + PR rtl-optimization/14838 + * emit-rtl.c (get_first_nonnote_insn): Don't assume first insn is a + note. + (get_last_nonnote_insn): Don't assume last insn is a note. + + 2004-10-14 Kaveh R. Ghazi + + * doc/install.texi (*-*-solaris2*): Update with info about kernel + patches to solve spurious testsuite failures. + + 2004-10-13 Eric Botcazou + + PR target/14454 + * config/sparc/sparc.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Set to + sparc_can_output_mi_thunk. + (sparc_output_mi_thunk): Simplify handling of delta offset. Add + handling of vcall offset. + (sparc_can_output_mi_thunk): New predicate. + * doc/tm.texi (TARGET_ASM_OUTPUT_MI_THUNK): Document VCALL_OFFSET. + (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Delete. + (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New target hook. + + * config/sparc/sparc.md (movdi): Remove redundant test. + + 2004-10-07 Eric Botcazou + + * doc/install.texi (*-*-solaris2*): Fix marker for URL. + + 2004-10-06 Eric Botcazou + + PR target/16007 + * doc/install.texi (*-*-solaris2*): Mention potential problem + with Sun assembler + GNU linker and C++ programs. + Document status of binutils 2.15 release. + + 2004-09-30 Richard Henderson + + * config/alpha/qrnnd.asm: Mark for noexecstack. + + 2004-09-30 Richard Henderson + + * unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG. + * doc/tm.texi (DWARF_ZERO_REG): New. + + * config/alpha/alpha.c (alpha_sa_mask, alpha_expand_prologue, + alpha_expand_epilogue): Revert 2003-09-30 change to store zero. + * config/alpha/alpha.h (DWARF_ZERO_REG): New. + 2004-09-30 Release Manager * GCC 3.3.5 Released. *************** *** 19,30 **** 2004-09-13 Richard Henderson ! PR inline-asm/6806 ! * cselib.c (cselib_invalidate_rtx): Export. Remove unused args. ! (cselib_invalidate_rtx_note_stores): New. ! (cselib_record_sets, cselib_process_insn): Update to match. ! * cselib.h (cselib_invalidate_rtx): Declare. ! * reload1.c (reload_cse_simplify): Invalidate asm clobbers. 2004-08-29 Jonathan Wakely --- 394,405 ---- 2004-09-13 Richard Henderson ! PR inline-asm/6806 ! * cselib.c (cselib_invalidate_rtx): Export. Remove unused args. ! (cselib_invalidate_rtx_note_stores): New. ! (cselib_record_sets, cselib_process_insn): Update to match. ! * cselib.h (cselib_invalidate_rtx): Declare. ! * reload1.c (reload_cse_simplify): Invalidate asm clobbers. 2004-08-29 Jonathan Wakely *************** *** 83,89 **** 2004-07-25 Andreas Jaeger Backport from mainline: ! * libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4. 2004-07-25 Kaz Kojima --- 458,464 ---- 2004-07-25 Andreas Jaeger Backport from mainline: ! * libgcc-std.ver: Add __unorddf2 and __unordsf2 with version 3.3.4. 2004-07-25 Kaz Kojima *************** *** 155,168 **** side-effect of having a length greater or equal to 3. 2004-07-13 Eric Botcazou ! Lloyd Parkes PR target/15186 * config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass /usr/ucblib/sparcv9 as -R path when -compat-bsd is specified. 2004-07-13 Eric Botcazou ! Martin Sebor PR target/12602 * doc/invoke.texi (SPARC options): Document -threads --- 530,543 ---- side-effect of having a length greater or equal to 3. 2004-07-13 Eric Botcazou ! Lloyd Parkes PR target/15186 * config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass /usr/ucblib/sparcv9 as -R path when -compat-bsd is specified. 2004-07-13 Eric Botcazou ! Martin Sebor PR target/12602 * doc/invoke.texi (SPARC options): Document -threads *************** *** 252,269 **** Backport from mainline: 2004-01-19 Richard Henderson ! * alpha.md (UNSPEC_NT_LDA): Renumber. ! (UNSPEC_CVTLQ, cvtlq): New. ! (extendsidi2_1): Rename from extendsidi2_nofix; remove f/f. ! (extendsidi2_fix): Remove. ! (extendsidi2 splitter): Use cvtlq. ! (extendsidi2 fp peepholes): Remove. ! (cvtql): Use SFmode instead of SImode. ! (fix_trunc?fsi): Update to match. ! (floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New. ! (movsi): Rename from movsi_nofix, remove f alternatives. ! (movsi_nt_vms): Similarly. ! (movsi_fix, movsi_nt_vms_fix): Remove. 2004-05-26 Hans-Peter Nilsson --- 627,644 ---- Backport from mainline: 2004-01-19 Richard Henderson ! * alpha.md (UNSPEC_NT_LDA): Renumber. ! (UNSPEC_CVTLQ, cvtlq): New. ! (extendsidi2_1): Rename from extendsidi2_nofix; remove f/f. ! (extendsidi2_fix): Remove. ! (extendsidi2 splitter): Use cvtlq. ! (extendsidi2 fp peepholes): Remove. ! (cvtql): Use SFmode instead of SImode. ! (fix_trunc?fsi): Update to match. ! (floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New. ! (movsi): Rename from movsi_nofix, remove f alternatives. ! (movsi_nt_vms): Similarly. ! (movsi_fix, movsi_nt_vms_fix): Remove. 2004-05-26 Hans-Peter Nilsson diff -Nrcpad gcc-3.3.5/gcc/combine.c gcc-3.3.6/gcc/combine.c *** gcc-3.3.5/gcc/combine.c 2004-07-25 18:49:54.000000000 +0000 --- gcc-3.3.6/gcc/combine.c 2005-01-18 08:39:05.000000000 +0000 *************** gen_lowpart_for_combine (mode, x) *** 10138,10150 **** result = gen_lowpart_common (mode, x); #ifdef CANNOT_CHANGE_MODE_CLASS ! if (result != 0 ! && GET_CODE (result) == SUBREG ! && GET_CODE (SUBREG_REG (result)) == REG ! && REGNO (SUBREG_REG (result)) >= FIRST_PSEUDO_REGISTER) ! bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (result)) ! * MAX_MACHINE_MODE ! + GET_MODE (result)); #endif if (result) --- 10138,10145 ---- result = gen_lowpart_common (mode, x); #ifdef CANNOT_CHANGE_MODE_CLASS ! if (result != 0 && GET_CODE (result) == SUBREG) ! record_subregs_of_mode (result); #endif if (result) *************** simplify_comparison (code, pop0, pop1) *** 10818,10851 **** break; case SUBREG: ! /* Check for the case where we are comparing A - C1 with C2, ! both constants are smaller than 1/2 the maximum positive ! value in MODE, and the comparison is equality or unsigned. ! In that case, if A is either zero-extended to MODE or has ! sufficient sign bits so that the high-order bit in MODE ! is a copy of the sign in the inner mode, we can prove that it is ! safe to do the operation in the wider mode. This simplifies ! many range checks. */ if (mode_width <= HOST_BITS_PER_WIDE_INT && subreg_lowpart_p (op0) && GET_CODE (SUBREG_REG (op0)) == PLUS ! && GET_CODE (XEXP (SUBREG_REG (op0), 1)) == CONST_INT ! && INTVAL (XEXP (SUBREG_REG (op0), 1)) < 0 ! && (-INTVAL (XEXP (SUBREG_REG (op0), 1)) ! < (HOST_WIDE_INT) (GET_MODE_MASK (mode) / 2)) ! && (unsigned HOST_WIDE_INT) const_op < GET_MODE_MASK (mode) / 2 ! && (0 == (nonzero_bits (XEXP (SUBREG_REG (op0), 0), ! GET_MODE (SUBREG_REG (op0))) ! & ~GET_MODE_MASK (mode)) ! || (num_sign_bit_copies (XEXP (SUBREG_REG (op0), 0), ! GET_MODE (SUBREG_REG (op0))) ! > (unsigned int) ! (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) ! - GET_MODE_BITSIZE (mode))))) { ! op0 = SUBREG_REG (op0); ! continue; } /* If the inner mode is narrower and we are extracting the low part, --- 10813,10873 ---- break; case SUBREG: ! /* Check for the case where we are comparing A - C1 with C2, that is ! ! (subreg:MODE (plus (A) (-C1))) op (C2) ! ! with C1 a constant, and try to lift the SUBREG, i.e. to do the ! comparison in the wider mode. One of the following two conditions ! must be true in order for this to be valid: ! ! 1. The mode extension results in the same bit pattern being added ! on both sides and the comparison is equality or unsigned. As ! C2 has been truncated to fit in MODE, the pattern can only be ! all 0s or all 1s. ! ! 2. The mode extension results in the sign bit being copied on ! each side. ! ! The difficulty here is that we have predicates for A but not for ! (A - C1) so we need to check that C1 is within proper bounds so ! as to perturbate A as little as possible. */ if (mode_width <= HOST_BITS_PER_WIDE_INT && subreg_lowpart_p (op0) + && GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) > mode_width && GET_CODE (SUBREG_REG (op0)) == PLUS ! && GET_CODE (XEXP (SUBREG_REG (op0), 1)) == CONST_INT) { ! enum machine_mode inner_mode = GET_MODE (SUBREG_REG (op0)); ! rtx a = XEXP (SUBREG_REG (op0), 0); ! HOST_WIDE_INT c1 = -INTVAL (XEXP (SUBREG_REG (op0), 1)); ! ! if ((c1 > 0 ! && (unsigned HOST_WIDE_INT) c1 ! < (unsigned HOST_WIDE_INT) 1 << (mode_width - 1) ! && (equality_comparison_p || unsigned_comparison_p) ! /* (A - C1) zero-extends if it is positive and sign-extends ! if it is negative, C2 both zero- and sign-extends. */ ! && ((0 == (nonzero_bits (a, inner_mode) ! & ~GET_MODE_MASK (mode)) ! && const_op >= 0) ! /* (A - C1) sign-extends if it is positive and 1-extends ! if it is negative, C2 both sign- and 1-extends. */ ! || (num_sign_bit_copies (a, inner_mode) ! > (unsigned int) (GET_MODE_BITSIZE (inner_mode) ! - mode_width) ! && const_op < 0))) ! || ((unsigned HOST_WIDE_INT) c1 ! < (unsigned HOST_WIDE_INT) 1 << (mode_width - 2) ! /* (A - C1) always sign-extends, like C2. */ ! && num_sign_bit_copies (a, inner_mode) ! > (unsigned int) (GET_MODE_BITSIZE (inner_mode) ! - mode_width - 1))) ! { ! op0 = SUBREG_REG (op0); ! continue; ! } } /* If the inner mode is narrower and we are extracting the low part, diff -Nrcpad gcc-3.3.5/gcc/config/alpha/alpha.c gcc-3.3.6/gcc/config/alpha/alpha.c *** gcc-3.3.5/gcc/config/alpha/alpha.c 2004-03-08 03:21:46.000000000 +0000 --- gcc-3.3.6/gcc/config/alpha/alpha.c 2004-09-30 19:36:26.000000000 +0000 *************** alpha_sa_mask (imaskP, fmaskP) *** 6766,6776 **** break; imask |= 1L << regno; } - - /* Glibc likes to use $31 as an unwind stopper for crt0. To - avoid hackery in unwind-dw2.c, we need to actively store a - zero in the prologue of _Unwind_RaiseException et al. */ - imask |= 1UL << 31; } /* If any register spilled, then spill the return address also. */ --- 6766,6771 ---- *************** alpha_expand_prologue () *** 7236,7259 **** reg_offset += 8; } - /* Store a zero if requested for unwinding. */ - if (imask & (1UL << 31)) - { - rtx insn, t; - - mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); - set_mem_alias_set (mem, alpha_sr_alias_set); - insn = emit_move_insn (mem, const0_rtx); - - RTX_FRAME_RELATED_P (insn) = 1; - t = gen_rtx_REG (Pmode, 31); - t = gen_rtx_SET (VOIDmode, mem, t); - t = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, t, REG_NOTES (insn)); - REG_NOTES (insn) = t; - - reg_offset += 8; - } - for (i = 0; i < 31; i++) if (fmask & (1L << i)) { --- 7231,7236 ---- *************** alpha_expand_epilogue () *** 7674,7682 **** reg_offset += 8; } - if (imask & (1UL << 31)) - reg_offset += 8; - for (i = 0; i < 31; ++i) if (fmask & (1L << i)) { --- 7651,7656 ---- diff -Nrcpad gcc-3.3.5/gcc/config/alpha/alpha.h gcc-3.3.6/gcc/config/alpha/alpha.h *** gcc-3.3.5/gcc/config/alpha/alpha.h 2004-08-27 00:01:15.000000000 +0000 --- gcc-3.3.6/gcc/config/alpha/alpha.h 2004-09-30 19:36:28.000000000 +0000 *************** do { \ *** 1299,1304 **** --- 1299,1305 ---- #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 26) #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26) #define DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (64) + #define DWARF_ZERO_REG 31 /* Describe how we implement __builtin_eh_return. */ #define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 16 : INVALID_REGNUM) diff -Nrcpad gcc-3.3.5/gcc/config/alpha/alpha.md gcc-3.3.6/gcc/config/alpha/alpha.md *** gcc-3.3.5/gcc/config/alpha/alpha.md 2004-05-28 00:02:03.000000000 +0000 --- gcc-3.3.6/gcc/config/alpha/alpha.md 2004-12-05 19:58:42.000000000 +0000 *************** *** 80,85 **** --- 80,86 ---- (UNSPECV_PLDGP2 11) ; prologue ldgp (UNSPECV_SET_TP 12) (UNSPECV_RPCC 13) + (UNSPECV_SETJMPR_ER 14) ; builtin_setjmp_receiver fragment ]) ;; Where necessary, the suffixes _le and _be are used to distinguish between *************** fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi *** 6764,6833 **** "jmp $31,(%0),0" [(set_attr "type" "ibr")]) ! (define_insn "*builtin_setjmp_receiver_er_sl_1" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && TARGET_AS_CAN_SUBTRACT_LABELS" ! "lda $27,$LSJ%=-%l0($27)\n$LSJ%=:") ! ! (define_insn "*builtin_setjmp_receiver_er_1" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "br $27,$LSJ%=\n$LSJ%=:" ! [(set_attr "type" "ibr")]) ! ! (define_split ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF ! && prev_nonnote_insn (insn) == operands[0]" ! [(const_int 0)] ! " ! { ! emit_note (NULL, NOTE_INSN_DELETED); ! DONE; ! }") ! ! (define_insn "*builtin_setjmp_receiver_1" [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] "TARGET_ABI_OSF" ! "br $27,$LSJ%=\n$LSJ%=:\;ldgp $29,0($27)" ! [(set_attr "length" "12") ! (set_attr "type" "multi")]) ! (define_expand "builtin_setjmp_receiver_er" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR) (set (match_dup 1) (unspec_volatile:DI [(match_dup 2) (match_dup 3)] UNSPECV_LDGP1)) (set (match_dup 1) (unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_LDGP2))] - "" { operands[1] = pic_offset_table_rtx; operands[2] = gen_rtx_REG (Pmode, 27); operands[3] = GEN_INT (alpha_next_sequence_number++); ! }) ! (define_expand "builtin_setjmp_receiver" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_ABI_OSF" ! { ! if (TARGET_EXPLICIT_RELOCS) ! { ! emit_insn (gen_builtin_setjmp_receiver_er (operands[0])); ! DONE; ! } ! }) ! (define_expand "exception_receiver_er" ! [(set (match_dup 0) ! (unspec_volatile:DI [(match_dup 1) (match_dup 2)] UNSPECV_LDGP1)) ! (set (match_dup 0) ! (unspec:DI [(match_dup 0) (match_dup 2)] UNSPEC_LDGP2))] ! "" ! { ! operands[0] = pic_offset_table_rtx; ! operands[1] = gen_rtx_REG (Pmode, 26); ! operands[2] = GEN_INT (alpha_next_sequence_number++); ! }) (define_expand "exception_receiver" [(unspec_volatile [(match_dup 0)] UNSPECV_EHR)] --- 6765,6808 ---- "jmp $31,(%0),0" [(set_attr "type" "ibr")]) ! (define_expand "builtin_setjmp_receiver" [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] "TARGET_ABI_OSF" ! "") ! (define_insn_and_split "*builtin_setjmp_receiver_1" ! [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR)] ! "TARGET_ABI_OSF" ! { ! if (TARGET_EXPLICIT_RELOCS) ! return "#"; ! else ! return "br $27,$LSJ%=\n$LSJ%=:\;ldgp $29,0($27)"; ! } ! "&& TARGET_EXPLICIT_RELOCS && reload_completed" ! [(unspec_volatile [(match_dup 0)] UNSPECV_SETJMPR_ER) (set (match_dup 1) (unspec_volatile:DI [(match_dup 2) (match_dup 3)] UNSPECV_LDGP1)) (set (match_dup 1) (unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_LDGP2))] { operands[1] = pic_offset_table_rtx; operands[2] = gen_rtx_REG (Pmode, 27); operands[3] = GEN_INT (alpha_next_sequence_number++); ! } ! [(set_attr "length" "12") ! (set_attr "type" "multi")]) ! (define_insn "*builtin_setjmp_receiver_er_sl_1" ! [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR_ER)] ! "TARGET_ABI_OSF && TARGET_EXPLICIT_RELOCS && TARGET_AS_CAN_SUBTRACT_LABELS" ! "lda $27,$LSJ%=-%l0($27)\n$LSJ%=:") ! (define_insn "*builtin_setjmp_receiver_er_1" ! [(unspec_volatile [(match_operand 0 "" "")] UNSPECV_SETJMPR_ER)] ! "TARGET_ABI_OSF && TARGET_EXPLICIT_RELOCS" ! "br $27,$LSJ%=\n$LSJ%=:" ! [(set_attr "type" "ibr")]) (define_expand "exception_receiver" [(unspec_volatile [(match_dup 0)] UNSPECV_EHR)] *************** fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi *** 6835,6862 **** { if (TARGET_LD_BUGGY_LDGP) operands[0] = alpha_gp_save_rtx (); - else if (TARGET_EXPLICIT_RELOCS) - { - emit_insn (gen_exception_receiver_er ()); - DONE; - } else operands[0] = const0_rtx; }) - (define_insn "*exception_receiver_1" - [(unspec_volatile [(const_int 0)] UNSPECV_EHR)] - "! TARGET_LD_BUGGY_LDGP" - "ldgp $29,0($26)" - [(set_attr "length" "8") - (set_attr "type" "multi")]) - (define_insn "*exception_receiver_2" [(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)] ! "TARGET_LD_BUGGY_LDGP" "ldq $29,%0" [(set_attr "type" "ild")]) (define_expand "nonlocal_goto_receiver" [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) (set (reg:DI 27) (mem:DI (reg:DI 29))) --- 6810,6847 ---- { if (TARGET_LD_BUGGY_LDGP) operands[0] = alpha_gp_save_rtx (); else operands[0] = const0_rtx; }) (define_insn "*exception_receiver_2" [(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)] ! "TARGET_ABI_OSF && TARGET_LD_BUGGY_LDGP" "ldq $29,%0" [(set_attr "type" "ild")]) + (define_insn_and_split "*exception_receiver_1" + [(unspec_volatile [(const_int 0)] UNSPECV_EHR)] + "TARGET_ABI_OSF" + { + if (TARGET_EXPLICIT_RELOCS) + return "ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*"; + else + return "ldgp $29,0($26)"; + } + "&& TARGET_EXPLICIT_RELOCS && reload_completed" + [(set (match_dup 0) + (unspec_volatile:DI [(match_dup 1) (match_dup 2)] UNSPECV_LDGP1)) + (set (match_dup 0) + (unspec:DI [(match_dup 0) (match_dup 2)] UNSPEC_LDGP2))] + { + operands[0] = pic_offset_table_rtx; + operands[1] = gen_rtx_REG (Pmode, 26); + operands[2] = GEN_INT (alpha_next_sequence_number++); + } + [(set_attr "length" "8") + (set_attr "type" "multi")]) + (define_expand "nonlocal_goto_receiver" [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) (set (reg:DI 27) (mem:DI (reg:DI 29))) diff -Nrcpad gcc-3.3.5/gcc/config/alpha/qrnnd.asm gcc-3.3.6/gcc/config/alpha/qrnnd.asm *** gcc-3.3.5/gcc/config/alpha/qrnnd.asm 2000-04-15 16:34:38.000000000 +0000 --- gcc-3.3.6/gcc/config/alpha/qrnnd.asm 2004-09-30 19:36:28.000000000 +0000 *************** *** 26,31 **** --- 26,35 ---- # Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA. + #ifdef __ELF__ + .section .note.GNU-stack,"" + #endif + .set noreorder .set noat diff -Nrcpad gcc-3.3.5/gcc/config/freebsd-spec.h gcc-3.3.6/gcc/config/freebsd-spec.h *** gcc-3.3.5/gcc/config/freebsd-spec.h 2003-03-12 02:38:01.000000000 +0000 --- gcc-3.3.6/gcc/config/freebsd-spec.h 2005-01-14 02:06:26.000000000 +0000 *************** is built with the --enable-threads confi *** 130,142 **** %{pg: -lc_p} \ }" #else ! #if FBSD_MAJOR >= 5 ! #define FBSD_LIB_SPEC " \ ! %{!shared: \ ! %{!pg: %{pthread:-lc_r} -lc} \ ! %{pg: %{pthread:-lc_r_p} -lc_p} \ ! }" ! #else #define FBSD_LIB_SPEC " \ %{!shared: \ %{!pg: \ --- 130,136 ---- %{pg: -lc_p} \ }" #else ! #if FBSD_MAJOR < 5 #define FBSD_LIB_SPEC " \ %{!shared: \ %{!pg: \ *************** is built with the --enable-threads confi *** 146,150 **** --- 140,150 ---- %{!pthread:-lc_p} \ %{pthread:-lc_r_p}} \ }" + #else + #define FBSD_LIB_SPEC " \ + %{!shared: \ + %{!pg: %{pthread:-lpthread} -lc} \ + %{pg: %{pthread:-lpthread_p} -lc_p} \ + }" #endif #endif diff -Nrcpad gcc-3.3.5/gcc/config/i386/i386.c gcc-3.3.6/gcc/config/i386/i386.c *** gcc-3.3.5/gcc/config/i386/i386.c 2004-05-18 05:07:52.000000000 +0000 --- gcc-3.3.6/gcc/config/i386/i386.c 2004-12-12 21:00:44.000000000 +0000 *************** q_regs_operand (op, mode) *** 3609,3614 **** --- 3609,3628 ---- return ANY_QI_REG_P (op); } + /* Return true if op is an flags register. */ + + int + flags_reg_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + if (mode != VOIDmode && GET_MODE (op) != mode) + return 0; + return (GET_CODE (op) == REG + && REGNO (op) == FLAGS_REG + && GET_MODE (op) != VOIDmode); + } + /* Return true if op is a NON_Q_REGS class register. */ int *************** aligned_operand (op, mode) *** 3969,3974 **** --- 3983,3996 ---- /* Didn't find one -- this must be an aligned address. */ return 1; } + + int + compare_operator (op, mode) + rtx op; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + return GET_CODE (op) == COMPARE; + } /* Return true if the constant is something that can be loaded with a special instruction. Only handle 0.0 and 1.0; others are less diff -Nrcpad gcc-3.3.5/gcc/config/i386/i386.h gcc-3.3.6/gcc/config/i386/i386.h *** gcc-3.3.5/gcc/config/i386/i386.h 2004-02-06 19:43:31.000000000 +0000 --- gcc-3.3.6/gcc/config/i386/i386.h 2004-12-12 21:00:47.000000000 +0000 *************** do { \ *** 3319,3324 **** --- 3319,3325 ---- SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, \ {"nonmemory_no_elim_operand", {CONST_INT, REG, SUBREG}}, \ {"index_register_operand", {SUBREG, REG}}, \ + {"flags_reg_operand", {REG}}, \ {"q_regs_operand", {SUBREG, REG}}, \ {"non_q_regs_operand", {SUBREG, REG}}, \ {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU, UNORDERED, \ *************** do { \ *** 3354,3359 **** --- 3355,3361 ---- {"fp_register_operand", {REG}}, \ {"register_and_not_fp_reg_operand", {REG}}, \ {"vector_move_operand", {CONST_VECTOR, SUBREG, REG, MEM}}, \ + {"compare_operator", {COMPARE}}, /* A list of predicates that do special things with modes, and so should not elicit warnings for VOIDmode match_operand. */ diff -Nrcpad gcc-3.3.5/gcc/config/i386/i386.md gcc-3.3.6/gcc/config/i386/i386.md *** gcc-3.3.5/gcc/config/i386/i386.md 2004-04-28 17:00:03.000000000 +0000 --- gcc-3.3.6/gcc/config/i386/i386.md 2005-01-23 05:15:59.000000000 +0000 *************** *** 1188,1197 **** "" "xchg{l}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "athlon_decode" "vector") - (set_attr "mode" "SI") - (set_attr "modrm" "0") (set_attr "ppro_uops" "few")]) (define_expand "movhi" --- 1188,1196 ---- "" "xchg{l}\t%1, %0" [(set_attr "type" "imov") + (set_attr "mode" "SI") (set_attr "pent_pair" "np") (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) (define_expand "movhi" *************** *** 1304,1315 **** (match_operand:HI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] ! "TARGET_PARTIAL_REG_STALL" ! "xchg{w}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") ! (set_attr "mode" "HI") ! (set_attr "modrm" "0") (set_attr "ppro_uops" "few")]) (define_insn "*swaphi_2" --- 1303,1314 ---- (match_operand:HI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] ! "!TARGET_PARTIAL_REG_STALL || optimize_size" ! "xchg{l}\t%k1, %k0" [(set_attr "type" "imov") + (set_attr "mode" "SI") (set_attr "pent_pair" "np") ! (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) (define_insn "*swaphi_2" *************** *** 1317,1328 **** (match_operand:HI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] ! "! TARGET_PARTIAL_REG_STALL" ! "xchg{l}\t%k1, %k0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") ! (set_attr "mode" "SI") ! (set_attr "modrm" "0") (set_attr "ppro_uops" "few")]) (define_expand "movstricthi" --- 1316,1327 ---- (match_operand:HI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] ! "TARGET_PARTIAL_REG_STALL" ! "xchg{w}\t%1, %0" [(set_attr "type" "imov") + (set_attr "mode" "HI") (set_attr "pent_pair" "np") ! (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) (define_expand "movstricthi" *************** *** 1470,1486 **** DONE; }) ! (define_insn "*swapqi" [(set (match_operand:QI 0 "register_operand" "+r") (match_operand:QI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] ! "" ! "xchg{b}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "QI") ! (set_attr "modrm" "0") (set_attr "ppro_uops" "few")]) (define_expand "movstrictqi" --- 1469,1498 ---- DONE; }) ! (define_insn "*swapqi_1" [(set (match_operand:QI 0 "register_operand" "+r") (match_operand:QI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] ! "!TARGET_PARTIAL_REG_STALL || optimize_size" ! "xchg{l}\t%k1, %k0" [(set_attr "type" "imov") + (set_attr "mode" "SI") (set_attr "pent_pair" "np") + (set_attr "athlon_decode" "vector") + (set_attr "ppro_uops" "few")]) + + (define_insn "*swapqi_2" + [(set (match_operand:QI 0 "register_operand" "+q") + (match_operand:QI 1 "register_operand" "+q")) + (set (match_dup 1) + (match_dup 0))] + "TARGET_PARTIAL_REG_STALL" + "xchg{b}\t%1, %0" + [(set_attr "type" "imov") (set_attr "mode" "QI") ! (set_attr "pent_pair" "np") ! (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) (define_expand "movstrictqi" *************** *** 1987,1999 **** "TARGET_64BIT" "xchg{q}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "athlon_decode" "vector") - (set_attr "mode" "DI") - (set_attr "modrm" "0") (set_attr "ppro_uops" "few")]) - (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "general_operand" ""))] --- 1999,2009 ---- "TARGET_64BIT" "xchg{q}\t%1, %0" [(set_attr "type" "imov") + (set_attr "mode" "DI") (set_attr "pent_pair" "np") (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "general_operand" ""))] *************** *** 7559,7575 **** "" "") ! (define_insn "*testqi_1" [(set (reg 17) ! (compare (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm,r") ! (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n")) ! (const_int 0)))] ! "ix86_match_ccmode (insn, CCNOmode)" { if (which_alternative == 3) { ! if (GET_CODE (operands[1]) == CONST_INT ! && (INTVAL (operands[1]) & 0xffffff00)) operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff); return "test{l}\t{%1, %k0|%k0, %1}"; } --- 7569,7589 ---- "" "") ! (define_insn "*testqi_1_maybe_si" [(set (reg 17) ! (compare ! (and:QI ! (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm,r") ! (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n")) ! (const_int 0)))] ! "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) ! && ix86_match_ccmode (insn, ! GET_CODE (operands[1]) == CONST_INT ! && INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)" { if (which_alternative == 3) { ! if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) < 0) operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff); return "test{l}\t{%1, %k0|%k0, %1}"; } *************** *** 7580,7585 **** --- 7594,7611 ---- (set_attr "mode" "QI,QI,QI,SI") (set_attr "pent_pair" "uv,np,uv,np")]) + (define_insn "*testqi_1" + [(set (reg 17) + (compare (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm") + (match_operand:QI 1 "nonmemory_operand" "n,n,qn")) + (const_int 0)))] + "ix86_match_ccmode (insn, CCNOmode)" + "test{b}\t{%1, %0|%0, %1}" + [(set_attr "type" "test") + (set_attr "modrm" "0,1,1") + (set_attr "mode" "QI") + (set_attr "pent_pair" "uv,np,uv")]) + (define_expand "testqi_ext_ccno_0" [(set (reg:CCNO 17) (compare:CCNO *************** *** 7697,7747 **** "#") (define_split ! [(set (reg 17) ! (compare (zero_extract ! (match_operand 0 "nonimmediate_operand" "") ! (match_operand 1 "const_int_operand" "") ! (match_operand 2 "const_int_operand" "")) ! (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))] { ! HOST_WIDE_INT len = INTVAL (operands[1]); ! HOST_WIDE_INT pos = INTVAL (operands[2]); HOST_WIDE_INT mask; enum machine_mode mode, submode; ! mode = GET_MODE (operands[0]); ! if (GET_CODE (operands[0]) == MEM) { /* ??? Combine likes to put non-volatile mem extractions in QImode no matter the size of the test. So find a mode that works. */ ! if (! MEM_VOLATILE_P (operands[0])) { mode = smallest_mode_for_size (pos + len, MODE_INT); ! operands[0] = adjust_address (operands[0], mode, 0); } } ! else if (GET_CODE (operands[0]) == SUBREG ! && (submode = GET_MODE (SUBREG_REG (operands[0])), GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (submode)) && pos + len <= GET_MODE_BITSIZE (submode)) { /* Narrow a paradoxical subreg to prevent partial register stalls. */ mode = submode; ! operands[0] = SUBREG_REG (operands[0]); } else if (mode == HImode && pos + len <= 8) { /* Small HImode tests can be converted to QImode. */ mode = QImode; ! operands[0] = gen_lowpart (QImode, operands[0]); } mask = ((HOST_WIDE_INT)1 << (pos + len)) - 1; mask &= ~(((HOST_WIDE_INT)1 << pos) - 1); ! operands[3] = gen_rtx_AND (mode, operands[0], gen_int_mode (mask, mode)); }) ;; Convert HImode/SImode test instructions with immediate to QImode ones. --- 7723,7775 ---- "#") (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(zero_extract ! (match_operand 2 "nonimmediate_operand" "") ! (match_operand 3 "const_int_operand" "") ! (match_operand 4 "const_int_operand" "")) ! (const_int 0)]))] "ix86_match_ccmode (insn, CCNOmode)" ! [(set (match_dup 0) (match_op_dup 1 [(match_dup 2) (const_int 0)]))] { ! rtx val = operands[2]; ! HOST_WIDE_INT len = INTVAL (operands[3]); ! HOST_WIDE_INT pos = INTVAL (operands[4]); HOST_WIDE_INT mask; enum machine_mode mode, submode; ! mode = GET_MODE (val); ! if (GET_CODE (val) == MEM) { /* ??? Combine likes to put non-volatile mem extractions in QImode no matter the size of the test. So find a mode that works. */ ! if (! MEM_VOLATILE_P (val)) { mode = smallest_mode_for_size (pos + len, MODE_INT); ! val = adjust_address (val, mode, 0); } } ! else if (GET_CODE (val) == SUBREG ! && (submode = GET_MODE (SUBREG_REG (val)), GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (submode)) && pos + len <= GET_MODE_BITSIZE (submode)) { /* Narrow a paradoxical subreg to prevent partial register stalls. */ mode = submode; ! val = SUBREG_REG (val); } else if (mode == HImode && pos + len <= 8) { /* Small HImode tests can be converted to QImode. */ mode = QImode; ! val = gen_lowpart (QImode, val); } mask = ((HOST_WIDE_INT)1 << (pos + len)) - 1; mask &= ~(((HOST_WIDE_INT)1 << pos) - 1); ! operands[2] = gen_rtx_AND (mode, val, gen_int_mode (mask, mode)); }) ;; Convert HImode/SImode test instructions with immediate to QImode ones. *************** *** 7750,7795 **** ;; Do the converison only post-reload to avoid limiting of the register class ;; to QI regs. (define_split ! [(set (reg 17) ! (compare ! (and (match_operand 0 "register_operand" "") ! (match_operand 1 "const_int_operand" "")) ! (const_int 0)))] "reload_completed ! && QI_REG_P (operands[0]) && ((ix86_match_ccmode (insn, CCZmode) ! && !(INTVAL (operands[1]) & ~(255 << 8))) || (ix86_match_ccmode (insn, CCNOmode) ! && !(INTVAL (operands[1]) & ~(127 << 8)))) ! && GET_MODE (operands[0]) != QImode" ! [(set (reg:CCNO 17) ! (compare:CCNO ! (and:SI (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8)) ! (match_dup 1)) ! (const_int 0)))] ! "operands[0] = gen_lowpart (SImode, operands[0]); ! operands[1] = gen_int_mode (INTVAL (operands[1]) >> 8, SImode);") (define_split ! [(set (reg 17) ! (compare ! (and (match_operand 0 "nonimmediate_operand" "") ! (match_operand 1 "const_int_operand" "")) ! (const_int 0)))] "reload_completed ! && (!REG_P (operands[0]) || ANY_QI_REG_P (operands[0])) && ((ix86_match_ccmode (insn, CCZmode) ! && !(INTVAL (operands[1]) & ~255)) || (ix86_match_ccmode (insn, CCNOmode) ! && !(INTVAL (operands[1]) & ~127))) ! && GET_MODE (operands[0]) != QImode" ! [(set (reg:CCNO 17) ! (compare:CCNO ! (and:QI (match_dup 0) ! (match_dup 1)) ! (const_int 0)))] ! "operands[0] = gen_lowpart (QImode, operands[0]); ! operands[1] = gen_lowpart (QImode, operands[1]);") ;; %%% This used to optimize known byte-wide and operations to memory, --- 7778,7821 ---- ;; Do the converison only post-reload to avoid limiting of the register class ;; to QI regs. (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(and (match_operand 2 "register_operand" "") ! (match_operand 3 "const_int_operand" "")) ! (const_int 0)]))] "reload_completed ! && QI_REG_P (operands[2]) ! && GET_MODE (operands[2]) != QImode && ((ix86_match_ccmode (insn, CCZmode) ! && !(INTVAL (operands[3]) & ~(255 << 8))) || (ix86_match_ccmode (insn, CCNOmode) ! && !(INTVAL (operands[3]) & ~(127 << 8))))" ! [(set (match_dup 0) ! (match_op_dup 1 ! [(and:SI (zero_extract:SI (match_dup 2) (const_int 8) (const_int 8)) ! (match_dup 3)) ! (const_int 0)]))] ! "operands[2] = gen_lowpart (SImode, operands[2]); ! operands[3] = gen_int_mode (INTVAL (operands[3]) >> 8, SImode);") (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(and (match_operand 2 "nonimmediate_operand" "") ! (match_operand 3 "const_int_operand" "")) ! (const_int 0)]))] "reload_completed ! && GET_MODE (operands[2]) != QImode ! && (!REG_P (operands[2]) || ANY_QI_REG_P (operands[2])) && ((ix86_match_ccmode (insn, CCZmode) ! && !(INTVAL (operands[3]) & ~255)) || (ix86_match_ccmode (insn, CCNOmode) ! && !(INTVAL (operands[3]) & ~127)))" ! [(set (match_dup 0) ! (match_op_dup 1 [(and:QI (match_dup 2) (match_dup 3)) ! (const_int 0)]))] ! "operands[2] = gen_lowpart (QImode, operands[2]); ! operands[3] = gen_lowpart (QImode, operands[3]);") ;; %%% This used to optimize known byte-wide and operations to memory, *************** *** 8066,8072 **** [(set_attr "type" "alu1") (set_attr "mode" "QI")]) ! (define_insn "*andqi_2" [(set (reg 17) (compare (and:QI (match_operand:QI 1 "nonimmediate_operand" "%0,0,0") --- 8092,8098 ---- [(set_attr "type" "alu1") (set_attr "mode" "QI")]) ! (define_insn "*andqi_2_maybe_si" [(set (reg 17) (compare (and:QI (match_operand:QI 1 "nonimmediate_operand" "%0,0,0") *************** *** 8074,8086 **** (const_int 0))) (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm,*r") (and:QI (match_dup 1) (match_dup 2)))] ! "ix86_match_ccmode (insn, CCNOmode) ! && ix86_binary_operator_ok (AND, QImode, operands)" { if (which_alternative == 2) { ! if (GET_CODE (operands[2]) == CONST_INT ! && (INTVAL (operands[2]) & 0xffffff00)) operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff); return "and{l}\t{%2, %k0|%k0, %2}"; } --- 8100,8113 ---- (const_int 0))) (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm,*r") (and:QI (match_dup 1) (match_dup 2)))] ! "ix86_binary_operator_ok (AND, QImode, operands) ! && ix86_match_ccmode (insn, ! GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) >= 0 ? CCNOmode : CCZmode)" { if (which_alternative == 2) { ! if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0) operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff); return "and{l}\t{%2, %k0|%k0, %2}"; } *************** *** 8089,8094 **** --- 8116,8135 ---- [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) + (define_insn "*andqi_2" + [(set (reg 17) + (compare (and:QI + (match_operand:QI 1 "nonimmediate_operand" "%0,0") + (match_operand:QI 2 "general_operand" "qim,qi")) + (const_int 0))) + (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm") + (and:QI (match_dup 1) (match_dup 2)))] + "ix86_match_ccmode (insn, CCNOmode) + && ix86_binary_operator_ok (AND, QImode, operands)" + "and{b}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "QI")]) + (define_insn "*andqi_2_slp" [(set (reg 17) (compare (and:QI *************** *** 10147,10163 **** (set_attr "mode" "DI")]) (define_split ! [(set (reg 17) ! (compare (not:DI (match_operand:DI 1 "nonimmediate_operand" "")) ! (const_int 0))) ! (set (match_operand:DI 0 "nonimmediate_operand" "") ! (not:DI (match_dup 1)))] "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO (xor:DI (match_dup 1) (const_int -1)) ! (const_int 0))) ! (set (match_dup 0) ! (xor:DI (match_dup 1) (const_int -1)))])] "") (define_expand "one_cmplsi2" --- 10188,10206 ---- (set_attr "mode" "DI")]) (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 2 "compare_operator" ! [(not:DI (match_operand:DI 3 "nonimmediate_operand" "")) ! (const_int 0)])) ! (set (match_operand:DI 1 "nonimmediate_operand" "") ! (not:DI (match_dup 3)))] "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (match_dup 0) ! (match_op_dup 2 ! [(xor:DI (match_dup 3) (const_int -1)) ! (const_int 0)])) ! (set (match_dup 1) ! (xor:DI (match_dup 3) (const_int -1)))])] "") (define_expand "one_cmplsi2" *************** *** 10196,10212 **** (set_attr "mode" "SI")]) (define_split ! [(set (reg 17) ! (compare (not:SI (match_operand:SI 1 "nonimmediate_operand" "")) ! (const_int 0))) ! (set (match_operand:SI 0 "nonimmediate_operand" "") ! (not:SI (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO (xor:SI (match_dup 1) (const_int -1)) ! (const_int 0))) ! (set (match_dup 0) ! (xor:SI (match_dup 1) (const_int -1)))])] "") ;; ??? Currently never generated - xor is used instead. --- 10239,10256 ---- (set_attr "mode" "SI")]) (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 2 "compare_operator" ! [(not:SI (match_operand:SI 3 "nonimmediate_operand" "")) ! (const_int 0)])) ! (set (match_operand:SI 1 "nonimmediate_operand" "") ! (not:SI (match_dup 3)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (match_dup 0) ! (match_op_dup 2 [(xor:SI (match_dup 3) (const_int -1)) ! (const_int 0)])) ! (set (match_dup 1) ! (xor:SI (match_dup 3) (const_int -1)))])] "") ;; ??? Currently never generated - xor is used instead. *************** *** 10223,10239 **** (set_attr "mode" "SI")]) (define_split ! [(set (reg 17) ! (compare (not:SI (match_operand:SI 1 "register_operand" "")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "") ! (zero_extend:DI (not:SI (match_dup 1))))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO (xor:SI (match_dup 1) (const_int -1)) ! (const_int 0))) ! (set (match_dup 0) ! (zero_extend:DI (xor:SI (match_dup 1) (const_int -1))))])] "") (define_expand "one_cmplhi2" --- 10267,10284 ---- (set_attr "mode" "SI")]) (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 2 "compare_operator" ! [(not:SI (match_operand:SI 3 "register_operand" "")) ! (const_int 0)])) ! (set (match_operand:DI 1 "register_operand" "") ! (zero_extend:DI (not:SI (match_dup 3))))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (match_dup 0) ! (match_op_dup 2 [(xor:SI (match_dup 3) (const_int -1)) ! (const_int 0)])) ! (set (match_dup 1) ! (zero_extend:DI (xor:SI (match_dup 3) (const_int -1))))])] "") (define_expand "one_cmplhi2" *************** *** 10263,10279 **** (set_attr "mode" "HI")]) (define_split ! [(set (reg 17) ! (compare (not:HI (match_operand:HI 1 "nonimmediate_operand" "")) ! (const_int 0))) ! (set (match_operand:HI 0 "nonimmediate_operand" "") ! (not:HI (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO (xor:HI (match_dup 1) (const_int -1)) ! (const_int 0))) ! (set (match_dup 0) ! (xor:HI (match_dup 1) (const_int -1)))])] "") ;; %%% Potential partial reg stall on alternative 1. What to do? --- 10308,10325 ---- (set_attr "mode" "HI")]) (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 2 "compare_operator" ! [(not:HI (match_operand:HI 3 "nonimmediate_operand" "")) ! (const_int 0)])) ! (set (match_operand:HI 1 "nonimmediate_operand" "") ! (not:HI (match_dup 3)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (match_dup 0) ! (match_op_dup 2 [(xor:HI (match_dup 3) (const_int -1)) ! (const_int 0)])) ! (set (match_dup 1) ! (xor:HI (match_dup 3) (const_int -1)))])] "") ;; %%% Potential partial reg stall on alternative 1. What to do? *************** *** 10306,10322 **** (set_attr "mode" "QI")]) (define_split ! [(set (reg 17) ! (compare (not:QI (match_operand:QI 1 "nonimmediate_operand" "")) ! (const_int 0))) ! (set (match_operand:QI 0 "nonimmediate_operand" "") ! (not:QI (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO (xor:QI (match_dup 1) (const_int -1)) ! (const_int 0))) ! (set (match_dup 0) ! (xor:QI (match_dup 1) (const_int -1)))])] "") ;; Arithmetic shift instructions --- 10352,10369 ---- (set_attr "mode" "QI")]) (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 2 "compare_operator" ! [(not:QI (match_operand:QI 3 "nonimmediate_operand" "")) ! (const_int 0)])) ! (set (match_operand:QI 1 "nonimmediate_operand" "") ! (not:QI (match_dup 3)))] "ix86_match_ccmode (insn, CCNOmode)" ! [(parallel [(set (match_dup 0) ! (match_op_dup 2 [(xor:QI (match_dup 3) (const_int -1)) ! (const_int 0)])) ! (set (match_dup 1) ! (xor:QI (match_dup 3) (const_int -1)))])] "") ;; Arithmetic shift instructions *************** *** 16639,16648 **** (set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0) (subreg:TI (match_dup 7) 0)))] { ! /* If op2 == op3, op3 will be clobbered before it is used. ! This should be optimized out though. */ if (operands_match_p (operands[2], operands[3])) ! abort (); PUT_MODE (operands[1], GET_MODE (operands[0])); if (operands_match_p (operands[0], operands[4])) operands[6] = operands[4], operands[7] = operands[2]; --- 16686,16697 ---- (set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0) (subreg:TI (match_dup 7) 0)))] { ! /* If op2 == op3, op3 would be clobbered before it is used. */ if (operands_match_p (operands[2], operands[3])) ! { ! emit_move_insn (operands[0], operands[2]); ! DONE; ! } PUT_MODE (operands[1], GET_MODE (operands[0])); if (operands_match_p (operands[0], operands[4])) operands[6] = operands[4], operands[7] = operands[2]; *************** *** 16863,16914 **** ; instruction size is unchanged, except in the %eax case for ; which it is increased by one byte, hence the ! optimize_size. (define_split ! [(set (reg 17) ! (compare (and (match_operand 1 "aligned_operand" "") ! (match_operand 2 "const_int_operand" "")) ! (const_int 0))) ! (set (match_operand 0 "register_operand" "") ! (and (match_dup 1) (match_dup 2)))] "! TARGET_PARTIAL_REG_STALL && reload_completed /* Ensure that the operand will remain sign-extended immediate. */ ! && ix86_match_ccmode (insn, INTVAL (operands[2]) >= 0 ? CCNOmode : CCZmode) && ! optimize_size ! && ((GET_MODE (operands[0]) == HImode && ! TARGET_FAST_PREFIX) ! || (GET_MODE (operands[0]) == QImode && TARGET_PROMOTE_QImode))" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO (and:SI (match_dup 1) (match_dup 2)) ! (const_int 0))) ! (set (match_dup 0) ! (and:SI (match_dup 1) (match_dup 2)))])] ! "operands[2] ! = gen_int_mode (INTVAL (operands[2]) ! & GET_MODE_MASK (GET_MODE (operands[0])), ! SImode); ! operands[0] = gen_lowpart (SImode, operands[0]); ! operands[1] = gen_lowpart (SImode, operands[1]);") ; Don't promote the QImode tests, as i386 doesn't have encoding of ; the TEST instruction with 32-bit sign-extended immediate and thus ; the instruction size would at least double, which is not what we ; want even with ! optimize_size. (define_split ! [(set (reg 17) ! (compare (and (match_operand:HI 0 "aligned_operand" "") ! (match_operand:HI 1 "const_int_operand" "")) ! (const_int 0)))] "! TARGET_PARTIAL_REG_STALL && reload_completed /* Ensure that the operand will remain sign-extended immediate. */ ! && ix86_match_ccmode (insn, INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode) && ! TARGET_FAST_PREFIX && ! optimize_size" ! [(set (reg:CCNO 17) ! (compare:CCNO (and:SI (match_dup 0) (match_dup 1)) ! (const_int 0)))] ! "operands[1] ! = gen_int_mode (INTVAL (operands[1]) ! & GET_MODE_MASK (GET_MODE (operands[0])), ! SImode); ! operands[0] = gen_lowpart (SImode, operands[0]);") (define_split [(set (match_operand 0 "register_operand" "") --- 16912,16967 ---- ; instruction size is unchanged, except in the %eax case for ; which it is increased by one byte, hence the ! optimize_size. (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 2 "compare_operator" ! [(and (match_operand 3 "aligned_operand" "") ! (match_operand 4 "const_int_operand" "")) ! (const_int 0)])) ! (set (match_operand 1 "register_operand" "") ! (and (match_dup 3) (match_dup 4)))] "! TARGET_PARTIAL_REG_STALL && reload_completed /* Ensure that the operand will remain sign-extended immediate. */ ! && ix86_match_ccmode (insn, INTVAL (operands[4]) >= 0 ? CCNOmode : CCZmode) && ! optimize_size ! && ((GET_MODE (operands[1]) == HImode && ! TARGET_FAST_PREFIX) ! || (GET_MODE (operands[1]) == QImode && TARGET_PROMOTE_QImode))" ! [(parallel [(set (match_dup 0) ! (match_op_dup 2 [(and:SI (match_dup 3) (match_dup 4)) ! (const_int 0)])) ! (set (match_dup 1) ! (and:SI (match_dup 3) (match_dup 4)))])] ! { ! operands[4] ! = gen_int_mode (INTVAL (operands[4]) ! & GET_MODE_MASK (GET_MODE (operands[1])), SImode); ! operands[1] = gen_lowpart (SImode, operands[1]); ! operands[3] = gen_lowpart (SImode, operands[3]); ! }) ; Don't promote the QImode tests, as i386 doesn't have encoding of ; the TEST instruction with 32-bit sign-extended immediate and thus ; the instruction size would at least double, which is not what we ; want even with ! optimize_size. (define_split ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(and (match_operand:HI 2 "aligned_operand" "") ! (match_operand:HI 3 "const_int_operand" "")) ! (const_int 0)]))] "! TARGET_PARTIAL_REG_STALL && reload_completed /* Ensure that the operand will remain sign-extended immediate. */ ! && ix86_match_ccmode (insn, INTVAL (operands[3]) >= 0 ? CCNOmode : CCZmode) && ! TARGET_FAST_PREFIX && ! optimize_size" ! [(set (match_dup 0) ! (match_op_dup 1 [(and:SI (match_dup 2) (match_dup 3)) ! (const_int 0)]))] ! { ! operands[3] ! = gen_int_mode (INTVAL (operands[3]) ! & GET_MODE_MASK (GET_MODE (operands[2])), SImode); ! operands[2] = gen_lowpart (SImode, operands[2]); ! }) (define_split [(set (match_operand 0 "register_operand" "") *************** *** 17081,17093 **** ;; Don't compare memory with zero, load and use a test instead. (define_peephole2 ! [(set (reg 17) ! (compare (match_operand:SI 0 "memory_operand" "") ! (const_int 0))) (match_scratch:SI 3 "r")] "ix86_match_ccmode (insn, CCNOmode) && ! optimize_size" ! [(set (match_dup 3) (match_dup 0)) ! (set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))] "") ;; NOT is not pairable on Pentium, while XOR is, but one byte longer. --- 17134,17147 ---- ;; Don't compare memory with zero, load and use a test instead. (define_peephole2 ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(match_operand:SI 2 "memory_operand" "") ! (const_int 0)])) (match_scratch:SI 3 "r")] "ix86_match_ccmode (insn, CCNOmode) && ! optimize_size" ! [(set (match_dup 3) (match_dup 2)) ! (set (match_dup 0) (match_op_dup 1 [(match_dup 3) (const_int 0)]))] "") ;; NOT is not pairable on Pentium, while XOR is, but one byte longer. *************** *** 17151,17227 **** ;; versions if we're concerned about partial register stalls. (define_peephole2 ! [(set (reg 17) ! (compare (and:SI (match_operand:SI 0 "register_operand" "") ! (match_operand:SI 1 "immediate_operand" "")) ! (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode) ! && (true_regnum (operands[0]) != 0 ! || (GET_CODE (operands[1]) == CONST_INT ! && CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'K'))) ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" [(parallel ! [(set (reg:CCNO 17) ! (compare:CCNO (and:SI (match_dup 0) ! (match_dup 1)) ! (const_int 0))) ! (set (match_dup 0) ! (and:SI (match_dup 0) (match_dup 1)))])] "") ;; We don't need to handle HImode case, because it will be promoted to SImode ;; on ! TARGET_PARTIAL_REG_STALL (define_peephole2 ! [(set (reg 17) ! (compare (and:QI (match_operand:QI 0 "register_operand" "") ! (match_operand:QI 1 "immediate_operand" "")) ! (const_int 0)))] "! TARGET_PARTIAL_REG_STALL && ix86_match_ccmode (insn, CCNOmode) ! && true_regnum (operands[0]) != 0 ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" [(parallel ! [(set (reg:CCNO 17) ! (compare:CCNO (and:QI (match_dup 0) ! (match_dup 1)) ! (const_int 0))) ! (set (match_dup 0) ! (and:QI (match_dup 0) (match_dup 1)))])] "") (define_peephole2 ! [(set (reg 17) ! (compare ! (and:SI ! (zero_extract:SI ! (match_operand 0 "ext_register_operand" "") ! (const_int 8) ! (const_int 8)) ! (match_operand 1 "const_int_operand" "")) ! (const_int 0)))] "! TARGET_PARTIAL_REG_STALL && ix86_match_ccmode (insn, CCNOmode) ! && true_regnum (operands[0]) != 0 ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" ! [(parallel [(set (reg:CCNO 17) ! (compare:CCNO ! (and:SI ! (zero_extract:SI ! (match_dup 0) ! (const_int 8) ! (const_int 8)) ! (match_dup 1)) ! (const_int 0))) ! (set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8)) (and:SI (zero_extract:SI ! (match_dup 0) (const_int 8) (const_int 8)) ! (match_dup 1)))])] "") ;; Don't do logical operations with memory inputs. --- 17205,17281 ---- ;; versions if we're concerned about partial register stalls. (define_peephole2 ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(and:SI (match_operand:SI 2 "register_operand" "") ! (match_operand:SI 3 "immediate_operand" "")) ! (const_int 0)]))] "ix86_match_ccmode (insn, CCNOmode) ! && (true_regnum (operands[2]) != 0 ! || (GET_CODE (operands[3]) == CONST_INT ! && CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'K'))) ! && peep2_reg_dead_p (1, operands[2])" [(parallel ! [(set (match_dup 0) ! (match_op_dup 1 [(and:SI (match_dup 2) (match_dup 3)) ! (const_int 0)])) ! (set (match_dup 2) ! (and:SI (match_dup 2) (match_dup 3)))])] "") ;; We don't need to handle HImode case, because it will be promoted to SImode ;; on ! TARGET_PARTIAL_REG_STALL (define_peephole2 ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(and:QI (match_operand:QI 2 "register_operand" "") ! (match_operand:QI 3 "immediate_operand" "")) ! (const_int 0)]))] "! TARGET_PARTIAL_REG_STALL && ix86_match_ccmode (insn, CCNOmode) ! && true_regnum (operands[2]) != 0 ! && peep2_reg_dead_p (1, operands[2])" [(parallel ! [(set (match_dup 0) ! (match_op_dup 1 [(and:QI (match_dup 2) (match_dup 3)) ! (const_int 0)])) ! (set (match_dup 2) ! (and:QI (match_dup 2) (match_dup 3)))])] "") (define_peephole2 ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(and:SI ! (zero_extract:SI ! (match_operand 2 "ext_register_operand" "") ! (const_int 8) ! (const_int 8)) ! (match_operand 3 "const_int_operand" "")) ! (const_int 0)]))] "! TARGET_PARTIAL_REG_STALL && ix86_match_ccmode (insn, CCNOmode) ! && true_regnum (operands[2]) != 0 ! && peep2_reg_dead_p (1, operands[2])" ! [(parallel [(set (match_dup 0) ! (match_op_dup 1 ! [(and:SI ! (zero_extract:SI ! (match_dup 2) ! (const_int 8) ! (const_int 8)) ! (match_dup 3)) ! (const_int 0)])) ! (set (zero_extract:SI (match_dup 2) (const_int 8) (const_int 8)) (and:SI (zero_extract:SI ! (match_dup 2) (const_int 8) (const_int 8)) ! (match_dup 3)))])] "") ;; Don't do logical operations with memory inputs. *************** *** 17523,17588 **** "") ;; Convert compares with 1 to shorter inc/dec operations when CF is not ! ;; required and register dies. ! (define_peephole2 ! [(set (reg 17) ! (compare (match_operand:SI 0 "register_operand" "") ! (match_operand:SI 1 "incdec_operand" "")))] ! "ix86_match_ccmode (insn, CCGCmode) ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" ! [(parallel [(set (reg:CCGC 17) ! (compare:CCGC (match_dup 0) ! (match_dup 1))) ! (clobber (match_dup 0))])] ! "") ! ! (define_peephole2 ! [(set (reg 17) ! (compare (match_operand:HI 0 "register_operand" "") ! (match_operand:HI 1 "incdec_operand" "")))] ! "ix86_match_ccmode (insn, CCGCmode) ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" ! [(parallel [(set (reg:CCGC 17) ! (compare:CCGC (match_dup 0) ! (match_dup 1))) ! (clobber (match_dup 0))])] ! "") ! ! (define_peephole2 ! [(set (reg 17) ! (compare (match_operand:QI 0 "register_operand" "") ! (match_operand:QI 1 "incdec_operand" "")))] ! "ix86_match_ccmode (insn, CCGCmode) ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" ! [(parallel [(set (reg:CCGC 17) ! (compare:CCGC (match_dup 0) ! (match_dup 1))) ! (clobber (match_dup 0))])] ! "") ! ! ;; Convert compares with 128 to shorter add -128 ! (define_peephole2 ! [(set (reg 17) ! (compare (match_operand:SI 0 "register_operand" "") ! (const_int 128)))] ! "ix86_match_ccmode (insn, CCGCmode) ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" ! [(parallel [(set (reg:CCGC 17) ! (compare:CCGC (match_dup 0) ! (const_int 128))) ! (clobber (match_dup 0))])] ! "") ! (define_peephole2 ! [(set (reg 17) ! (compare (match_operand:HI 0 "register_operand" "") ! (const_int 128)))] ! "ix86_match_ccmode (insn, CCGCmode) ! && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" ! [(parallel [(set (reg:CCGC 17) ! (compare:CCGC (match_dup 0) ! (const_int 128))) ! (clobber (match_dup 0))])] "") (define_peephole2 --- 17577,17596 ---- "") ;; Convert compares with 1 to shorter inc/dec operations when CF is not ! ;; required and register dies. Similarly for 128 to plus -128. (define_peephole2 ! [(set (match_operand 0 "flags_reg_operand" "") ! (match_operator 1 "compare_operator" ! [(match_operand 2 "register_operand" "") ! (match_operand 3 "const_int_operand" "")]))] ! "(INTVAL (operands[3]) == -1 ! || INTVAL (operands[3]) == 1 ! || INTVAL (operands[3]) == 128) ! && ix86_match_ccmode (insn, CCGCmode) ! && peep2_reg_dead_p (1, operands[2])" ! [(parallel [(set (match_dup 0) ! (match_op_dup 1 [(match_dup 2) (match_dup 3)])) ! (clobber (match_dup 2))])] "") (define_peephole2 *************** *** 17780,17788 **** return "call\t%P1"; } if (SIBLING_CALL_P (insn)) ! return "jmp\t%*%1"; else ! return "call\t%*%1"; } [(set_attr "type" "callv")]) --- 17788,17796 ---- return "call\t%P1"; } if (SIBLING_CALL_P (insn)) ! return "jmp\t%A1"; else ! return "call\t%A1"; } [(set_attr "type" "callv")]) diff -Nrcpad gcc-3.3.5/gcc/config/i386/i386-protos.h gcc-3.3.6/gcc/config/i386/i386-protos.h *** gcc-3.3.5/gcc/config/i386/i386-protos.h 2003-07-08 19:16:44.000000000 +0000 --- gcc-3.3.6/gcc/config/i386/i386-protos.h 2004-12-12 21:00:44.000000000 +0000 *************** extern int memory_displacement_operand P *** 88,93 **** --- 88,95 ---- extern int cmpsi_operand PARAMS ((rtx, enum machine_mode)); extern int long_memory_operand PARAMS ((rtx, enum machine_mode)); extern int aligned_operand PARAMS ((rtx, enum machine_mode)); + extern int compare_operator PARAMS ((rtx, enum machine_mode)); + extern int flags_reg_operand PARAMS ((rtx, enum machine_mode)); extern enum machine_mode ix86_cc_mode PARAMS ((enum rtx_code, rtx, rtx)); extern int ix86_expand_movstr PARAMS ((rtx, rtx, rtx, rtx)); diff -Nrcpad gcc-3.3.5/gcc/config/ia64/ia64.c gcc-3.3.6/gcc/config/ia64/ia64.c *** gcc-3.3.5/gcc/config/ia64/ia64.c 2004-09-17 17:56:32.000000000 +0000 --- gcc-3.3.6/gcc/config/ia64/ia64.c 2005-03-29 00:32:01.000000000 +0000 *************** ia64_expand_epilogue (sibcall_p) *** 2884,2893 **** preserve those input registers used as arguments to the sibling call. It is unclear how to compute that number here. */ if (current_frame_info.n_input_regs != 0) ! emit_insn (gen_alloc (gen_rtx_REG (DImode, fp), ! GEN_INT (0), GEN_INT (0), ! GEN_INT (current_frame_info.n_input_regs), ! GEN_INT (0))); } } --- 2884,2896 ---- preserve those input registers used as arguments to the sibling call. It is unclear how to compute that number here. */ if (current_frame_info.n_input_regs != 0) ! { ! rtx n_inputs = GEN_INT (current_frame_info.n_input_regs); ! insn = emit_insn (gen_alloc (gen_rtx_REG (DImode, fp), ! const0_rtx, const0_rtx, ! n_inputs, const0_rtx)); ! RTX_FRAME_RELATED_P (insn) = 1; ! } } } *************** ia64_assemble_integer (x, size, aligned_ *** 3021,3035 **** int aligned_p; { if (size == (TARGET_ILP32 ? 4 : 8) - && aligned_p && !(TARGET_NO_PIC || TARGET_AUTO_PIC) && GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x)) { ! if (TARGET_ILP32) ! fputs ("\tdata4\t@fptr(", asm_out_file); ! else ! fputs ("\tdata8\t@fptr(", asm_out_file); output_addr_const (asm_out_file, x); fputs (")\n", asm_out_file); return true; --- 3024,3039 ---- int aligned_p; { if (size == (TARGET_ILP32 ? 4 : 8) && !(TARGET_NO_PIC || TARGET_AUTO_PIC) && GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x)) { ! static const char * const directive[2][2] = { ! /* 64-bit pointer */ /* 32-bit pointer */ ! { "\tdata8.ua\t@fptr(", "\tdata4.ua\t@fptr("}, /* unaligned */ ! { "\tdata8\t@fptr(", "\tdata4\t@fptr("} /* aligned */ ! }; ! fputs (directive[aligned_p != 0][TARGET_ILP32 != 0], asm_out_file); output_addr_const (asm_out_file, x); fputs (")\n", asm_out_file); return true; *************** ia64_encode_section_info (decl, first) *** 7356,7362 **** if (encoding == symbol_str[1]) return; /* ??? Sdata became thread or thread becaome not thread. Lose. */ ! abort (); } len = strlen (symbol_str); --- 7360,7367 ---- if (encoding == symbol_str[1]) return; /* ??? Sdata became thread or thread becaome not thread. Lose. */ ! if (encoding == 's' || symbol_str[1] == 's') ! abort (); } len = strlen (symbol_str); *************** process_set (asm_out_file, pat) *** 7451,7463 **** { dest_regno = REGNO (dest); ! /* If this isn't the final destination for ar.pfs, the alloc ! shouldn't have been marked frame related. */ ! if (dest_regno != current_frame_info.reg_save_ar_pfs) ! abort (); ! ! fprintf (asm_out_file, "\t.save ar.pfs, r%d\n", ! ia64_dbx_register_number (dest_regno)); return 1; } --- 7456,7479 ---- { dest_regno = REGNO (dest); ! /* If this is the final destination for ar.pfs, then this must ! be the alloc in the prologue. */ ! if (dest_regno == current_frame_info.reg_save_ar_pfs) ! fprintf (asm_out_file, "\t.save ar.pfs, r%d\n", ! ia64_dbx_register_number (dest_regno)); ! else ! { ! /* This must be an alloc before a sibcall. We must drop the ! old frame info. The easiest way to drop the old frame ! info is to ensure we had a ".restore sp" directive ! followed by a new prologue. If the procedure doesn't ! have a memory-stack frame, we'll issue a dummy ".restore ! sp" now. */ ! if (current_frame_info.total_size == 0 && !frame_pointer_needed) ! /* if haven't done process_epilogue() yet, do it now */ ! process_epilogue (); ! fprintf (asm_out_file, "\t.prologue\n"); ! } return 1; } diff -Nrcpad gcc-3.3.5/gcc/config/ia64/unwind-ia64.c gcc-3.3.6/gcc/config/ia64/unwind-ia64.c *** gcc-3.3.5/gcc/config/ia64/unwind-ia64.c 2003-12-12 16:10:09.000000000 +0000 --- gcc-3.3.6/gcc/config/ia64/unwind-ia64.c 2005-04-06 19:11:35.000000000 +0000 *************** uw_install_context (struct _Unwind_Conte *** 2176,2181 **** --- 2176,2183 ---- "(p6) ldf.fill f22 = [r28] \n\t" "cmp.ne p7, p0 = r0, r29 \n\t" ";; \n\t" + "ld8 r27 = [r20], 8 \n\t" + ";; \n\t" "ld8 r28 = [r20], 8 \n\t" "(p7) ldf.fill f23 = [r29] \n\t" "cmp.ne p6, p0 = r0, r22 \n\t" diff -Nrcpad gcc-3.3.5/gcc/config/m68hc11/t-m68hc11-gas gcc-3.3.6/gcc/config/m68hc11/t-m68hc11-gas *** gcc-3.3.5/gcc/config/m68hc11/t-m68hc11-gas 2003-10-04 19:45:57.000000000 +0000 --- gcc-3.3.6/gcc/config/m68hc11/t-m68hc11-gas 2005-01-28 22:21:39.000000000 +0000 *************** DPBIT = dp-bit.c *** 53,59 **** dp-bit.c: $(srcdir)/config/fp-bit.c echo '#define SMALL_MACHINE' >> dp-bit.c echo '#define CMPtype HItype' >> dp-bit.c ! echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c echo '#endif' >> dp-bit.c cat $(srcdir)/config/fp-bit.c >> dp-bit.c --- 53,59 ---- dp-bit.c: $(srcdir)/config/fp-bit.c echo '#define SMALL_MACHINE' >> dp-bit.c echo '#define CMPtype HItype' >> dp-bit.c ! echo '#ifdef __LITTLE_ENDIAN__' >> dp-bit.c echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c echo '#endif' >> dp-bit.c cat $(srcdir)/config/fp-bit.c >> dp-bit.c diff -Nrcpad gcc-3.3.5/gcc/config/mips/mips.c gcc-3.3.6/gcc/config/mips/mips.c *** gcc-3.3.5/gcc/config/mips/mips.c 2003-06-27 11:44:23.000000000 +0000 --- gcc-3.3.6/gcc/config/mips/mips.c 2005-01-08 14:33:33.000000000 +0000 *************** *** 1,6 **** /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and --- 1,6 ---- /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and *************** copy_file_data (to, from) *** 6562,6587 **** fatal_io_error ("can't close temp file"); } ! /* Emit either a label, .comm, or .lcomm directive, and mark that the symbol ! is used, so that we don't emit an .extern for it in mips_asm_file_end. */ void ! mips_declare_object (stream, name, init_string, final_string, size) FILE *stream; const char *name; ! const char *init_string; ! const char *final_string; ! int size; { ! fputs (init_string, stream); /* "", "\t.comm\t", or "\t.lcomm\t" */ assemble_name (stream, name); ! fprintf (stream, final_string, size); /* ":\n", ",%u\n", ",%u\n" */ if (TARGET_GP_OPT) { tree name_tree = get_identifier (name); TREE_ASM_WRITTEN (name_tree) = 1; } } /* Return the bytes needed to compute the frame pointer from the current --- 6562,6645 ---- fatal_io_error ("can't close temp file"); } ! /* Implement ASM_OUTPUT_ALIGNED_DECL_COMMON. This is usually the same as ! the elfos.h version, but we also need to handle -muninit-const-in-rodata ! and the limitations of the SGI o32 assembler. */ void ! mips_output_aligned_decl_common (stream, decl, name, size, align) FILE *stream; + tree decl; const char *name; ! unsigned HOST_WIDE_INT size; ! unsigned int align; { ! const char *format; ! ! /* If the target wants uninitialized const declarations in ! .rdata then don't put them in .comm. */ ! if (TARGET_EMBEDDED_DATA && TARGET_UNINIT_CONST_IN_RODATA ! && TREE_CODE (decl) == VAR_DECL && TREE_READONLY (decl) ! && (DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node)) ! { ! if (TREE_PUBLIC (decl) && DECL_NAME (decl)) ! targetm.asm_out.globalize_label (stream, name); ! ! readonly_data_section (); ! ASM_OUTPUT_ALIGN (stream, floor_log2 (align / BITS_PER_UNIT)); ! ! format = ACONCAT ((":\n\t.space\t", HOST_WIDE_INT_PRINT_UNSIGNED, ! "\n", NULL)); ! mips_declare_object (stream, name, "", format, size); ! } ! #ifdef TARGET_IRIX6 ! /* The SGI o32 assembler doesn't accept an alignment, so round up ! the size instead. */ ! else if (mips_abi == ABI_32 && !TARGET_GAS) ! { ! size += (align / BITS_PER_UNIT) - 1; ! size -= size % (align / BITS_PER_UNIT); ! format = ACONCAT ((",", HOST_WIDE_INT_PRINT_UNSIGNED, "\n", NULL)); ! mips_declare_object (stream, name, "\n\t.comm\t", format, size); ! } ! #endif ! else ! { ! format = ACONCAT ((",", HOST_WIDE_INT_PRINT_UNSIGNED, ",%u\n", NULL)); ! mips_declare_object (stream, name, "\n\t.comm\t", format, ! size, align / BITS_PER_UNIT); ! } ! } ! ! /* Emit either a label, .comm, or .lcomm directive. When using assembler ! macros, mark the symbol as written so that mips_file_end won't emit an ! .extern for it. STREAM is the output file, NAME is the name of the ! symbol, INIT_STRING is the string that should be written before the ! symbol and FINAL_STRING is the string that shoulbe written after it. ! FINAL_STRING is a printf() format that consumes the remaining arguments. */ ! ! void ! mips_declare_object VPARAMS ((FILE *stream, const char *name, ! const char *init_string, ! const char *final_string, ...)) ! { ! VA_OPEN (ap, final_string); ! VA_FIXEDARG (ap, FILE *, stream); ! VA_FIXEDARG (ap, const char *, name); ! VA_FIXEDARG (ap, const char *, init_string); ! VA_FIXEDARG (ap, const char *, final_string); ! ! fputs (init_string, stream); assemble_name (stream, name); ! vfprintf (stream, final_string, ap); if (TARGET_GP_OPT) { tree name_tree = get_identifier (name); TREE_ASM_WRITTEN (name_tree) = 1; } + + VA_CLOSE (ap); } /* Return the bytes needed to compute the frame pointer from the current diff -Nrcpad gcc-3.3.5/gcc/config/mips/mips.h gcc-3.3.6/gcc/config/mips/mips.h *** gcc-3.3.5/gcc/config/mips/mips.h 2003-05-30 12:00:42.000000000 +0000 --- gcc-3.3.6/gcc/config/mips/mips.h 2005-01-08 14:33:34.000000000 +0000 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 ! 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and --- 1,6 ---- /* Definitions of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 ! 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and *************** while (0) *** 4326,4353 **** /* This says how to define a global common symbol. */ ! #define ASM_OUTPUT_ALIGNED_DECL_COMMON(STREAM, DECL, NAME, SIZE, ALIGN) \ ! do { \ ! /* If the target wants uninitialized const declarations in \ ! .rdata then don't put them in .comm */ \ ! if (TARGET_EMBEDDED_DATA && TARGET_UNINIT_CONST_IN_RODATA \ ! && TREE_CODE (DECL) == VAR_DECL && TREE_READONLY (DECL) \ ! && (DECL_INITIAL (DECL) == 0 \ ! || DECL_INITIAL (DECL) == error_mark_node)) \ ! { \ ! if (TREE_PUBLIC (DECL) && DECL_NAME (DECL)) \ ! (*targetm.asm_out.globalize_label) (STREAM, NAME); \ ! \ ! readonly_data_section (); \ ! ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \ ! mips_declare_object (STREAM, NAME, "", ":\n\t.space\t%u\n", \ ! (SIZE)); \ ! } \ ! else \ ! mips_declare_object (STREAM, NAME, "\n\t.comm\t", ",%u\n", \ ! (SIZE)); \ ! } while (0) ! /* This says how to define a local common symbol (ie, not visible to linker). */ --- 4326,4332 ---- /* This says how to define a global common symbol. */ ! #define ASM_OUTPUT_ALIGNED_DECL_COMMON mips_output_aligned_decl_common /* This says how to define a local common symbol (ie, not visible to linker). */ diff -Nrcpad gcc-3.3.5/gcc/config/mips/mips.md gcc-3.3.6/gcc/config/mips/mips.md *** gcc-3.3.5/gcc/config/mips/mips.md 2004-03-27 10:35:03.000000000 +0000 --- gcc-3.3.6/gcc/config/mips/mips.md 2005-01-08 14:11:12.000000000 +0000 *************** *** 1,6 **** ;; Mips.md Machine Description for MIPS based processors ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! ;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ;; Contributed by A. Lichnewsky, lich@inria.inria.fr ;; Changes by Michael Meissner, meissner@osf.org ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and --- 1,6 ---- ;; Mips.md Machine Description for MIPS based processors ;; Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! ;; 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc. ;; Contributed by A. Lichnewsky, lich@inria.inria.fr ;; Changes by Michael Meissner, meissner@osf.org ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and *************** *** 163,169 **** ;; Describe a user's asm statement. (define_asm_attributes ! [(set_attr "type" "multi")]) ;; whether or not generating calls to position independent functions (define_attr "abicalls" "no,yes" --- 163,170 ---- ;; Describe a user's asm statement. (define_asm_attributes ! [(set_attr "type" "multi") ! (set_attr "can_delay" "no")]) ;; whether or not generating calls to position independent functions (define_attr "abicalls" "no,yes" diff -Nrcpad gcc-3.3.5/gcc/config/mips/mips-protos.h gcc-3.3.6/gcc/config/mips/mips-protos.h *** gcc-3.3.5/gcc/config/mips/mips-protos.h 2003-01-31 23:51:22.000000000 +0000 --- gcc-3.3.6/gcc/config/mips/mips-protos.h 2005-01-08 14:33:32.000000000 +0000 *************** *** 1,6 **** /* Prototypes of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2001, 2002 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and --- 1,6 ---- /* Prototypes of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2001, 2002, 2005 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and *************** extern void iris6_asm_output_align PARA *** 36,44 **** extern const char * current_section_name PARAMS ((void)); extern unsigned int current_section_flags PARAMS ((void)); extern int mips_can_use_return_insn PARAMS ((void)); ! extern void mips_declare_object PARAMS ((FILE *, const char *, ! const char *, ! const char *, int)); extern void mips_expand_epilogue PARAMS ((void)); extern void mips_expand_prologue PARAMS ((void)); extern void mips_output_filename PARAMS ((FILE *, const char *)); --- 36,48 ---- extern const char * current_section_name PARAMS ((void)); extern unsigned int current_section_flags PARAMS ((void)); extern int mips_can_use_return_insn PARAMS ((void)); ! extern void mips_output_aligned_decl_common ! PARAMS ((FILE *, tree, const char *, ! unsigned HOST_WIDE_INT, ! unsigned int)); ! extern void mips_declare_object ! PARAMS ((FILE *, const char *, const char *, ! const char *, ...)); extern void mips_expand_epilogue PARAMS ((void)); extern void mips_expand_prologue PARAMS ((void)); extern void mips_output_filename PARAMS ((FILE *, const char *)); diff -Nrcpad gcc-3.3.5/gcc/config/pa/pa32-linux.h gcc-3.3.6/gcc/config/pa/pa32-linux.h *** gcc-3.3.5/gcc/config/pa/pa32-linux.h 2002-12-06 02:54:38.000000000 +0000 --- gcc-3.3.6/gcc/config/pa/pa32-linux.h 2004-12-27 02:55:49.000000000 +0000 *************** Boston, MA 02111-1307, USA. */ *** 28,34 **** pointer into the frame. This target does not need multiple subspace stubs, so we allow sibcalls to all functions. */ #undef FUNCTION_OK_FOR_SIBCALL ! #define FUNCTION_OK_FOR_SIBCALL(DECL) 1 /* The libcall __canonicalize_funcptr_for_compare is referenced in crtend.o and the reference isn't resolved in objects that don't --- 28,34 ---- pointer into the frame. This target does not need multiple subspace stubs, so we allow sibcalls to all functions. */ #undef FUNCTION_OK_FOR_SIBCALL ! #define FUNCTION_OK_FOR_SIBCALL(DECL) (!TARGET_PORTABLE_RUNTIME) /* The libcall __canonicalize_funcptr_for_compare is referenced in crtend.o and the reference isn't resolved in objects that don't diff -Nrcpad gcc-3.3.5/gcc/config/pa/pa.md gcc-3.3.6/gcc/config/pa/pa.md *** gcc-3.3.5/gcc/config/pa/pa.md 2004-07-25 21:19:28.000000000 +0000 --- gcc-3.3.6/gcc/config/pa/pa.md 2005-02-11 23:50:46.000000000 +0000 *************** *** 4393,4417 **** (define_expand "anddi3" [(set (match_operand:DI 0 "register_operand" "") ! (and:DI (match_operand:DI 1 "arith_double_operand" "") (match_operand:DI 2 "arith_double_operand" "")))] "" " { ! if (TARGET_64BIT) ! { ! /* One operand must be a register operand. */ ! if (!register_operand (operands[1], DImode) ! && !register_operand (operands[2], DImode)) ! FAIL; ! } ! else ! { ! /* Both operands must be register operands. */ ! if (!register_operand (operands[1], DImode) ! || !register_operand (operands[2], DImode)) ! FAIL; ! } }") (define_insn "" --- 4393,4406 ---- (define_expand "anddi3" [(set (match_operand:DI 0 "register_operand" "") ! (and:DI (match_operand:DI 1 "register_operand" "") (match_operand:DI 2 "arith_double_operand" "")))] "" " { ! /* Both operands must be register operands. */ ! if (!TARGET_64BIT && !register_operand (operands[2], DImode)) ! FAIL; }") (define_insn "" *************** *** 4472,4485 **** (define_expand "iordi3" [(set (match_operand:DI 0 "register_operand" "") ! (ior:DI (match_operand:DI 1 "arith_double_operand" "") (match_operand:DI 2 "arith_double_operand" "")))] "" " { ! if (! register_operand (operands[1], DImode) ! || ! register_operand (operands[2], DImode)) ! /* Let GCC break this into word-at-a-time operations. */ FAIL; }") --- 4461,4473 ---- (define_expand "iordi3" [(set (match_operand:DI 0 "register_operand" "") ! (ior:DI (match_operand:DI 1 "register_operand" "") (match_operand:DI 2 "arith_double_operand" "")))] "" " { ! /* Both operands must be register operands. */ ! if (!TARGET_64BIT && !register_operand (operands[2], DImode)) FAIL; }") diff -Nrcpad gcc-3.3.5/gcc/config/rs6000/rs6000.c gcc-3.3.6/gcc/config/rs6000/rs6000.c *** gcc-3.3.5/gcc/config/rs6000/rs6000.c 2004-01-14 14:03:58.000000000 +0000 --- gcc-3.3.6/gcc/config/rs6000/rs6000.c 2004-12-01 06:13:16.000000000 +0000 *************** static int rs6000_sr_alias_set; *** 150,156 **** /* Call distance, overridden by -mlongcall and #pragma longcall(1). The only place that looks at this is rs6000_set_default_type_attributes; everywhere else should rely on the presence or absence of a longcall ! attribute on the function declaration. */ int rs6000_default_long_calls; const char *rs6000_longcall_switch; --- 150,157 ---- /* Call distance, overridden by -mlongcall and #pragma longcall(1). The only place that looks at this is rs6000_set_default_type_attributes; everywhere else should rely on the presence or absence of a longcall ! attribute on the function declaration. Exception: init_cumulative_args ! looks at it too, for libcalls. */ int rs6000_default_long_calls; const char *rs6000_longcall_switch; *************** init_cumulative_args (cum, fntype, libna *** 2910,2919 **** cum->orig_nargs = cum->nargs_prototype; /* Check for a longcall attribute. */ ! if (fntype ! && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype)) ! && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype))) ! cum->call_cookie = CALL_LONG; if (TARGET_DEBUG_ARG) { --- 2911,2921 ---- cum->orig_nargs = cum->nargs_prototype; /* Check for a longcall attribute. */ ! if ((!fntype && rs6000_default_long_calls) ! || (fntype ! && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype)) ! && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype)))) ! cum->call_cookie |= CALL_LONG; if (TARGET_DEBUG_ARG) { *************** rs6000_emit_prologue () *** 10356,10363 **** rtx reg, mem, vrsave; int offset; ! /* Get VRSAVE onto a GPR. */ ! reg = gen_rtx_REG (SImode, 12); vrsave = gen_rtx_REG (SImode, VRSAVE_REGNO); if (TARGET_MACHO) emit_insn (gen_get_vrsave_internal (reg)); --- 10358,10367 ---- rtx reg, mem, vrsave; int offset; ! /* Get VRSAVE onto a GPR. Note that ABI_V4 might be using r12 ! as frame_reg_rtx and r11 as the static chain pointer for ! nested functions. */ ! reg = gen_rtx_REG (SImode, 0); vrsave = gen_rtx_REG (SImode, VRSAVE_REGNO); if (TARGET_MACHO) emit_insn (gen_get_vrsave_internal (reg)); diff -Nrcpad gcc-3.3.5/gcc/config/rs6000/rs6000.md gcc-3.3.6/gcc/config/rs6000/rs6000.md *** gcc-3.3.5/gcc/config/rs6000/rs6000.md 2004-03-08 04:20:45.000000000 +0000 --- gcc-3.3.6/gcc/config/rs6000/rs6000.md 2004-12-24 23:17:06.000000000 +0000 *************** *** 3124,3184 **** }" [(set_attr "length" "8")]) - (define_insn_and_split "*andsi3_internal7" - [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") - (compare:CC (and:SI (match_operand:SI 0 "gpc_reg_operand" "r,r") - (match_operand:SI 1 "mask_operand_wrap" "i,i")) - (const_int 0))) - (clobber (match_scratch:SI 3 "=r,r"))] - "TARGET_POWERPC64" - "#" - "TARGET_POWERPC64" - [(parallel [(set (match_dup 2) - (compare:CC (and:SI (rotate:SI (match_dup 0) (match_dup 4)) - (match_dup 5)) - (const_int 0))) - (clobber (match_dup 3))])] - " - { - int mb = extract_MB (operands[1]); - int me = extract_ME (operands[1]); - operands[4] = GEN_INT (me + 1); - operands[5] = GEN_INT (~((HOST_WIDE_INT) -1 << (33 + me - mb))); - }" - [(set_attr "type" "delayed_compare,compare") - (set_attr "length" "4,8")]) - - (define_insn_and_split "*andsi3_internal8" - [(set (match_operand:CC 3 "cc_reg_operand" "=x,??y") - (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "r,r") - (match_operand:SI 2 "mask_operand_wrap" "i,i")) - (const_int 0))) - (set (match_operand:SI 0 "gpc_reg_operand" "=r,r") - (and:SI (match_dup 1) - (match_dup 2)))] - "TARGET_POWERPC64" - "#" - "TARGET_POWERPC64" - [(parallel [(set (match_dup 3) - (compare:CC (and:SI (rotate:SI (match_dup 1) (match_dup 4)) - (match_dup 5)) - (const_int 0))) - (set (match_dup 0) - (and:SI (rotate:SI (match_dup 1) (match_dup 4)) - (match_dup 5)))]) - (set (match_dup 0) - (rotate:SI (match_dup 0) (match_dup 6)))] - " - { - int mb = extract_MB (operands[2]); - int me = extract_ME (operands[2]); - operands[4] = GEN_INT (me + 1); - operands[6] = GEN_INT (32 - (me + 1)); - operands[5] = GEN_INT (~((HOST_WIDE_INT) -1 << (33 + me - mb))); - }" - [(set_attr "type" "delayed_compare,compare") - (set_attr "length" "8,12")]) - (define_expand "iorsi3" [(set (match_operand:SI 0 "gpc_reg_operand" "") (ior:SI (match_operand:SI 1 "gpc_reg_operand" "") --- 3124,3129 ---- diff -Nrcpad gcc-3.3.5/gcc/config/s390/s390.md gcc-3.3.6/gcc/config/s390/s390.md *** gcc-3.3.5/gcc/config/s390/s390.md 2004-08-03 20:06:51.000000000 +0000 --- gcc-3.3.6/gcc/config/s390/s390.md 2005-01-27 23:38:39.000000000 +0000 *************** *** 910,920 **** }) (define_expand "reload_outti" ! [(parallel [(match_operand:TI 0 "memory_operand" "") (match_operand:TI 1 "register_operand" "d") (match_operand:DI 2 "register_operand" "=&a")])] "TARGET_64BIT" { s390_load_address (operands[2], XEXP (operands[0], 0)); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); --- 910,922 ---- }) (define_expand "reload_outti" ! [(parallel [(match_operand:TI 0 "" "") (match_operand:TI 1 "register_operand" "d") (match_operand:DI 2 "register_operand" "=&a")])] "TARGET_64BIT" { + if (GET_CODE (operands[0]) != MEM) + abort (); s390_load_address (operands[2], XEXP (operands[0], 0)); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); *************** *** 1060,1070 **** }) (define_expand "reload_outdi" ! [(parallel [(match_operand:DI 0 "memory_operand" "") (match_operand:DI 1 "register_operand" "d") (match_operand:SI 2 "register_operand" "=&a")])] "!TARGET_64BIT" { s390_load_address (operands[2], XEXP (operands[0], 0)); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); --- 1062,1074 ---- }) (define_expand "reload_outdi" ! [(parallel [(match_operand:DI 0 "" "") (match_operand:DI 1 "register_operand" "d") (match_operand:SI 2 "register_operand" "=&a")])] "!TARGET_64BIT" { + if (GET_CODE (operands[0]) != MEM) + abort (); s390_load_address (operands[2], XEXP (operands[0], 0)); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); *************** *** 1374,1384 **** }) (define_expand "reload_outdf" ! [(parallel [(match_operand:DF 0 "memory_operand" "") (match_operand:DF 1 "register_operand" "d") (match_operand:SI 2 "register_operand" "=&a")])] "!TARGET_64BIT" { s390_load_address (operands[2], XEXP (operands[0], 0)); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); --- 1378,1390 ---- }) (define_expand "reload_outdf" ! [(parallel [(match_operand:DF 0 "" "") (match_operand:DF 1 "register_operand" "d") (match_operand:SI 2 "register_operand" "=&a")])] "!TARGET_64BIT" { + if (GET_CODE (operands[0]) != MEM) + abort (); s390_load_address (operands[2], XEXP (operands[0], 0)); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); diff -Nrcpad gcc-3.3.5/gcc/config/sparc/sparc.c gcc-3.3.6/gcc/config/sparc/sparc.c *** gcc-3.3.5/gcc/config/sparc/sparc.c 2004-07-17 19:49:21.000000000 +0000 --- gcc-3.3.6/gcc/config/sparc/sparc.c 2004-10-14 06:54:26.000000000 +0000 *************** static void emit_hard_tfmode_operation P *** 178,183 **** --- 178,185 ---- static void sparc_encode_section_info PARAMS ((tree, int)); static void sparc_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree)); + static bool sparc_can_output_mi_thunk PARAMS ((tree, HOST_WIDE_INT, + HOST_WIDE_INT, tree)); /* Option handling. */ *************** enum processor_type sparc_cpu; *** 244,250 **** #undef TARGET_ASM_OUTPUT_MI_THUNK #define TARGET_ASM_OUTPUT_MI_THUNK sparc_output_mi_thunk #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK ! #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall struct gcc_target targetm = TARGET_INITIALIZER; --- 246,252 ---- #undef TARGET_ASM_OUTPUT_MI_THUNK #define TARGET_ASM_OUTPUT_MI_THUNK sparc_output_mi_thunk #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK ! #define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk struct gcc_target targetm = TARGET_INITIALIZER; *************** sparc_encode_section_info (decl, first) *** 8622,8639 **** SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1; } ! /* Output code to add DELTA to the first argument, and then jump to FUNCTION. ! Used for C++ multiple inheritance. */ static void sparc_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function) FILE *file; tree thunk_fndecl ATTRIBUTE_UNUSED; HOST_WIDE_INT delta; ! HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED; tree function; { ! rtx this, insn, funexp, delta_rtx, tmp; reload_completed = 1; no_new_pseudos = 1; --- 8624,8644 ---- SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1; } ! /* Output the assembler code for a thunk function. THUNK_DECL is the ! declaration for the thunk function itself, FUNCTION is the decl for ! the target function. DELTA is an immediate constant offset to be ! added to THIS. If VCALL_OFFSET is nonzero, the word at address ! (*THIS + VCALL_OFFSET) should be additionally added to THIS. */ static void sparc_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function) FILE *file; tree thunk_fndecl ATTRIBUTE_UNUSED; HOST_WIDE_INT delta; ! HOST_WIDE_INT vcall_offset; tree function; { ! rtx this, insn, funexp; reload_completed = 1; no_new_pseudos = 1; *************** sparc_output_mi_thunk (file, thunk_fndec *** 8650,8675 **** /* Add DELTA. When possible use a plain add, otherwise load it into a register first. */ ! delta_rtx = GEN_INT (delta); ! if (!SPARC_SIMM13_P (delta)) { rtx scratch = gen_rtx_REG (Pmode, 1); ! if (input_operand (delta_rtx, GET_MODE (scratch))) ! emit_insn (gen_rtx_SET (VOIDmode, scratch, delta_rtx)); else { ! if (TARGET_ARCH64) ! sparc_emit_set_const64 (scratch, delta_rtx); ! else ! sparc_emit_set_const32 (scratch, delta_rtx); } ! delta_rtx = scratch; ! } ! tmp = gen_rtx_PLUS (Pmode, this, delta_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, this, tmp)); /* Generate a tail call to the target function. */ if (! TREE_USED (function)) --- 8655,8727 ---- /* Add DELTA. When possible use a plain add, otherwise load it into a register first. */ ! if (delta) ! { ! rtx delta_rtx = GEN_INT (delta); ! ! if (! SPARC_SIMM13_P (delta)) ! { ! rtx scratch = gen_rtx_REG (Pmode, 1); ! emit_move_insn (scratch, delta_rtx); ! delta_rtx = scratch; ! } ! ! /* THIS += DELTA. */ ! emit_insn (gen_add2_insn (this, delta_rtx)); ! } ! ! /* Add the word at address (*THIS + VCALL_OFFSET). */ ! if (vcall_offset) { + rtx vcall_offset_rtx = GEN_INT (vcall_offset); rtx scratch = gen_rtx_REG (Pmode, 1); ! if (vcall_offset >= 0) ! abort (); ! ! /* SCRATCH = *THIS. */ ! emit_move_insn (scratch, gen_rtx_MEM (Pmode, this)); ! ! /* Prepare for adding VCALL_OFFSET. The difficulty is that we ! may not have any available scratch register at this point. */ ! if (SPARC_SIMM13_P (vcall_offset)) ! ; ! /* This is the case if ARCH64 (unless -ffixed-g5 is passed). */ ! else if (! fixed_regs[5] ! /* The below sequence is made up of at least 2 insns, ! while the default method may need only one. */ ! && vcall_offset < -8192) ! { ! rtx scratch2 = gen_rtx_REG (Pmode, 5); ! emit_move_insn (scratch2, vcall_offset_rtx); ! vcall_offset_rtx = scratch2; ! } else { ! rtx increment = GEN_INT (-4096); ! ! /* VCALL_OFFSET is a negative number whose typical range can be ! estimated as -32768..0 in 32-bit mode. In almost all cases ! it is therefore cheaper to emit multiple add insns than ! spilling and loading the constant into a register (at least ! 6 insns). */ ! while (! SPARC_SIMM13_P (vcall_offset)) ! { ! emit_insn (gen_add2_insn (scratch, increment)); ! vcall_offset += 4096; ! } ! vcall_offset_rtx = GEN_INT (vcall_offset); /* cannot be 0 */ } ! /* SCRATCH = *(*THIS + VCALL_OFFSET). */ ! emit_move_insn (scratch, gen_rtx_MEM (Pmode, ! gen_rtx_PLUS (Pmode, ! scratch, ! vcall_offset_rtx))); ! /* THIS += *(*THIS + VCALL_OFFSET). */ ! emit_insn (gen_add2_insn (this, scratch)); ! } /* Generate a tail call to the target function. */ if (! TREE_USED (function)) *************** sparc_output_mi_thunk (file, thunk_fndec *** 8697,8700 **** --- 8749,8766 ---- no_new_pseudos = 0; } + /* Return true if sparc_output_mi_thunk would be able to output the + assembler code for the thunk function specified by the arguments + it is passed, and false otherwise. */ + static bool + sparc_can_output_mi_thunk (thunk_fndecl, delta, vcall_offset, function) + tree thunk_fndecl ATTRIBUTE_UNUSED; + HOST_WIDE_INT delta ATTRIBUTE_UNUSED; + HOST_WIDE_INT vcall_offset; + tree function ATTRIBUTE_UNUSED; + { + /* Bound the loop used in the default method above. */ + return (vcall_offset >= -32768 || ! fixed_regs[5]); + } + #include "gt-sparc.h" diff -Nrcpad gcc-3.3.5/gcc/config/sparc/sparc.md gcc-3.3.6/gcc/config/sparc/sparc.md *** gcc-3.3.5/gcc/config/sparc/sparc.md 2004-07-17 19:49:21.000000000 +0000 --- gcc-3.3.6/gcc/config/sparc/sparc.md 2004-10-14 06:54:27.000000000 +0000 *************** *** 2048,2054 **** if (! CONSTANT_P (operands[1]) || input_operand (operands[1], DImode)) ; else if (TARGET_ARCH64 - && CONSTANT_P (operands[1]) && GET_CODE (operands[1]) != HIGH && GET_CODE (operands[1]) != LO_SUM) { --- 2048,2053 ---- diff -Nrcpad gcc-3.3.5/gcc/config/sparc/t-elf gcc-3.3.6/gcc/config/sparc/t-elf *** gcc-3.3.5/gcc/config/sparc/t-elf 2002-05-01 17:17:54.000000000 +0000 --- gcc-3.3.6/gcc/config/sparc/t-elf 2005-02-23 11:57:07.000000000 +0000 *************** INSTALL_LIBGCC = install-multilib *** 24,29 **** # Assemble startup files. crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES) ! $(GCC_FOR_TARGET) -c -o crti.o -x assembler $(srcdir)/config/sparc/sol2-ci.asm crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES) ! $(GCC_FOR_TARGET) -c -o crtn.o -x assembler $(srcdir)/config/sparc/sol2-cn.asm --- 24,29 ---- # Assemble startup files. crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES) ! $(GCC_FOR_TARGET) -c -o crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES) ! $(GCC_FOR_TARGET) -c -o crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm diff -Nrcpad gcc-3.3.5/gcc/config/vax/vax.c gcc-3.3.6/gcc/config/vax/vax.c *** gcc-3.3.5/gcc/config/vax/vax.c 2002-10-22 23:05:24.000000000 +0000 --- gcc-3.3.6/gcc/config/vax/vax.c 2004-12-28 06:29:59.000000000 +0000 *************** vax_address_cost (addr) *** 462,468 **** case CONST_INT: /* byte offsets cost nothing (on a VAX 2, they cost 1 cycle) */ if (offset == 0) ! offset = (unsigned)(INTVAL(addr)+128) > 256; break; case CONST: case SYMBOL_REF: --- 462,468 ---- case CONST_INT: /* byte offsets cost nothing (on a VAX 2, they cost 1 cycle) */ if (offset == 0) ! offset = (unsigned HOST_WIDE_INT)(INTVAL(addr)+128) > 256; break; case CONST: case SYMBOL_REF: *************** vax_rtx_cost (x) *** 595,607 **** fmt = "e"; /* all constant rotate counts are short */ break; case PLUS: - /* Check for small negative integer operand: subl2 can be used with - a short positive constant instead. */ - if (GET_CODE (XEXP (x, 1)) == CONST_INT) - if ((unsigned)(INTVAL (XEXP (x, 1)) + 63) < 127) - fmt = "e"; case MINUS: c = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */ case IOR: case XOR: c = 3; --- 595,607 ---- fmt = "e"; /* all constant rotate counts are short */ break; case PLUS: case MINUS: c = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */ + /* Small integer operands can use subl2 and addl2. */ + if ((GET_CODE (XEXP (x, 1)) == CONST_INT) + && (unsigned HOST_WIDE_INT)(INTVAL (XEXP (x, 1)) + 63) < 127) + fmt = "e"; + break; case IOR: case XOR: c = 3; *************** vax_rtx_cost (x) *** 611,617 **** c = 3; if (GET_CODE (XEXP (x, 0)) == CONST_INT) { ! if ((unsigned)~INTVAL (XEXP (x, 0)) > 63) c = 4; fmt = "e"; i = 1; --- 611,617 ---- c = 3; if (GET_CODE (XEXP (x, 0)) == CONST_INT) { ! if ((unsigned HOST_WIDE_INT)~INTVAL (XEXP (x, 0)) > 63) c = 4; fmt = "e"; i = 1; *************** vax_rtx_cost (x) *** 665,671 **** switch (code) { case CONST_INT: ! if ((unsigned)INTVAL (op) > 63 && GET_MODE (x) != QImode) c += 1; /* 2 on VAX 2 */ break; case CONST: --- 665,672 ---- switch (code) { case CONST_INT: ! if ((unsigned HOST_WIDE_INT)INTVAL (op) > 63 ! && GET_MODE (x) != QImode) c += 1; /* 2 on VAX 2 */ break; case CONST: diff -Nrcpad gcc-3.3.5/gcc/config/vax/vax.h gcc-3.3.6/gcc/config/vax/vax.h *** gcc-3.3.5/gcc/config/vax/vax.h 2002-10-22 23:05:24.000000000 +0000 --- gcc-3.3.6/gcc/config/vax/vax.h 2004-12-28 06:28:01.000000000 +0000 *************** enum reg_class { NO_REGS, ALL_REGS, LIM_ *** 800,810 **** Do not define this if the table should contain absolute addresses. */ #define CASE_VECTOR_PC_RELATIVE 1 - /* Define this if the case instruction drops through after the table - when the index is out of range. Don't define it if the case insn - jumps to the default label instead. */ - #define CASE_DROPS_THROUGH - /* Indicate that jump tables go in the text section. This is necessary when compiling PIC code. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 --- 800,805 ---- diff -Nrcpad gcc-3.3.5/gcc/config/vax/vax.md gcc-3.3.6/gcc/config/vax/vax.md *** gcc-3.3.5/gcc/config/vax/vax.md 2002-10-01 20:16:04.000000000 +0000 --- gcc-3.3.6/gcc/config/vax/vax.md 2004-12-28 06:28:01.000000000 +0000 *************** *** 1969,2036 **** "jmp (%0)") ;; This is here to accept 5 arguments (as passed by expand_end_case) ! ;; and pass the first 4 along to the casesi1 pattern that really does the work. (define_expand "casesi" ! [(match_operand:SI 0 "general_operand" "") ; index ! (match_operand:SI 1 "general_operand" "") ; lower ! (match_operand:SI 2 "general_operand" "") ; upper-lower ! (match_operand 3 "" "") ; table label ! (match_operand 4 "" "")] ; default label "" { ! emit_jump_insn (gen_casesi1 (operands[0], operands[1], ! operands[2], operands[3])); DONE; }) (define_insn "casesi1" ! [(set (pc) ! (if_then_else ! (leu (minus:SI (match_operand:SI 0 "general_operand" "g") ! (match_operand:SI 1 "general_operand" "g")) ! (match_operand:SI 2 "general_operand" "g")) ! (plus:SI (sign_extend:SI ! (mem:HI (plus:SI (mult:SI (minus:SI (match_dup 0) ! (match_dup 1)) ! (const_int 2)) ! (pc)))) ! (label_ref:SI (match_operand 3 "" ""))) ! (pc)))] ! "" ! "casel %0,%1,%2") ! ! ;; This can arise by simplification when operand 1 is a constant int. ! (define_insn "" ! [(set (pc) ! (if_then_else ! (leu (plus:SI (match_operand:SI 0 "general_operand" "g") ! (match_operand:SI 1 "const_int_operand" "n")) ! (match_operand:SI 2 "general_operand" "g")) ! (plus:SI (sign_extend:SI ! (mem:HI (plus:SI (mult:SI (plus:SI (match_dup 0) ! (match_dup 1)) ! (const_int 2)) ! (pc)))) ! (label_ref:SI (match_operand 3 "" ""))) ! (pc)))] ! "" ! "* ! { ! operands[1] = GEN_INT (-INTVAL (operands[1])); ! return \"casel %0,%1,%2\"; ! }") ! ! ;; This can arise by simplification when the base for the case insn is zero. ! (define_insn "" ! [(set (pc) ! (if_then_else (leu (match_operand:SI 0 "general_operand" "g") ! (match_operand:SI 1 "general_operand" "g")) ! (plus:SI (sign_extend:SI ! (mem:HI (plus:SI (mult:SI (match_dup 0) ! (const_int 2)) ! (pc)))) ! (label_ref:SI (match_operand 2 "" ""))) ! (pc)))] "" "casel %0,$0,%1") --- 1969,2031 ---- "jmp (%0)") ;; This is here to accept 5 arguments (as passed by expand_end_case) ! ;; and pass the first 4 along to the casesi1 pattern that really does ! ;; the actual casesi work. We emit a jump here to the default label ! ;; _before_ the casesi so that we can be sure that the casesi never ! ;; drops through. ! ;; This is suboptimal perhaps, but so is much of the rest of this ! ;; machine description. For what it's worth, HPPA uses the same trick. ! ;; ! ;; operand 0 is index ! ;; operand 1 is the minimum bound (a const_int) ! ;; operand 2 is the maximum bound - minimum bound + 1 (also a const_int) ! ;; operand 3 is CODE_LABEL for the table; ! ;; operand 4 is the CODE_LABEL to go to if index out of range (ie. default). ! ;; ! ;; We emit: ! ;; i = index - minimum_bound ! ;; if (i > (maximum_bound - minimum_bound + 1) goto default; ! ;; casesi (i, 0, table); ! ;; (define_expand "casesi" ! [(match_operand:SI 0 "general_operand" "") ! (match_operand:SI 1 "general_operand" "") ! (match_operand:SI 2 "general_operand" "") ! (match_operand 3 "" "") ! (match_operand 4 "" "")] "" { ! /* i = index - minimum_bound; ! But only if the lower bound is not already zero. */ ! if (operands[1] != const0_rtx) ! { ! rtx index = gen_reg_rtx (SImode); ! emit_insn (gen_addsi3 (index, ! operands[0], ! GEN_INT (-INTVAL (operands[1])))); ! operands[0] = index; ! } ! ! /* if (i > (maximum_bound - minimum_bound + 1) goto default; */ ! emit_insn (gen_cmpsi (operands[0], operands[2])); ! emit_jump_insn (gen_bgtu (operands[4])); ! ! /* casesi (i, 0, table); */ ! emit_jump_insn (gen_casesi1 (operands[0], operands[2], operands[3])); DONE; }) + ;; This insn is a bit of a lier. It actually falls through if no case + ;; matches. But, we prevent that from ever happening by emiting a jump + ;; before this, see the define_expand above. (define_insn "casesi1" ! [(match_operand:SI 1 "const_int_operand" "n") ! (set (pc) ! (plus:SI (sign_extend:SI ! (mem:HI (plus:SI (mult:SI (match_operand:SI 0 "general_operand" "g") ! (const_int 2)) ! (pc)))) ! (label_ref:SI (match_operand 2 "" ""))))] "" "casel %0,$0,%1") diff -Nrcpad gcc-3.3.5/gcc/configure gcc-3.3.6/gcc/configure *** gcc-3.3.5/gcc/configure 2004-04-01 16:55:23.000000000 +0000 --- gcc-3.3.6/gcc/configure 2004-12-04 01:51:43.000000000 +0000 *************** EOF *** 2399,2405 **** fi # Find some useful tools ! for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 --- 2399,2405 ---- fi # Find some useful tools ! for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 *************** else *** 3947,3953 **** # read() to the same fd. The only system known to have a problem here # is VMS, where text files have record structure. case "$host_os" in ! vms*) gcc_cv_func_mmap_file=no ;; *) gcc_cv_func_mmap_file=yes;; --- 3947,3953 ---- # read() to the same fd. The only system known to have a problem here # is VMS, where text files have record structure. case "$host_os" in ! vms* | ultrix*) gcc_cv_func_mmap_file=no ;; *) gcc_cv_func_mmap_file=yes;; *************** fi *** 8120,8126 **** echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6 echo $ac_n "checking linker --as-needed support""... $ac_c" 1>&6 ! echo "configure:8250: checking linker --as-needed support" >&5 gcc_cv_ld_as_needed=no if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then --- 8120,8126 ---- echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6 echo $ac_n "checking linker --as-needed support""... $ac_c" 1>&6 ! echo "configure:8124: checking linker --as-needed support" >&5 gcc_cv_ld_as_needed=no if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then *************** echo "$ac_t""$gcc_cv_ld_as_needed" 1>&6 *** 8144,8150 **** case "$target" in mips*-*-*) echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6 ! echo "configure:8127: checking whether libgloss uses STARTUP directives consistently" >&5 gcc_cv_mips_libgloss_startup=no gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss if test "x$exec_prefix" = xNONE; then --- 8144,8150 ---- case "$target" in mips*-*-*) echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6 ! echo "configure:8148: checking whether libgloss uses STARTUP directives consistently" >&5 gcc_cv_mips_libgloss_startup=no gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss if test "x$exec_prefix" = xNONE; then *************** fi *** 8349,8355 **** echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:8332: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" --- 8349,8355 ---- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:8353: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" diff -Nrcpad gcc-3.3.5/gcc/c-parse.c gcc-3.3.6/gcc/c-parse.c *** gcc-3.3.5/gcc/c-parse.c 2004-09-30 17:35:53.000000000 +0000 --- gcc-3.3.6/gcc/c-parse.c 2005-05-03 12:38:33.000000000 +0000 *************** *** 1,4 **** ! /* A Bison parser, made from c-parse.y, by GNU bison 1.75. */ /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc. --- 1,4 ---- ! /* A Bison parser, made by GNU Bison 1.875. */ /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc. *************** *** 34,43 **** USER NAME SPACE" below. */ /* Identify Bison output. */ ! #define YYBISON 1 /* Pure parsers. */ ! #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 --- 34,46 ---- USER NAME SPACE" below. */ /* Identify Bison output. */ ! #define YYBISON 1 ! ! /* Skeleton name. */ ! #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ ! #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 *************** *** 191,197 **** /* Copy the first part of user declarations. */ ! #line 10 "c-parse.y" #include "config.h" #include "system.h" --- 194,200 ---- /* Copy the first part of user declarations. */ ! #line 34 "c-parse.y" #include "config.h" #include "system.h" *************** do { \ *** 272,301 **** # define YYERROR_VERBOSE 0 #endif ! #ifndef YYSTYPE ! #line 79 "c-parse.y" ! typedef union {long itype; tree ttype; enum tree_code code; ! const char *filename; int lineno; } yystype; ! /* Line 193 of /usr/share/bison/yacc.c. */ ! #line 281 "c-p10012.c" ! # define YYSTYPE yystype # define YYSTYPE_IS_TRIVIAL 1 #endif ! #ifndef YYLTYPE ! typedef struct yyltype ! { ! int first_line; ! int first_column; ! int last_line; ! int last_column; ! } yyltype; ! # define YYLTYPE yyltype ! # define YYLTYPE_IS_TRIVIAL 1 ! #endif /* Copy the second part of user declarations. */ ! #line 202 "c-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ --- 275,295 ---- # define YYERROR_VERBOSE 0 #endif ! #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 103 "c-parse.y" ! typedef union YYSTYPE {long itype; tree ttype; enum tree_code code; ! const char *filename; int lineno; } YYSTYPE; ! /* Line 191 of yacc.c. */ ! #line 283 "c-p15339.c" ! # define yystype YYSTYPE /* obsolescent; will be withdrawn */ ! # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif ! /* Copy the second part of user declarations. */ ! #line 237 "c-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ *************** c_parse_init () *** 381,388 **** ! /* Line 213 of /usr/share/bison/yacc.c. */ ! #line 386 "c-p10012.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE --- 375,382 ---- ! /* Line 214 of yacc.c. */ ! #line 379 "c-p15339.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE *************** c_parse_init () *** 418,424 **** #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ ! || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc --- 412,418 ---- #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ ! || (YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc *************** union yyalloc *** 428,440 **** }; /* The size of the maximum gap between one aligned stack and the next. */ ! # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ ! + YYSTACK_GAP_MAX) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ --- 422,434 ---- }; /* The size of the maximum gap between one aligned stack and the next. */ ! # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ ! + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ *************** union yyalloc *** 448,454 **** { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif --- 442,448 ---- { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif *************** union yyalloc *** 465,471 **** YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) --- 459,465 ---- YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) *************** union yyalloc *** 480,485 **** --- 474,480 ---- /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 + /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 3120 /* YYNTOKENS -- Number of terminals. */ *************** union yyalloc *** 495,502 **** #define YYUNDEFTOK 2 #define YYMAXUTOK 324 ! #define YYTRANSLATE(X) \ ! ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = --- 490,497 ---- #define YYUNDEFTOK 2 #define YYMAXUTOK 324 ! #define YYTRANSLATE(YYX) \ ! ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = *************** static const short yyrhs[] = *** 779,840 **** /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { ! 0, 288, 288, 293, 310, 309, 311, 311, 314, 319, ! 321, 322, 330, 334, 342, 344, 346, 348, 349, 350, ! 357, 362, 355, 368, 371, 376, 370, 382, 385, 390, ! 384, 396, 400, 402, 405, 407, 409, 414, 416, 418, ! 420, 424, 428, 431, 434, 437, 441, 443, 446, 449, ! 453, 455, 461, 464, 467, 470, 472, 476, 480, 484, ! 488, 490, 494, 496, 498, 500, 502, 504, 506, 508, ! 510, 512, 514, 516, 518, 521, 520, 528, 527, 535, ! 539, 534, 545, 544, 555, 562, 573, 580, 581, 583, ! 586, 585, 598, 603, 605, 621, 628, 630, 633, 643, ! 653, 655, 659, 665, 667, 672, 679, 687, 691, 696, ! 698, 699, 700, 704, 707, 709, 712, 717, 723, 732, ! 737, 740, 742, 744, 746, 748, 756, 760, 763, 768, ! 774, 778, 783, 787, 792, 796, 799, 802, 805, 808, ! 811, 816, 820, 823, 826, 829, 832, 837, 841, 844, ! 847, 850, 853, 858, 862, 865, 868, 871, 876, 880, ! 883, 886, 892, 898, 904, 912, 918, 922, 925, 931, ! 937, 943, 951, 957, 961, 964, 967, 970, 973, 976, ! 982, 988, 994, 1002, 1006, 1009, 1012, 1015, 1020, 1024, ! 1027, 1030, 1033, 1036, 1039, 1045, 1051, 1057, 1065, 1069, ! 1072, 1075, 1078, 1084, 1086, 1087, 1088, 1089, 1090, 1091, ! 1092, 1095, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1106, ! 1108, 1109, 1110, 1113, 1115, 1116, 1117, 1120, 1122, 1123, ! 1124, 1127, 1129, 1130, 1131, 1134, 1136, 1137, 1138, 1139, ! 1140, 1141, 1142, 1145, 1147, 1148, 1149, 1150, 1151, 1152, ! 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1165, ! 1168, 1174, 1176, 1179, 1183, 1186, 1189, 1193, 1198, 1200, ! 1206, 1208, 1211, 1213, 1216, 1219, 1225, 1223, 1232, 1241, ! 1239, 1248, 1254, 1257, 1261, 1264, 1268, 1273, 1276, 1280, ! 1283, 1285, 1287, 1289, 1295, 1297, 1298, 1299, 1302, 1304, ! 1309, 1312, 1311, 1315, 1320, 1324, 1327, 1329, 1333, 1337, ! 1341, 1340, 1346, 1351, 1349, 1354, 1356, 1359, 1361, 1364, ! 1367, 1371, 1377, 1390, 1375, 1403, 1416, 1401, 1429, 1431, ! 1436, 1439, 1442, 1444, 1446, 1450, 1452, 1455, 1459, 1461, ! 1464, 1468, 1470, 1472, 1474, 1480, 1484, 1486, 1488, 1490, ! 1493, 1496, 1500, 1503, 1507, 1510, 1518, 1516, 1523, 1528, ! 1527, 1531, 1536, 1535, 1541, 1540, 1547, 1550, 1552, 1560, ! 1562, 1565, 1567, 1572, 1575, 1580, 1582, 1584, 1589, 1593, ! 1603, 1606, 1611, 1613, 1618, 1620, 1624, 1626, 1630, 1634, ! 1638, 1643, 1647, 1651, 1658, 1660, 1665, 1670, 1673, 1679, ! 1677, 1685, 1688, 1691, 1696, 1700, 1706, 1708, 1711, 1713, ! 1717, 1720, 1724, 1727, 1729, 1731, 1733, 1739, 1742, 1744, ! 1746, 1749, 1755, 1757, 1758, 1762, 1765, 1767, 1768, 1769, ! 1770, 1773, 1775, 1778, 1779, 1782, 1784, 1785, 1786, 1787, ! 1790, 1792, 1795, 1797, 1798, 1799, 1802, 1805, 1812, 1817, ! 1831, 1845, 1847, 1852, 1854, 1857, 1870, 1873, 1876, 1880, ! 1882, 1889, 1891, 1894, 1912, 1919, 1923, 1929, 1926, 1941, ! 1939, 1957, 1963, 1969, 1971, 1975, 1981, 1995, 2006, 2004, ! 2013, 2023, 2027, 2030, 2026, 2036, 2039, 2042, 2046, 2049, ! 2053, 2041, 2057, 2056, 2063, 2066, 2071, 2074, 2077, 2081, ! 2084, 2087, 2090, 2093, 2097, 2101, 2106, 2110, 2122, 2128, ! 2134, 2137, 2140, 2143, 2158, 2162, 2166, 2169, 2173, 2175, ! 2178, 2180, 2184, 2187, 2193, 2196, 2203, 2201, 2212, 2215, ! 2223, 2214, 2227, 2232, 2234, 2244, 2248, 2252, 2255, 2260, ! 2266, 2271, 2274, 2280, 2286, 2292, 2297, 2300, 2306, 2311, ! 2320, 2318, 2329, 2331, 2348, 2351, 2356, 2359, 2363 }; #endif --- 774,835 ---- /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { ! 0, 324, 324, 328, 347, 347, 348, 348, 352, 357, ! 358, 359, 367, 372, 379, 381, 383, 385, 386, 387, ! 394, 399, 393, 405, 408, 413, 407, 419, 422, 427, ! 421, 433, 438, 439, 442, 444, 446, 451, 453, 455, ! 457, 461, 467, 468, 472, 474, 479, 480, 483, 486, ! 490, 492, 498, 501, 504, 507, 509, 514, 518, 522, ! 526, 527, 532, 533, 535, 537, 539, 541, 543, 545, ! 547, 549, 551, 553, 555, 558, 557, 565, 564, 572, ! 576, 571, 582, 581, 592, 599, 611, 617, 618, 620, ! 623, 622, 635, 640, 642, 658, 665, 667, 670, 680, ! 690, 692, 696, 702, 704, 710, 718, 724, 731, 736, ! 737, 738, 739, 747, 749, 751, 754, 763, 772, 782, ! 787, 789, 791, 793, 795, 797, 854, 857, 860, 866, ! 872, 875, 881, 884, 890, 893, 896, 899, 902, 905, ! 908, 914, 917, 920, 923, 926, 929, 935, 938, 941, ! 944, 947, 950, 956, 959, 962, 965, 968, 974, 977, ! 980, 983, 989, 995, 1001, 1010, 1016, 1019, 1022, 1028, ! 1034, 1040, 1049, 1055, 1058, 1061, 1064, 1067, 1070, 1073, ! 1079, 1085, 1091, 1100, 1103, 1106, 1109, 1112, 1118, 1121, ! 1124, 1127, 1130, 1133, 1136, 1142, 1148, 1154, 1163, 1166, ! 1169, 1172, 1175, 1182, 1183, 1184, 1185, 1186, 1187, 1188, ! 1189, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1204, ! 1205, 1206, 1207, 1211, 1212, 1213, 1214, 1218, 1219, 1220, ! 1221, 1225, 1226, 1227, 1228, 1232, 1233, 1234, 1235, 1236, ! 1237, 1238, 1239, 1243, 1244, 1245, 1246, 1247, 1248, 1249, ! 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1264, ! 1265, 1291, 1292, 1296, 1300, 1302, 1306, 1310, 1314, 1316, ! 1323, 1324, 1328, 1329, 1334, 1335, 1341, 1340, 1348, 1357, ! 1356, 1364, 1373, 1374, 1379, 1381, 1386, 1391, 1393, 1399, ! 1400, 1402, 1404, 1406, 1414, 1415, 1416, 1417, 1421, 1422, ! 1428, 1430, 1429, 1433, 1440, 1442, 1446, 1447, 1453, 1456, ! 1460, 1459, 1465, 1470, 1469, 1473, 1475, 1479, 1480, 1484, ! 1486, 1490, 1496, 1509, 1495, 1527, 1540, 1526, 1560, 1561, ! 1567, 1569, 1574, 1576, 1578, 1586, 1587, 1591, 1596, 1598, ! 1602, 1607, 1609, 1611, 1613, 1621, 1626, 1628, 1630, 1632, ! 1636, 1638, 1643, 1645, 1650, 1652, 1664, 1663, 1669, 1674, ! 1673, 1677, 1682, 1681, 1687, 1686, 1694, 1696, 1698, 1706, ! 1708, 1711, 1713, 1719, 1721, 1727, 1728, 1730, 1736, 1739, ! 1749, 1752, 1757, 1759, 1765, 1766, 1771, 1772, 1777, 1780, ! 1784, 1790, 1793, 1797, 1808, 1809, 1814, 1820, 1822, 1828, ! 1827, 1836, 1837, 1842, 1845, 1849, 1856, 1857, 1861, 1862, ! 1867, 1869, 1874, 1876, 1878, 1880, 1882, 1889, 1891, 1893, ! 1895, 1898, 1909, 1910, 1911, 1915, 1919, 1920, 1921, 1922, ! 1923, 1927, 1928, 1931, 1932, 1936, 1937, 1938, 1939, 1940, ! 1944, 1945, 1949, 1950, 1951, 1952, 1955, 1959, 1966, 1971, ! 1987, 2001, 2003, 2009, 2010, 2014, 2028, 2030, 2033, 2037, ! 2039, 2047, 2048, 2052, 2070, 2078, 2083, 2096, 2095, 2110, ! 2109, 2129, 2135, 2141, 2142, 2147, 2153, 2167, 2177, 2176, ! 2184, 2196, 2207, 2210, 2206, 2216, 2219, 2222, 2226, 2229, ! 2233, 2221, 2237, 2236, 2244, 2246, 2252, 2254, 2257, 2261, ! 2264, 2267, 2270, 2273, 2277, 2281, 2286, 2290, 2302, 2308, ! 2316, 2319, 2322, 2325, 2342, 2344, 2350, 2351, 2357, 2358, ! 2362, 2363, 2368, 2370, 2377, 2379, 2390, 2389, 2400, 2402, ! 2410, 2401, 2414, 2421, 2422, 2432, 2436, 2441, 2443, 2450, ! 2455, 2460, 2463, 2469, 2477, 2482, 2487, 2490, 2496, 2502, ! 2512, 2511, 2522, 2523, 2541, 2543, 2549, 2551, 2556 }; #endif *************** static const short yypgoto[] = *** 1301,1307 **** /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. ! If YYTABLE_NINF, parse error. */ #define YYTABLE_NINF -534 static const short yytable[] = { --- 1296,1302 ---- /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. ! If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -534 static const short yytable[] = { *************** static const unsigned short yystos[] = *** 2051,2057 **** #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) ! #define YYEMPTY -2 #define YYEOF 0 #define YYACCEPT goto yyacceptlab --- 2046,2052 ---- #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) ! #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab *************** do \ *** 2072,2084 **** { \ yychar = (Token); \ yylval = (Value); \ ! yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ ! yyerror ("syntax error: cannot back up"); \ YYERROR; \ } \ while (0) --- 2067,2079 ---- { \ yychar = (Token); \ yylval = (Value); \ ! yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ ! yyerror ("syntax error: cannot back up");\ YYERROR; \ } \ while (0) *************** while (0) *** 2090,2096 **** are run). */ #ifndef YYLLOC_DEFAULT ! # define YYLLOC_DEFAULT(Current, Rhs, N) \ Current.first_line = Rhs[1].first_line; \ Current.first_column = Rhs[1].first_column; \ Current.last_line = Rhs[N].last_line; \ --- 2085,2091 ---- are run). */ #ifndef YYLLOC_DEFAULT ! # define YYLLOC_DEFAULT(Current, Rhs, N) \ Current.first_line = Rhs[1].first_line; \ Current.first_column = Rhs[1].first_column; \ Current.last_line = Rhs[N].last_line; \ *************** while (0) *** 2099,2105 **** /* YYLEX -- calling `yylex' with the right arguments. */ ! #define YYLEX yylex () /* Enable debugging if requested. */ #if YYDEBUG --- 2094,2104 ---- /* YYLEX -- calling `yylex' with the right arguments. */ ! #ifdef YYLEX_PARAM ! # define YYLEX yylex (YYLEX_PARAM) ! #else ! # define YYLEX yylex () ! #endif /* Enable debugging if requested. */ #if YYDEBUG *************** do { \ *** 2114,2132 **** --- 2113,2205 ---- if (yydebug) \ YYFPRINTF Args; \ } while (0) + # define YYDSYMPRINT(Args) \ do { \ if (yydebug) \ yysymprint Args; \ } while (0) + + # define YYDSYMPRINTF(Title, Token, Value, Location) \ + do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ + } while (0) + + /*------------------------------------------------------------------. + | yy_stack_print -- Print the state stack from its BOTTOM up to its | + | TOP (cinluded). | + `------------------------------------------------------------------*/ + + #if defined (__STDC__) || defined (__cplusplus) + static void + yy_stack_print (short *bottom, short *top) + #else + static void + yy_stack_print (bottom, top) + short *bottom; + short *top; + #endif + { + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); + } + + # define YY_STACK_PRINT(Bottom, Top) \ + do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ + } while (0) + + + /*------------------------------------------------. + | Report that the YYRULE is going to be reduced. | + `------------------------------------------------*/ + + #if defined (__STDC__) || defined (__cplusplus) + static void + yy_reduce_print (int yyrule) + #else + static void + yy_reduce_print (yyrule) + int yyrule; + #endif + { + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); + } + + # define YY_REDUCE_PRINT(Rule) \ + do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ + } while (0) + /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YYDSYMPRINT(Args) + # define YYDSYMPRINTF(Title, Token, Value, Location) + # define YY_STACK_PRINT(Bottom, Top) + # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ + /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 *************** yystpcpy (yydest, yysrc) *** 2205,2299 **** #if YYDEBUG ! /*-----------------------------. ! | Print this symbol on YYOUT. | ! `-----------------------------*/ - static void #if defined (__STDC__) || defined (__cplusplus) ! yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue) #else ! yysymprint (yyout, yytype, yyvalue) ! FILE* yyout; int yytype; ! YYSTYPE yyvalue; #endif { /* Pacify ``unused variable'' warnings. */ ! (void) yyvalue; if (yytype < YYNTOKENS) { ! YYFPRINTF (yyout, "token %s (", yytname[yytype]); # ifdef YYPRINT ! YYPRINT (yyout, yytoknum[yytype], yyvalue); # endif } else ! YYFPRINTF (yyout, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } ! YYFPRINTF (yyout, ")"); } - #endif /* YYDEBUG. */ - /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ - static void #if defined (__STDC__) || defined (__cplusplus) ! yydestruct (int yytype, YYSTYPE yyvalue) #else ! yydestruct (yytype, yyvalue) int yytype; ! YYSTYPE yyvalue; #endif { /* Pacify ``unused variable'' warnings. */ ! (void) yyvalue; switch (yytype) { default: break; } } - ! /* The user can define YYPARSE_PARAM as the name of an argument to be passed ! into yyparse. The argument should have type void *. ! It should actually point to an object. ! Grammar actions can access the variable by casting it ! to the proper pointer type. */ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) ! # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM ! # define YYPARSE_PARAM_DECL # else ! # define YYPARSE_PARAM_ARG YYPARSE_PARAM ! # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; # endif ! #else /* !YYPARSE_PARAM */ ! # define YYPARSE_PARAM_ARG ! # define YYPARSE_PARAM_DECL ! #endif /* !YYPARSE_PARAM */ ! ! /* Prevent warning if -Wstrict-prototypes. */ ! #ifdef __GNUC__ ! # ifdef YYPARSE_PARAM ! int yyparse (void *); ! # else int yyparse (void); ! # endif #endif /* The lookahead symbol. */ --- 2278,2362 ---- #if YYDEBUG ! /*--------------------------------. ! | Print this symbol on YYOUTPUT. | ! `--------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) ! static void ! yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) #else ! static void ! yysymprint (yyoutput, yytype, yyvaluep) ! FILE *yyoutput; int yytype; ! YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ ! (void) yyvaluep; if (yytype < YYNTOKENS) { ! YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); # ifdef YYPRINT ! YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif } else ! YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } ! YYFPRINTF (yyoutput, ")"); } + #endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) ! static void ! yydestruct (int yytype, YYSTYPE *yyvaluep) #else ! static void ! yydestruct (yytype, yyvaluep) int yytype; ! YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ ! (void) yyvaluep; switch (yytype) { + default: break; } } ! /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) ! int yyparse (void *YYPARSE_PARAM); # else ! int yyparse (); # endif ! #else /* ! YYPARSE_PARAM */ ! #if defined (__STDC__) || defined (__cplusplus) int yyparse (void); ! #else ! int yyparse (); #endif + #endif /* ! YYPARSE_PARAM */ + /* The lookahead symbol. */ *************** int yychar; *** 2302,2314 **** /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; ! /* Number of parse errors so far. */ int yynerrs; int ! yyparse (YYPARSE_PARAM_ARG) ! YYPARSE_PARAM_DECL { register int yystate; --- 2365,2396 ---- /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; ! /* Number of syntax errors so far. */ int yynerrs; + + /*----------. + | yyparse. | + `----------*/ + + #ifdef YYPARSE_PARAM + # if defined (__STDC__) || defined (__cplusplus) + int yyparse (void *YYPARSE_PARAM) + # else + int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; + # endif + #else /* ! YYPARSE_PARAM */ + #if defined (__STDC__) || defined (__cplusplus) int ! yyparse (void) ! #else ! int ! yyparse () ! ! #endif ! #endif { register int yystate; *************** yyparse (YYPARSE_PARAM_ARG) *** 2317,2323 **** /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ ! int yychar1 = 0; /* Three stacks and their tools: `yyss': related to states, --- 2399,2405 ---- /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ ! int yytoken = 0; /* Three stacks and their tools: `yyss': related to states, *************** yyparse (YYPARSE_PARAM_ARG) *** 2381,2387 **** yysetstate: *yyssp = yystate; ! if (yyssp >= yyss + yystacksize - 1) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; --- 2463,2469 ---- yysetstate: *yyssp = yystate; ! if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; *************** yyparse (YYPARSE_PARAM_ARG) *** 2413,2422 **** goto yyoverflowlab; # else /* Extend the stack our own way. */ ! if (yystacksize >= YYMAXDEPTH) goto yyoverflowlab; yystacksize *= 2; ! if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; { --- 2495,2504 ---- goto yyoverflowlab; # else /* Extend the stack our own way. */ ! if (YYMAXDEPTH <= yystacksize) goto yyoverflowlab; yystacksize *= 2; ! if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { *************** yyparse (YYPARSE_PARAM_ARG) *** 2442,2448 **** YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); ! if (yyssp >= yyss + yystacksize - 1) YYABORT; } --- 2524,2530 ---- YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); ! if (yyss + yystacksize - 1 <= yyssp) YYABORT; } *************** yybackup: *** 2467,2505 **** /* Not known => get a lookahead token if don't already have one. */ ! /* yychar is either YYEMPTY or YYEOF ! or a valid token in external form. */ ! if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } ! /* Convert token to internal form (in yychar1) for indexing tables with. */ ! ! if (yychar <= 0) /* This means end of input. */ { ! yychar1 = 0; ! yychar = YYEOF; /* Don't call YYLEX any more. */ ! YYDPRINTF ((stderr, "Now at end of input.\n")); } else { ! yychar1 = YYTRANSLATE (yychar); ! ! /* We have to keep this `#if YYDEBUG', since we use variables ! which are defined only if `YYDEBUG' is set. */ ! YYDPRINTF ((stderr, "Next token is ")); ! YYDSYMPRINT ((stderr, yychar1, yylval)); ! YYDPRINTF ((stderr, "\n")); } ! /* If the proper action on seeing token YYCHAR1 is to reduce or to detect an error, take that action. */ ! yyn += yychar1; ! if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) --- 2549,2576 ---- /* Not known => get a lookahead token if don't already have one. */ ! /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } ! if (yychar <= YYEOF) { ! yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { ! yytoken = YYTRANSLATE (yychar); ! YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } ! /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ ! yyn += yytoken; ! if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) *************** yybackup: *** 2514,2521 **** YYACCEPT; /* Shift the lookahead token. */ ! YYDPRINTF ((stderr, "Shifting token %d (%s), ", ! yychar, yytname[yychar1])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) --- 2585,2591 ---- YYACCEPT; /* Shift the lookahead token. */ ! YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) *************** yyreduce: *** 2561,2595 **** yyval = yyvsp[1-yylen]; ! ! #if YYDEBUG ! /* We have to keep this `#if YYDEBUG', since we use variables which ! are defined only if `YYDEBUG' is set. */ ! if (yydebug) ! { ! int yyi; ! ! YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", ! yyn - 1, yyrline[yyn]); ! ! /* Print the symbols being reduced, and their result. */ ! for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++) ! YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); ! YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); ! } ! #endif switch (yyn) { case 2: ! #line 289 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids an empty source file"); finish_file (); ! } break; case 3: ! #line 294 "c-parse.y" { /* In case there were missing closebraces, get us back to the global binding level. */ --- 2631,2649 ---- yyval = yyvsp[1-yylen]; ! YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: ! #line 324 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids an empty source file"); finish_file (); ! ;} break; case 3: ! #line 329 "c-parse.y" { /* In case there were missing closebraces, get us back to the global binding level. */ *************** yyreduce: *** 2600,3019 **** still works without it. */ finish_fname_decls (); finish_file (); ! } break; case 4: ! #line 310 "c-parse.y" ! {yyval.ttype = NULL_TREE; } break; case 6: ! #line 311 "c-parse.y" ! {yyval.ttype = NULL_TREE; ggc_collect(); } break; case 8: ! #line 316 "c-parse.y" ! { parsing_iso_function_signature = false; } break; case 11: ! #line 323 "c-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) || TREE_CODE (yyvsp[-2].ttype) == STRING_CST) assemble_asm (yyvsp[-2].ttype); else ! error ("argument of `asm' is not a constant string"); } break; case 12: ! #line 331 "c-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); } break; case 13: ! #line 336 "c-parse.y" { if (pedantic) error ("ISO C forbids data definition with no type or storage class"); else warning ("data definition has no type or storage class"); ! POP_DECLSPEC_STACK; } break; case 14: ! #line 343 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 15: ! #line 345 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 16: ! #line 347 "c-parse.y" ! { shadow_tag (yyvsp[-1].ttype); } break; case 19: ! #line 351 "c-parse.y" { if (pedantic) ! pedwarn ("ISO C does not allow extra `;' outside of a function"); } break; case 20: ! #line 357 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ! } break; case 21: ! #line 362 "c-parse.y" ! { store_parm_decls (); } break; case 22: ! #line 364 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; finish_function (0, 1); ! POP_DECLSPEC_STACK; } break; case 23: ! #line 369 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 24: ! #line 371 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ! } break; case 25: ! #line 376 "c-parse.y" ! { store_parm_decls (); } break; case 26: ! #line 378 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; finish_function (0, 1); ! POP_DECLSPEC_STACK; } break; case 27: ! #line 383 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 28: ! #line 385 "c-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ! } break; case 29: ! #line 390 "c-parse.y" ! { store_parm_decls (); } break; case 30: ! #line 392 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; finish_function (0, 1); ! POP_DECLSPEC_STACK; } break; case 31: ! #line 397 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 34: ! #line 406 "c-parse.y" ! { yyval.code = ADDR_EXPR; } break; case 35: ! #line 408 "c-parse.y" ! { yyval.code = NEGATE_EXPR; } break; case 36: ! #line 410 "c-parse.y" { yyval.code = CONVERT_EXPR; if (warn_traditional && !in_system_header) warning ("traditional C rejects the unary plus operator"); ! } break; case 37: ! #line 415 "c-parse.y" ! { yyval.code = PREINCREMENT_EXPR; } break; case 38: ! #line 417 "c-parse.y" ! { yyval.code = PREDECREMENT_EXPR; } break; case 39: ! #line 419 "c-parse.y" ! { yyval.code = BIT_NOT_EXPR; } break; case 40: ! #line 421 "c-parse.y" ! { yyval.code = TRUTH_NOT_EXPR; } break; case 41: ! #line 425 "c-parse.y" ! { yyval.ttype = build_compound_expr (yyvsp[0].ttype); } break; case 42: ! #line 430 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 44: ! #line 436 "c-parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); } break; case 45: ! #line 438 "c-parse.y" ! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 47: ! #line 444 "c-parse.y" ! { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); } break; case 48: ! #line 447 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); } break; case 49: ! #line 450 "c-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); ! overflow_warning (yyval.ttype); } break; case 50: ! #line 454 "c-parse.y" ! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); } break; case 51: ! #line 456 "c-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) error ("`sizeof' applied to a bit-field"); ! yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); } break; case 52: ! #line 462 "c-parse.y" { skip_evaluation--; ! yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); } break; case 53: ! #line 465 "c-parse.y" { skip_evaluation--; ! yyval.ttype = c_alignof_expr (yyvsp[0].ttype); } break; case 54: ! #line 468 "c-parse.y" { skip_evaluation--; ! yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); } break; case 55: ! #line 471 "c-parse.y" ! { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); } break; case 56: ! #line 473 "c-parse.y" ! { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); } break; case 57: ! #line 477 "c-parse.y" ! { skip_evaluation++; } break; case 58: ! #line 481 "c-parse.y" ! { skip_evaluation++; } break; case 59: ! #line 485 "c-parse.y" ! { skip_evaluation++; } break; case 61: ! #line 491 "c-parse.y" ! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 63: ! #line 497 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 64: ! #line 499 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 65: ! #line 501 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 66: ! #line 503 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 67: ! #line 505 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 68: ! #line 507 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 69: ! #line 509 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 70: ! #line 511 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 71: ! #line 513 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 72: ! #line 515 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 73: ! #line 517 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 74: ! #line 519 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 75: ! #line 521 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; } break; case 76: ! #line 525 "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 77: ! #line 528 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; } break; case 78: ! #line 532 "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 79: ! #line 535 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; } break; case 80: ! #line 539 "c-parse.y" { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node) ! - (yyvsp[-4].ttype == boolean_false_node)); } break; case 81: ! #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 82: ! #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. */ yyvsp[0].ttype = save_expr (yyvsp[-1].ttype); yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[0].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; } break; case 83: ! #line 553 "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 84: ! #line 556 "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)); if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ! } break; case 85: ! #line 563 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in --- 2654,3073 ---- still works without it. */ finish_fname_decls (); finish_file (); ! ;} break; case 4: ! #line 347 "c-parse.y" ! {yyval.ttype = NULL_TREE; ;} break; case 6: ! #line 348 "c-parse.y" ! {yyval.ttype = NULL_TREE; ggc_collect(); ;} break; case 8: ! #line 353 "c-parse.y" ! { parsing_iso_function_signature = false; ;} break; case 11: ! #line 360 "c-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) || TREE_CODE (yyvsp[-2].ttype) == STRING_CST) assemble_asm (yyvsp[-2].ttype); else ! error ("argument of `asm' is not a constant string"); ;} break; case 12: ! #line 368 "c-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;} break; case 13: ! #line 373 "c-parse.y" { if (pedantic) error ("ISO C forbids data definition with no type or storage class"); else warning ("data definition has no type or storage class"); ! POP_DECLSPEC_STACK; ;} break; case 14: ! #line 380 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 15: ! #line 382 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 16: ! #line 384 "c-parse.y" ! { shadow_tag (yyvsp[-1].ttype); ;} break; case 19: ! #line 388 "c-parse.y" { if (pedantic) ! pedwarn ("ISO C does not allow extra `;' outside of a function"); ;} break; case 20: ! #line 394 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ! ;} break; case 21: ! #line 399 "c-parse.y" ! { store_parm_decls (); ;} break; case 22: ! #line 401 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; finish_function (0, 1); ! POP_DECLSPEC_STACK; ;} break; case 23: ! #line 406 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 24: ! #line 408 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ! ;} break; case 25: ! #line 413 "c-parse.y" ! { store_parm_decls (); ;} break; case 26: ! #line 415 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; finish_function (0, 1); ! POP_DECLSPEC_STACK; ;} break; case 27: ! #line 420 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 28: ! #line 422 "c-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, all_prefix_attributes)) YYERROR1; ! ;} break; case 29: ! #line 427 "c-parse.y" ! { store_parm_decls (); ;} break; case 30: ! #line 429 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; finish_function (0, 1); ! POP_DECLSPEC_STACK; ;} break; case 31: ! #line 434 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 34: ! #line 443 "c-parse.y" ! { yyval.code = ADDR_EXPR; ;} break; case 35: ! #line 445 "c-parse.y" ! { yyval.code = NEGATE_EXPR; ;} break; case 36: ! #line 447 "c-parse.y" { yyval.code = CONVERT_EXPR; if (warn_traditional && !in_system_header) warning ("traditional C rejects the unary plus operator"); ! ;} break; case 37: ! #line 452 "c-parse.y" ! { yyval.code = PREINCREMENT_EXPR; ;} break; case 38: ! #line 454 "c-parse.y" ! { yyval.code = PREDECREMENT_EXPR; ;} break; case 39: ! #line 456 "c-parse.y" ! { yyval.code = BIT_NOT_EXPR; ;} break; case 40: ! #line 458 "c-parse.y" ! { yyval.code = TRUTH_NOT_EXPR; ;} break; case 41: ! #line 462 "c-parse.y" ! { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;} break; case 42: ! #line 467 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 44: ! #line 473 "c-parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;} break; case 45: ! #line 475 "c-parse.y" ! { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 47: ! #line 481 "c-parse.y" ! { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;} break; case 48: ! #line 484 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;} break; case 49: ! #line 487 "c-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); ! overflow_warning (yyval.ttype); ;} break; case 50: ! #line 491 "c-parse.y" ! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ;} break; case 51: ! #line 493 "c-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) error ("`sizeof' applied to a bit-field"); ! yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;} break; case 52: ! #line 499 "c-parse.y" { skip_evaluation--; ! yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;} break; case 53: ! #line 502 "c-parse.y" { skip_evaluation--; ! yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;} break; case 54: ! #line 505 "c-parse.y" { skip_evaluation--; ! yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;} break; case 55: ! #line 508 "c-parse.y" ! { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;} break; case 56: ! #line 510 "c-parse.y" ! { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;} break; case 57: ! #line 514 "c-parse.y" ! { skip_evaluation++; ;} break; case 58: ! #line 518 "c-parse.y" ! { skip_evaluation++; ;} break; case 59: ! #line 522 "c-parse.y" ! { skip_evaluation++; ;} break; case 61: ! #line 528 "c-parse.y" ! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 63: ! #line 534 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 64: ! #line 536 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 65: ! #line 538 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 66: ! #line 540 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 67: ! #line 542 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 68: ! #line 544 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 69: ! #line 546 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 70: ! #line 548 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 71: ! #line 550 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 72: ! #line 552 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 73: ! #line 554 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 74: ! #line 556 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 75: ! #line 558 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;} break; case 76: ! #line 562 "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 77: ! #line 565 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;} break; case 78: ! #line 569 "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 79: ! #line 572 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;} break; case 80: ! #line 576 "c-parse.y" { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node) ! - (yyvsp[-4].ttype == boolean_false_node)); ;} break; case 81: ! #line 579 "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 82: ! #line 582 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids omitting the middle term of a ?: expression"); /* Make sure first operand is calculated only once. */ yyvsp[0].ttype = save_expr (yyvsp[-1].ttype); yyvsp[-1].ttype = c_common_truthvalue_conversion (default_conversion (yyvsp[0].ttype)); ! skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;} break; case 83: ! #line 590 "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 84: ! #line 593 "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)); if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ! ;} break; case 85: ! #line 600 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in *************** yyreduce: *** 3021,3057 **** class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ! } break; case 86: ! #line 575 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '('); ! } break; case 88: ! #line 582 "c-parse.y" ! { yyval.ttype = fix_string_type (yyval.ttype); } break; case 89: ! #line 584 "c-parse.y" ! { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); } break; case 90: ! #line 586 "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 91: ! #line 590 "c-parse.y" { tree constructor = pop_init_level (0); tree type = yyvsp[-5].ttype; finish_init (); --- 3075,3111 ---- class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ! ;} break; case 86: ! #line 612 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '('); ! ;} break; case 88: ! #line 619 "c-parse.y" ! { yyval.ttype = fix_string_type (yyval.ttype); ;} break; case 89: ! #line 621 "c-parse.y" ! { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ;} break; case 90: ! #line 623 "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 91: ! #line 627 "c-parse.y" { tree constructor = pop_init_level (0); tree type = yyvsp[-5].ttype; finish_init (); *************** yyreduce: *** 3059,3082 **** if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); yyval.ttype = build_compound_literal (type, constructor); ! } break; case 92: ! #line 599 "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 93: ! #line 604 "c-parse.y" ! { yyval.ttype = error_mark_node; } break; case 94: ! #line 606 "c-parse.y" { tree saved_last_tree; if (pedantic) --- 3113,3136 ---- if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); yyval.ttype = build_compound_literal (type, constructor); ! ;} break; case 92: ! #line 636 "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 93: ! #line 641 "c-parse.y" ! { yyval.ttype = error_mark_node; ;} break; case 94: ! #line 643 "c-parse.y" { tree saved_last_tree; if (pedantic) *************** yyreduce: *** 3091,3121 **** last_expr_type = void_type_node; yyval.ttype = build1 (STMT_EXPR, last_expr_type, yyvsp[-2].ttype); TREE_SIDE_EFFECTS (yyval.ttype) = 1; ! } break; case 95: ! #line 622 "c-parse.y" { pop_label_level (); last_tree = COMPOUND_BODY (yyvsp[-2].ttype); TREE_CHAIN (last_tree) = NULL_TREE; yyval.ttype = error_mark_node; ! } break; case 96: ! #line 629 "c-parse.y" ! { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 97: ! #line 631 "c-parse.y" ! { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); } break; case 98: ! #line 634 "c-parse.y" { tree c; --- 3145,3175 ---- last_expr_type = void_type_node; yyval.ttype = build1 (STMT_EXPR, last_expr_type, yyvsp[-2].ttype); TREE_SIDE_EFFECTS (yyval.ttype) = 1; ! ;} break; case 95: ! #line 659 "c-parse.y" { pop_label_level (); last_tree = COMPOUND_BODY (yyvsp[-2].ttype); TREE_CHAIN (last_tree) = NULL_TREE; yyval.ttype = error_mark_node; ! ;} break; case 96: ! #line 666 "c-parse.y" ! { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 97: ! #line 668 "c-parse.y" ! { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ;} break; case 98: ! #line 671 "c-parse.y" { tree c; *************** yyreduce: *** 3124,3134 **** if (TREE_CODE (c) != INTEGER_CST) error ("first argument to __builtin_choose_expr not a constant"); yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype; ! } break; case 99: ! #line 644 "c-parse.y" { tree e1, e2; --- 3178,3188 ---- if (TREE_CODE (c) != INTEGER_CST) error ("first argument to __builtin_choose_expr not a constant"); yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype; ! ;} break; case 99: ! #line 681 "c-parse.y" { tree e1, e2; *************** yyreduce: *** 3137,4000 **** yyval.ttype = comptypes (e1, e2) ? build_int_2 (1, 0) : build_int_2 (0, 0); ! } break; case 100: ! #line 654 "c-parse.y" ! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 101: ! #line 656 "c-parse.y" { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ! } break; case 102: ! #line 660 "c-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); yyval.ttype = build_component_ref (expr, yyvsp[0].ttype); ! } break; case 103: ! #line 666 "c-parse.y" ! { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); } break; case 104: ! #line 668 "c-parse.y" ! { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); } break; case 105: ! #line 674 "c-parse.y" { parsing_iso_function_signature = false; /* Reset after decls. */ ! } break; case 106: ! #line 681 "c-parse.y" { if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); parsing_iso_function_signature = false; /* Reset after warning. */ ! } break; case 108: ! #line 693 "c-parse.y" ! { } break; case 113: ! #line 706 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 114: ! #line 708 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 115: ! #line 710 "c-parse.y" { shadow_tag_warned (yyvsp[-1].ttype, 1); ! pedwarn ("empty declaration"); } break; case 116: ! #line 713 "c-parse.y" ! { pedwarn ("empty declaration"); } break; case 117: ! #line 719 "c-parse.y" ! { } break; case 118: ! #line 724 "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 734 "c-parse.y" ! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); } break; case 120: ! #line 739 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 121: ! #line 741 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 122: ! #line 743 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 123: ! #line 745 "c-parse.y" ! { POP_DECLSPEC_STACK; } break; case 124: ! #line 747 "c-parse.y" ! { shadow_tag (yyvsp[-1].ttype); } break; case 125: ! #line 749 "c-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); } break; case 126: ! #line 758 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; } break; case 127: ! #line 761 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 128: ! #line 764 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 129: ! #line 770 "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 776 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 131: ! #line 779 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 132: ! #line 785 "c-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 0; } break; case 133: ! #line 788 "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 794 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; } break; case 135: ! #line 797 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 136: ! #line 800 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 137: ! #line 803 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 138: ! #line 806 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 139: ! #line 809 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 140: ! #line 812 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 141: ! #line 818 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; } break; case 142: ! #line 821 "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 824 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 144: ! #line 827 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 145: ! #line 830 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 146: ! #line 833 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 147: ! #line 839 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 148: ! #line 842 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 149: ! #line 845 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 150: ! #line 848 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 151: ! #line 851 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 152: ! #line 854 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 153: ! #line 860 "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 863 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 155: ! #line 866 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 156: ! #line 869 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 157: ! #line 872 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 158: ! #line 878 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 0; } break; case 159: ! #line 881 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 160: ! #line 884 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 161: ! #line 887 "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 893 "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 899 "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 905 "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 914 "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 920 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 167: ! #line 923 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 168: ! #line 926 "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 932 "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 938 "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 944 "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 953 "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 959 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 174: ! #line 962 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 175: ! #line 965 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 176: ! #line 968 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 177: ! #line 971 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 178: ! #line 974 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 179: ! #line 977 "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 180: ! #line 983 "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 181: ! #line 989 "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 182: ! #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 183: ! #line 1004 "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 1007 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 185: ! #line 1010 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 186: ! #line 1013 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 187: ! #line 1016 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 188: ! #line 1022 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 189: ! #line 1025 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 190: ! #line 1028 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 191: ! #line 1031 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 192: ! #line 1034 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 193: ! #line 1037 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 194: ! #line 1040 "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 195: ! #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 196: ! #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)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); } break; case 197: ! #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)); 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 1067 "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 1070 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 200: ! #line 1073 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 201: ! #line 1076 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 202: ! #line 1079 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; } break; case 259: ! #line 1167 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 260: ! #line 1169 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 264: ! #line 1185 "c-parse.y" ! { OBJC_NEED_RAW_IDENTIFIER (1); } break; case 267: ! #line 1195 "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 1199 "c-parse.y" ! { skip_evaluation--; yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); } break; case 269: ! #line 1201 "c-parse.y" ! { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); } break; case 274: ! #line 1218 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 275: ! #line 1220 "c-parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 276: ! #line 1225 "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 1230 "c-parse.y" { finish_init (); ! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); } break; case 278: ! #line 1233 "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 1241 "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 1246 "c-parse.y" { finish_init (); ! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); } break; case 281: ! #line 1249 "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 1256 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 283: ! #line 1258 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 284: ! #line 1263 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 285: ! #line 1265 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 286: ! #line 1270 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype; } break; case 287: ! #line 1275 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 288: ! #line 1277 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 289: ! #line 1282 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 290: ! #line 1284 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); } break; case 291: ! #line 1286 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); } break; case 292: ! #line 1288 "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 1290 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 301: ! #line 1312 "c-parse.y" ! { really_start_incremental_init (NULL_TREE); } break; case 302: ! #line 1314 "c-parse.y" ! { yyval.ttype = pop_init_level (0); } break; case 303: ! #line 1316 "c-parse.y" ! { yyval.ttype = error_mark_node; } break; case 304: ! #line 1322 "c-parse.y" { if (pedantic) ! pedwarn ("ISO C forbids empty initializer braces"); } break; case 308: ! #line 1335 "c-parse.y" { if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C89 forbids specifying subobject to initialize"); } break; case 309: ! #line 1338 "c-parse.y" { if (pedantic) ! pedwarn ("obsolete use of designated initializer without `='"); } break; case 310: ! #line 1341 "c-parse.y" { set_init_label (yyvsp[-1].ttype); if (pedantic) ! pedwarn ("obsolete use of designated initializer with `:'"); } break; case 311: ! #line 1345 "c-parse.y" ! {} break; case 313: ! #line 1351 "c-parse.y" ! { push_init_level (0); } break; case 314: ! #line 1353 "c-parse.y" ! { process_init_element (pop_init_level (0)); } break; case 315: ! #line 1355 "c-parse.y" ! { process_init_element (yyvsp[0].ttype); } break; case 319: ! #line 1366 "c-parse.y" ! { set_init_label (yyvsp[0].ttype); } break; case 320: ! #line 1368 "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 321: ! #line 1372 "c-parse.y" ! { set_init_index (yyvsp[-1].ttype, NULL_TREE); } break; case 322: ! #line 1377 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); --- 3191,4054 ---- yyval.ttype = comptypes (e1, e2) ? build_int_2 (1, 0) : build_int_2 (0, 0); ! ;} break; case 100: ! #line 691 "c-parse.y" ! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 101: ! #line 693 "c-parse.y" { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ! ;} break; case 102: ! #line 697 "c-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); yyval.ttype = build_component_ref (expr, yyvsp[0].ttype); ! ;} break; case 103: ! #line 703 "c-parse.y" ! { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;} break; case 104: ! #line 705 "c-parse.y" ! { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;} break; case 105: ! #line 711 "c-parse.y" { parsing_iso_function_signature = false; /* Reset after decls. */ ! ;} break; case 106: ! #line 718 "c-parse.y" { if (warn_traditional && !in_system_header && parsing_iso_function_signature) warning ("traditional C rejects ISO C style function definitions"); parsing_iso_function_signature = false; /* Reset after warning. */ ! ;} break; case 108: ! #line 732 "c-parse.y" ! { ;} break; case 113: ! #line 748 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 114: ! #line 750 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 115: ! #line 752 "c-parse.y" { shadow_tag_warned (yyvsp[-1].ttype, 1); ! pedwarn ("empty declaration"); ;} break; case 116: ! #line 755 "c-parse.y" ! { pedwarn ("empty declaration"); ;} break; case 117: ! #line 764 "c-parse.y" ! { ;} break; case 118: ! #line 772 "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 783 "c-parse.y" ! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;} break; case 120: ! #line 788 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 121: ! #line 790 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 122: ! #line 792 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 123: ! #line 794 "c-parse.y" ! { POP_DECLSPEC_STACK; ;} break; case 124: ! #line 796 "c-parse.y" ! { shadow_tag (yyvsp[-1].ttype); ;} break; case 125: ! #line 798 "c-parse.y" ! { RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;} break; case 126: ! #line 855 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 127: ! #line 858 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 128: ! #line 861 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 129: ! #line 867 "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 873 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 131: ! #line 876 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 132: ! #line 882 "c-parse.y" { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 0; ;} break; case 133: ! #line 885 "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 891 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 135: ! #line 894 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 136: ! #line 897 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 137: ! #line 900 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 138: ! #line 903 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 139: ! #line 906 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 140: ! #line 909 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 141: ! #line 915 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 142: ! #line 918 "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 921 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 144: ! #line 924 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 145: ! #line 927 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 146: ! #line 930 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 147: ! #line 936 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 148: ! #line 939 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 149: ! #line 942 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 150: ! #line 945 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 151: ! #line 948 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 152: ! #line 951 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 153: ! #line 957 "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 960 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 155: ! #line 963 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 156: ! #line 966 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 157: ! #line 969 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 158: ! #line 975 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 0; ;} break; case 159: ! #line 978 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 160: ! #line 981 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 161: ! #line 984 "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 990 "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 996 "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 1002 "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 1011 "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 1017 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 167: ! #line 1020 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 168: ! #line 1023 "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 1029 "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 1035 "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 1041 "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 1050 "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 1056 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 174: ! #line 1059 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 175: ! #line 1062 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 176: ! #line 1065 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 177: ! #line 1068 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 178: ! #line 1071 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 179: ! #line 1074 "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 180: ! #line 1080 "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 181: ! #line 1086 "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 182: ! #line 1092 "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 1101 "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 1104 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 185: ! #line 1107 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 186: ! #line 1110 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 187: ! #line 1113 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 188: ! #line 1119 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 189: ! #line 1122 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 190: ! #line 1125 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 191: ! #line 1128 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 192: ! #line 1131 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 193: ! #line 1134 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 194: ! #line 1137 "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 195: ! #line 1143 "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 196: ! #line 1149 "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 197: ! #line 1155 "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 1164 "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 1167 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 200: ! #line 1170 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 201: ! #line 1173 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 202: ! #line 1176 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ;} break; case 259: ! #line 1264 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 260: ! #line 1266 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 264: ! #line 1301 "c-parse.y" ! { OBJC_NEED_RAW_IDENTIFIER (1); ;} break; case 267: ! #line 1311 "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 1315 "c-parse.y" ! { skip_evaluation--; yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;} break; case 269: ! #line 1317 "c-parse.y" ! { skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ;} break; case 274: ! #line 1334 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 275: ! #line 1336 "c-parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 276: ! #line 1341 "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 1346 "c-parse.y" { finish_init (); ! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;} break; case 278: ! #line 1349 "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 1357 "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 1362 "c-parse.y" { finish_init (); ! finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;} break; case 281: ! #line 1365 "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 1373 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 283: ! #line 1375 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 284: ! #line 1380 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 285: ! #line 1382 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 286: ! #line 1387 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype; ;} break; case 287: ! #line 1392 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 288: ! #line 1394 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 289: ! #line 1399 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 290: ! #line 1401 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;} break; case 291: ! #line 1403 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;} break; case 292: ! #line 1405 "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 1407 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 301: ! #line 1430 "c-parse.y" ! { really_start_incremental_init (NULL_TREE); ;} break; case 302: ! #line 1432 "c-parse.y" ! { yyval.ttype = pop_init_level (0); ;} break; case 303: ! #line 1434 "c-parse.y" ! { yyval.ttype = error_mark_node; ;} break; case 304: ! #line 1440 "c-parse.y" { if (pedantic) ! pedwarn ("ISO C forbids empty initializer braces"); ;} break; case 308: ! #line 1454 "c-parse.y" { if (pedantic && ! flag_isoc99) ! pedwarn ("ISO C89 forbids specifying subobject to initialize"); ;} break; case 309: ! #line 1457 "c-parse.y" { if (pedantic) ! pedwarn ("obsolete use of designated initializer without `='"); ;} break; case 310: ! #line 1460 "c-parse.y" { set_init_label (yyvsp[-1].ttype); if (pedantic) ! pedwarn ("obsolete use of designated initializer with `:'"); ;} break; case 311: ! #line 1464 "c-parse.y" ! {;} break; case 313: ! #line 1470 "c-parse.y" ! { push_init_level (0); ;} break; case 314: ! #line 1472 "c-parse.y" ! { process_init_element (pop_init_level (0)); ;} break; case 315: ! #line 1474 "c-parse.y" ! { process_init_element (yyvsp[0].ttype); ;} break; case 319: ! #line 1485 "c-parse.y" ! { set_init_label (yyvsp[0].ttype); ;} break; case 320: ! #line 1487 "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 321: ! #line 1491 "c-parse.y" ! { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;} break; case 322: ! #line 1496 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); *************** yyreduce: *** 4006,4031 **** YYERROR1; } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ! } break; case 323: ! #line 1390 "c-parse.y" ! { store_parm_decls (); } break; case 324: ! #line 1393 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; finish_function (1, 1); pop_function_context (); ! add_decl_stmt (decl); } break; case 325: ! #line 1403 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); --- 4060,4085 ---- YYERROR1; } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ! ;} 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; finish_function (1, 1); pop_function_context (); ! add_decl_stmt (decl); ;} break; case 325: ! #line 1527 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); *************** yyreduce: *** 4037,4283 **** YYERROR1; } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ! } break; case 326: ! #line 1416 "c-parse.y" ! { store_parm_decls (); } break; case 327: ! #line 1419 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; finish_function (1, 1); pop_function_context (); ! add_decl_stmt (decl); } break; case 330: ! #line 1438 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; } break; case 331: ! #line 1440 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); } break; case 332: ! #line 1443 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); } break; case 333: ! #line 1445 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 337: ! #line 1457 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); } break; case 338: ! #line 1460 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); } break; case 340: ! #line 1466 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); } break; case 341: ! #line 1469 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); } break; case 342: ! #line 1471 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 343: ! #line 1473 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 344: ! #line 1475 "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 1482 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); } break; case 346: ! #line 1485 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; } break; case 347: ! #line 1487 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 348: ! #line 1489 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); } break; case 350: ! #line 1495 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 351: ! #line 1497 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 352: ! #line 1502 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 353: ! #line 1504 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 354: ! #line 1509 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 355: ! #line 1511 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 356: ! #line 1518 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ! } break; case 357: ! #line 1522 "c-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); } break; case 358: ! #line 1524 "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 359: ! #line 1528 "c-parse.y" ! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); } break; case 360: ! #line 1530 "c-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); } break; case 361: ! #line 1532 "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 362: ! #line 1536 "c-parse.y" ! { yyval.ttype = start_enum (yyvsp[-1].ttype); } break; case 363: ! #line 1538 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), ! chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); } break; case 364: ! #line 1541 "c-parse.y" ! { yyval.ttype = start_enum (NULL_TREE); } break; case 365: ! #line 1543 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), ! chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); } break; case 366: ! #line 1549 "c-parse.y" ! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); } break; case 367: ! #line 1551 "c-parse.y" ! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); } break; case 368: ! #line 1553 "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 372: ! #line 1568 "c-parse.y" { if (pedantic && ! flag_isoc99) ! pedwarn ("comma at end of enumerator list"); } break; case 373: ! #line 1574 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 374: ! #line 1576 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ! pedwarn ("no semicolon at end of struct or union"); } break; case 375: ! #line 1581 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 376: ! #line 1583 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 377: ! #line 1585 "c-parse.y" { if (pedantic) ! pedwarn ("extra semicolon in struct or union specified"); } break; case 378: ! #line 1591 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; } break; case 379: ! #line 1594 "c-parse.y" { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports --- 4091,4337 ---- YYERROR1; } parsing_iso_function_signature = false; /* Don't warn about nested functions. */ ! ;} break; case 326: ! #line 1540 "c-parse.y" ! { store_parm_decls (); ;} break; case 327: ! #line 1548 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; finish_function (1, 1); pop_function_context (); ! add_decl_stmt (decl); ;} break; case 330: ! #line 1568 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;} break; case 331: ! #line 1570 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;} break; case 332: ! #line 1575 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;} break; case 333: ! #line 1577 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 337: ! #line 1592 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;} break; case 338: ! #line 1597 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;} break; case 340: ! #line 1603 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;} break; case 341: ! #line 1608 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;} break; case 342: ! #line 1610 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 343: ! #line 1612 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 344: ! #line 1614 "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 1622 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;} break; case 346: ! #line 1627 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;} break; case 347: ! #line 1629 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 348: ! #line 1631 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;} break; case 350: ! #line 1637 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 351: ! #line 1639 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 352: ! #line 1644 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 353: ! #line 1646 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 354: ! #line 1651 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 355: ! #line 1653 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 356: ! #line 1664 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ! ;} break; case 357: ! #line 1668 "c-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;} break; case 358: ! #line 1670 "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 359: ! #line 1674 "c-parse.y" ! { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;} break; case 360: ! #line 1676 "c-parse.y" ! { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;} break; case 361: ! #line 1678 "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 362: ! #line 1682 "c-parse.y" ! { yyval.ttype = start_enum (yyvsp[-1].ttype); ;} break; case 363: ! #line 1684 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), ! chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ;} break; case 364: ! #line 1687 "c-parse.y" ! { yyval.ttype = start_enum (NULL_TREE); ;} break; case 365: ! #line 1689 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), ! chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;} break; case 366: ! #line 1695 "c-parse.y" ! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;} break; case 367: ! #line 1697 "c-parse.y" ! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;} break; case 368: ! #line 1699 "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 372: ! #line 1714 "c-parse.y" { if (pedantic && ! flag_isoc99) ! pedwarn ("comma at end of enumerator list"); ;} break; case 373: ! #line 1720 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 374: ! #line 1722 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ! pedwarn ("no semicolon at end of struct or union"); ;} break; case 375: ! #line 1727 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 376: ! #line 1729 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 377: ! #line 1731 "c-parse.y" { if (pedantic) ! pedwarn ("extra semicolon in struct or union specified"); ;} break; case 378: ! #line 1737 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ;} break; case 379: ! #line 1740 "c-parse.y" { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports *************** yyreduce: *** 4286,4518 **** pedwarn ("ISO C doesn't support unnamed structs/unions"); yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE); ! POP_DECLSPEC_STACK; } break; case 380: ! #line 1604 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; } break; case 381: ! #line 1607 "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 382: ! #line 1612 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 383: ! #line 1614 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); } break; case 385: ! #line 1621 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); } break; case 387: ! #line 1627 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); } break; case 388: ! #line 1632 "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 1636 "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 1639 "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 391: ! #line 1645 "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 392: ! #line 1649 "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 393: ! #line 1652 "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 395: ! #line 1661 "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 396: ! #line 1666 "c-parse.y" ! { yyval.ttype = error_mark_node; } break; case 397: ! #line 1672 "c-parse.y" ! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); } break; case 398: ! #line 1674 "c-parse.y" ! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 399: ! #line 1679 "c-parse.y" { pending_xref_error (); ! yyval.ttype = yyvsp[0].ttype; } break; case 400: ! #line 1682 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 401: ! #line 1687 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 403: ! #line 1693 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, NULL_TREE), ! all_prefix_attributes); } break; case 404: ! #line 1697 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[0].ttype), ! all_prefix_attributes); } break; case 405: ! #line 1701 "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 409: ! #line 1714 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 410: ! #line 1719 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); } break; case 411: ! #line 1721 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 412: ! #line 1726 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; } break; case 413: ! #line 1728 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); } break; case 414: ! #line 1730 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); } break; case 415: ! #line 1732 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); } break; case 416: ! #line 1734 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); } break; case 417: ! #line 1741 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); } break; case 418: ! #line 1743 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); } break; case 419: ! #line 1745 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); } break; case 420: ! #line 1747 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); } break; case 421: ! #line 1750 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); } break; case 424: ! #line 1759 "c-parse.y" { pedwarn ("deprecated use of label at end of compound statement"); ! } break; case 432: ! #line 1776 "c-parse.y" { if (pedantic && !flag_isoc99) ! pedwarn ("ISO C89 forbids mixed declarations and code"); } break; case 447: ! #line 1806 "c-parse.y" { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); ! } break; case 448: ! #line 1813 "c-parse.y" ! { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); } break; case 449: ! #line 1818 "c-parse.y" { if (flag_isoc99) { yyval.ttype = c_begin_compound_stmt (); --- 4340,4572 ---- pedwarn ("ISO C doesn't support unnamed structs/unions"); yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE); ! POP_DECLSPEC_STACK; ;} break; case 380: ! #line 1750 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ;} break; case 381: ! #line 1753 "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 382: ! #line 1758 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 383: ! #line 1760 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! RESTORE_EXT_FLAGS (yyvsp[-1].ttype); ;} break; case 385: ! #line 1767 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;} break; case 387: ! #line 1773 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ;} break; case 388: ! #line 1778 "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 1782 "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 1785 "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 391: ! #line 1791 "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 392: ! #line 1795 "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 393: ! #line 1798 "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 395: ! #line 1810 "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 396: ! #line 1815 "c-parse.y" ! { yyval.ttype = error_mark_node; ;} break; case 397: ! #line 1821 "c-parse.y" ! { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;} break; case 398: ! #line 1823 "c-parse.y" ! { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 399: ! #line 1828 "c-parse.y" { pending_xref_error (); ! yyval.ttype = yyvsp[0].ttype; ;} break; case 400: ! #line 1831 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 401: ! #line 1836 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 403: ! #line 1842 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, NULL_TREE), ! all_prefix_attributes); ;} break; case 404: ! #line 1846 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[0].ttype), ! all_prefix_attributes); ;} break; case 405: ! #line 1850 "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 409: ! #line 1863 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 410: ! #line 1868 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;} break; case 411: ! #line 1870 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 412: ! #line 1875 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ;} break; case 413: ! #line 1877 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;} break; case 414: ! #line 1879 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ;} break; case 415: ! #line 1881 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;} break; case 416: ! #line 1883 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ;} break; case 417: ! #line 1890 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ;} break; case 418: ! #line 1892 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ;} break; case 419: ! #line 1894 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ;} break; case 420: ! #line 1896 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ;} break; case 421: ! #line 1899 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ;} break; case 424: ! #line 1912 "c-parse.y" { pedwarn ("deprecated use of label at end of compound statement"); ! ;} break; case 432: ! #line 1929 "c-parse.y" { if (pedantic && !flag_isoc99) ! pedwarn ("ISO C89 forbids mixed declarations and code"); ;} break; case 447: ! #line 1959 "c-parse.y" { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); ! ;} break; case 448: ! #line 1966 "c-parse.y" ! { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ;} break; case 449: ! #line 1971 "c-parse.y" { if (flag_isoc99) { yyval.ttype = c_begin_compound_stmt (); *************** yyreduce: *** 4522,4532 **** } else yyval.ttype = NULL_TREE; ! } break; case 450: ! #line 1832 "c-parse.y" { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); --- 4576,4586 ---- } else yyval.ttype = NULL_TREE; ! ;} break; case 450: ! #line 1987 "c-parse.y" { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); *************** yyreduce: *** 4536,4552 **** = yyval.ttype; } else ! yyval.ttype = NULL_TREE; } break; case 452: ! #line 1848 "c-parse.y" { if (pedantic) ! pedwarn ("ISO C forbids label declarations"); } break; case 455: ! #line 1859 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { --- 4590,4606 ---- = yyval.ttype; } else ! yyval.ttype = NULL_TREE; ;} break; case 452: ! #line 2004 "c-parse.y" { if (pedantic) ! pedwarn ("ISO C forbids label declarations"); ;} break; case 455: ! #line 2015 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { *************** yyreduce: *** 4554,4588 **** C_DECLARED_LABEL_FLAG (label) = 1; add_decl_stmt (label); } ! } break; case 456: ! #line 1872 "c-parse.y" ! {} break; case 458: ! #line 1876 "c-parse.y" { compstmt_count++; ! yyval.ttype = c_begin_compound_stmt (); } break; case 459: ! #line 1881 "c-parse.y" ! { yyval.ttype = convert (void_type_node, integer_zero_node); } break; case 460: ! #line 1883 "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 463: ! #line 1896 "c-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); --- 4608,4642 ---- C_DECLARED_LABEL_FLAG (label) = 1; add_decl_stmt (label); } ! ;} break; case 456: ! #line 2029 "c-parse.y" ! {;} break; case 458: ! #line 2033 "c-parse.y" { compstmt_count++; ! yyval.ttype = c_begin_compound_stmt (); ;} break; case 459: ! #line 2038 "c-parse.y" ! { yyval.ttype = convert (void_type_node, integer_zero_node); ;} break; case 460: ! #line 2040 "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 463: ! #line 2053 "c-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); *************** yyreduce: *** 4596,4632 **** push_label_level (); compstmt_count++; yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); ! } break; case 464: ! #line 1913 "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 465: ! #line 1921 "c-parse.y" ! { c_finish_then (); } break; case 467: ! #line 1929 "c-parse.y" ! { yyval.ttype = c_begin_if_stmt (); } break; case 468: ! #line 1931 "c-parse.y" { c_expand_start_cond (c_common_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 469: ! #line 1941 "c-parse.y" { stmt_count++; compstmt_count++; yyval.ttype --- 4650,4687 ---- push_label_level (); compstmt_count++; yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); ! last_expr_type = NULL_TREE; ! ;} break; case 464: ! #line 2071 "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 465: ! #line 2079 "c-parse.y" ! { c_finish_then (); ;} break; case 467: ! #line 2096 "c-parse.y" ! { yyval.ttype = c_begin_if_stmt (); ;} break; case 468: ! #line 2098 "c-parse.y" { c_expand_start_cond (c_common_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 469: ! #line 2110 "c-parse.y" { stmt_count++; compstmt_count++; yyval.ttype *************** yyreduce: *** 4636,4672 **** parsing the complete do-statement, set the condition now. Otherwise, we can get crashes at RTL-generation time. */ ! DO_COND (yyval.ttype) = error_mark_node; } break; case 470: ! #line 1952 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; ! RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); } break; case 471: ! #line 1958 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.filename = input_filename; } break; case 472: ! #line 1964 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.lineno = lineno; } break; case 475: ! #line 1977 "c-parse.y" { if (flag_isoc99) ! RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); } break; case 476: ! #line 1983 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; --- 4691,4727 ---- parsing the complete do-statement, set the condition now. Otherwise, we can get crashes at RTL-generation time. */ ! DO_COND (yyval.ttype) = error_mark_node; ;} break; case 470: ! #line 2121 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; ! RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ;} break; case 471: ! #line 2129 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.filename = input_filename; ;} break; case 472: ! #line 2135 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.lineno = lineno; ;} break; case 475: ! #line 2148 "c-parse.y" { if (flag_isoc99) ! RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ;} break; case 476: ! #line 2154 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; *************** yyreduce: *** 4676,4709 **** but I suspect that problems will occur when doing inlining at the tree level. */ } ! } break; case 477: ! #line 1997 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; } ! } break; case 478: ! #line 2006 "c-parse.y" { c_expand_start_else (); ! yyvsp[-1].itype = stmt_count; } break; case 479: ! #line 2009 "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 480: ! #line 2014 "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 --- 4731,4764 ---- but I suspect that problems will occur when doing inlining at the tree level. */ } ! ;} break; case 477: ! #line 2168 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; } ! ;} break; case 478: ! #line 2177 "c-parse.y" { c_expand_start_else (); ! yyvsp[-1].itype = stmt_count; ;} break; case 479: ! #line 2180 "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 480: ! #line 2185 "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 *************** yyreduce: *** 4711,4872 **** give a second error if this is a nested `if'. */ if (extra_warnings && stmt_count++ == yyvsp[0].itype) warning_with_file_and_line (if_stmt_file, if_stmt_line, ! "empty body in an if-statement"); } break; case 481: ! #line 2024 "c-parse.y" ! { c_expand_end_cond (); } break; case 482: ! #line 2027 "c-parse.y" { stmt_count++; ! yyval.ttype = c_begin_while_stmt (); } break; case 483: ! #line 2030 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype); c_finish_while_stmt_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype); ! yyval.ttype = add_stmt (yyvsp[-3].ttype); } break; case 484: ! #line 2035 "c-parse.y" ! { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); } break; case 485: ! #line 2038 "c-parse.y" ! { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); } break; case 486: ! #line 2040 "c-parse.y" ! { } break; case 487: ! #line 2042 "c-parse.y" { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); ! add_stmt (yyval.ttype); } break; case 488: ! #line 2046 "c-parse.y" { stmt_count++; ! RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); } break; case 489: ! #line 2049 "c-parse.y" { if (yyvsp[-1].ttype) FOR_COND (yyvsp[-5].ttype) ! = c_common_truthvalue_conversion (yyvsp[-1].ttype); } break; case 490: ! #line 2053 "c-parse.y" ! { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; } break; case 491: ! #line 2055 "c-parse.y" ! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); } break; case 492: ! #line 2057 "c-parse.y" { stmt_count++; ! yyval.ttype = c_start_case (yyvsp[-1].ttype); } break; case 493: ! #line 2060 "c-parse.y" ! { c_finish_case (); } break; case 494: ! #line 2065 "c-parse.y" ! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); } break; case 495: ! #line 2067 "c-parse.y" ! { check_for_loop_decls (); } break; case 496: ! #line 2073 "c-parse.y" ! { stmt_count++; yyval.ttype = yyvsp[0].ttype; } break; case 497: ! #line 2075 "c-parse.y" { stmt_count++; ! yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); } break; case 498: ! #line 2078 "c-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ! yyval.ttype = NULL_TREE; } break; case 499: ! #line 2082 "c-parse.y" { stmt_count++; ! yyval.ttype = add_stmt (build_break_stmt ()); } break; case 500: ! #line 2085 "c-parse.y" { stmt_count++; ! yyval.ttype = add_stmt (build_continue_stmt ()); } break; case 501: ! #line 2088 "c-parse.y" { stmt_count++; ! yyval.ttype = c_expand_return (NULL_TREE); } break; case 502: ! #line 2091 "c-parse.y" { stmt_count++; ! yyval.ttype = c_expand_return (yyvsp[-1].ttype); } break; case 503: ! #line 2094 "c-parse.y" { stmt_count++; ! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); } break; case 504: ! #line 2098 "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 505: ! #line 2103 "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 506: ! #line 2108 "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 507: ! #line 2111 "c-parse.y" { tree decl; stmt_count++; decl = lookup_label (yyvsp[-1].ttype); --- 4766,4927 ---- give a second error if this is a nested `if'. */ if (extra_warnings && stmt_count++ == yyvsp[0].itype) warning_with_file_and_line (if_stmt_file, if_stmt_line, ! "empty body in an if-statement"); ;} break; case 481: ! #line 2197 "c-parse.y" ! { c_expand_end_cond (); ;} break; case 482: ! #line 2207 "c-parse.y" { stmt_count++; ! yyval.ttype = c_begin_while_stmt (); ;} break; case 483: ! #line 2210 "c-parse.y" { yyvsp[-1].ttype = c_common_truthvalue_conversion (yyvsp[-1].ttype); c_finish_while_stmt_cond (c_common_truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype); ! yyval.ttype = add_stmt (yyvsp[-3].ttype); ;} break; case 484: ! #line 2215 "c-parse.y" ! { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ;} break; case 485: ! #line 2218 "c-parse.y" ! { DO_COND (yyvsp[-4].ttype) = c_common_truthvalue_conversion (yyvsp[-2].ttype); ;} break; case 486: ! #line 2220 "c-parse.y" ! { ;} break; case 487: ! #line 2222 "c-parse.y" { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); ! add_stmt (yyval.ttype); ;} break; case 488: ! #line 2226 "c-parse.y" { stmt_count++; ! RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ;} break; case 489: ! #line 2229 "c-parse.y" { if (yyvsp[-1].ttype) FOR_COND (yyvsp[-5].ttype) ! = c_common_truthvalue_conversion (yyvsp[-1].ttype); ;} break; case 490: ! #line 2233 "c-parse.y" ! { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ;} break; case 491: ! #line 2235 "c-parse.y" ! { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ;} break; case 492: ! #line 2237 "c-parse.y" { stmt_count++; ! yyval.ttype = c_start_case (yyvsp[-1].ttype); ;} break; case 493: ! #line 2240 "c-parse.y" ! { c_finish_case (); ;} break; case 494: ! #line 2245 "c-parse.y" ! { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ;} break; case 495: ! #line 2247 "c-parse.y" ! { check_for_loop_decls (); ;} break; case 496: ! #line 2253 "c-parse.y" ! { stmt_count++; yyval.ttype = yyvsp[0].ttype; ;} break; case 497: ! #line 2255 "c-parse.y" { stmt_count++; ! yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ;} break; case 498: ! #line 2258 "c-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ! yyval.ttype = NULL_TREE; ;} break; case 499: ! #line 2262 "c-parse.y" { stmt_count++; ! yyval.ttype = add_stmt (build_break_stmt ()); ;} break; case 500: ! #line 2265 "c-parse.y" { stmt_count++; ! yyval.ttype = add_stmt (build_continue_stmt ()); ;} break; case 501: ! #line 2268 "c-parse.y" { stmt_count++; ! yyval.ttype = c_expand_return (NULL_TREE); ;} break; case 502: ! #line 2271 "c-parse.y" { stmt_count++; ! yyval.ttype = c_expand_return (yyvsp[-1].ttype); ;} break; case 503: ! #line 2274 "c-parse.y" { stmt_count++; ! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ;} break; case 504: ! #line 2278 "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 505: ! #line 2283 "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 506: ! #line 2288 "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 507: ! #line 2291 "c-parse.y" { tree decl; stmt_count++; decl = lookup_label (yyvsp[-1].ttype); *************** yyreduce: *** 4877,4919 **** } else yyval.ttype = NULL_TREE; ! } break; case 508: ! #line 2123 "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 509: ! #line 2129 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 510: ! #line 2135 "c-parse.y" { stmt_count++; ! yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); } break; case 511: ! #line 2138 "c-parse.y" { stmt_count++; ! yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 512: ! #line 2141 "c-parse.y" { stmt_count++; ! yyval.ttype = do_case (NULL_TREE, NULL_TREE); } break; case 513: ! #line 2144 "c-parse.y" { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype); stmt_count++; if (label) --- 4932,4974 ---- } else yyval.ttype = NULL_TREE; ! ;} break; case 508: ! #line 2303 "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 509: ! #line 2309 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 510: ! #line 2317 "c-parse.y" { stmt_count++; ! yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ;} break; case 511: ! #line 2320 "c-parse.y" { stmt_count++; ! yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 512: ! #line 2323 "c-parse.y" { stmt_count++; ! yyval.ttype = do_case (NULL_TREE, NULL_TREE); ;} break; case 513: ! #line 2326 "c-parse.y" { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype); stmt_count++; if (label) *************** yyreduce: *** 4923,5027 **** } else yyval.ttype = NULL_TREE; ! } break; case 514: ! #line 2160 "c-parse.y" { emit_line_note (input_filename, lineno); ! yyval.ttype = NULL_TREE; } break; case 515: ! #line 2163 "c-parse.y" ! { emit_line_note (input_filename, lineno); } break; case 516: ! #line 2168 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 518: ! #line 2174 "c-parse.y" ! { yyval.ttype = NULL_TREE; } break; case 521: ! #line 2181 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 522: ! #line 2186 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); } break; case 523: ! #line 2188 "c-parse.y" { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype), IDENTIFIER_POINTER (yyvsp[-5].ttype)); ! yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); } break; case 524: ! #line 2195 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); } break; case 525: ! #line 2197 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); } break; case 526: ! #line 2203 "c-parse.y" { pushlevel (0); clear_parm_order (); ! declare_parm_level (0); } break; case 527: ! #line 2207 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); ! poplevel (0, 0, 0); } break; case 529: ! #line 2215 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ISO C forbids forward parameter declarations"); /* Mark the forward decls as such. */ for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) TREE_ASM_WRITTEN (parm) = 1; ! clear_parm_order (); } break; case 530: ! #line 2223 "c-parse.y" { /* Dummy action so attributes are in known place ! on parser stack. */ } break; case 531: ! #line 2226 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 532: ! #line 2228 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); } break; case 533: ! #line 2233 "c-parse.y" ! { yyval.ttype = get_parm_info (0); } break; case 534: ! #line 2235 "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. --- 4978,5082 ---- } else yyval.ttype = NULL_TREE; ! ;} break; case 514: ! #line 2342 "c-parse.y" { emit_line_note (input_filename, lineno); ! yyval.ttype = NULL_TREE; ;} break; case 515: ! #line 2345 "c-parse.y" ! { emit_line_note (input_filename, lineno); ;} break; case 516: ! #line 2350 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 518: ! #line 2357 "c-parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 521: ! #line 2364 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 522: ! #line 2369 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ;} break; case 523: ! #line 2371 "c-parse.y" { yyvsp[-5].ttype = build_string (IDENTIFIER_LENGTH (yyvsp[-5].ttype), IDENTIFIER_POINTER (yyvsp[-5].ttype)); ! yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ;} break; case 524: ! #line 2378 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;} break; case 525: ! #line 2380 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;} break; case 526: ! #line 2390 "c-parse.y" { pushlevel (0); clear_parm_order (); ! declare_parm_level (0); ;} break; case 527: ! #line 2394 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); ! poplevel (0, 0, 0); ;} break; case 529: ! #line 2402 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ISO C forbids forward parameter declarations"); /* Mark the forward decls as such. */ for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) TREE_ASM_WRITTEN (parm) = 1; ! clear_parm_order (); ;} break; case 530: ! #line 2410 "c-parse.y" { /* Dummy action so attributes are in known place ! on parser stack. */ ;} break; case 531: ! #line 2413 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 532: ! #line 2415 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;} break; case 533: ! #line 2421 "c-parse.y" ! { yyval.ttype = get_parm_info (0); ;} break; case 534: ! #line 2423 "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. *************** yyreduce: *** 5030,5154 **** tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error ("ISO C requires a named argument before `...'"); ! } break; case 535: ! #line 2245 "c-parse.y" { yyval.ttype = get_parm_info (1); parsing_iso_function_signature = true; ! } break; case 536: ! #line 2249 "c-parse.y" ! { yyval.ttype = get_parm_info (0); } break; case 537: ! #line 2254 "c-parse.y" ! { push_parm_decl (yyvsp[0].ttype); } break; case 538: ! #line 2256 "c-parse.y" ! { push_parm_decl (yyvsp[0].ttype); } break; case 539: ! #line 2262 "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 540: ! #line 2267 "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 2272 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; } break; case 542: ! #line 2275 "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 2281 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; } break; case 544: ! #line 2288 "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 2293 "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 2298 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; } break; case 547: ! #line 2301 "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 2307 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; } break; case 549: ! #line 2313 "c-parse.y" { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype); ! all_prefix_attributes = prefix_attributes; } break; case 550: ! #line 2320 "c-parse.y" { pushlevel (0); clear_parm_order (); ! declare_parm_level (1); } break; case 551: ! #line 2324 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); ! poplevel (0, 0, 0); } break; case 553: ! #line 2332 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) --- 5085,5209 ---- tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error ("ISO C requires a named argument before `...'"); ! ;} break; case 535: ! #line 2433 "c-parse.y" { yyval.ttype = get_parm_info (1); parsing_iso_function_signature = true; ! ;} break; case 536: ! #line 2437 "c-parse.y" ! { yyval.ttype = get_parm_info (0); ;} break; case 537: ! #line 2442 "c-parse.y" ! { push_parm_decl (yyvsp[0].ttype); ;} break; case 538: ! #line 2444 "c-parse.y" ! { push_parm_decl (yyvsp[0].ttype); ;} break; case 539: ! #line 2451 "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 540: ! #line 2456 "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 2461 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ;} break; case 542: ! #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 543: ! #line 2470 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ;} break; case 544: ! #line 2478 "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 2483 "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 2488 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ;} break; case 547: ! #line 2491 "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 2497 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ;} break; case 549: ! #line 2503 "c-parse.y" { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype); ! all_prefix_attributes = prefix_attributes; ;} break; case 550: ! #line 2512 "c-parse.y" { pushlevel (0); clear_parm_order (); ! declare_parm_level (1); ;} break; case 551: ! #line 2516 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); ! poplevel (0, 0, 0); ;} break; case 553: ! #line 2524 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) *************** yyreduce: *** 5161,5218 **** || TREE_PURPOSE (yyval.ttype) == 0 || TREE_CODE (TREE_PURPOSE (yyval.ttype)) != PARM_DECL)) YYERROR1; ! } break; case 554: ! #line 2350 "c-parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); } break; case 555: ! #line 2352 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 556: ! #line 2358 "c-parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); } break; case 557: ! #line 2360 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 558: ! #line 2365 "c-parse.y" { yyval.ttype = SAVE_EXT_FLAGS(); pedantic = 0; warn_pointer_arith = 0; warn_traditional = 0; ! flag_iso = 0; } break; } ! /* Line 1016 of /usr/share/bison/yacc.c. */ ! #line 5201 "c-p10012.c" yyvsp -= yylen; yyssp -= yylen; ! #if YYDEBUG ! if (yydebug) ! { ! short *yyssp1 = yyss - 1; ! YYFPRINTF (stderr, "state stack now"); ! while (yyssp1 != yyssp) ! YYFPRINTF (stderr, " %d", *++yyssp1); ! YYFPRINTF (stderr, "\n"); ! } ! #endif *++yyvsp = yyval; --- 5216,5264 ---- || TREE_PURPOSE (yyval.ttype) == 0 || TREE_CODE (TREE_PURPOSE (yyval.ttype)) != PARM_DECL)) YYERROR1; ! ;} break; case 554: ! #line 2542 "c-parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;} break; case 555: ! #line 2544 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 556: ! #line 2550 "c-parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;} break; case 557: ! #line 2552 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 558: ! #line 2557 "c-parse.y" { yyval.ttype = SAVE_EXT_FLAGS(); pedantic = 0; warn_pointer_arith = 0; warn_traditional = 0; ! flag_iso = 0; ;} break; } ! /* Line 991 of yacc.c. */ ! #line 5255 "c-p15339.c" yyvsp -= yylen; yyssp -= yylen; ! YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *************** yyerrlab: *** 5257,5268 **** yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) yysize += yystrlen (yytname[yyx]) + 15, yycount++; ! yysize += yystrlen ("parse error, unexpected ") + 1; yysize += yystrlen (yytname[yytype]); yymsg = (char *) YYSTACK_ALLOC (yysize); if (yymsg != 0) { ! char *yyp = yystpcpy (yymsg, "parse error, unexpected "); yyp = yystpcpy (yyp, yytname[yytype]); if (yycount < 5) --- 5303,5314 ---- yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) yysize += yystrlen (yytname[yyx]) + 15, yycount++; ! yysize += yystrlen ("syntax error, unexpected ") + 1; yysize += yystrlen (yytname[yytype]); yymsg = (char *) YYSTACK_ALLOC (yysize); if (yymsg != 0) { ! char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); yyp = yystpcpy (yyp, yytname[yytype]); if (yycount < 5) *************** yyerrlab: *** 5283,5301 **** YYSTACK_FREE (yymsg); } else ! yyerror ("parse error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ ! yyerror ("parse error"); } - goto yyerrlab1; ! /*----------------------------------------------------. ! | yyerrlab1 -- error raised explicitly by an action. | ! `----------------------------------------------------*/ ! yyerrlab1: if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an --- 5329,5343 ---- YYSTACK_FREE (yymsg); } else ! yyerror ("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ ! yyerror ("syntax error"); } ! if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an *************** yyerrlab1: *** 5307,5334 **** /* Pop the error token. */ YYPOPSTACK; /* Pop the rest of the stack. */ ! while (yyssp > yyss) { ! YYDPRINTF ((stderr, "Error: popping ")); ! YYDSYMPRINT ((stderr, ! yystos[*yyssp], ! *yyvsp)); ! YYDPRINTF ((stderr, "\n")); ! yydestruct (yystos[*yyssp], *yyvsp); YYPOPSTACK; } YYABORT; } ! YYDPRINTF ((stderr, "Discarding token %d (%s).\n", ! yychar, yytname[yychar1])); ! yydestruct (yychar1, yylval); yychar = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error token. */ yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) --- 5349,5394 ---- /* Pop the error token. */ YYPOPSTACK; /* Pop the rest of the stack. */ ! while (yyss < yyssp) { ! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); ! yydestruct (yystos[*yyssp], yyvsp); YYPOPSTACK; } YYABORT; } ! YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); ! yydestruct (yytoken, &yylval); yychar = YYEMPTY; + } /* Else will try to reuse lookahead token after shifting the error token. */ + goto yyerrlab2; + + + /*----------------------------------------------------. + | yyerrlab1 -- error raised explicitly by an action. | + `----------------------------------------------------*/ + yyerrlab1: + + /* Suppress GCC warning that yyerrlab1 is unused when no action + invokes YYERROR. */ + #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) \ + && !defined __cplusplus + __attribute__ ((__unused__)) + #endif + + goto yyerrlab2; + + + /*---------------------------------------------------------------. + | yyerrlab2 -- pop states until the error token can be shifted. | + `---------------------------------------------------------------*/ + yyerrlab2: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) *************** yyerrlab1: *** 5349,5374 **** if (yyssp == yyss) YYABORT; ! YYDPRINTF ((stderr, "Error: popping ")); ! YYDSYMPRINT ((stderr, ! yystos[*yyssp], *yyvsp)); ! YYDPRINTF ((stderr, "\n")); ! ! yydestruct (yystos[yystate], *yyvsp); yyvsp--; yystate = *--yyssp; ! ! #if YYDEBUG ! if (yydebug) ! { ! short *yyssp1 = yyss - 1; ! YYFPRINTF (stderr, "Error: state stack now"); ! while (yyssp1 != yyssp) ! YYFPRINTF (stderr, " %d", *++yyssp1); ! YYFPRINTF (stderr, "\n"); ! } ! #endif } if (yyn == YYFINAL) --- 5409,5420 ---- if (yyssp == yyss) YYABORT; ! YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); ! yydestruct (yystos[yystate], yyvsp); yyvsp--; yystate = *--yyssp; ! YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) *************** yyreturn: *** 5416,5422 **** } ! #line 2372 "c-parse.y" /* yylex() is a thin wrapper around c_lex(), all it does is translate --- 5462,5468 ---- } ! #line 2564 "c-parse.y" /* yylex() is a thin wrapper around c_lex(), all it does is translate diff -Nrcpad gcc-3.3.5/gcc/c-parse.in gcc-3.3.6/gcc/c-parse.in *** gcc-3.3.5/gcc/c-parse.in 2003-01-28 01:54:03.000000000 +0000 --- gcc-3.3.6/gcc/c-parse.in 2004-12-21 21:51:26.000000000 +0000 *************** compstmt_primary_start: *** 2177,2182 **** --- 2177,2183 ---- push_label_level (); compstmt_count++; $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); + last_expr_type = NULL_TREE; } ; diff -Nrcpad gcc-3.3.5/gcc/c-parse.y gcc-3.3.6/gcc/c-parse.y *** gcc-3.3.5/gcc/c-parse.y 2004-09-30 17:35:53.000000000 +0000 --- gcc-3.3.6/gcc/c-parse.y 2005-05-03 12:38:32.000000000 +0000 *************** compstmt_primary_start: *** 2063,2068 **** --- 2063,2069 ---- push_label_level (); compstmt_count++; $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); + last_expr_type = NULL_TREE; } ; diff -Nrcpad gcc-3.3.5/gcc/doc/cpp.1 gcc-3.3.6/gcc/doc/cpp.1 *** gcc-3.3.5/gcc/doc/cpp.1 2004-09-30 17:38:13.000000000 +0000 --- gcc-3.3.6/gcc/doc/cpp.1 2005-05-03 12:41:24.000000000 +0000 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== *************** *** 129,135 **** .\" ======================================================================== .\" .IX Title "CPP 1" ! .TH CPP 1 "2004-09-30" "gcc-3.3.5" "GNU" .SH "NAME" cpp \- The C Preprocessor .SH "SYNOPSIS" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "CPP 1" ! .TH CPP 1 "2005-05-03" "gcc-3.3.6" "GNU" .SH "NAME" cpp \- The C Preprocessor .SH "SYNOPSIS" diff -Nrcpad gcc-3.3.5/gcc/doc/cpp.info gcc-3.3.6/gcc/doc/cpp.info *** gcc-3.3.5/gcc/doc/cpp.info 2004-09-30 17:38:12.000000000 +0000 --- gcc-3.3.6/gcc/doc/cpp.info 2005-05-03 12:41:23.000000000 +0000 *************** *** 1,7 **** ! This is doc/cpp.info, produced by makeinfo version 4.5 from doc/cpp.texi. ! Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,7 ---- ! This is doc/cpp.info, produced by makeinfo version 4.7 from doc/cpp.texi. ! Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** are (a) (see below), and the Back-Cover *** 21,27 **** You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise ! funds for GNU development. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * Cpp: (cpp). The GNU C preprocessor. --- 21,28 ---- You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise ! funds for GNU development. man end ! INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * Cpp: (cpp). The GNU C preprocessor. *************** END-INFO-DIR-ENTRY *** 30,38 ****  File: cpp.info, Node: Top, Next: Overview, Up: (dir) ! ! The C preprocessor implements the macro language used to transform C, C++, and Objective-C programs before they are compiled. It can also be useful on its own. --- 31,40 ----  File: cpp.info, Node: Top, Next: Overview, Up: (dir) + The C Preprocessor + ****************** ! The C preprocessor implements the macro language used to transform C, C++, and Objective-C programs before they are compiled. It can also be useful on its own. *************** Obsolete Features *** 130,136 **** * Assertions:: * Obsolete once-only headers:: ! Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 132,138 ---- * Assertions:: * Obsolete once-only headers:: ! Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** are (a) (see below), and the Back-Cover *** 150,164 **** You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise ! funds for GNU development.  File: cpp.info, Node: Overview, Next: Header Files, Prev: Top, Up: Top ! Overview ! ******** ! The C preprocessor, often known as "cpp", is a "macro processor" ! that is used automatically by the C compiler to transform your program before compilation. It is called a macro processor because it allows you to define "macros", which are brief abbreviations for longer constructs. --- 152,167 ---- You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise ! funds for GNU development. man end !  File: cpp.info, Node: Overview, Next: Header Files, Prev: Top, Up: Top ! 1 Overview ! ********** ! The C preprocessor, often known as "cpp", is a "macro processor" that ! is used automatically by the C compiler to transform your program before compilation. It is called a macro processor because it allows you to define "macros", which are brief abbreviations for longer constructs. *************** manual refer to GNU CPP. *** 213,222 ****  File: cpp.info, Node: Initial processing, Next: Tokenization, Up: Overview ! Initial processing ! ================== ! The preprocessor performs a series of textual transformations on its input. These happen before all other processing. Conceptually, they happen in a rigid order, and the entire file is run through each transformation before the next one begins. CPP actually does them all --- 216,225 ----  File: cpp.info, Node: Initial processing, Next: Tokenization, Up: Overview ! 1.1 Initial processing ! ====================== ! The preprocessor performs a series of textual transformations on its input. These happen before all other processing. Conceptually, they happen in a rigid order, and the entire file is run through each transformation before the next one begins. CPP actually does them all *************** standard. *** 315,321 **** // contains line comment yet more comment */ outside comment ! // line comment /* contains block comment */ But beware of commenting out one end of a block comment with a line --- 318,324 ---- // contains line comment yet more comment */ outside comment ! // line comment /* contains block comment */ But beware of commenting out one end of a block comment with a line *************** correct program, however. *** 355,364 ****  File: cpp.info, Node: Tokenization, Next: The preprocessing language, Prev: Initial processing, Up: Overview ! Tokenization ! ============ ! After the textual transformations are finished, the input file is converted into a sequence of "preprocessing tokens". These mostly correspond to the syntactic tokens used by the C compiler, but there are a few differences. White space separates tokens; it is not itself a --- 358,367 ----  File: cpp.info, Node: Tokenization, Next: The preprocessing language, Prev: Initial processing, Up: Overview ! 1.2 Tokenization ! ================ ! After the textual transformations are finished, the input file is converted into a sequence of "preprocessing tokens". These mostly correspond to the syntactic tokens used by the C compiler, but there are a few differences. White space separates tokens; it is not itself a *************** what we are calling "string constants". *** 503,516 ****  File: cpp.info, Node: The preprocessing language, Prev: Tokenization, Up: Overview ! The preprocessing language ! ========================== ! After tokenization, the stream of tokens may simply be passed ! straight to the compiler's parser. However, if it contains any ! operations in the "preprocessing language", it will be transformed ! first. This stage corresponds roughly to the standard's "translation ! phase 4" and is what most people think of as the preprocessor's job. The preprocessing language consists of "directives" to be executed and "macros" to be expanded. Its primary capabilities are: --- 506,519 ----  File: cpp.info, Node: The preprocessing language, Prev: Tokenization, Up: Overview ! 1.3 The preprocessing language ! ============================== ! After tokenization, the stream of tokens may simply be passed straight ! to the compiler's parser. However, if it contains any operations in the ! "preprocessing language", it will be transformed first. This stage ! corresponds roughly to the standard's "translation phase 4" and is what ! most people think of as the preprocessor's job. The preprocessing language consists of "directives" to be executed and "macros" to be expanded. Its primary capabilities are: *************** the first line to make one long line. *** 566,578 ****  File: cpp.info, Node: Header Files, Next: Macros, Prev: Overview, Up: Top ! Header Files ! ************ ! A header file is a file containing C declarations and macro ! definitions (*note Macros::) to be shared between several source files. ! You request the use of a header file in your program by "including" ! it, with the C preprocessing directive `#include'. Header files serve two purposes. --- 569,581 ----  File: cpp.info, Node: Header Files, Next: Macros, Prev: Overview, Up: Top ! 2 Header Files ! ************** ! A header file is a file containing C declarations and macro definitions ! (*note Macros::) to be shared between several source files. You request ! the use of a header file in your program by "including" it, with the C ! preprocessing directive `#include'. Header files serve two purposes. *************** underscores in header file names, and at *** 614,624 ****  File: cpp.info, Node: Include Syntax, Next: Include Operation, Up: Header Files ! Include Syntax ! ============== ! Both user and system header files are included using the ! preprocessing directive `#include'. It has two variants: `#include ' This variant is used for system header files. It searches for a --- 617,627 ----  File: cpp.info, Node: Include Syntax, Next: Include Operation, Up: Header Files ! 2.1 Include Syntax ! ================== ! Both user and system header files are included using the preprocessing ! directive `#include'. It has two variants: `#include ' This variant is used for system header files. It searches for a *************** after the file name. *** 650,660 ****  File: cpp.info, Node: Include Operation, Next: Search Path, Prev: Include Syntax, Up: Header Files ! Include Operation ! ================= ! The `#include' directive works by directing the C preprocessor to ! scan the specified file as input before continuing with the rest of the current file. The output from the preprocessor contains the output already generated, followed by the output resulting from the included file, followed by the output that comes from the text after the --- 653,663 ----  File: cpp.info, Node: Include Operation, Next: Search Path, Prev: Include Syntax, Up: Header Files ! 2.2 Include Operation ! ===================== ! The `#include' directive works by directing the C preprocessor to scan ! the specified file as input before continuing with the rest of the current file. The output from the preprocessor contains the output already generated, followed by the output resulting from the included file, followed by the output that comes from the text after the *************** this, *** 668,674 **** int x; #include "header.h" ! int main (void) { --- 671,677 ---- int x; #include "header.h" ! int main (void) { *************** read *** 680,686 **** int x; char *test (void); ! int main (void) { --- 683,689 ---- int x; char *test (void); ! int main (void) { *************** final newline. *** 708,717 ****  File: cpp.info, Node: Search Path, Next: Once-Only Headers, Prev: Include Operation, Up: Header Files ! Search Path ! =========== ! GCC looks in several different places for headers. On a normal Unix system, if you do not instruct it otherwise, it will look for headers requested with `#include ' in: --- 711,720 ----  File: cpp.info, Node: Search Path, Next: Once-Only Headers, Prev: Include Operation, Up: Header Files ! 2.3 Search Path ! =============== ! GCC looks in several different places for headers. On a normal Unix system, if you do not instruct it otherwise, it will look for headers requested with `#include ' in: *************** are generally less useful. *Note Invoca *** 776,788 ****  File: cpp.info, Node: Once-Only Headers, Next: Computed Includes, Prev: Search Path, Up: Header Files ! Once-Only Headers ! ================= ! If a header file happens to be included twice, the compiler will ! process its contents twice. This is very likely to cause an error, ! e.g. when the compiler sees the same structure definition twice. Even ! if it does not, it will certainly waste time. The standard way to prevent this is to enclose the entire real contents of the file in a conditional, like this: --- 779,791 ----  File: cpp.info, Node: Once-Only Headers, Next: Computed Includes, Prev: Search Path, Up: Header Files ! 2.4 Once-Only Headers ! ===================== ! If a header file happens to be included twice, the compiler will process ! its contents twice. This is very likely to cause an error, e.g. when ! the compiler sees the same structure definition twice. Even if it does ! not, it will certainly waste time. The standard way to prevent this is to enclose the entire real contents of the file in a conditional, like this: *************** contents of the file in a conditional, l *** 790,798 **** /* File foo. */ #ifndef FILE_FOO_SEEN #define FILE_FOO_SEEN ! THE ENTIRE FILE ! #endif /* !FILE_FOO_SEEN */ This construct is commonly known as a "wrapper #ifndef". When the --- 793,801 ---- /* File foo. */ #ifndef FILE_FOO_SEEN #define FILE_FOO_SEEN ! THE ENTIRE FILE ! #endif /* !FILE_FOO_SEEN */ This construct is commonly known as a "wrapper #ifndef". When the *************** avoid conflicts with other header files. *** 818,827 ****  File: cpp.info, Node: Computed Includes, Next: Wrapper Headers, Prev: Once-Only Headers, Up: Header Files ! Computed Includes ! ================= ! Sometimes it is necessary to select one of several different header files to be included into your program. They might specify configuration parameters to be used on different sorts of operating systems, for instance. You could do this with a series of conditionals, --- 821,830 ----  File: cpp.info, Node: Computed Includes, Next: Wrapper Headers, Prev: Once-Only Headers, Up: Header Files ! 2.5 Computed Includes ! ===================== ! Sometimes it is necessary to select one of several different header files to be included into your program. They might specify configuration parameters to be used on different sorts of operating systems, for instance. You could do this with a series of conditionals, *************** minimize confusion for people reading yo *** 892,901 ****  File: cpp.info, Node: Wrapper Headers, Next: System Headers, Prev: Computed Includes, Up: Header Files ! Wrapper Headers ! =============== ! Sometimes it is necessary to adjust the contents of a system-provided header file without editing it directly. GCC's `fixincludes' operation does this, for example. One way to do that would be to create a new header file with the same name and insert it in the search path before --- 895,904 ----  File: cpp.info, Node: Wrapper Headers, Next: System Headers, Prev: Computed Includes, Up: Header Files ! 2.6 Wrapper Headers ! =================== ! Sometimes it is necessary to adjust the contents of a system-provided header file without editing it directly. GCC's `fixincludes' operation does this, for example. One way to do that would be to create a new header file with the same name and insert it in the search path before *************** Headers::), it will recurse infinitely a *** 910,918 **** You could include the old header with an absolute pathname: #include "/usr/include/old-header.h" ! ! This works, but is not clean; should the system headers ever move, you ! would have to edit the new headers to match. There is no way to solve this problem within the C standard, but you can use the GNU extension `#include_next'. It means, "Include the --- 913,920 ---- You could include the old header with an absolute pathname: #include "/usr/include/old-header.h" ! This works, but is not clean; should the system headers ever move, ! you would have to edit the new headers to match. There is no way to solve this problem within the C standard, but you can use the GNU extension `#include_next'. It means, "Include the *************** lines of `fixincludes'. *** 943,952 ****  File: cpp.info, Node: System Headers, Prev: Wrapper Headers, Up: Header Files ! System Headers ! ============== ! The header files declaring interfaces to the operating system and runtime libraries often cannot be written in strictly conforming C. Therefore, GCC gives code found in "system headers" special treatment. All warnings, other than those generated by `#warning' (*note --- 945,954 ----  File: cpp.info, Node: System Headers, Prev: Wrapper Headers, Up: Header Files ! 2.7 System Headers ! ================== ! The header files declaring interfaces to the operating system and runtime libraries often cannot be written in strictly conforming C. Therefore, GCC gives code found in "system headers" special treatment. All warnings, other than those generated by `#warning' (*note *************** from the command line. *** 986,999 ****  File: cpp.info, Node: Macros, Next: Conditionals, Prev: Header Files, Up: Top ! Macros ! ****** ! A "macro" is a fragment of code which has been given a name. ! Whenever the name is used, it is replaced by the contents of the macro. ! There are two kinds of macros. They differ mostly in what they look ! like when they are used. "Object-like" macros resemble data objects ! when used, "function-like" macros resemble function calls. You may define any valid identifier as a macro, even if it is a C keyword. The preprocessor does not know anything about keywords. This --- 988,1001 ----  File: cpp.info, Node: Macros, Next: Conditionals, Prev: Header Files, Up: Top ! 3 Macros ! ******** ! A "macro" is a fragment of code which has been given a name. Whenever ! the name is used, it is replaced by the contents of the macro. There ! are two kinds of macros. They differ mostly in what they look like ! when they are used. "Object-like" macros resemble data objects when ! used, "function-like" macros resemble function calls. You may define any valid identifier as a macro, even if it is a C keyword. The preprocessor does not know anything about keywords. This *************** macros when you are compiling C++. *** 1019,1030 ****  File: cpp.info, Node: Object-like Macros, Next: Function-like Macros, Up: Macros ! Object-like Macros ! ================== ! An "object-like macro" is a simple identifier which will be replaced ! by a code fragment. It is called object-like because it looks like a ! data object in code that uses it. They are most commonly used to give symbolic names to numeric constants. You create macros with the `#define' directive. `#define' is --- 1021,1032 ----  File: cpp.info, Node: Object-like Macros, Next: Function-like Macros, Up: Macros ! 3.1 Object-like Macros ! ====================== ! An "object-like macro" is a simple identifier which will be replaced by ! a code fragment. It is called object-like because it looks like a data ! object in code that uses it. They are most commonly used to give symbolic names to numeric constants. You create macros with the `#define' directive. `#define' is *************** Self-Referential Macros::, for the preci *** 1121,1133 ****  File: cpp.info, Node: Function-like Macros, Next: Macro Arguments, Prev: Object-like Macros, Up: Macros ! Function-like Macros ! ==================== ! You can also define macros whose use looks like a function call. ! These are called "function-like macros". To define a function-like ! macro, you use the same `#define' directive, but you put a pair of ! parentheses immediately after the macro name. For example, #define lang_init() c_init() lang_init() --- 1123,1135 ----  File: cpp.info, Node: Function-like Macros, Next: Macro Arguments, Prev: Object-like Macros, Up: Macros ! 3.2 Function-like Macros ! ======================== ! You can also define macros whose use looks like a function call. These ! are called "function-like macros". To define a function-like macro, ! you use the same `#define' directive, but you put a pair of parentheses ! immediately after the macro name. For example, #define lang_init() c_init() lang_init() *************** consume those parentheses. *** 1165,1174 ****  File: cpp.info, Node: Macro Arguments, Next: Stringification, Prev: Function-like Macros, Up: Macros ! Macro Arguments ! =============== ! Function-like macros can take "arguments", just like true functions. To define a macro that uses arguments, you insert "parameters" between the pair of parentheses in the macro definition that make the macro function-like. The parameters must be valid C identifiers, separated --- 1167,1176 ----  File: cpp.info, Node: Macro Arguments, Next: Stringification, Prev: Function-like Macros, Up: Macros ! 3.3 Macro Arguments ! =================== ! Function-like macros can take "arguments", just like true functions. To define a macro that uses arguments, you insert "parameters" between the pair of parentheses in the macro definition that make the macro function-like. The parameters must be valid C identifiers, separated *************** Here are some silly examples using `min' *** 1238,1244 **** min(a, ) ==> ((a ) < ( ) ? (a ) : ( )) min(,) ==> (( ) < ( ) ? ( ) : ( )) min((,),) ==> (((,)) < ( ) ? ((,)) : ( )) ! min() error--> macro "min" requires 2 arguments, but only 1 given min(,,) error--> macro "min" passed 3 arguments, but takes just 2 --- 1240,1246 ---- min(a, ) ==> ((a ) < ( ) ? (a ) : ( )) min(,) ==> (( ) < ( ) ? ( ) : ( )) min((,),) ==> (((,)) < ( ) ? ((,)) : ( )) ! min() error--> macro "min" requires 2 arguments, but only 1 given min(,,) error--> macro "min" passed 3 arguments, but takes just 2 *************** their corresponding actual arguments. *** 1258,1267 ****  File: cpp.info, Node: Stringification, Next: Concatenation, Prev: Macro Arguments, Up: Macros ! Stringification ! =============== ! Sometimes you may want to convert a macro argument into a string constant. Parameters are not replaced inside string constants, but you can use the `#' preprocessing operator instead. When a macro parameter is used with a leading `#', the preprocessor replaces it with the --- 1260,1269 ----  File: cpp.info, Node: Stringification, Next: Concatenation, Prev: Macro Arguments, Up: Macros ! 3.4 Stringification ! =================== ! Sometimes you may want to convert a macro argument into a string constant. Parameters are not replaced inside string constants, but you can use the `#' preprocessing operator instead. When a macro parameter is used with a leading `#', the preprocessor replaces it with the *************** argument, it has already been macro-expa *** 1336,1347 ****  File: cpp.info, Node: Concatenation, Next: Variadic Macros, Prev: Stringification, Up: Macros ! Concatenation ! ============= ! It is often useful to merge two tokens into one while expanding ! macros. This is called "token pasting" or "token concatenation". The ! `##' preprocessing operator performs token pasting. When a macro is expanded, the two tokens on either side of each `##' operator are combined into a single token, which then replaces the `##' and the two original tokens in the macro expansion. Usually both will be --- 1338,1349 ----  File: cpp.info, Node: Concatenation, Next: Variadic Macros, Prev: Stringification, Up: Macros ! 3.5 Concatenation ! ================= ! It is often useful to merge two tokens into one while expanding macros. ! This is called "token pasting" or "token concatenation". The `##' ! preprocessing operator performs token pasting. When a macro is expanded, the two tokens on either side of each `##' operator are combined into a single token, which then replaces the `##' and the two original tokens in the macro expansion. Usually both will be *************** as follows: *** 1383,1389 **** char *name; void (*function) (void); }; ! struct command commands[] = { { "quit", quit_command }, --- 1385,1391 ---- char *name; void (*function) (void); }; ! struct command commands[] = { { "quit", quit_command }, *************** and the function name by concatenating t *** 1399,1405 **** Here is how it is done: #define COMMAND(NAME) { #NAME, NAME ## _command } ! struct command commands[] = { COMMAND (quit), --- 1401,1407 ---- Here is how it is done: #define COMMAND(NAME) { #NAME, NAME ## _command } ! struct command commands[] = { COMMAND (quit), *************** Here is how it is done: *** 1410,1421 ****  File: cpp.info, Node: Variadic Macros, Next: Predefined Macros, Prev: Concatenation, Up: Macros ! Variadic Macros ! =============== ! A macro can be declared to accept a variable number of arguments ! much as a function can. The syntax for defining the macro is similar ! to that of a function. Here is an example: #define eprintf(...) fprintf (stderr, __VA_ARGS__) --- 1412,1423 ----  File: cpp.info, Node: Variadic Macros, Next: Predefined Macros, Prev: Concatenation, Up: Macros ! 3.6 Variadic Macros ! =================== ! A macro can be declared to accept a variable number of arguments much as ! a function can. The syntax for defining the macro is similar to that of ! a function. Here is an example: #define eprintf(...) fprintf (stderr, __VA_ARGS__) *************** comes immediately before it: *** 1515,1524 ****  File: cpp.info, Node: Predefined Macros, Next: Undefining and Redefining Macros, Prev: Variadic Macros, Up: Macros ! Predefined Macros ! ================= ! Several object-like macros are predefined; you use them without supplying their definitions. They fall into three classes: standard, common, and system-specific. --- 1517,1526 ----  File: cpp.info, Node: Predefined Macros, Next: Undefining and Redefining Macros, Prev: Variadic Macros, Up: Macros ! 3.7 Predefined Macros ! ===================== ! Several object-like macros are predefined; you use them without supplying their definitions. They fall into three classes: standard, common, and system-specific. *************** like predefined macros, but you cannot u *** 1535,1547 ****  File: cpp.info, Node: Standard Predefined Macros, Next: Common Predefined Macros, Up: Predefined Macros ! Standard Predefined Macros ! -------------------------- ! The standard predefined macros are specified by the relevant ! language standards, so they are available with all compilers that ! implement those standards. Older compilers may not provide all of ! them. Their names all start with double underscores. `__FILE__' This macro expands to the name of the current input file, in the --- 1537,1549 ----  File: cpp.info, Node: Standard Predefined Macros, Next: Common Predefined Macros, Up: Predefined Macros ! 3.7.1 Standard Predefined Macros ! -------------------------------- ! The standard predefined macros are specified by the relevant language ! standards, so they are available with all compilers that implement ! those standards. Older compilers may not provide all of them. Their ! names all start with double underscores. `__FILE__' This macro expands to the name of the current input file, in the *************** with `__FILE__' and `__LINE__', though. *** 1666,1677 ****  File: cpp.info, Node: Common Predefined Macros, Next: System-specific Predefined Macros, Prev: Standard Predefined Macros, Up: Predefined Macros ! Common Predefined Macros ! ------------------------ ! The common predefined macros are GNU C extensions. They are ! available with the same meanings regardless of the machine or operating ! system on which you are using GNU C. Their names all start with double underscores. `__GNUC__' --- 1668,1679 ----  File: cpp.info, Node: Common Predefined Macros, Next: System-specific Predefined Macros, Prev: Standard Predefined Macros, Up: Predefined Macros ! 3.7.2 Common Predefined Macros ! ------------------------------ ! The common predefined macros are GNU C extensions. They are available ! with the same meanings regardless of the machine or operating system on ! which you are using GNU C. Their names all start with double underscores. `__GNUC__' *************** underscores. *** 1845,1858 ****  File: cpp.info, Node: System-specific Predefined Macros, Next: C++ Named Operators, Prev: Common Predefined Macros, Up: Predefined Macros ! System-specific Predefined Macros ! --------------------------------- ! The C preprocessor normally predefines several macros that indicate ! what type of system and machine is in use. They are obviously ! different on each target supported by GCC. This manual, being for all ! systems and machines, cannot tell you what their names are, but you can ! use `cpp -dM' to see them all. *Note Invocation::. All system-specific predefined macros expand to the constant 1, so you can test them with either `#ifdef' or `#if'. --- 1847,1860 ----  File: cpp.info, Node: System-specific Predefined Macros, Next: C++ Named Operators, Prev: Common Predefined Macros, Up: Predefined Macros ! 3.7.3 System-specific Predefined Macros ! --------------------------------------- ! The C preprocessor normally predefines several macros that indicate what ! type of system and machine is in use. They are obviously different on ! each target supported by GCC. This manual, being for all systems and ! machines, cannot tell you what their names are, but you can use `cpp ! -dM' to see them all. *Note Invocation::. All system-specific predefined macros expand to the constant 1, so you can test them with either `#ifdef' or `#if'. *************** check specifically for features you need *** 1883,1898 ****  File: cpp.info, Node: C++ Named Operators, Prev: System-specific Predefined Macros, Up: Predefined Macros ! C++ Named Operators ! ------------------- ! In C++, there are eleven keywords which are simply alternate ! spellings of operators normally written with punctuation. These ! keywords are treated as such even in the preprocessor. They function ! as operators in `#if', and they cannot be defined as macros or ! poisoned. In C, you can request that those keywords take their C++ ! meaning by including `iso646.h'. That header defines each one as a ! normal object-like macro expanding to the appropriate punctuator. These are the named operators and their corresponding punctuators: --- 1885,1900 ----  File: cpp.info, Node: C++ Named Operators, Prev: System-specific Predefined Macros, Up: Predefined Macros ! 3.7.4 C++ Named Operators ! ------------------------- ! In C++, there are eleven keywords which are simply alternate spellings ! of operators normally written with punctuation. These keywords are ! treated as such even in the preprocessor. They function as operators in ! `#if', and they cannot be defined as macros or poisoned. In C, you can ! request that those keywords take their C++ meaning by including ! `iso646.h'. That header defines each one as a normal object-like macro ! expanding to the appropriate punctuator. These are the named operators and their corresponding punctuators: *************** Named Operator Punctuator *** 1912,1923 ****  File: cpp.info, Node: Undefining and Redefining Macros, Next: Directives Within Macro Arguments, Prev: Predefined Macros, Up: Macros ! Undefining and Redefining Macros ! ================================ ! If a macro ceases to be useful, it may be "undefined" with the ! `#undef' directive. `#undef' takes a single argument, the name of the ! macro to undefine. You use the bare macro name, even if the macro is function-like. It is an error if anything appears on the line after the macro name. `#undef' has no effect if the name is not a macro. --- 1914,1925 ----  File: cpp.info, Node: Undefining and Redefining Macros, Next: Directives Within Macro Arguments, Prev: Predefined Macros, Up: Macros ! 3.8 Undefining and Redefining Macros ! ==================================== ! If a macro ceases to be useful, it may be "undefined" with the `#undef' ! directive. `#undef' takes a single argument, the name of the macro to ! undefine. You use the bare macro name, even if the macro is function-like. It is an error if anything appears on the line after the macro name. `#undef' has no effect if the name is not a macro. *************** These definitions are effectively the sa *** 1947,1954 **** #define FOUR (2 + 2) #define FOUR (2 + 2) #define FOUR (2 /* two */ + 2) ! ! but these are not: #define FOUR (2 + 2) #define FOUR ( 2+2 ) #define FOUR (2 * 2) --- 1949,1955 ---- #define FOUR (2 + 2) #define FOUR (2 + 2) #define FOUR (2 /* two */ + 2) ! but these are not: #define FOUR (2 + 2) #define FOUR ( 2+2 ) #define FOUR (2 * 2) *************** preprocessor will only complain if the d *** 1964,1975 ****  File: cpp.info, Node: Directives Within Macro Arguments, Next: Macro Pitfalls, Prev: Undefining and Redefining Macros, Up: Macros ! Directives Within Macro Arguments ! ================================= ! Occasionally it is convenient to use preprocessor directives within ! the arguments of a macro. The C and C++ standards declare that ! behavior in these cases is undefined. Versions of CPP prior to 3.2 would reject such constructs with an error message. This was the only syntactic difference between normal --- 1965,1976 ----  File: cpp.info, Node: Directives Within Macro Arguments, Next: Macro Pitfalls, Prev: Undefining and Redefining Macros, Up: Macros ! 3.9 Directives Within Macro Arguments ! ===================================== ! Occasionally it is convenient to use preprocessor directives within the ! arguments of a macro. The C and C++ standards declare that behavior in ! these cases is undefined. Versions of CPP prior to 3.2 would reject such constructs with an error message. This was the only syntactic difference between normal *************** with the semantics described above. *** 2004,2014 ****  File: cpp.info, Node: Macro Pitfalls, Prev: Directives Within Macro Arguments, Up: Macros ! Macro Pitfalls ! ============== ! In this section we describe some special rules that apply to macros ! and macro expansion, and point out certain cases in which the rules have counter-intuitive consequences that you must watch out for. * Menu: --- 2005,2015 ----  File: cpp.info, Node: Macro Pitfalls, Prev: Directives Within Macro Arguments, Up: Macros ! 3.10 Macro Pitfalls ! =================== ! In this section we describe some special rules that apply to macros and ! macro expansion, and point out certain cases in which the rules have counter-intuitive consequences that you must watch out for. * Menu: *************** counter-intuitive consequences that you *** 2024,2033 ****  File: cpp.info, Node: Misnesting, Next: Operator Precedence Problems, Up: Macro Pitfalls ! Misnesting ! ---------- ! When a macro is called with arguments, the arguments are substituted into the macro body and the result is checked, together with the rest of the input file, for more macro calls. It is possible to piece together a macro call coming partially from the macro body and partially from the --- 2025,2034 ----  File: cpp.info, Node: Misnesting, Next: Operator Precedence Problems, Up: Macro Pitfalls ! 3.10.1 Misnesting ! ----------------- ! When a macro is called with arguments, the arguments are substituted into the macro body and the result is checked, together with the rest of the input file, for more macro calls. It is possible to piece together a macro call coming partially from the macro body and partially from the *************** and should be avoided. *** 2056,2069 ****  File: cpp.info, Node: Operator Precedence Problems, Next: Swallowing the Semicolon, Prev: Misnesting, Up: Macro Pitfalls ! Operator Precedence Problems ! ---------------------------- ! You may have noticed that in most of the macro definition examples ! shown above, each occurrence of a macro argument name had parentheses ! around it. In addition, another pair of parentheses usually surround ! the entire macro definition. Here is why it is best to write macros ! that way. Suppose you define a macro as follows, --- 2057,2070 ----  File: cpp.info, Node: Operator Precedence Problems, Next: Swallowing the Semicolon, Prev: Misnesting, Up: Macro Pitfalls ! 3.10.2 Operator Precedence Problems ! ----------------------------------- ! You may have noticed that in most of the macro definition examples shown ! above, each occurrence of a macro argument name had parentheses around ! it. In addition, another pair of parentheses usually surround the ! entire macro definition. Here is why it is best to write macros that ! way. Suppose you define a macro as follows, *************** Here, then, is the recommended way to de *** 2110,2119 ****  File: cpp.info, Node: Swallowing the Semicolon, Next: Duplication of Side Effects, Prev: Operator Precedence Problems, Up: Macro Pitfalls ! Swallowing the Semicolon ! ------------------------ ! Often it is desirable to define a macro that expands into a compound statement. Consider, for example, the following macro, that advances a pointer (the argument `p' says where to find it) across whitespace characters: --- 2111,2120 ----  File: cpp.info, Node: Swallowing the Semicolon, Next: Duplication of Side Effects, Prev: Operator Precedence Problems, Up: Macro Pitfalls ! 3.10.3 Swallowing the Semicolon ! ------------------------------- ! Often it is desirable to define a macro that expands into a compound statement. Consider, for example, the following macro, that advances a pointer (the argument `p' says where to find it) across whitespace characters: *************** generate no extra code for it. *** 2166,2175 ****  File: cpp.info, Node: Duplication of Side Effects, Next: Self-Referential Macros, Prev: Swallowing the Semicolon, Up: Macro Pitfalls ! Duplication of Side Effects ! --------------------------- ! Many C programs define a macro `min', for "minimum", like this: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) --- 2167,2176 ----  File: cpp.info, Node: Duplication of Side Effects, Next: Self-Referential Macros, Prev: Swallowing the Semicolon, Up: Macro Pitfalls ! 3.10.4 Duplication of Side Effects ! ---------------------------------- ! Many C programs define a macro `min', for "minimum", like this: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) *************** variable in `min': *** 2225,2239 ****  File: cpp.info, Node: Self-Referential Macros, Next: Argument Prescan, Prev: Duplication of Side Effects, Up: Macro Pitfalls ! Self-Referential Macros ! ----------------------- ! A "self-referential" macro is one whose name appears in its ! definition. Recall that all macro definitions are rescanned for more ! macros to replace. If the self-reference were considered a use of the ! macro, it would produce an infinitely large expansion. To prevent this, ! the self-reference is not considered a macro call. It is passed into ! the preprocessor output unchanged. Let's consider an example: #define foo (4 + foo) --- 2226,2240 ----  File: cpp.info, Node: Self-Referential Macros, Next: Argument Prescan, Prev: Duplication of Side Effects, Up: Macro Pitfalls ! 3.10.5 Self-Referential Macros ! ------------------------------ ! A "self-referential" macro is one whose name appears in its definition. ! Recall that all macro definitions are rescanned for more macros to ! replace. If the self-reference were considered a use of the macro, it ! would produce an infinitely large expansion. To prevent this, the ! self-reference is not considered a macro call. It is passed into the ! preprocessor output unchanged. Let's consider an example: #define foo (4 + foo) *************** then `x' and `y' expand as follows: *** 2276,2282 **** x ==> (4 + y) ==> (4 + (2 * x)) ! y ==> (2 * x) ==> (2 * (4 + y)) --- 2277,2283 ---- x ==> (4 + y) ==> (4 + (2 * x)) ! y ==> (2 * x) ==> (2 * (4 + y)) *************** macro, but not when it indirectly appear *** 2286,2295 ****  File: cpp.info, Node: Argument Prescan, Next: Newlines in Arguments, Prev: Self-Referential Macros, Up: Macro Pitfalls ! Argument Prescan ! ---------------- ! Macro arguments are completely macro-expanded before they are substituted into a macro body, unless they are stringified or pasted with other tokens. After substitution, the entire macro body, including the substituted arguments, is scanned again for macros to be expanded. --- 2287,2296 ----  File: cpp.info, Node: Argument Prescan, Next: Newlines in Arguments, Prev: Self-Referential Macros, Up: Macro Pitfalls ! 3.10.6 Argument Prescan ! ----------------------- ! Macro arguments are completely macro-expanded before they are substituted into a macro body, unless they are stringified or pasted with other tokens. After substitution, the entire macro body, including the substituted arguments, is scanned again for macros to be expanded. *************** cases: *** 2373,2382 ****  File: cpp.info, Node: Newlines in Arguments, Prev: Argument Prescan, Up: Macro Pitfalls ! Newlines in Arguments ! --------------------- ! The invocation of a function-like macro can extend over many logical lines. However, in the present implementation, the entire expansion comes out on one line. Thus line numbers emitted by the compiler or debugger refer to the line the invocation started on, which might be --- 2374,2383 ----  File: cpp.info, Node: Newlines in Arguments, Prev: Argument Prescan, Up: Macro Pitfalls ! 3.10.7 Newlines in Arguments ! ---------------------------- ! The invocation of a function-like macro can extend over many logical lines. However, in the present implementation, the entire expansion comes out on one line. Thus line numbers emitted by the compiler or debugger refer to the line the invocation started on, which might be *************** different to the line containing the arg *** 2385,2391 **** Here is an example illustrating this: #define ignore_second_arg(a,b,c) a; c ! ignore_second_arg (foo (), ignored (), syntax error); --- 2386,2392 ---- Here is an example illustrating this: #define ignore_second_arg(a,b,c) a; c ! ignore_second_arg (foo (), ignored (), syntax error); *************** though the problematic code comes from l *** 2399,2408 ****  File: cpp.info, Node: Conditionals, Next: Diagnostics, Prev: Macros, Up: Top ! Conditionals ! ************ ! A "conditional" is a directive that instructs the preprocessor to select whether or not to include a chunk of code in the final token stream passed to the compiler. Preprocessor conditionals can test arithmetic expressions, or whether a name is defined as a macro, or both --- 2400,2409 ----  File: cpp.info, Node: Conditionals, Next: Diagnostics, Prev: Macros, Up: Top ! 4 Conditionals ! ************** ! A "conditional" is a directive that instructs the preprocessor to select whether or not to include a chunk of code in the final token stream passed to the compiler. Preprocessor conditionals can test arithmetic expressions, or whether a name is defined as a macro, or both *************** not optimizing. Older versions did it o *** 2440,2449 ****  File: cpp.info, Node: Conditional Uses, Next: Conditional Syntax, Up: Conditionals ! Conditional Uses ! ================ ! There are three general reasons to use a conditional. * A program may need to use different code depending on the machine or operating system it is to run on. In some cases the code for --- 2441,2450 ----  File: cpp.info, Node: Conditional Uses, Next: Conditional Syntax, Up: Conditionals ! 4.1 Conditional Uses ! ==================== ! There are three general reasons to use a conditional. * A program may need to use different code depending on the machine or operating system it is to run on. In some cases the code for *************** conditionals. *** 2471,2480 ****  File: cpp.info, Node: Conditional Syntax, Next: Deleted Code, Prev: Conditional Uses, Up: Conditionals ! Conditional Syntax ! ================== ! A conditional in the C preprocessor begins with a "conditional directive": `#if', `#ifdef' or `#ifndef'. * Menu: --- 2472,2481 ----  File: cpp.info, Node: Conditional Syntax, Next: Deleted Code, Prev: Conditional Uses, Up: Conditionals ! 4.2 Conditional Syntax ! ====================== ! A conditional in the C preprocessor begins with a "conditional directive": `#if', `#ifdef' or `#ifndef'. * Menu: *************** directive": `#if', `#ifdef' or `#ifndef' *** 2488,2502 ****  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 --- 2489,2503 ----  File: cpp.info, Node: Ifdef, Next: If, Up: Conditional Syntax ! 4.2.1 Ifdef ! ----------- ! The simplest sort of conditional is #ifdef MACRO ! CONTROLLED TEXT ! #endif /* MACRO */ This block is called a "conditional group". CONTROLLED TEXT will be *************** Here are some samples. *** 2560,2575 ****  File: cpp.info, Node: If, Next: Defined, Prev: Ifdef, Up: Conditional Syntax ! If ! -- ! The `#if' directive allows you to test the value of an arithmetic expression, rather than the mere existence of one macro. Its syntax is #if EXPRESSION ! CONTROLLED TEXT ! #endif /* EXPRESSION */ EXPRESSION is a C expression of integer type, subject to stringent --- 2561,2576 ----  File: cpp.info, Node: If, Next: Defined, Prev: Ifdef, Up: Conditional Syntax ! 4.2.2 If ! -------- ! The `#if' directive allows you to test the value of an arithmetic expression, rather than the mere existence of one macro. Its syntax is #if EXPRESSION ! CONTROLLED TEXT ! #endif /* EXPRESSION */ EXPRESSION is a C expression of integer type, subject to stringent *************** treats the conditional as having failed. *** 2621,2634 ****  File: cpp.info, Node: Defined, Next: Else, Prev: If, Up: Conditional Syntax ! Defined ! ------- ! The special operator `defined' is used in `#if' and `#elif' ! expressions to test whether a certain name is defined as a macro. ! `defined NAME' and `defined (NAME)' are both expressions whose value is ! 1 if NAME is defined as a macro at the current point in the program, ! and 0 otherwise. Thus, `#if defined MACRO' is precisely equivalent to `#ifdef MACRO'. `defined' is useful when you wish to test more than one macro for --- 2622,2635 ----  File: cpp.info, Node: Defined, Next: Else, Prev: If, Up: Conditional Syntax ! 4.2.3 Defined ! ------------- ! The special operator `defined' is used in `#if' and `#elif' expressions ! to test whether a certain name is defined as a macro. `defined NAME' ! and `defined (NAME)' are both expressions whose value is 1 if NAME is ! defined as a macro at the current point in the program, and 0 ! otherwise. Thus, `#if defined MACRO' is precisely equivalent to `#ifdef MACRO'. `defined' is useful when you wish to test more than one macro for *************** wherever your code uses this feature if *** 2656,2665 ****  File: cpp.info, Node: Else, Next: Elif, Prev: Defined, Up: Conditional Syntax ! Else ! ---- ! The `#else' directive can be added to a conditional to provide alternative text to be used if the condition fails. This is what it looks like: --- 2657,2666 ----  File: cpp.info, Node: Else, Next: Elif, Prev: Defined, Up: Conditional Syntax ! 4.2.4 Else ! ---------- ! The `#else' directive can be added to a conditional to provide alternative text to be used if the condition fails. This is what it looks like: *************** TEXT-IF-FALSE is skipped. If EXPRESSION *** 2677,2687 ****  File: cpp.info, Node: Elif, Prev: Else, Up: Conditional Syntax ! Elif ! ---- ! One common case of nested conditionals is used to check for more ! than two possible alternatives. For example, you might have #if X == 1 ... --- 2678,2688 ----  File: cpp.info, Node: Elif, Prev: Else, Up: Conditional Syntax ! 4.2.5 Elif ! ---------- ! One common case of nested conditionals is used to check for more than ! two possible alternatives. For example, you might have #if X == 1 ... *************** within it have failed. *** 2722,2732 ****  File: cpp.info, Node: Deleted Code, Prev: Conditional Syntax, Up: Conditionals ! Deleted Code ! ============ ! If you replace or delete a part of the program but want to keep the ! old code around for future reference, you often cannot simply comment it out. Block comments do not nest, so the first comment inside the old code will end the commenting-out. The probable result is a flood of syntax errors. --- 2723,2733 ----  File: cpp.info, Node: Deleted Code, Prev: Conditional Syntax, Up: Conditionals ! 4.3 Deleted Code ! ================ ! If you replace or delete a part of the program but want to keep the old ! code around for future reference, you often cannot simply comment it out. Block comments do not nest, so the first comment inside the old code will end the commenting-out. The probable result is a flood of syntax errors. *************** apostrophes). These confuse `#if 0'. T *** 2750,2761 ****  File: cpp.info, Node: Diagnostics, Next: Line Control, Prev: Conditionals, Up: Top ! Diagnostics ! *********** ! The directive `#error' causes the preprocessor to report a fatal ! error. The tokens forming the rest of the line following `#error' are ! used as the error message. You would use `#error' inside of a conditional that detects a combination of parameters which you know the program does not properly --- 2751,2762 ----  File: cpp.info, Node: Diagnostics, Next: Line Control, Prev: Conditionals, Up: Top ! 5 Diagnostics ! ************* ! The directive `#error' causes the preprocessor to report a fatal error. ! The tokens forming the rest of the line following `#error' are used as ! the error message. You would use `#error' inside of a conditional that detects a combination of parameters which you know the program does not properly *************** problems with apostrophes and the like. *** 2790,2804 ****  File: cpp.info, Node: Line Control, Next: Pragmas, Prev: Diagnostics, Up: Top ! Line Control ! ************ ! The C preprocessor informs the C compiler of the location in your ! source code where each token came from. Presently, this is just the ! file name and line number. All the tokens resulting from macro ! expansion are reported as having appeared on the line of the source ! file where the outermost macro was used. We intend to be more accurate ! in the future. If you write a program which generates source code, such as the `bison' parser generator, you may want to adjust the preprocessor's --- 2791,2804 ----  File: cpp.info, Node: Line Control, Next: Pragmas, Prev: Diagnostics, Up: Top ! 6 Line Control ! ************** ! The C preprocessor informs the C compiler of the location in your source ! code where each token came from. Presently, this is just the file name ! and line number. All the tokens resulting from macro expansion are ! reported as having appeared on the line of the source file where the ! outermost macro was used. We intend to be more accurate in the future. If you write a program which generates source code, such as the `bison' parser generator, you may want to adjust the preprocessor's *************** files, which is difficult and error-pron *** 2869,2879 ****  File: cpp.info, Node: Pragmas, Next: Other Directives, Prev: Line Control, Up: Top ! Pragmas ! ******* ! The `#pragma' directive is the method specified by the C standard ! for providing additional information to the compiler, beyond what is conveyed in the language itself. Three forms of this directive (commonly known as "pragmas") are specified by the 1999 C standard. A C compiler is free to attach any meaning it likes to other pragmas. --- 2869,2879 ----  File: cpp.info, Node: Pragmas, Next: Other Directives, Prev: Line Control, Up: Top ! 7 Pragmas ! ********* ! The `#pragma' directive is the method specified by the C standard for ! providing additional information to the compiler, beyond what is conveyed in the language itself. Three forms of this directive (commonly known as "pragmas") are specified by the 1999 C standard. A C compiler is free to attach any meaning it likes to other pragmas. *************** compilers. They are documented in the G *** 2967,2978 ****  File: cpp.info, Node: Other Directives, Next: Preprocessor Output, Prev: Pragmas, Up: Top ! Other Directives ! **************** ! The `#ident' directive takes one argument, a string constant. On ! some systems, that string constant is copied into a special segment of ! the object file. On other systems, the directive is ignored. This directive is not part of the C standard, but it is not an official GNU extension either. We believe it came from System V. --- 2967,2978 ----  File: cpp.info, Node: Other Directives, Next: Preprocessor Output, Prev: Pragmas, Up: Top ! 8 Other Directives ! ****************** ! The `#ident' directive takes one argument, a string constant. On some ! systems, that string constant is copied into a special segment of the ! object file. On other systems, the directive is ignored. This directive is not part of the C standard, but it is not an official GNU extension either. We believe it came from System V. *************** Supposedly some old C programs contain s *** 2993,3002 ****  File: cpp.info, Node: Preprocessor Output, Next: Traditional Mode, Prev: Other Directives, Up: Top ! Preprocessor Output ! ******************* ! When the C preprocessor is used with the C, C++, or Objective-C compilers, it is integrated into the compiler and communicates a stream of binary tokens directly to the compiler's parser. However, it can also be used in the more conventional standalone mode, where it produces --- 2993,3002 ----  File: cpp.info, Node: Preprocessor Output, Next: Traditional Mode, Prev: Other Directives, Up: Top ! 9 Preprocessor Output ! ********************* ! When the C preprocessor is used with the C, C++, or Objective-C compilers, it is integrated into the compiler and communicates a stream of binary tokens directly to the compiler's parser. However, it can also be used in the more conventional standalone mode, where it produces *************** be inserted between the `#' and the dire *** 3066,3076 ****  File: cpp.info, Node: Traditional Mode, Next: Implementation Details, Prev: Preprocessor Output, Up: Top ! Traditional Mode ! **************** ! Traditional (pre-standard) C preprocessing is rather different from ! the preprocessing specified by the standard. When GCC is given the `-traditional-cpp' option, it attempts to emulate a traditional preprocessor. --- 3066,3076 ----  File: cpp.info, Node: Traditional Mode, Next: Implementation Details, Prev: Preprocessor Output, Up: Top ! 10 Traditional Mode ! ******************* ! Traditional (pre-standard) C preprocessing is rather different from the ! preprocessing specified by the standard. When GCC is given the `-traditional-cpp' option, it attempts to emulate a traditional preprocessor. *************** that actually matter. *** 3095,3104 ****  File: cpp.info, Node: Traditional lexical analysis, Next: Traditional macros, Up: Traditional Mode ! Traditional lexical analysis ! ============================ ! The traditional preprocessor does not decompose its input into tokens the same way a standards-conforming preprocessor does. The input is simply treated as a stream of text with minimal internal form. --- 3095,3104 ----  File: cpp.info, Node: Traditional lexical analysis, Next: Traditional macros, Up: Traditional Mode ! 10.1 Traditional lexical analysis ! ================================= ! The traditional preprocessor does not decompose its input into tokens the same way a standards-conforming preprocessor does. The input is simply treated as a stream of text with minimal internal form. *************** be escaped with a backslash to prevent t *** 3157,3166 ****  File: cpp.info, Node: Traditional macros, Next: Traditional miscellany, Prev: Traditional lexical analysis, Up: Traditional Mode ! Traditional macros ! ================== ! The major difference between traditional and ISO macros is that the former expand to text rather than to a token sequence. CPP removes all leading and trailing horizontal whitespace from a macro's replacement text before storing it, but preserves the form of internal whitespace. --- 3157,3166 ----  File: cpp.info, Node: Traditional macros, Next: Traditional miscellany, Prev: Traditional lexical analysis, Up: Traditional Mode ! 10.2 Traditional macros ! ======================= ! The major difference between traditional and ISO macros is that the former expand to text rather than to a token sequence. CPP removes all leading and trailing horizontal whitespace from a macro's replacement text before storing it, but preserves the form of internal whitespace. *************** pasting. *** 3243,3252 ****  File: cpp.info, Node: Traditional miscellany, Next: Traditional warnings, Prev: Traditional macros, Up: Traditional Mode ! Traditional miscellany ! ====================== ! Here are some things to be aware of when using the traditional preprocessor. * Preprocessing directives are recognized only when their leading --- 3243,3252 ----  File: cpp.info, Node: Traditional miscellany, Next: Traditional warnings, Prev: Traditional macros, Up: Traditional Mode ! 10.3 Traditional miscellany ! =========================== ! Here are some things to be aware of when using the traditional preprocessor. * Preprocessing directives are recognized only when their leading *************** preprocessor. *** 3271,3280 ****  File: cpp.info, Node: Traditional warnings, Prev: Traditional miscellany, Up: Traditional Mode ! Traditional warnings ! ==================== ! You can request warnings about features that did not exist, or worked differently, in traditional C with the `-Wtraditional' option. GCC does not warn about features of ISO C which you must use when you are using a conforming compiler, such as the `#' and `##' operators. --- 3271,3280 ----  File: cpp.info, Node: Traditional warnings, Prev: Traditional miscellany, Up: Traditional Mode ! 10.4 Traditional warnings ! ========================= ! You can request warnings about features that did not exist, or worked differently, in traditional C with the `-Wtraditional' option. GCC does not warn about features of ISO C which you must use when you are using a conforming compiler, such as the `#' and `##' operators. *************** using a conforming compiler, such as the *** 3317,3326 ****  File: cpp.info, Node: Implementation Details, Next: Invocation, Prev: Traditional Mode, Up: Top ! Implementation Details ! ********************** ! Here we document details of how the preprocessor's implementation affects its user-visible behavior. You should try to avoid undue reliance on behavior described here, as it is possible that it will change subtly in future implementations. --- 3317,3326 ----  File: cpp.info, Node: Implementation Details, Next: Invocation, Prev: Traditional Mode, Up: Top ! 11 Implementation Details ! ************************* ! Here we document details of how the preprocessor's implementation affects its user-visible behavior. You should try to avoid undue reliance on behavior described here, as it is possible that it will change subtly in future implementations. *************** versions of CPP. *** 3338,3350 ****  File: cpp.info, Node: Implementation-defined behavior, Next: Implementation limits, Up: Implementation Details ! Implementation-defined behavior ! =============================== ! This is how CPP behaves in all the cases which the C standard ! describes as "implementation-defined". This term means that the ! implementation is free to do what it likes, but must document its choice ! and stick to it. * The mapping of physical source file multi-byte characters to the execution character set. --- 3338,3350 ----  File: cpp.info, Node: Implementation-defined behavior, Next: Implementation limits, Up: Implementation Details ! 11.1 Implementation-defined behavior ! ==================================== ! This is how CPP behaves in all the cases which the C standard describes ! as "implementation-defined". This term means that the implementation ! is free to do what it likes, but must document its choice and stick to ! it. * The mapping of physical source file multi-byte characters to the execution character set. *************** and stick to it. *** 3406,3415 ****  File: cpp.info, Node: Implementation limits, Next: Obsolete Features, Prev: Implementation-defined behavior, Up: Implementation Details ! Implementation limits ! ===================== ! CPP has a small number of internal limits. This section lists the limits which the C standard requires to be no lower than some minimum, and all the others we are aware of. We intend there to be as few limits as possible. If you encounter an undocumented or inconvenient limit, --- 3406,3415 ----  File: cpp.info, Node: Implementation limits, Next: Obsolete Features, Prev: Implementation-defined behavior, Up: Implementation Details ! 11.2 Implementation limits ! ========================== ! CPP has a small number of internal limits. This section lists the limits which the C standard requires to be no lower than some minimum, and all the others we are aware of. We intend there to be as few limits as possible. If you encounter an undocumented or inconvenient limit, *************** consumed by other processes on the same *** 3473,3484 ****  File: cpp.info, Node: Obsolete Features, Next: Differences from previous versions, Prev: Implementation limits, Up: Implementation Details ! Obsolete Features ! ================= ! CPP has a number of features which are present mainly for ! compatibility with older programs. We discourage their use in new code. ! In some cases, we plan to remove the feature in a future version of GCC. * Menu: --- 3473,3484 ----  File: cpp.info, Node: Obsolete Features, Next: Differences from previous versions, Prev: Implementation limits, Up: Implementation Details ! 11.3 Obsolete Features ! ====================== ! CPP has a number of features which are present mainly for compatibility ! with older programs. We discourage their use in new code. In some ! cases, we plan to remove the feature in a future version of GCC. * Menu: *************** In some cases, we plan to remove the fea *** 3488,3497 ****  File: cpp.info, Node: Assertions, Next: Obsolete once-only headers, Up: Obsolete Features ! Assertions ! ---------- ! "Assertions" are a deprecated alternative to macros in writing conditionals to test what sort of computer or system the compiled program will run on. Assertions are usually predefined, but you can define them with preprocessing directives or command-line options. --- 3488,3497 ----  File: cpp.info, Node: Assertions, Next: Obsolete once-only headers, Up: Obsolete Features ! 11.3.1 Assertions ! ----------------- ! "Assertions" are a deprecated alternative to macros in writing conditionals to test what sort of computer or system the compiled program will run on. Assertions are usually predefined, but you can define them with preprocessing directives or command-line options. *************** effect. *** 3554,3563 ****  File: cpp.info, Node: Obsolete once-only headers, Prev: Assertions, Up: Obsolete Features ! Obsolete once-only headers ! -------------------------- ! CPP supports two more ways of indicating that a header file should be read only once. Neither one is as portable as a wrapper `#ifndef', and we recommend you do not use them in new programs. --- 3554,3563 ----  File: cpp.info, Node: Obsolete once-only headers, Prev: Assertions, Up: Obsolete Features ! 11.3.2 Obsolete once-only headers ! --------------------------------- ! CPP supports two more ways of indicating that a header file should be read only once. Neither one is as portable as a wrapper `#ifndef', and we recommend you do not use them in new programs. *************** a portable program. *** 3592,3603 ****  File: cpp.info, Node: Differences from previous versions, Prev: Obsolete Features, Up: Implementation Details ! Differences from previous versions ! ================================== ! This section details behavior which has changed from previous ! versions of CPP. We do not plan to change it again in the near future, ! but we do not promise not to, either. The "previous versions" discussed here are 2.95 and before. The behavior of GCC 3.0 is mostly the same as the behavior of the widely --- 3592,3603 ----  File: cpp.info, Node: Differences from previous versions, Prev: Obsolete Features, Up: Implementation Details ! 11.4 Differences from previous versions ! ======================================= ! This section details behavior which has changed from previous versions ! of CPP. We do not plan to change it again in the near future, but we ! do not promise not to, either. The "previous versions" discussed here are 2.95 and before. The behavior of GCC 3.0 is mostly the same as the behavior of the widely *************** they generally represent bugs in the sna *** 3679,3693 ****  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 --- 3679,3693 ----  File: cpp.info, Node: Invocation, Next: Environment Variables, Prev: Implementation Details, Up: Top ! 12 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 *************** single-letter options may _not_ be group *** 3908,3914 **** This is typical output: test.o: test.c test.h ! test.h: `-MT TARGET' --- 3908,3914 ---- This is typical output: test.o: test.c test.h ! test.h: `-MT TARGET' *************** single-letter options may _not_ be group *** 4207,4216 ****  File: cpp.info, Node: Environment Variables, Next: GNU Free Documentation License, Prev: Invocation, Up: Top ! Environment Variables ! ********************* ! This section describes the environment variables that affect how CPP operates. You can use them to specify directories or prefixes to use when searching for include files, or to control dependency output. --- 4207,4216 ----  File: cpp.info, Node: Environment Variables, Next: GNU Free Documentation License, Prev: Invocation, Up: Top ! 13 Environment Variables ! ************************ ! This section describes the environment variables that affect how CPP operates. You can use them to specify directories or prefixes to use when searching for include files, or to control dependency output. *************** GNU Free Documentation License *** 4277,4285 **** ****************************** Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA ! Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. --- 4277,4286 ---- ****************************** Version 1.2, November 2002 + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA ! Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. *************** GNU Free Documentation License *** 4673,4679 **** ADDENDUM: How to use this License for your documents ==================================================== ! To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: --- 4674,4680 ---- ADDENDUM: How to use this License for your documents ==================================================== ! To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: *************** File: cpp.info, Node: Index of Directiv *** 4707,4736 **** Index of Directives ******************* * Menu: ! * #assert: Assertions. ! * #define: Object-like Macros. ! * #elif: Elif. ! * #else: Else. ! * #endif: Ifdef. ! * #error: Diagnostics. ! * #ident: Other Directives. ! * #if: Conditional Syntax. ! * #ifdef: Ifdef. ! * #ifndef: Ifdef. * #import: Obsolete once-only headers. ! * #include: Include Syntax. ! * #include_next: Wrapper Headers. ! * #line: Line Control. ! * #pragma GCC dependency: Pragmas. ! * #pragma GCC poison: Pragmas. ! * #pragma GCC system_header <1>: Pragmas. ! * #pragma GCC system_header: System Headers. ! * #sccs: Other Directives. ! * #unassert: Assertions. * #undef: Undefining and Redefining Macros. ! * #warning: Diagnostics.  File: cpp.info, Node: Option Index, Next: Concept Index, Prev: Index of Directives, Up: Top --- 4708,4740 ---- Index of Directives ******************* + [index] * Menu: ! * #assert: Assertions. (line 41) ! * #define: Object-like Macros. (line 11) ! * #elif: Elif. (line 6) ! * #else: Else. (line 6) ! * #endif: Ifdef. (line 6) ! * #error: Diagnostics. (line 6) ! * #ident: Other Directives. (line 6) ! * #if: Conditional Syntax. (line 6) ! * #ifdef: Ifdef. (line 6) ! * #ifndef: Ifdef. (line 40) * #import: Obsolete once-only headers. ! (line 10) ! * #include: Include Syntax. (line 6) ! * #include_next: Wrapper Headers. (line 6) ! * #line: Line Control. (line 20) ! * #pragma GCC dependency: Pragmas. (line 53) ! * #pragma GCC poison: Pragmas. (line 65) ! * #pragma GCC system_header <1>: Pragmas. (line 92) ! * #pragma GCC system_header: System Headers. (line 31) ! * #sccs: Other Directives. (line 13) ! * #unassert: Assertions. (line 52) * #undef: Undefining and Redefining Macros. ! (line 6) ! * #warning: Diagnostics. (line 27)  File: cpp.info, Node: Option Index, Next: Concept Index, Prev: Index of Directives, Up: Top *************** Option Index *** 4741,4813 **** CPP's command line options and environment variables are indexed here without any initial `-' or `--'. * Menu: ! * A: Invocation. ! * ansi: Invocation. ! * C: Invocation. * C_INCLUDE_PATH: Environment Variables. * CPATH: Environment Variables. * CPLUS_INCLUDE_PATH: Environment Variables. ! * D: Invocation. ! * dD: Invocation. * DEPENDENCIES_OUTPUT: Environment Variables. ! * dI: Invocation. ! * dM: Invocation. ! * dN: Invocation. ! * fno-show-column: Invocation. ! * fpreprocessed: Invocation. ! * ftabstop: Invocation. ! * H: Invocation. ! * help: Invocation. ! * I: Invocation. ! * I-: Invocation. ! * idirafter: Invocation. ! * imacros: Invocation. ! * include: Invocation. ! * iprefix: Invocation. ! * isystem: Invocation. ! * iwithprefix: Invocation. ! * iwithprefixbefore: Invocation. ! * M: Invocation. ! * MD: Invocation. ! * MF: Invocation. ! * MG: Invocation. ! * MM: Invocation. ! * MMD: Invocation. ! * MP: Invocation. ! * MQ: Invocation. ! * MT: Invocation. ! * nostdinc: Invocation. ! * nostdinc++: Invocation. ! * o: Invocation. * OBJC_INCLUDE_PATH: Environment Variables. ! * P: Invocation. ! * pedantic: Invocation. ! * pedantic-errors: Invocation. ! * remap: Invocation. ! * std=: Invocation. * SUNPRO_DEPENDENCIES: Environment Variables. ! * target-help: Invocation. ! * traditional-cpp: Invocation. ! * trigraphs: Invocation. ! * U: Invocation. ! * undef: Invocation. ! * v: Invocation. ! * version: Invocation. ! * w: Invocation. ! * Wall: Invocation. ! * Wcomment: Invocation. ! * Wcomments: Invocation. ! * Wendif-labels: Invocation. ! * Werror: Invocation. ! * Wimport: Invocation. ! * Wsystem-headers: Invocation. ! * Wtraditional: Invocation. ! * Wtrigraphs: Invocation. ! * Wundef: Invocation. ! * Wunused-macros: Invocation. ! * x: Invocation.  File: cpp.info, Node: Concept Index, Prev: Option Index, Up: Top --- 4745,4824 ---- CPP's command line options and environment variables are indexed here without any initial `-' or `--'. + [index] * Menu: ! * A: Invocation. (line 426) ! * ansi: Invocation. (line 297) ! * C: Invocation. (line 474) * C_INCLUDE_PATH: Environment Variables. + (line 16) * CPATH: Environment Variables. + (line 15) * CPLUS_INCLUDE_PATH: Environment Variables. ! (line 17) ! * D: Invocation. (line 39) ! * dD: Invocation. (line 454) * DEPENDENCIES_OUTPUT: Environment Variables. ! (line 44) ! * dI: Invocation. (line 463) ! * dM: Invocation. (line 442) ! * dN: Invocation. (line 460) ! * fno-show-column: Invocation. (line 421) ! * fpreprocessed: Invocation. (line 402) ! * ftabstop: Invocation. (line 415) ! * H: Invocation. (line 519) ! * help: Invocation. (line 511) ! * I: Invocation. (line 68) ! * I-: Invocation. (line 334) ! * idirafter: Invocation. (line 376) ! * imacros: Invocation. (line 367) ! * include: Invocation. (line 356) ! * iprefix: Invocation. (line 381) ! * isystem: Invocation. (line 395) ! * iwithprefix: Invocation. (line 387) ! * iwithprefixbefore: Invocation. (line 387) ! * M: Invocation. (line 171) ! * MD: Invocation. (line 259) ! * MF: Invocation. (line 205) ! * MG: Invocation. (line 214) ! * MM: Invocation. (line 195) ! * MMD: Invocation. (line 274) ! * MP: Invocation. (line 224) ! * MQ: Invocation. (line 250) ! * MT: Invocation. (line 236) ! * nostdinc: Invocation. (line 346) ! * nostdinc++: Invocation. (line 351) ! * o: Invocation. (line 77) * OBJC_INCLUDE_PATH: Environment Variables. ! (line 18) ! * P: Invocation. (line 467) ! * pedantic: Invocation. (line 161) ! * pedantic-errors: Invocation. (line 166) ! * remap: Invocation. (line 506) ! * std=: Invocation. (line 297) * SUNPRO_DEPENDENCIES: Environment Variables. ! (line 60) ! * target-help: Invocation. (line 511) ! * traditional-cpp: Invocation. (line 499) ! * trigraphs: Invocation. (line 503) ! * U: Invocation. (line 59) ! * undef: Invocation. (line 63) ! * v: Invocation. (line 515) ! * version: Invocation. (line 525) ! * w: Invocation. (line 157) ! * Wall: Invocation. (line 83) ! * Wcomment: Invocation. (line 90) ! * Wcomments: Invocation. (line 90) ! * Wendif-labels: Invocation. (line 134) ! * Werror: Invocation. (line 147) ! * Wimport: Invocation. (line 107) ! * Wsystem-headers: Invocation. (line 151) ! * Wtraditional: Invocation. (line 101) ! * Wtrigraphs: Invocation. (line 95) ! * Wundef: Invocation. (line 110) ! * Wunused-macros: Invocation. (line 115) ! * x: Invocation. (line 281)  File: cpp.info, Node: Concept Index, Prev: Option Index, Up: Top *************** File: cpp.info, Node: Concept Index, P *** 4815,5001 **** Concept Index ************* * Menu: ! * # operator: Stringification. ! * ## operator: Concatenation. ! * _Pragma: Pragmas. ! * alternative tokens: Tokenization. ! * arguments: Macro Arguments. ! * arguments in macro definitions: Macro Arguments. ! * assertions: Assertions. ! * assertions, canceling: 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. ! * 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. * macro arguments and directives: Directives Within Macro Arguments. ! * macros in include: Computed Includes. ! * macros with arguments: Macro Arguments. ! * macros with variable arguments: Variadic Macros. ! * make: Invocation. ! * manifest constants: Object-like Macros. ! * 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. ! * 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.  Tag Table: ! Node: Top1022 ! Node: Overview3645 ! Node: Initial processing6446 ! Ref: trigraphs8564 ! Node: Tokenization12670 ! Ref: Tokenization-Footnote-119719 ! Node: The preprocessing language19830 ! Node: Header Files22703 ! Node: Include Syntax24581 ! Node: Include Operation26083 ! Node: Search Path27936 ! Node: Once-Only Headers31013 ! Node: Computed Includes32663 ! Node: Wrapper Headers35802 ! Node: System Headers38221 ! Node: Macros40266 ! Node: Object-like Macros41404 ! Node: Function-like Macros44990 ! Node: Macro Arguments46600 ! Node: Stringification50745 ! Node: Concatenation53946 ! Node: Variadic Macros57060 ! Node: Predefined Macros61842 ! Node: Standard Predefined Macros62425 ! Node: Common Predefined Macros68332 ! Node: System-specific Predefined Macros76167 ! Node: C++ Named Operators78179 ! Node: Undefining and Redefining Macros79134 ! Node: Directives Within Macro Arguments81231 ! Node: Macro Pitfalls82774 ! Node: Misnesting83300 ! Node: Operator Precedence Problems84401 ! Node: Swallowing the Semicolon86256 ! Node: Duplication of Side Effects88268 ! Node: Self-Referential Macros90440 ! Node: Argument Prescan92850 ! Node: Newlines in Arguments96593 ! Node: Conditionals97538 ! Node: Conditional Uses99367 ! Node: Conditional Syntax100720 ! Node: Ifdef101035 ! Node: If104197 ! Node: Defined106610 ! Node: Else107883 ! Node: Elif108444 ! Node: Deleted Code109724 ! Node: Diagnostics110966 ! Node: Line Control112583 ! Node: Pragmas116386 ! Node: Other Directives120655 ! Node: Preprocessor Output121847 ! Node: Traditional Mode125047 ! Node: Traditional lexical analysis126102 ! Node: Traditional macros128598 ! Node: Traditional miscellany132392 ! Node: Traditional warnings133382 ! Node: Implementation Details135572 ! Node: Implementation-defined behavior136190 ! Node: Implementation limits138864 ! Node: Obsolete Features141555 ! Node: Assertions142002 ! Node: Obsolete once-only headers144532 ! Node: Differences from previous versions146256 ! Node: Invocation150328 ! Ref: -MF158924 ! Node: Environment Variables171585 ! Node: GNU Free Documentation License174538 ! Node: Index of Directives196968 ! Node: Option Index198348 ! Node: Concept Index202099  End Tag Table --- 4826,5038 ---- Concept Index ************* + [index] * Menu: ! * # operator: Stringification. (line 6) ! * ## operator: Concatenation. (line 6) ! * _Pragma: Pragmas. (line 25) ! * alternative tokens: Tokenization. (line 105) ! * arguments: Macro Arguments. (line 6) ! * arguments in macro definitions: Macro Arguments. (line 6) ! * assertions: Assertions. (line 6) ! * assertions, canceling: Assertions. (line 52) ! * backslash-newline: Initial processing. (line 69) ! * block comments: Initial processing. (line 85) ! * C++ named operators: C++ Named Operators. (line 6) ! * character constants: Tokenization. (line 84) ! * character sets: Initial processing. (line 14) ! * command line: Invocation. (line 6) ! * commenting out code: Deleted Code. (line 6) ! * comments: Initial processing. (line 85) * common predefined macros: Common Predefined Macros. ! (line 6) ! * computed includes: Computed Includes. (line 6) ! * concatenation: Concatenation. (line 6) ! * conditional group: Ifdef. (line 14) ! * conditionals: Conditionals. (line 6) ! * continued lines: Initial processing. (line 69) ! * controlling macro: Once-Only Headers. (line 35) ! * defined: Defined. (line 6) * dependencies for make as output: Environment Variables. ! (line 45) ! * dependencies, make: Invocation. (line 171) ! * diagnostic: Diagnostics. (line 6) * differences from previous versions: Differences from previous versions. ! (line 6) ! * digraphs: Tokenization. (line 105) * directive line: The preprocessing language. + (line 6) * directive name: The preprocessing language. + (line 6) * directives: The preprocessing language. ! (line 6) ! * empty macro arguments: Macro Arguments. (line 66) * environment variables: Environment Variables. ! (line 6) ! * expansion of arguments: Argument Prescan. (line 6) * FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) * function-like macros: Function-like Macros. ! (line 6) ! * grouping options: Invocation. (line 34) ! * guard macro: Once-Only Headers. (line 35) ! * header file: Header Files. (line 6) ! * header file names: Tokenization. (line 84) ! * identifiers: Tokenization. (line 34) * implementation limits: Implementation limits. + (line 6) * implementation-defined behavior: Implementation-defined behavior. ! (line 6) ! * including just once: Once-Only Headers. (line 6) ! * invocation: Invocation. (line 6) ! * iso646.h: C++ Named Operators. (line 6) ! * line comments: Initial processing. (line 85) ! * line control: Line Control. (line 6) ! * line endings: Initial processing. (line 14) ! * linemarkers: Preprocessor Output. (line 28) ! * macro argument expansion: Argument Prescan. (line 6) * macro arguments and directives: Directives Within Macro Arguments. ! (line 6) ! * macros in include: Computed Includes. (line 6) ! * macros with arguments: Macro Arguments. (line 6) ! * macros with variable arguments: Variadic Macros. (line 6) ! * make: Invocation. (line 171) ! * manifest constants: Object-like Macros. (line 6) ! * named operators: C++ Named Operators. (line 6) * newlines in macro arguments: Newlines in Arguments. ! (line 6) ! * null directive: Other Directives. (line 18) ! * numbers: Tokenization. (line 60) ! * object-like macro: Object-like Macros. (line 6) ! * options: Invocation. (line 38) ! * options, grouping: Invocation. (line 34) ! * other tokens: Tokenization. (line 119) ! * output format: Preprocessor Output. (line 12) ! * overriding a header file: Wrapper Headers. (line 6) * parentheses in macro bodies: Operator Precedence Problems. ! (line 6) ! * pitfalls of macros: Macro Pitfalls. (line 6) ! * predefined macros: Predefined Macros. (line 6) * predefined macros, system-specific: System-specific Predefined Macros. ! (line 6) ! * predicates: Assertions. (line 19) * preprocessing directives: The preprocessing language. ! (line 6) ! * preprocessing numbers: Tokenization. (line 60) ! * preprocessing tokens: Tokenization. (line 6) ! * prescan of macro arguments: Argument Prescan. (line 6) ! * problems with macros: Macro Pitfalls. (line 6) ! * punctuators: Tokenization. (line 105) * redefining macros: Undefining and Redefining Macros. ! (line 6) ! * repeated inclusion: Once-Only Headers. (line 6) ! * reporting errors: Diagnostics. (line 6) ! * reporting warnings: Diagnostics. (line 6) * reserved namespace: System-specific Predefined Macros. + (line 6) * self-reference: Self-Referential Macros. + (line 6) * semicolons (after macro calls): Swallowing the Semicolon. + (line 6) * side effects (in macro arguments): Duplication of Side Effects. + (line 6) * standard predefined macros.: Standard Predefined Macros. ! (line 6) ! * string constants: Tokenization. (line 84) ! * string literals: Tokenization. (line 84) ! * stringification: Stringification. (line 6) ! * symbolic constants: Object-like Macros. (line 6) ! * system header files <1>: System Headers. (line 6) ! * system header files: Header Files. (line 13) * system-specific predefined macros: System-specific Predefined Macros. ! (line 6) ! * testing predicates: Assertions. (line 30) ! * token concatenation: Concatenation. (line 6) ! * token pasting: Concatenation. (line 6) ! * tokens: Tokenization. (line 6) ! * trigraphs: Initial processing. (line 42) * undefining macros: Undefining and Redefining Macros. + (line 6) * unsafe macros: Duplication of Side Effects. ! (line 6) ! * variable number of arguments: Variadic Macros. (line 6) ! * variadic macros: Variadic Macros. (line 6) ! * wrapper #ifndef: Once-Only Headers. (line 6) ! * wrapper headers: Wrapper Headers. (line 6)  Tag Table: ! Node: Top1033 ! Node: Overview3701 ! Node: Initial processing6503 ! Ref: trigraphs8626 ! Node: Tokenization12727 ! Ref: Tokenization-Footnote-119781 ! Node: The preprocessing language19892 ! Node: Header Files22770 ! Node: Include Syntax24650 ! Node: Include Operation26157 ! Node: Search Path28005 ! Node: Once-Only Headers31087 ! Node: Computed Includes32732 ! Node: Wrapper Headers35876 ! Node: System Headers38302 ! Node: Macros40352 ! Node: Object-like Macros41493 ! Node: Function-like Macros45084 ! Node: Macro Arguments46700 ! Node: Stringification50845 ! Node: Concatenation54051 ! Node: Variadic Macros57159 ! Node: Predefined Macros61946 ! Node: Standard Predefined Macros62534 ! Node: Common Predefined Macros68450 ! Node: System-specific Predefined Macros76294 ! Node: C++ Named Operators78315 ! Node: Undefining and Redefining Macros79279 ! Node: Directives Within Macro Arguments81383 ! Node: Macro Pitfalls82931 ! Node: Misnesting83464 ! Node: Operator Precedence Problems84576 ! Node: Swallowing the Semicolon86442 ! Node: Duplication of Side Effects88465 ! Node: Self-Referential Macros90648 ! Node: Argument Prescan93063 ! Node: Newlines in Arguments96817 ! Node: Conditionals97768 ! Node: Conditional Uses99598 ! Node: Conditional Syntax100956 ! Node: Ifdef101276 ! Node: If104437 ! Node: Defined106849 ! Node: Else108132 ! Node: Elif108702 ! Node: Deleted Code109991 ! Node: Diagnostics111238 ! Node: Line Control112855 ! Node: Pragmas116659 ! Node: Other Directives120929 ! Node: Preprocessor Output122122 ! Node: Traditional Mode125323 ! Node: Traditional lexical analysis126381 ! Node: Traditional macros128884 ! Node: Traditional miscellany132685 ! Node: Traditional warnings133682 ! Node: Implementation Details135879 ! Node: Implementation-defined behavior136500 ! Node: Implementation limits139181 ! Node: Obsolete Features141879 ! Node: Assertions142334 ! Node: Obsolete once-only headers144875 ! Node: Differences from previous versions146610 ! Node: Invocation150689 ! Ref: -MF159289 ! Node: Environment Variables171940 ! Node: GNU Free Documentation License174896 ! Node: Index of Directives197319 ! Node: Option Index199248 ! Node: Concept Index204629  End Tag Table diff -Nrcpad gcc-3.3.5/gcc/doc/cppinternals.info gcc-3.3.6/gcc/doc/cppinternals.info *** gcc-3.3.5/gcc/doc/cppinternals.info 2004-09-30 17:38:13.000000000 +0000 --- gcc-3.3.6/gcc/doc/cppinternals.info 2005-05-03 12:41:24.000000000 +0000 *************** *** 1,4 **** ! This is doc/cppinternals.info, produced by makeinfo version 4.5 from doc/cppinternals.texi. INFO-DIR-SECTION Programming --- 1,4 ---- ! This is doc/cppinternals.info, produced by makeinfo version 4.7 from doc/cppinternals.texi. INFO-DIR-SECTION Programming *************** versions. *** 26,38 ****  File: cppinternals.info, Node: Top, Next: Conventions, Up: (dir) ! Cpplib--the GNU C Preprocessor ! ****************************** ! ! The GNU C preprocessor in GCC 3.x has been completely rewritten. It ! is now implemented as a library, "cpplib", so it can be easily shared between a stand-alone preprocessor, and a preprocessor integrated with the C, C++ and Objective-C front ends. It is also available for use by other programs, though this is not recommended as its exposed interface --- 26,39 ----  File: cppinternals.info, Node: Top, Next: Conventions, Up: (dir) + The GNU C Preprocessor Internals + ******************************** + 1 Cpplib--the GNU C Preprocessor + ******************************** ! The GNU C preprocessor in GCC 3.x has been completely rewritten. It is ! now implemented as a library, "cpplib", so it can be easily shared between a stand-alone preprocessor, and a preprocessor integrated with the C, C++ and Objective-C front ends. It is also available for use by other programs, though this is not recommended as its exposed interface *************** File: cppinternals.info, Node: Conventi *** 68,74 **** Conventions *********** ! cpplib has two interfaces--one is exposed internally only, and the other is for both internal and external use. The convention is that functions and types that are exposed to --- 69,75 ---- Conventions *********** ! cpplib has two interfaces--one is exposed internally only, and the other is for both internal and external use. The convention is that functions and types that are exposed to *************** The Lexer *** 94,100 **** Overview ======== ! The lexer is contained in the file `cpplex.c'. It is a hand-coded lexer, and not implemented as a state machine. It can understand C, C++ and Objective-C source code, and has been extended to allow reasonably successful preprocessing of assembly language. The lexer does not make --- 95,101 ---- Overview ======== ! The lexer is contained in the file `cpplex.c'. It is a hand-coded lexer, and not implemented as a state machine. It can understand C, C++ and Objective-C source code, and has been extended to allow reasonably successful preprocessing of assembly language. The lexer does not make *************** generating diagnostics, and for emitting *** 113,122 **** Lexing a token ============== ! Lexing of an individual token is handled by `_cpp_lex_direct' and ! its subroutines. In its current form the code is quite complicated, ! with read ahead characters and such-like, since it strives to not step ! back in the character stream in preparation for handling non-ASCII file encodings. The current plan is to convert any such files to UTF-8 before processing them. This complexity is therefore unnecessary and will be removed, so I'll not discuss it further here. --- 114,123 ---- Lexing a token ============== ! Lexing of an individual token is handled by `_cpp_lex_direct' and its ! subroutines. In its current form the code is quite complicated, with ! read ahead characters and such-like, since it strives to not step back ! in the character stream in preparation for handling non-ASCII file encodings. The current plan is to convert any such files to UTF-8 before processing them. This complexity is therefore unnecessary and will be removed, so I'll not discuss it further here. *************** program calls cpp_destroy, probably at t *** 277,283 **** Lexing a line ============= ! When the preprocessor was changed to return pointers to tokens, one feature I wanted was some sort of guarantee regarding how long a returned pointer remains valid. This is important to the stand-alone preprocessor, the future direction of the C family front ends, and even --- 278,284 ---- Lexing a line ============= ! When the preprocessor was changed to return pointers to tokens, one feature I wanted was some sort of guarantee regarding how long a returned pointer remains valid. This is important to the stand-alone preprocessor, the future direction of the C family front ends, and even *************** File: cppinternals.info, Node: Hash Nod *** 365,376 **** Hash Nodes ********** ! When cpplib encounters an "identifier", it generates a hash code for ! it and stores it in the hash table. By "identifier" we mean tokens ! with type `CPP_NAME'; this includes identifiers in the usual C sense, ! as well as keywords, directive names, macro names and so on. For ! example, all of `pragma', `int', `foo' and `__GNUC__' are identifiers ! and hashed when lexed. Each node in the hash table contain various information about the identifier it represents. For example, its length and type. At any one --- 366,377 ---- Hash Nodes ********** ! When cpplib encounters an "identifier", it generates a hash code for it ! and stores it in the hash table. By "identifier" we mean tokens with ! type `CPP_NAME'; this includes identifiers in the usual C sense, as ! well as keywords, directive names, macro names and so on. For example, ! all of `pragma', `int', `foo' and `__GNUC__' are identifiers and hashed ! when lexed. Each node in the hash table contain various information about the identifier it represents. For example, its length and type. At any one *************** File: cppinternals.info, Node: Macro Ex *** 426,435 **** Macro Expansion Algorithm ************************* ! Macro expansion is a tricky operation, fraught with nasty corner ! cases and situations that render what you thought was a nifty way to ! optimize the preprocessor's expansion algorithm wrong in quite subtle ! ways. I strongly recommend you have a good grasp of how the C and C++ standards require macros to be expanded before diving into this --- 427,435 ---- Macro Expansion Algorithm ************************* ! Macro expansion is a tricky operation, fraught with nasty corner cases ! and situations that render what you thought was a nifty way to optimize ! the preprocessor's expansion algorithm wrong in quite subtle ways. I strongly recommend you have a good grasp of how the C and C++ standards require macros to be expanded before diving into this *************** pasting are supposed to work, damage to *** 440,447 **** Internal representation of macros ================================= ! The preprocessor stores macro expansions in tokenized form. This ! saves repeated lexing passes during expansion, at the cost of a small increase in memory consumption on average. The tokens are stored contiguously in memory, so a pointer to the first one and a token count is all you need to get the replacement list of a macro. --- 440,447 ---- Internal representation of macros ================================= ! The preprocessor stores macro expansions in tokenized form. This saves ! repeated lexing passes during expansion, at the cost of a small increase in memory consumption on average. The tokens are stored contiguously in memory, so a pointer to the first one and a token count is all you need to get the replacement list of a macro. *************** changed. *** 461,469 **** Macro expansion overview ======================== ! The preprocessor maintains a "context stack", implemented as a ! linked list of `cpp_context' structures, which together represent the ! macro expansion state at any one time. The `struct cpp_reader' member variable `context' points to the current top of this stack. The top normally holds the unexpanded replacement list of the innermost macro under expansion, except when cpplib is about to pre-expand an argument, --- 461,469 ---- Macro expansion overview ======================== ! The preprocessor maintains a "context stack", implemented as a linked ! list of `cpp_context' structures, which together represent the macro ! expansion state at any one time. The `struct cpp_reader' member variable `context' points to the current top of this stack. The top normally holds the unexpanded replacement list of the innermost macro under expansion, except when cpplib is about to pre-expand an argument, *************** being expanded. *** 506,512 **** Scanning the replacement list for macros to expand ================================================== ! The C standard states that, after any parameters have been replaced with their possibly-expanded arguments, the replacement list is scanned for nested macros. Further, any identifiers in the replacement list that are not expanded during this scan are never again eligible for --- 506,512 ---- Scanning the replacement list for macros to expand ================================================== ! The C standard states that, after any parameters have been replaced with their possibly-expanded arguments, the replacement list is scanned for nested macros. Further, any identifiers in the replacement list that are not expanded during this scan are never again eligible for *************** it a second time. *** 556,562 **** Looking for a function-like macro's opening parenthesis ======================================================= ! Function-like macros only expand when immediately followed by a parenthesis. To do this cpplib needs to temporarily disable macros and read the next token. Unfortunately, because of spacing issues (*note Token Spacing::), there can be fake padding tokens in-between, and if --- 556,562 ---- Looking for a function-like macro's opening parenthesis ======================================================= ! Function-like macros only expand when immediately followed by a parenthesis. To do this cpplib needs to temporarily disable macros and read the next token. Unfortunately, because of spacing issues (*note Token Spacing::), there can be fake padding tokens in-between, and if *************** context just containing the padding info *** 576,582 **** Marking tokens ineligible for future expansion ============================================== ! As discussed above, cpplib needs a way of marking tokens as unexpandable. Since the tokens cpplib handles are read-only once they have been lexed, it instead makes a copy of the token and adds the flag `NO_EXPAND' to the copy. --- 576,582 ---- Marking tokens ineligible for future expansion ============================================== ! As discussed above, cpplib needs a way of marking tokens as unexpandable. Since the tokens cpplib handles are read-only once they have been lexed, it instead makes a copy of the token and adds the flag `NO_EXPAND' to the copy. *************** File: cppinternals.info, Node: Token Sp *** 599,605 **** Token Spacing ************* ! First, let's look at an issue that only concerns the stand-alone preprocessor: we want to guarantee that re-reading its preprocessed output results in an identical token stream. Without taking special measures, this might not be the case because of macro substitution. --- 599,605 ---- Token Spacing ************* ! First, let's look at an issue that only concerns the stand-alone preprocessor: we want to guarantee that re-reading its preprocessed output results in an identical token stream. Without taking special measures, this might not be the case because of macro substitution. *************** Line numbering *** 730,737 **** Just which line number anyway? ============================== ! There are three reasonable requirements a cpplib client might have ! for the line number of a token passed to it: * The source line it was lexed on. --- 730,737 ---- Just which line number anyway? ============================== ! There are three reasonable requirements a cpplib client might have for ! the line number of a token passed to it: * The source line it was lexed on. *************** produce correct output. *** 786,795 **** Representation of line numbers ============================== ! As mentioned above, cpplib stores with each token the line number ! that it was lexed on. In fact, this number is not the number of the ! line in the source file, but instead bears more resemblance to the ! number of the line in the translation unit. The preprocessor maintains a monotonic increasing line count, which is incremented at every new line character (and also at the end of any --- 786,795 ---- Representation of line numbers ============================== ! As mentioned above, cpplib stores with each token the line number that ! it was lexed on. In fact, this number is not the number of the line in ! the source file, but instead bears more resemblance to the number of the ! line in the translation unit. The preprocessor maintains a monotonic increasing line count, which is incremented at every new line character (and also at the end of any *************** File: cppinternals.info, Node: Guard Ma *** 817,823 **** The Multiple-Include Optimization ********************************* ! Header files are often of the form #ifndef FOO #define FOO --- 817,823 ---- The Multiple-Include Optimization ********************************* ! Header files are often of the form #ifndef FOO #define FOO *************** File: cppinternals.info, Node: Files, *** 923,932 **** File Handling ************* ! Fairly obviously, the file handling code of cpplib resides in the ! file `cppfiles.c'. It takes care of the details of file searching, ! opening, reading and caching, for both the main source file and all the ! headers it recursively includes. The basic strategy is to minimize the number of system calls. On many systems, the basic `open ()' and `fstat ()' system calls can be --- 923,932 ---- File Handling ************* ! Fairly obviously, the file handling code of cpplib resides in the file ! `cppfiles.c'. It takes care of the details of file searching, opening, ! reading and caching, for both the main source file and all the headers ! it recursively includes. The basic strategy is to minimize the number of system calls. On many systems, the basic `open ()' and `fstat ()' system calls can be *************** File: cppinternals.info, Node: Index, *** 991,1034 **** Index ***** * Menu: ! * assertions: Hash Nodes. ! * controlling macros: Guard Macros. ! * escaped newlines: Lexer. ! * files: Files. ! * guard macros: Guard Macros. ! * hash table: Hash Nodes. ! * header files: Conventions. ! * identifiers: Hash Nodes. ! * interface: Conventions. ! * lexer: Lexer. ! * line numbers: Line Numbering. ! * macro expansion: Macro Expansion. ! * macro representation (internal): Macro Expansion. ! * macros: Hash Nodes. ! * multiple-include optimization: Guard Macros. ! * named operators: Hash Nodes. ! * newlines: Lexer. ! * paste avoidance: Token Spacing. ! * spacing: Token Spacing. ! * token run: Lexer. ! * token spacing: Token Spacing.  Tag Table: Node: Top910 ! Node: Conventions2579 ! Node: Lexer3523 ! Ref: Invalid identifiers11446 ! Ref: Lexing a line13395 ! Node: Hash Nodes18168 ! Node: Macro Expansion21050 ! Node: Token Spacing30015 ! Node: Line Numbering35897 ! Node: Guard Macros39988 ! Node: Files44786 ! Node: Index48250  End Tag Table --- 991,1035 ---- Index ***** + [index] * Menu: ! * assertions: Hash Nodes. (line 6) ! * controlling macros: Guard Macros. (line 6) ! * escaped newlines: Lexer. (line 6) ! * files: Files. (line 6) ! * guard macros: Guard Macros. (line 6) ! * hash table: Hash Nodes. (line 6) ! * header files: Conventions. (line 6) ! * identifiers: Hash Nodes. (line 6) ! * interface: Conventions. (line 6) ! * lexer: Lexer. (line 6) ! * line numbers: Line Numbering. (line 6) ! * macro expansion: Macro Expansion. (line 6) ! * macro representation (internal): Macro Expansion. (line 19) ! * macros: Hash Nodes. (line 6) ! * multiple-include optimization: Guard Macros. (line 6) ! * named operators: Hash Nodes. (line 6) ! * newlines: Lexer. (line 6) ! * paste avoidance: Token Spacing. (line 6) ! * spacing: Token Spacing. (line 6) ! * token run: Lexer. (line 192) ! * token spacing: Token Spacing. (line 6)  Tag Table: Node: Top910 ! Node: Conventions2645 ! Node: Lexer3586 ! Ref: Invalid identifiers11503 ! Ref: Lexing a line13452 ! Node: Hash Nodes18222 ! Node: Macro Expansion21101 ! Node: Token Spacing30048 ! Node: Line Numbering35927 ! Node: Guard Macros40012 ! Node: Files44807 ! Node: Index48268  End Tag Table diff -Nrcpad gcc-3.3.5/gcc/doc/fsf-funding.7 gcc-3.3.6/gcc/doc/fsf-funding.7 *** gcc-3.3.5/gcc/doc/fsf-funding.7 2004-09-30 17:38:16.000000000 +0000 --- gcc-3.3.6/gcc/doc/fsf-funding.7 2005-05-03 12:41:30.000000000 +0000 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== *************** *** 129,135 **** .\" ======================================================================== .\" .IX Title "FSF-FUNDING 7" ! .TH FSF-FUNDING 7 "2004-09-30" "gcc-3.3.5" "GNU" .SH "NAME" fsf\-funding \- Funding Free Software .SH "DESCRIPTION" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "FSF-FUNDING 7" ! .TH FSF-FUNDING 7 "2005-05-03" "gcc-3.3.6" "GNU" .SH "NAME" fsf\-funding \- Funding Free Software .SH "DESCRIPTION" diff -Nrcpad gcc-3.3.5/gcc/doc/gcc.1 gcc-3.3.6/gcc/doc/gcc.1 *** gcc-3.3.5/gcc/doc/gcc.1 2004-09-30 17:38:16.000000000 +0000 --- gcc-3.3.6/gcc/doc/gcc.1 2005-05-03 12:41:29.000000000 +0000 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== *************** *** 129,135 **** .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2004-09-30" "gcc-3.3.5" "GNU" .SH "NAME" gcc \- GNU project C and C++ compiler .SH "SYNOPSIS" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2005-05-03" "gcc-3.3.6" "GNU" .SH "NAME" gcc \- GNU project C and C++ compiler .SH "SYNOPSIS" *************** in the following sections. *** 218,224 **** \&\-Weffc++ \-Wno\-deprecated \&\-Wno\-non\-template\-friend \-Wold\-style\-cast \&\-Woverloaded\-virtual \-Wno\-pmf\-conversions ! \&\-Wsign\-promo \-Wsynth\fR .IP "\fIObjective-C Language Options\fR" 4 .IX Item "Objective-C Language Options" \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR --- 218,224 ---- \&\-Weffc++ \-Wno\-deprecated \&\-Wno\-non\-template\-friend \-Wold\-style\-cast \&\-Woverloaded\-virtual \-Wno\-pmf\-conversions ! \&\-Wsign\-promo\fR .IP "\fIObjective-C Language Options\fR" 4 .IX Item "Objective-C Language Options" \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR *************** Warn when overload resolution chooses a *** 1583,1610 **** enumeral type to a signed type, over a conversion to an unsigned type of the same size. Previous versions of G++ would try to preserve unsignedness, but the standard mandates the current behavior. - .IP "\fB\-Wsynth\fR (\*(C+ only)" 4 - .IX Item "-Wsynth ( only)" - Warn when G++'s synthesis behavior does not match that of cfront. For - instance: - .Sp - .Vb 4 - \& struct A { - \& operator int (); - \& A& operator = (int); - \& }; - .Ve - .Sp - .Vb 5 - \& main () - \& { - \& A a,b; - \& a = b; - \& } - .Ve - .Sp - In this example, G++ will synthesize a default \fBA& operator = - (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR. .Sh "Options Controlling Objective-C Dialect" .IX Subsection "Options Controlling Objective-C Dialect" This section describes the command-line options that are only meaningful --- 1583,1588 ---- *************** These \fB\-m\fR switches are supported o *** 5236,5242 **** .PD Specify \fB\-mapp\-regs\fR to generate output using the global registers 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. This ! is the default. .Sp To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss, specify \fB\-mno\-app\-regs\fR. You should compile libraries and system --- 5214,5220 ---- .PD Specify \fB\-mapp\-regs\fR to generate output using the global registers 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications. This ! is the default, except on Solaris. .Sp To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss, specify \fB\-mno\-app\-regs\fR. You should compile libraries and system diff -Nrcpad gcc-3.3.5/gcc/doc/gcc.info gcc-3.3.6/gcc/doc/gcc.info *** gcc-3.3.5/gcc/doc/gcc.info 2004-09-30 17:38:12.000000000 +0000 --- gcc-3.3.6/gcc/doc/gcc.info 2005-05-03 12:41:23.000000000 +0000 *************** *** 1,7 **** ! This is doc/gcc.info, produced by makeinfo version 4.5 from doc/gcc.texi. ! Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,7 ---- ! This is doc/gcc.info, produced by makeinfo version 4.7 from doc/gcc.texi. ! Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** included in the section entitled "GNU Fr *** 21,26 **** --- 21,27 ---- You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. + INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * gcc: (gcc). The GNU Compiler Collection. *************** END-INFO-DIR-ENTRY *** 31,37 **** 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 32,38 ---- 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** included in the section entitled "GNU Fr *** 52,66 **** software. Copies published by the Free Software Foundation raise funds for GNU development.  File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) Introduction ************ ! This manual documents how to use the GNU compilers, as well as their features and incompatibilities, and how to report bugs. It corresponds ! to GCC version 3.3.5. The internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages, are documented in a separate manual. *Note Introduction: (gccint)Top. --- 53,68 ---- software. Copies published by the Free Software Foundation raise funds for GNU development. +  File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) Introduction ************ ! This manual documents how to use the GNU compilers, as well as their features and incompatibilities, and how to report bugs. It corresponds ! to GCC version 3.3.6. The internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages, are documented in a separate manual. *Note Introduction: (gccint)Top. *************** front ends for new languages, are docume *** 95,104 ****  File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top ! Compile C, C++, Objective-C, Ada, Fortran, Java, or treelang ! ************************************************************ ! Several versions of the compiler (C, C++, Objective-C, Ada, Fortran, Java and treelang) are integrated; this is why we use the name "GNU Compiler Collection". GCC can compile programs written in any of these languages. The Ada, Fortran, Java and treelang compilers are described --- 97,106 ----  File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top ! 1 Compile C, C++, Objective-C, Ada, Fortran, Java, or treelang ! ************************************************************** ! Several versions of the compiler (C, C++, Objective-C, Ada, Fortran, Java and treelang) are integrated; this is why we use the name "GNU Compiler Collection". GCC can compile programs written in any of these languages. The Ada, Fortran, Java and treelang compilers are described *************** and C++: (gdb.info)C.). *** 147,156 ****  File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top ! Language Standards Supported by GCC ! *********************************** ! For each language compiled by GCC for which there is a standard, GCC attempts to follow one or more versions of that standard, possibly with some exceptions, and possibly with some extensions. --- 149,158 ----  File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top ! 2 Language Standards Supported by GCC ! ************************************* ! For each language compiled by GCC for which there is a standard, GCC attempts to follow one or more versions of that standard, possibly with some exceptions, and possibly with some extensions. *************** details of compatibility between `gcj' a *** 286,295 ****  File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top ! GCC Command Options ! ******************* ! When you invoke GCC, it normally does preprocessing, compilation, assembly and linking. The "overall options" allow you to stop this process at an intermediate stage. For example, the `-c' option says not to run the linker. Then the output consists of object files output --- 288,297 ----  File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top ! 3 GCC Command Options ! ********************* ! When you invoke GCC, it normally does preprocessing, compilation, assembly and linking. The "overall options" allow you to stop this process at an intermediate stage. For example, the `-c' option says not to run the linker. Then the output consists of object files output *************** these two forms, whichever one is not th *** 359,515 ****  File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC ! Option Summary ! ============== ! Here is a summary of all the options, grouped by type. Explanations ! are in the following sections. _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. ! -ansi -std=STANDARD -aux-info FILENAME ! -fno-asm -fno-builtin -fno-builtin-FUNCTION ! -fhosted -ffreestanding -fms-extensions ! -trigraphs -no-integrated-cpp -traditional -traditional-cpp ! -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. ! -fabi-version=N -fno-access-control -fcheck-new ! -fconserve-space -fno-const-strings -fdollars-in-identifiers ! -fno-elide-constructors ! -fno-enforce-eh-specs -fexternal-templates ! -falt-external-templates ! -ffor-scope -fno-for-scope -fno-gnu-keywords ! -fno-implicit-templates ! -fno-implicit-inline-templates ! -fno-implement-inlines -fms-extensions ! -fno-nonansi-builtins -fno-operator-names ! -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 ! -Woverloaded-virtual -Wno-pmf-conversions ! -Wsign-promo -Wsynth _Objective-C Language Options_ *Note Options Controlling Objective-C Dialect: Objective-C Dialect Options. ! -fconstant-string-class=CLASS-NAME ! -fgnu-runtime -fnext-runtime -gen-decls -Wno-protocol -Wselector -Wundeclared-selector _Language Independent Options_ *Note Options to Control Diagnostic Messages Formatting: Language Independent Options. ! -fmessage-length=N -fdiagnostics-show-location=[once|every-line] _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 -Wno-div-by-zero -Werror ! -Wfloat-equal -Wformat -Wformat=2 ! -Wformat-nonliteral -Wformat-security ! -Wimplicit -Wimplicit-int ! -Wimplicit-function-declaration ! -Werror-implicit-function-declaration ! -Wimport -Winline -Wno-endif-labels ! -Wlarger-than-LEN -Wlong-long ! -Wmain -Wmissing-braces ! -Wmissing-format-attribute -Wmissing-noreturn ! -Wno-multichar -Wno-format-extra-args -Wno-format-y2k ! -Wno-import -Wnonnull -Wpacked -Wpadded ! -Wparentheses -Wpointer-arith -Wredundant-decls ! -Wreturn-type -Wsequence-point -Wshadow ! -Wsign-compare -Wstrict-aliasing ! -Wswitch -Wswitch-default -Wswitch-enum ! -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized ! -Wunknown-pragmas -Wunreachable-code ! -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings _C-only Warning Options_ ! -Wbad-function-cast -Wmissing-declarations ! -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wtraditional _Debugging Options_ *Note Options for Debugging Your Program or GCC: Debugging Options. ! -dLETTERS -dumpspecs -dumpmachine -dumpversion ! -fdump-unnumbered -fdump-translation-unit[-N] ! -fdump-class-hierarchy[-N] ! -fdump-tree-original[-N] ! -fdump-tree-optimized[-N] ! -fdump-tree-inlined[-N] ! -feliminate-dwarf2-dups -fmem-report ! -fprofile-arcs -frandom-seed=N ! -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 ! -print-multi-directory -print-multi-lib ! -print-prog-name=PROGRAM -print-search-dirs -Q -save-temps -time _Optimization Options_ *Note Options that Control Optimization: Optimize Options. ! -falign-functions=N -falign-jumps=N ! -falign-labels=N -falign-loops=N ! -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 ! -fforce-addr -fforce-mem -ffunction-sections ! -fgcse -fgcse-lm -fgcse-sm -floop-optimize -fcrossjumping ! -fif-conversion -fif-conversion2 ! -finline-functions -finline-limit=N -fkeep-inline-functions ! -fkeep-static-consts -fmerge-constants -fmerge-all-constants ! -fmove-all-movables -fnew-ra -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 -ffinite-math-only ! -fno-trapping-math -fno-zero-initialized-in-bss ! -fomit-frame-pointer -foptimize-register-move ! -foptimize-sibling-calls -fprefetch-loop-arrays ! -freduce-all-givs -fregmove -frename-registers ! -freorder-blocks -freorder-functions ! -frerun-cse-after-loop -frerun-loop-opt ! -fschedule-insns -fschedule-insns2 ! -fno-sched-interblock -fno-sched-spec -fsched-spec-load ! -fsched-spec-load-dangerous -fsignaling-nans ! -fsingle-precision-constant -fssa -fssa-ccp -fssa-dce ! -fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps ! -funroll-all-loops -funroll-loops ! --param NAME=VALUE -O -O0 -O1 -O2 -O3 -Os _Preprocessor Options_ *Note Options Controlling the Preprocessor: Preprocessor Options. ! -$ -AQUESTION=ANSWER ! -A-QUESTION[=ANSWER] ! -C -dD -dI -dM -dN ! -DMACRO[=DEFN] -E -H ! -idirafter DIR ! -include FILE -imacros FILE ! -iprefix FILE -iwithprefix DIR ! -iwithprefixbefore DIR -isystem DIR ! -M -MM -MF -MG -MP -MQ -MT -nostdinc -P -remap -trigraphs -undef -UMACRO -Wp,OPTION _Assembler Option_ --- 361,517 ----  File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC ! 3.1 Option Summary ! ================== ! Here is a summary of all the options, grouped by type. Explanations are ! in the following sections. _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. ! -ansi -std=STANDARD -aux-info FILENAME ! -fno-asm -fno-builtin -fno-builtin-FUNCTION ! -fhosted -ffreestanding -fms-extensions ! -trigraphs -no-integrated-cpp -traditional -traditional-cpp ! -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. ! -fabi-version=N -fno-access-control -fcheck-new ! -fconserve-space -fno-const-strings -fdollars-in-identifiers ! -fno-elide-constructors ! -fno-enforce-eh-specs -fexternal-templates ! -falt-external-templates ! -ffor-scope -fno-for-scope -fno-gnu-keywords ! -fno-implicit-templates ! -fno-implicit-inline-templates ! -fno-implement-inlines -fms-extensions ! -fno-nonansi-builtins -fno-operator-names ! -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 ! -Woverloaded-virtual -Wno-pmf-conversions ! -Wsign-promo _Objective-C Language Options_ *Note Options Controlling Objective-C Dialect: Objective-C Dialect Options. ! -fconstant-string-class=CLASS-NAME ! -fgnu-runtime -fnext-runtime -gen-decls -Wno-protocol -Wselector -Wundeclared-selector _Language Independent Options_ *Note Options to Control Diagnostic Messages Formatting: Language Independent Options. ! -fmessage-length=N -fdiagnostics-show-location=[once|every-line] _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 -Wno-div-by-zero -Werror ! -Wfloat-equal -Wformat -Wformat=2 ! -Wformat-nonliteral -Wformat-security ! -Wimplicit -Wimplicit-int ! -Wimplicit-function-declaration ! -Werror-implicit-function-declaration ! -Wimport -Winline -Wno-endif-labels ! -Wlarger-than-LEN -Wlong-long ! -Wmain -Wmissing-braces ! -Wmissing-format-attribute -Wmissing-noreturn ! -Wno-multichar -Wno-format-extra-args -Wno-format-y2k ! -Wno-import -Wnonnull -Wpacked -Wpadded ! -Wparentheses -Wpointer-arith -Wredundant-decls ! -Wreturn-type -Wsequence-point -Wshadow ! -Wsign-compare -Wstrict-aliasing ! -Wswitch -Wswitch-default -Wswitch-enum ! -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized ! -Wunknown-pragmas -Wunreachable-code ! -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings _C-only Warning Options_ ! -Wbad-function-cast -Wmissing-declarations ! -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wtraditional _Debugging Options_ *Note Options for Debugging Your Program or GCC: Debugging Options. ! -dLETTERS -dumpspecs -dumpmachine -dumpversion ! -fdump-unnumbered -fdump-translation-unit[-N] ! -fdump-class-hierarchy[-N] ! -fdump-tree-original[-N] ! -fdump-tree-optimized[-N] ! -fdump-tree-inlined[-N] ! -feliminate-dwarf2-dups -fmem-report ! -fprofile-arcs -frandom-seed=N ! -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 ! -print-multi-directory -print-multi-lib ! -print-prog-name=PROGRAM -print-search-dirs -Q -save-temps -time _Optimization Options_ *Note Options that Control Optimization: Optimize Options. ! -falign-functions=N -falign-jumps=N ! -falign-labels=N -falign-loops=N ! -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 ! -fforce-addr -fforce-mem -ffunction-sections ! -fgcse -fgcse-lm -fgcse-sm -floop-optimize -fcrossjumping ! -fif-conversion -fif-conversion2 ! -finline-functions -finline-limit=N -fkeep-inline-functions ! -fkeep-static-consts -fmerge-constants -fmerge-all-constants ! -fmove-all-movables -fnew-ra -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 -ffinite-math-only ! -fno-trapping-math -fno-zero-initialized-in-bss ! -fomit-frame-pointer -foptimize-register-move ! -foptimize-sibling-calls -fprefetch-loop-arrays ! -freduce-all-givs -fregmove -frename-registers ! -freorder-blocks -freorder-functions ! -frerun-cse-after-loop -frerun-loop-opt ! -fschedule-insns -fschedule-insns2 ! -fno-sched-interblock -fno-sched-spec -fsched-spec-load ! -fsched-spec-load-dangerous -fsignaling-nans ! -fsingle-precision-constant -fssa -fssa-ccp -fssa-dce ! -fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps ! -funroll-all-loops -funroll-loops ! --param NAME=VALUE -O -O0 -O1 -O2 -O3 -Os _Preprocessor Options_ *Note Options Controlling the Preprocessor: Preprocessor Options. ! -$ -AQUESTION=ANSWER ! -A-QUESTION[=ANSWER] ! -C -dD -dI -dM -dN ! -DMACRO[=DEFN] -E -H ! -idirafter DIR ! -include FILE -imacros FILE ! -iprefix FILE -iwithprefix DIR ! -iwithprefixbefore DIR -isystem DIR ! -M -MM -MF -MG -MP -MQ -MT -nostdinc -P -remap -trigraphs -undef -UMACRO -Wp,OPTION _Assembler Option_ *************** _Assembler Option_ *** 518,527 **** _Linker Options_ *Note Options for Linking: Link Options. ! OBJECT-FILE-NAME -lLIBRARY ! -nostartfiles -nodefaultlibs -nostdlib ! -s -static -static-libgcc -shared -shared-libgcc -symbolic ! -Wl,OPTION -Xlinker OPTION -u SYMBOL _Directory Options_ --- 520,529 ---- _Linker Options_ *Note Options for Linking: Link Options. ! OBJECT-FILE-NAME -lLIBRARY ! -nostartfiles -nodefaultlibs -nostdlib ! -s -static -static-libgcc -shared -shared-libgcc -symbolic ! -Wl,OPTION -Xlinker OPTION -u SYMBOL _Directory Options_ *************** _Machine Dependent Options_ *** 536,733 **** *Note Hardware Models and Configurations: Submodel Options. _M680x0 Options_ ! -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 ! -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 ! -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel -malign-int -mstrict-align _M68hc1x Options_ ! -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 ! -mauto-incdec -minmax -mlong-calls -mshort -msoft-reg-count=COUNT _VAX Options_ -mg -mgnu -munix _SPARC Options_ ! -mcpu=CPU-TYPE ! -mtune=CPU-TYPE ! -mcmodel=CODE-MODEL ! -m32 -m64 ! -mapp-regs -mbroken-saverestore -mcypress ! -mfaster-structs -mflat ! -mfpu -mhard-float -mhard-quad-float ! -mimpure-text -mlittle-endian -mlive-g0 -mno-app-regs ! -mno-faster-structs -mno-flat -mno-fpu ! -mno-impure-text -mno-stack-bias -mno-unaligned-doubles ! -msoft-float -msoft-quad-float -msparclite -mstack-bias -msupersparc -munaligned-doubles -mv8 -threads -pthreads _ARM Options_ ! -mapcs-frame -mno-apcs-frame ! -mapcs-26 -mapcs-32 ! -mapcs-stack-check -mno-apcs-stack-check ! -mapcs-float -mno-apcs-float ! -mapcs-reentrant -mno-apcs-reentrant ! -msched-prolog -mno-sched-prolog ! -mlittle-endian -mbig-endian -mwords-little-endian ! -malignment-traps -mno-alignment-traps ! -msoft-float -mhard-float -mfpe ! -mthumb-interwork -mno-thumb-interwork ! -mcpu=NAME -march=NAME -mfpe=NAME ! -mstructure-size-boundary=N ! -mabort-on-noreturn ! -mlong-calls -mno-long-calls ! -msingle-pic-base -mno-single-pic-base ! -mpic-register=REG ! -mnop-fun-dllimport ! -mpoke-function-name ! -mthumb -marm ! -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworking _MN10200 Options_ -mrelax _MN10300 Options_ ! -mmult-bug -mno-mult-bug ! -mam33 -mno-am33 -mno-crt0 -mrelax _M32R/D Options_ ! -m32rx -m32r -mcode-model=MODEL-TYPE -msdata=SDATA-TYPE -G NUM _M88K Options_ ! -m88000 -m88100 -m88110 -mbig-pic ! -mcheck-zero-division -mhandle-large-shift ! -midentify-revision -mno-check-zero-division ! -mno-ocs-debug-info -mno-ocs-frame-position ! -mno-optimize-arg-area -mno-serialize-volatile ! -mno-underscores -mocs-debug-info ! -mocs-frame-position -moptimize-arg-area ! -mserialize-volatile -mshort-data-NUM -msvr3 ! -msvr4 -mtrap-large-shift -muse-div-instruction -mversion-03.00 -mwarn-passed-structs _RS/6000 and PowerPC Options_ ! -mcpu=CPU-TYPE ! -mtune=CPU-TYPE ! -mpower -mno-power -mpower2 -mno-power2 ! -mpowerpc -mpowerpc64 -mno-powerpc ! -maltivec -mno-altivec ! -mpowerpc-gpopt -mno-powerpc-gpopt ! -mpowerpc-gfxopt -mno-powerpc-gfxopt ! -mnew-mnemonics -mold-mnemonics ! -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc ! -m64 -m32 -mxl-call -mno-xl-call -mpe ! -msoft-float -mhard-float -mmultiple -mno-multiple ! -mstring -mno-string -mupdate -mno-update ! -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align ! -mstrict-align -mno-strict-align -mrelocatable ! -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 ! -mabi=spe -mabi=no-spe ! -misel=yes -misel=no ! -mprototype -mno-prototype ! -msim -mmvme -mads -myellowknife -memb -msdata -msdata=OPT -mvxworks -mwindiss -G NUM -pthread _Darwin Options_ ! -all_load -allowable_client -arch -arch_errors_fatal ! -arch_only -bind_at_load -bundle -bundle_loader ! -client_name -compatibility_version -current_version ! -dependency-file -dylib_file -dylinker_install_name ! -dynamic -dynamiclib -exported_symbols_list ! -filelist -flat_namespace -force_cpusubtype_ALL ! -force_flat_namespace -headerpad_max_install_names ! -image_base -init -install_name -keep_private_externs ! -multi_module -multiply_defined -multiply_defined_unused ! -noall_load -nomultidefs -noprebind -noseglinkedit ! -pagezero_size -prebind -prebind_all_twolevel_modules ! -private_bundle -read_only_relocs -sectalign ! -sectobjectsymbols -whyload -seg1addr ! -sectcreate -sectobjectsymbols -sectorder ! -seg_addr_table -seg_addr_table_filename -seglinkedit ! -segprot -segs_read_only_addr -segs_read_write_addr ! -single_module -static -sub_library -sub_umbrella ! -twolevel_namespace -umbrella -undefined -unexported_symbols_list -weak_reference_mismatches -whatsloaded _RT Options_ ! -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs ! -mfull-fp-blocks -mhc-struct-return -min-line-mul -mminimum-fp-blocks -mnohc-struct-return _MIPS Options_ ! -mabicalls -march=CPU-TYPE -mtune=CPU=TYPE ! -mcpu=CPU-TYPE -membedded-data -muninit-const-in-rodata ! -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd ! -mgas -mgp32 -mgp64 ! -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 ! -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy ! -mmips-as -mmips-tfile -mno-abicalls ! -mno-embedded-data -mno-uninit-const-in-rodata ! -mno-embedded-pic -mno-gpopt -mno-long-calls ! -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats ! -mrnames -msoft-float ! -m4650 -msingle-float -mmad ! -mstats -EL -EB -G NUM -nocpp ! -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi ! -mfix7000 -mno-crt0 -mflush-func=FUNC -mno-flush-func -mbranch-likely -mno-branch-likely _i386 and x86-64 Options_ ! -mcpu=CPU-TYPE -march=CPU-TYPE ! -mfpmath=UNIT -masm=DIALECT -mno-fancy-math-387 ! -mno-fp-ret-in-387 -msoft-float -msvr3-shlib ! -mno-wide-multiply -mrtd -malign-double ! -mpreferred-stack-boundary=NUM ! -mmmx -msse -msse2 -msse3 -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_ ! -march=ARCHITECTURE-TYPE ! -mbig-switch -mdisable-fpregs -mdisable-indexing ! -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld ! -mjump-in-delay -mlinker-opt -mlong-calls ! -mlong-load-store -mno-big-switch -mno-disable-fpregs ! -mno-disable-indexing -mno-fast-indirect-calls -mno-gas ! -mno-jump-in-delay -mno-long-load-store ! -mno-portable-runtime -mno-soft-float ! -mno-space-regs -msoft-float -mpa-risc-1-0 ! -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime ! -mschedule=CPU-TYPE -mspace-regs -msio -mwsio -nolibdld -static -threads _Intel 960 Options_ ! -mCPU-TYPE -masm-compat -mclean-linkage ! -mcode-align -mcomplex-addr -mleaf-procedures ! -mic-compat -mic2.0-compat -mic3.0-compat ! -mintel-asm -mno-clean-linkage -mno-code-align ! -mno-complex-addr -mno-leaf-procedures ! -mno-old-align -mno-strict-align -mno-tail-call ! -mnumerics -mold-align -msoft-float -mstrict-align -mtail-call _DEC Alpha Options_ ! -mno-fp-regs -msoft-float -malpha-as -mgas ! -mieee -mieee-with-inexact -mieee-conformant ! -mfp-trap-mode=MODE -mfp-rounding-mode=MODE ! -mtrap-precision=MODE -mbuild-constants ! -mcpu=CPU-TYPE -mtune=CPU-TYPE ! -mbwx -mmax -mfix -mcix ! -mfloat-vax -mfloat-ieee ! -mexplicit-relocs -msmall-data -mlarge-data -mmemory-latency=TIME _DEC Alpha/VMS Options_ --- 538,735 ---- *Note Hardware Models and Configurations: Submodel Options. _M680x0 Options_ ! -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 ! -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 ! -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel -malign-int -mstrict-align _M68hc1x Options_ ! -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 ! -mauto-incdec -minmax -mlong-calls -mshort -msoft-reg-count=COUNT _VAX Options_ -mg -mgnu -munix _SPARC Options_ ! -mcpu=CPU-TYPE ! -mtune=CPU-TYPE ! -mcmodel=CODE-MODEL ! -m32 -m64 ! -mapp-regs -mbroken-saverestore -mcypress ! -mfaster-structs -mflat ! -mfpu -mhard-float -mhard-quad-float ! -mimpure-text -mlittle-endian -mlive-g0 -mno-app-regs ! -mno-faster-structs -mno-flat -mno-fpu ! -mno-impure-text -mno-stack-bias -mno-unaligned-doubles ! -msoft-float -msoft-quad-float -msparclite -mstack-bias -msupersparc -munaligned-doubles -mv8 -threads -pthreads _ARM Options_ ! -mapcs-frame -mno-apcs-frame ! -mapcs-26 -mapcs-32 ! -mapcs-stack-check -mno-apcs-stack-check ! -mapcs-float -mno-apcs-float ! -mapcs-reentrant -mno-apcs-reentrant ! -msched-prolog -mno-sched-prolog ! -mlittle-endian -mbig-endian -mwords-little-endian ! -malignment-traps -mno-alignment-traps ! -msoft-float -mhard-float -mfpe ! -mthumb-interwork -mno-thumb-interwork ! -mcpu=NAME -march=NAME -mfpe=NAME ! -mstructure-size-boundary=N ! -mabort-on-noreturn ! -mlong-calls -mno-long-calls ! -msingle-pic-base -mno-single-pic-base ! -mpic-register=REG ! -mnop-fun-dllimport ! -mpoke-function-name ! -mthumb -marm ! -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworking _MN10200 Options_ -mrelax _MN10300 Options_ ! -mmult-bug -mno-mult-bug ! -mam33 -mno-am33 -mno-crt0 -mrelax _M32R/D Options_ ! -m32rx -m32r -mcode-model=MODEL-TYPE -msdata=SDATA-TYPE -G NUM _M88K Options_ ! -m88000 -m88100 -m88110 -mbig-pic ! -mcheck-zero-division -mhandle-large-shift ! -midentify-revision -mno-check-zero-division ! -mno-ocs-debug-info -mno-ocs-frame-position ! -mno-optimize-arg-area -mno-serialize-volatile ! -mno-underscores -mocs-debug-info ! -mocs-frame-position -moptimize-arg-area ! -mserialize-volatile -mshort-data-NUM -msvr3 ! -msvr4 -mtrap-large-shift -muse-div-instruction -mversion-03.00 -mwarn-passed-structs _RS/6000 and PowerPC Options_ ! -mcpu=CPU-TYPE ! -mtune=CPU-TYPE ! -mpower -mno-power -mpower2 -mno-power2 ! -mpowerpc -mpowerpc64 -mno-powerpc ! -maltivec -mno-altivec ! -mpowerpc-gpopt -mno-powerpc-gpopt ! -mpowerpc-gfxopt -mno-powerpc-gfxopt ! -mnew-mnemonics -mold-mnemonics ! -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc ! -m64 -m32 -mxl-call -mno-xl-call -mpe ! -msoft-float -mhard-float -mmultiple -mno-multiple ! -mstring -mno-string -mupdate -mno-update ! -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align ! -mstrict-align -mno-strict-align -mrelocatable ! -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 ! -mabi=spe -mabi=no-spe ! -misel=yes -misel=no ! -mprototype -mno-prototype ! -msim -mmvme -mads -myellowknife -memb -msdata -msdata=OPT -mvxworks -mwindiss -G NUM -pthread _Darwin Options_ ! -all_load -allowable_client -arch -arch_errors_fatal ! -arch_only -bind_at_load -bundle -bundle_loader ! -client_name -compatibility_version -current_version ! -dependency-file -dylib_file -dylinker_install_name ! -dynamic -dynamiclib -exported_symbols_list ! -filelist -flat_namespace -force_cpusubtype_ALL ! -force_flat_namespace -headerpad_max_install_names ! -image_base -init -install_name -keep_private_externs ! -multi_module -multiply_defined -multiply_defined_unused ! -noall_load -nomultidefs -noprebind -noseglinkedit ! -pagezero_size -prebind -prebind_all_twolevel_modules ! -private_bundle -read_only_relocs -sectalign ! -sectobjectsymbols -whyload -seg1addr ! -sectcreate -sectobjectsymbols -sectorder ! -seg_addr_table -seg_addr_table_filename -seglinkedit ! -segprot -segs_read_only_addr -segs_read_write_addr ! -single_module -static -sub_library -sub_umbrella ! -twolevel_namespace -umbrella -undefined -unexported_symbols_list -weak_reference_mismatches -whatsloaded _RT Options_ ! -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs ! -mfull-fp-blocks -mhc-struct-return -min-line-mul -mminimum-fp-blocks -mnohc-struct-return _MIPS Options_ ! -mabicalls -march=CPU-TYPE -mtune=CPU=TYPE ! -mcpu=CPU-TYPE -membedded-data -muninit-const-in-rodata ! -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd ! -mgas -mgp32 -mgp64 ! -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 ! -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy ! -mmips-as -mmips-tfile -mno-abicalls ! -mno-embedded-data -mno-uninit-const-in-rodata ! -mno-embedded-pic -mno-gpopt -mno-long-calls ! -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats ! -mrnames -msoft-float ! -m4650 -msingle-float -mmad ! -mstats -EL -EB -G NUM -nocpp ! -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi ! -mfix7000 -mno-crt0 -mflush-func=FUNC -mno-flush-func -mbranch-likely -mno-branch-likely _i386 and x86-64 Options_ ! -mcpu=CPU-TYPE -march=CPU-TYPE ! -mfpmath=UNIT -masm=DIALECT -mno-fancy-math-387 ! -mno-fp-ret-in-387 -msoft-float -msvr3-shlib ! -mno-wide-multiply -mrtd -malign-double ! -mpreferred-stack-boundary=NUM ! -mmmx -msse -msse2 -msse3 -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_ ! -march=ARCHITECTURE-TYPE ! -mbig-switch -mdisable-fpregs -mdisable-indexing ! -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld ! -mjump-in-delay -mlinker-opt -mlong-calls ! -mlong-load-store -mno-big-switch -mno-disable-fpregs ! -mno-disable-indexing -mno-fast-indirect-calls -mno-gas ! -mno-jump-in-delay -mno-long-load-store ! -mno-portable-runtime -mno-soft-float ! -mno-space-regs -msoft-float -mpa-risc-1-0 ! -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime ! -mschedule=CPU-TYPE -mspace-regs -msio -mwsio -nolibdld -static -threads _Intel 960 Options_ ! -mCPU-TYPE -masm-compat -mclean-linkage ! -mcode-align -mcomplex-addr -mleaf-procedures ! -mic-compat -mic2.0-compat -mic3.0-compat ! -mintel-asm -mno-clean-linkage -mno-code-align ! -mno-complex-addr -mno-leaf-procedures ! -mno-old-align -mno-strict-align -mno-tail-call ! -mnumerics -mold-align -msoft-float -mstrict-align -mtail-call _DEC Alpha Options_ ! -mno-fp-regs -msoft-float -malpha-as -mgas ! -mieee -mieee-with-inexact -mieee-conformant ! -mfp-trap-mode=MODE -mfp-rounding-mode=MODE ! -mtrap-precision=MODE -mbuild-constants ! -mcpu=CPU-TYPE -mtune=CPU-TYPE ! -mbwx -mmax -mfix -mcix ! -mfloat-vax -mfloat-ieee ! -mexplicit-relocs -msmall-data -mlarge-data -mmemory-latency=TIME _DEC Alpha/VMS Options_ *************** _Machine Dependent Options_ *** 737,882 **** -mrelax -mh -ms -mn -mint32 -malign-300 _SH Options_ ! -m1 -m2 -m3 -m3e ! -m4-nofpu -m4-single-only -m4-single -m4 ! -m5-64media -m5-64media-nofpu ! -m5-32media -m5-32media-nofpu ! -m5-compact -m5-compact-nofpu ! -mb -ml -mdalign -mrelax ! -mbigtable -mfmovd -mhitachi -mnomacsave ! -mieee -misize -mpadstruct -mspace -mprefergot -musermode _System V Options_ -Qy -Qn -YP,PATHS -Ym,DIR _ARC Options_ ! -EB -EL ! -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION _TMS320C3x/C4x Options_ ! -mcpu=CPU -mbig -msmall -mregparm -mmemparm ! -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload ! -mrpts=COUNT -mrptb -mdb -mloop-unsigned -mparallel-insns -mparallel-mpy -mpreserve-float _V850 Options_ ! -mlong-calls -mno-long-calls -mep -mno-ep ! -mprolog-function -mno-prolog-function -mspace ! -mtda=N -msda=N -mzda=N ! -mapp-regs -mno-app-regs ! -mdisable-callt -mno-disable-callt ! -mv850e -mv850 -mbig-switch _NS32K Options_ ! -m32032 -m32332 -m32532 -m32081 -m32381 ! -mmult-add -mnomult-add -msoft-float -mrtd -mnortd ! -mregparam -mnoregparam -msb -mnosb -mbitfield -mnobitfield -mhimem -mnohimem _AVR Options_ ! -mmcu=MCU -msize -minit-stack=N -mno-interrupts -mcall-prologues -mno-tablejump -mtiny-stack _MCore Options_ ! -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates ! -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields ! -m4byte-functions -mno-4byte-functions -mcallgraph-data ! -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment _MMIX Options_ ! -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu ! -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols ! -melf -mbranch-predict -mno-branch-predict -mbase-addresses -mno-base-addresses -msingle-exit -mno-single-exit _IA-64 Options_ ! -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic ! -mvolatile-asm-stop -mb-step -mregister-names -mno-sdata ! -mconstant-gp -mauto-pic -minline-float-divide-min-latency ! -minline-float-divide-max-throughput ! -minline-int-divide-min-latency ! -minline-int-divide-max-throughput -mno-dwarf2-asm -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 ! -msmall-exec -mno-small-exec -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug _CRIS Options_ ! -mcpu=CPU -march=CPU -mtune=CPU ! -mmax-stack-frame=N -melinux-stacksize=N ! -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects ! -mstack-align -mdata-align -mconst-align ! -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt ! -melf -maout -melinux -mlinux -sim -sim2 -mmul-bug-workaround -mno-mul-bug-workaround _PDP-11 Options_ ! -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 ! -mbcopy -mbcopy-builtin -mint32 -mno-int16 ! -mint16 -mno-int32 -mfloat32 -mno-float64 ! -mfloat64 -mno-float32 -mabshi -mno-abshi ! -mbranch-expensive -mbranch-cheap -msplit -mno-split -munix-asm -mdec-asm _Xstormy16 Options_ -msim _Xtensa Options_ ! -mbig-endian -mlittle-endian ! -mdensity -mno-density ! -mmac16 -mno-mac16 ! -mmul16 -mno-mul16 ! -mmul32 -mno-mul32 ! -mnsa -mno-nsa ! -mminmax -mno-minmax ! -msext -mno-sext ! -mbooleans -mno-booleans ! -mhard-float -msoft-float ! -mfused-madd -mno-fused-madd ! -mserialize-volatile -mno-serialize-volatile ! -mtext-section-literals -mno-text-section-literals ! -mtarget-align -mno-target-align -mlongcalls -mno-longcalls _FRV Options_ ! -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 ! -mhard-float -msoft-float -malloc-cc -mfixed-cc ! -mdword -mno-dword -mdouble -mno-double ! -mmedia -mno-media -mmuladd -mno-muladd -mlibrary-pic ! -macc-4 -macc-8 -mpack -mno-pack -mno-eflags ! -mcond-move -mno-cond-move -mscc -mno-scc ! -mcond-exec -mno-cond-exec -mvliw-branch -mno-vliw-branch ! -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec ! -mno-nested-cond-exec -mtomcat-stats -mcpu=CPU _Code Generation Options_ *Note Options for Code Generation Conventions: Code Gen Options. ! -fcall-saved-REG -fcall-used-REG ! -ffixed-REG -fexceptions ! -fnon-call-exceptions -funwind-tables ! -fasynchronous-unwind-tables ! -finhibit-size-directive -finstrument-functions ! -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 ! -fargument-alias -fargument-noalias ! -fargument-noalias-global -fleading-underscore ! -ftls-model=MODEL -ftrapv -fbounds-check --- 739,884 ---- -mrelax -mh -ms -mn -mint32 -malign-300 _SH Options_ ! -m1 -m2 -m3 -m3e ! -m4-nofpu -m4-single-only -m4-single -m4 ! -m5-64media -m5-64media-nofpu ! -m5-32media -m5-32media-nofpu ! -m5-compact -m5-compact-nofpu ! -mb -ml -mdalign -mrelax ! -mbigtable -mfmovd -mhitachi -mnomacsave ! -mieee -misize -mpadstruct -mspace -mprefergot -musermode _System V Options_ -Qy -Qn -YP,PATHS -Ym,DIR _ARC Options_ ! -EB -EL ! -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION _TMS320C3x/C4x Options_ ! -mcpu=CPU -mbig -msmall -mregparm -mmemparm ! -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload ! -mrpts=COUNT -mrptb -mdb -mloop-unsigned -mparallel-insns -mparallel-mpy -mpreserve-float _V850 Options_ ! -mlong-calls -mno-long-calls -mep -mno-ep ! -mprolog-function -mno-prolog-function -mspace ! -mtda=N -msda=N -mzda=N ! -mapp-regs -mno-app-regs ! -mdisable-callt -mno-disable-callt ! -mv850e -mv850 -mbig-switch _NS32K Options_ ! -m32032 -m32332 -m32532 -m32081 -m32381 ! -mmult-add -mnomult-add -msoft-float -mrtd -mnortd ! -mregparam -mnoregparam -msb -mnosb -mbitfield -mnobitfield -mhimem -mnohimem _AVR Options_ ! -mmcu=MCU -msize -minit-stack=N -mno-interrupts -mcall-prologues -mno-tablejump -mtiny-stack _MCore Options_ ! -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates ! -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields ! -m4byte-functions -mno-4byte-functions -mcallgraph-data ! -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment _MMIX Options_ ! -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu ! -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols ! -melf -mbranch-predict -mno-branch-predict -mbase-addresses -mno-base-addresses -msingle-exit -mno-single-exit _IA-64 Options_ ! -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic ! -mvolatile-asm-stop -mb-step -mregister-names -mno-sdata ! -mconstant-gp -mauto-pic -minline-float-divide-min-latency ! -minline-float-divide-max-throughput ! -minline-int-divide-min-latency ! -minline-int-divide-max-throughput -mno-dwarf2-asm -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 ! -msmall-exec -mno-small-exec -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug _CRIS Options_ ! -mcpu=CPU -march=CPU -mtune=CPU ! -mmax-stack-frame=N -melinux-stacksize=N ! -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects ! -mstack-align -mdata-align -mconst-align ! -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt ! -melf -maout -melinux -mlinux -sim -sim2 -mmul-bug-workaround -mno-mul-bug-workaround _PDP-11 Options_ ! -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 ! -mbcopy -mbcopy-builtin -mint32 -mno-int16 ! -mint16 -mno-int32 -mfloat32 -mno-float64 ! -mfloat64 -mno-float32 -mabshi -mno-abshi ! -mbranch-expensive -mbranch-cheap -msplit -mno-split -munix-asm -mdec-asm _Xstormy16 Options_ -msim _Xtensa Options_ ! -mbig-endian -mlittle-endian ! -mdensity -mno-density ! -mmac16 -mno-mac16 ! -mmul16 -mno-mul16 ! -mmul32 -mno-mul32 ! -mnsa -mno-nsa ! -mminmax -mno-minmax ! -msext -mno-sext ! -mbooleans -mno-booleans ! -mhard-float -msoft-float ! -mfused-madd -mno-fused-madd ! -mserialize-volatile -mno-serialize-volatile ! -mtext-section-literals -mno-text-section-literals ! -mtarget-align -mno-target-align -mlongcalls -mno-longcalls _FRV Options_ ! -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 ! -mhard-float -msoft-float -malloc-cc -mfixed-cc ! -mdword -mno-dword -mdouble -mno-double ! -mmedia -mno-media -mmuladd -mno-muladd -mlibrary-pic ! -macc-4 -macc-8 -mpack -mno-pack -mno-eflags ! -mcond-move -mno-cond-move -mscc -mno-scc ! -mcond-exec -mno-cond-exec -mvliw-branch -mno-vliw-branch ! -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec ! -mno-nested-cond-exec -mtomcat-stats -mcpu=CPU _Code Generation Options_ *Note Options for Code Generation Conventions: Code Gen Options. ! -fcall-saved-REG -fcall-used-REG ! -ffixed-REG -fexceptions ! -fnon-call-exceptions -funwind-tables ! -fasynchronous-unwind-tables ! -finhibit-size-directive -finstrument-functions ! -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 ! -fargument-alias -fargument-noalias ! -fargument-noalias-global -fleading-underscore ! -ftls-model=MODEL -ftrapv -fbounds-check *************** _Code Generation Options_ *** 905,914 ****  File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC ! Options Controlling the Kind of Output ! ====================================== ! Compilation can involve up to four stages: preprocessing, compilation proper, assembly and linking, always in that order. The first three stages apply to an individual source file, and end by producing an object file; linking combines all the object files (those newly --- 907,916 ----  File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC ! 3.2 Options Controlling the Kind of Output ! ========================================== ! Compilation can involve up to four stages: preprocessing, compilation proper, assembly and linking, always in that order. The first three stages apply to an individual source file, and end by producing an object file; linking combines all the object files (those newly *************** do nothing at all. *** 1098,1107 ****  File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC ! Compiling C++ Programs ! ====================== ! C++ source files conventionally use one of the suffixes `.C', `.cc', `.cpp', `.c++', `.cp', or `.cxx'; preprocessed C++ files use the suffix `.ii'. GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C --- 1100,1109 ----  File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC ! 3.3 Compiling C++ Programs ! ========================== ! C++ source files conventionally use one of the suffixes `.C', `.cc', `.cpp', `.c++', `.cp', or `.cxx'; preprocessed C++ files use the suffix `.ii'. GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C *************** meaningful only for C++ programs. *** 1127,1136 ****  File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC ! Options Controlling C Dialect ! ============================= ! The following options control the dialect of C (or languages derived from C, such as C++ and Objective-C) that the compiler accepts: `-ansi' --- 1129,1138 ----  File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC ! 3.4 Options Controlling C Dialect ! ================================= ! The following options control the dialect of C (or languages derived from C, such as C++ and Objective-C) that the compiler accepts: `-ansi' *************** from C, such as C++ and Objective-C) tha *** 1370,1382 ****  File: gcc.info, Node: C++ Dialect Options, Next: Objective-C Dialect Options, Prev: C Dialect Options, Up: Invoking GCC ! Options Controlling C++ Dialect ! =============================== ! This section describes the command-line options that are only ! meaningful for C++ programs; but you can also use most of the GNU ! compiler options regardless of what language your program is in. For ! example, you might compile a file `firstClass.C' like this: g++ -g -frepo -O -c firstClass.C --- 1372,1384 ----  File: gcc.info, Node: C++ Dialect Options, Next: Objective-C Dialect Options, Prev: C Dialect Options, Up: Invoking GCC ! 3.5 Options Controlling C++ Dialect ! =================================== ! This section describes the command-line options that are only meaningful ! for C++ programs; but you can also use most of the GNU compiler options ! regardless of what language your program is in. For example, you might ! compile a file `firstClass.C' like this: g++ -g -frepo -O -c firstClass.C *************** have meanings only for C++ programs: *** 1646,1657 **** example: struct A {}; ! struct B { A a; virtual void f (); }; ! struct C : public B, public A {}; G++ will place the `A' base class of `C' at a nonzero offset; --- 1648,1659 ---- example: struct A {}; ! struct B { A a; virtual void f (); }; ! struct C : public B, public A {}; G++ will place the `A' base class of `C' at a nonzero offset; *************** have meanings only for C++ programs: *** 1663,1669 **** template void f(typename Q::X) {} ! template