diff -Nrcpad gcc-3.3.5/boehm-gc/ChangeLog gcc-3.3.6/boehm-gc/ChangeLog *** gcc-3.3.5/boehm-gc/ChangeLog 2004-09-30 16:47:55.000000000 +0000 --- gcc-3.3.6/boehm-gc/ChangeLog 2005-05-03 10:55:55.000000000 +0000 *************** *** 1,3 **** --- 1,18 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + + 2005-04-17 David S. Miller + + * include/private/gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM. + * os_dep.c (GC_linux_stack_base): Check for bug present in some + Sparc glibc variants where __libc_stack_end is erroneously set + to "1". Fallback to procfs code in that case. + + 2005-04-11 Richard Henderson + + * include/private/gcconfig.h (alpha-linux): Use LINUX_STACKBOTTOM. + 2004-09-30 Release Manager * GCC 3.3.5 Released. diff -Nrcpad gcc-3.3.5/boehm-gc/include/private/gcconfig.h gcc-3.3.6/boehm-gc/include/private/gcconfig.h *** gcc-3.3.5/boehm-gc/include/private/gcconfig.h 2004-04-07 23:06:50.000000000 +0000 --- gcc-3.3.6/boehm-gc/include/private/gcconfig.h 2005-04-18 22:25:05.000000000 +0000 *************** *** 821,832 **** # define SVR4 # ifdef __arch64__ /* libc_stack_end is not set reliably for sparc64 */ - # define STACKBOTTOM ((ptr_t) 0x80000000000) # define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext) # else - # define LINUX_STACKBOTTOM # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) # endif # endif # ifdef OPENBSD # define OS_TYPE "OPENBSD" --- 821,831 ---- # define SVR4 # ifdef __arch64__ /* libc_stack_end is not set reliably for sparc64 */ # define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext) # else # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) # endif + # define LINUX_STACKBOTTOM # endif # ifdef OPENBSD # define OS_TYPE "OPENBSD" *************** *** 1387,1393 **** # ifdef LINUX # define OS_TYPE "LINUX" # define CPP_WORDSZ 64 ! # define STACKBOTTOM ((ptr_t) 0x120000000) # ifdef __ELF__ # define SEARCH_FOR_DATA_START # define DATASTART GC_data_start --- 1386,1392 ---- # ifdef LINUX # define OS_TYPE "LINUX" # define CPP_WORDSZ 64 ! # define LINUX_STACKBOTTOM # ifdef __ELF__ # define SEARCH_FOR_DATA_START # define DATASTART GC_data_start diff -Nrcpad gcc-3.3.5/boehm-gc/os_dep.c gcc-3.3.6/boehm-gc/os_dep.c *** gcc-3.3.5/boehm-gc/os_dep.c 2002-07-19 08:54:43.000000000 +0000 --- gcc-3.3.6/boehm-gc/os_dep.c 2005-04-18 22:25:05.000000000 +0000 *************** ptr_t GC_get_stack_base() *** 710,716 **** --- 710,725 ---- /* First try the easy way. This should work for glibc 2.2 */ if (0 != &__libc_stack_end) { + # ifdef SPARC + /* Older versions of glibc for 64-bit Sparc do not set + * this variable correctly, it gets set to either zero + * or one. + */ + if (__libc_stack_end != (ptr_t) (unsigned long)0x1) + return __libc_stack_end; + # else return __libc_stack_end; + # endif } f = open("/proc/self/stat", O_RDONLY); if (f < 0 || STAT_READ(f, stat_buf, STAT_BUF_SIZE) < 2 * STAT_SKIP) { 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/fastjar/ChangeLog gcc-3.3.6/fastjar/ChangeLog *** gcc-3.3.5/fastjar/ChangeLog 2004-09-30 16:47:08.000000000 +0000 --- gcc-3.3.6/fastjar/ChangeLog 2005-05-03 10:55:12.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/fastjar/fastjar.info gcc-3.3.6/fastjar/fastjar.info *** gcc-3.3.5/fastjar/fastjar.info 2004-09-30 17:50:06.000000000 +0000 --- gcc-3.3.6/fastjar/fastjar.info 2005-05-03 12:56:26.000000000 +0000 *************** *** 1,4 **** ! This is fastjar.info, produced by makeinfo version 4.5 from fastjar.texi. INFO-DIR-SECTION Programming --- 1,4 ---- ! This is fastjar.info, produced by makeinfo version 4.7 from fastjar.texi. INFO-DIR-SECTION Programming *************** File: fastjar.info, Node: Top, Next: I *** 28,34 **** Introduction ************ ! This manual describes how to use `jar' and `grepjar'. * Menu: --- 28,34 ---- Introduction ************ ! This manual describes how to use `jar' and `grepjar'. * Menu: *************** Introduction *** 39,49 ****  File: fastjar.info, Node: Invoking jar, Next: Invoking grepjar, Prev: Top, Up: Top ! Invoking jar ! ************ ! `fastjar' is an implementation of Sun's jar utility that comes with ! the JDK, written entirely in C, and runs in a fraction of the time while being feature compatible. If any file is a directory then it is processed recursively. The --- 39,49 ----  File: fastjar.info, Node: Invoking jar, Next: Invoking grepjar, Prev: Top, Up: Top ! 1 Invoking jar ! ************** ! `fastjar' is an implementation of Sun's jar utility that comes with the ! JDK, written entirely in C, and runs in a fraction of the time while being feature compatible. If any file is a directory then it is processed recursively. The *************** the same order the `-m' and `-f' flags a *** 107,117 ****  File: fastjar.info, Node: Invoking grepjar, Next: Copying, Prev: Invoking jar, Up: Top ! Invoking grepjar ! **************** ! The `grepjar' program can be used to search files in a jar file for ! a pattern. `-b' Print byte offset of match. --- 107,117 ----  File: fastjar.info, Node: Invoking grepjar, Next: Copying, Prev: Invoking jar, Up: Top ! 2 Invoking grepjar ! ****************** ! The `grepjar' program can be used to search files in a jar file for a ! pattern. `-b' Print byte offset of match. *************** GNU GENERAL PUBLIC LICENSE *** 148,165 **** ************************** Version 2, June 1991 Copyright (C) 1989, 1991 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. Preamble ======== ! The licenses for most software are designed to take away your ! freedom to share and change it. By contrast, the GNU General Public ! License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to --- 148,166 ---- ************************** Version 2, June 1991 + Copyright (C) 1989, 1991 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. Preamble ======== ! The licenses for most software are designed to take away your freedom ! to share and change it. By contrast, the GNU General Public License is ! intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to *************** modification follow. *** 412,418 **** and reuse of software generally. NO WARRANTY - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT --- 413,418 ---- *************** modification follow. *** 436,446 **** ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - How to Apply These Terms to Your New Programs ============================================= ! If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. --- 436,445 ---- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs ============================================= ! If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. *************** the "copyright" line and a pointer to wh *** 452,468 **** ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR ! This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ! You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --- 451,467 ---- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR ! This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ! You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *************** if necessary. Here is a sample; alter t *** 491,497 **** Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. ! SIGNATURE OF TY COON, 1 April 1989 Ty Coon, President of Vice --- 490,496 ---- Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. ! SIGNATURE OF TY COON, 1 April 1989 Ty Coon, President of Vice *************** GNU Library General Public License inste *** 505,512 ****  Tag Table: Node: Top822 ! Node: Invoking jar1127 ! Node: Invoking grepjar2910 ! Node: Copying3516  End Tag Table --- 504,511 ----  Tag Table: Node: Top822 ! Node: Invoking jar1124 ! Node: Invoking grepjar2908 ! Node: Copying3515  End Tag Table diff -Nrcpad gcc-3.3.5/fastjar/grepjar.1 gcc-3.3.6/fastjar/grepjar.1 *** gcc-3.3.5/fastjar/grepjar.1 2004-09-30 17:50:08.000000000 +0000 --- gcc-3.3.6/fastjar/grepjar.1 2005-05-03 12:56:32.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 "GREPJAR 1" ! .TH GREPJAR 1 "2004-09-30" "gcc-3.3.5" "GNU" .SH "NAME" grepjar \- search files in a jar file for a pattern .SH "SYNOPSIS" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GREPJAR 1" ! .TH GREPJAR 1 "2005-05-03" "gcc-3.3.6" "GNU" .SH "NAME" grepjar \- search files in a jar file for a pattern .SH "SYNOPSIS" diff -Nrcpad gcc-3.3.5/fastjar/jar.1 gcc-3.3.6/fastjar/jar.1 *** gcc-3.3.5/fastjar/jar.1 2004-09-30 17:50:08.000000000 +0000 --- gcc-3.3.6/fastjar/jar.1 2005-05-03 12:56:32.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 "FASTJAR 1" ! .TH FASTJAR 1 "2004-09-30" "gcc-3.3.5" "GNU" .SH "NAME" jar \- archive tool for Java archives .SH "SYNOPSIS" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "FASTJAR 1" ! .TH FASTJAR 1 "2005-05-03" "gcc-3.3.6" "GNU" .SH "NAME" jar \- archive tool for Java archives .SH "SYNOPSIS" 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/ada/ChangeLog gcc-3.3.6/gcc/ada/ChangeLog *** gcc-3.3.5/gcc/ada/ChangeLog 2004-09-30 16:44:13.000000000 +0000 --- gcc-3.3.6/gcc/ada/ChangeLog 2005-05-03 10:50:30.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/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/cp/call.c gcc-3.3.6/gcc/cp/call.c *** gcc-3.3.5/gcc/cp/call.c 2004-07-28 02:17:21.000000000 +0000 --- gcc-3.3.6/gcc/cp/call.c 2005-04-04 07:42:15.000000000 +0000 *************** build_new_op (code, flags, arg1, arg2, a *** 3762,3789 **** } if (TREE_CODE (cand->fn) == FUNCTION_DECL) ! { ! extern int warn_synth; ! if (warn_synth ! && fnname == ansi_assopname (NOP_EXPR) ! && DECL_ARTIFICIAL (cand->fn) ! && candidates->next ! && ! candidates->next->next) ! { ! warning ("using synthesized `%#D' for copy assignment", ! cand->fn); ! cp_warning_at (" where cfront would use `%#D'", ! cand == candidates ! ? candidates->next->fn ! : candidates->fn); ! } ! ! return build_over_call ! (cand, ! TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ! ? mem_arglist : arglist, ! LOOKUP_NORMAL); ! } /* Check for comparison of different enum types. */ switch (code) --- 3762,3772 ---- } if (TREE_CODE (cand->fn) == FUNCTION_DECL) ! return build_over_call ! (cand, ! TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ! ? mem_arglist : arglist, ! LOOKUP_NORMAL); /* Check for comparison of different enum types. */ switch (code) diff -Nrcpad gcc-3.3.5/gcc/cp/ChangeLog gcc-3.3.6/gcc/cp/ChangeLog *** gcc-3.3.5/gcc/cp/ChangeLog 2004-09-30 16:44:00.000000000 +0000 --- gcc-3.3.6/gcc/cp/ChangeLog 2005-05-03 10:49:52.000000000 +0000 *************** *** 1,3 **** --- 1,34 ---- + 2005-05-03 Release Manager + + * GCC 3.3.6 Released. + + 2005-04-04 Gabriel Dos Reis + + PR c++/18644 + * call.c (build_new_op): Remove check for warn_synth. + + 2004-12-18 Volker Reichelt + + PR c++/17456 + * cvt.c (convert_to_void): Set expr to void_zero_node after + overload failure. + + 2004-12-15 Volker Reichelt + + PR c++/16806 + * error.c (dump_expr) [BASELINK]: Use dump_expr. + + 2004-12-10 Volker Reichelt + + PR c++/17868 + * error.c (dump_expr): Add missing case for RDIV_EXPR. + + 2004-12-09 Nathan Sidwell + + PR c++/16681 + * init.c (build_zero_init): Build a RANGE_EXPR for an array + initializer. + 2004-09-30 Release Manager * GCC 3.3.5 Released. diff -Nrcpad gcc-3.3.5/gcc/cp/cvt.c gcc-3.3.6/gcc/cp/cvt.c *** gcc-3.3.5/gcc/cp/cvt.c 2004-02-23 12:50:50.000000000 +0000 --- gcc-3.3.6/gcc/cp/cvt.c 2004-12-18 20:26:10.000000000 +0000 *************** convert_to_void (expr, implicit) *** 903,908 **** --- 903,909 ---- of an overloaded function, and this is not one of them. */ pedwarn ("%s cannot resolve address of overloaded function", implicit ? implicit : "void cast"); + expr = void_zero_node; } else if (implicit && probe == expr && is_overloaded_fn (probe)) /* Only warn when there is no &. */ diff -Nrcpad gcc-3.3.5/gcc/cp/error.c gcc-3.3.6/gcc/cp/error.c *** gcc-3.3.5/gcc/cp/error.c 2004-07-24 13:03:23.000000000 +0000 --- gcc-3.3.6/gcc/cp/error.c 2004-12-15 16:45:23.000000000 +0000 *************** dump_expr (t, flags) *** 1724,1729 **** --- 1724,1730 ---- case CEIL_DIV_EXPR: case FLOOR_DIV_EXPR: case ROUND_DIV_EXPR: + case RDIV_EXPR: dump_binary_op ("/", t, flags); break; *************** dump_expr (t, flags) *** 2070,2076 **** break; case BASELINK: ! print_tree_identifier (scratch_buffer, DECL_NAME (get_first_fn (t))); break; case TREE_LIST: --- 2071,2077 ---- break; case BASELINK: ! dump_expr (get_first_fn (t), flags & ~TFF_EXPR_IN_PARENS); break; case TREE_LIST: diff -Nrcpad gcc-3.3.5/gcc/cp/init.c gcc-3.3.6/gcc/cp/init.c *** gcc-3.3.5/gcc/cp/init.c 2004-07-28 02:17:28.000000000 +0000 --- gcc-3.3.6/gcc/cp/init.c 2004-12-09 15:09:19.000000000 +0000 *************** build_zero_init (tree type, tree nelts, *** 235,241 **** } else if (TREE_CODE (type) == ARRAY_TYPE) { - tree index; tree max_index; tree inits; --- 235,240 ---- *************** build_zero_init (tree type, tree nelts, *** 249,263 **** /* A zero-sized array, which is accepted as an extension, will have an upper bound of -1. */ if (!tree_int_cst_equal (max_index, integer_minus_one_node)) ! for (index = size_zero_node; ! !tree_int_cst_lt (max_index, index); ! index = size_binop (PLUS_EXPR, index, size_one_node)) ! inits = tree_cons (index, ! build_zero_init (TREE_TYPE (type), ! /*nelts=*/NULL_TREE, ! static_storage_p), ! inits); ! CONSTRUCTOR_ELTS (init) = nreverse (inits); } else if (TREE_CODE (type) == REFERENCE_TYPE) ; --- 248,264 ---- /* A zero-sized array, which is accepted as an extension, will have an upper bound of -1. */ if (!tree_int_cst_equal (max_index, integer_minus_one_node)) ! { ! tree elt_init = build_zero_init (TREE_TYPE (type), ! /*nelts=*/NULL_TREE, ! static_storage_p); ! tree range = build (RANGE_EXPR, ! sizetype, size_zero_node, max_index); ! ! inits = tree_cons (range, elt_init, inits); ! } ! ! CONSTRUCTOR_ELTS (init) = nreverse (inits); } else if (TREE_CODE (type) == REFERENCE_TYPE) ; diff -Nrcpad gcc-3.3.5/gcc/cp/parse.c gcc-3.3.6/gcc/cp/parse.c *** gcc-3.3.5/gcc/cp/parse.c 2004-09-30 17:42:36.000000000 +0000 --- gcc-3.3.6/gcc/cp/parse.c 2005-05-03 12:47:06.000000000 +0000 *************** *** 1,4 **** ! /* A Bison parser, made from 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 *************** *** 231,237 **** /* Copy the first part of user declarations. */ ! #line 8 "parse.y" #include "config.h" --- 234,240 ---- /* Copy the first part of user declarations. */ ! #line 30 "parse.y" #include "config.h" *************** check_class_key (key, aggr) *** 484,527 **** # define YYERROR_VERBOSE 0 #endif ! #ifndef YYSTYPE ! #line 249 "parse.y" ! typedef union { GTY(()) long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; struct unparsed_text *pi; ! } yystype; ! /* Line 193 of /usr/share/bison/yacc.c. */ ! #line 499 "p13706.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 444 "parse.y" /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) extern void yyprint PARAMS ((FILE *, int, YYSTYPE)); ! /* Line 213 of /usr/share/bison/yacc.c. */ ! #line 525 "p13706.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE --- 487,521 ---- # define YYERROR_VERBOSE 0 #endif ! #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 271 "parse.y" ! typedef union YYSTYPE { GTY(()) long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; struct unparsed_text *pi; ! } YYSTYPE; ! /* Line 191 of yacc.c. */ ! #line 501 "p19357.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 478 "parse.y" /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) extern void yyprint PARAMS ((FILE *, int, YYSTYPE)); ! /* Line 214 of yacc.c. */ ! #line 518 "p19357.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE *************** extern void yyprint PARAMS ((FILE *, i *** 557,563 **** #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ ! || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc --- 551,557 ---- #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ ! || (YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc *************** union yyalloc *** 567,579 **** }; /* 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. */ --- 561,573 ---- }; /* 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 *** 587,593 **** { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif --- 581,587 ---- { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif *************** union yyalloc *** 604,610 **** YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) --- 598,604 ---- 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 *** 619,624 **** --- 613,619 ---- /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 + /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 13318 /* YYNTOKENS -- Number of terminals. */ *************** union yyalloc *** 634,641 **** #define YYUNDEFTOK 2 #define YYMAXUTOK 344 ! #define YYTRANSLATE(X) \ ! ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = --- 629,636 ---- #define YYUNDEFTOK 2 #define YYMAXUTOK 344 ! #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[] = *** 1094,1193 **** /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { ! 0, 451, 451, 454, 461, 460, 464, 468, 470, 473, ! 477, 481, 487, 492, 491, 499, 502, 506, 505, 509, ! 511, 513, 515, 517, 520, 519, 524, 523, 527, 528, ! 530, 531, 537, 535, 547, 550, 552, 556, 559, 561, ! 567, 565, 580, 587, 596, 598, 599, 601, 605, 608, ! 616, 614, 621, 627, 629, 632, 635, 639, 642, 646, ! 649, 653, 658, 662, 664, 666, 668, 670, 677, 680, ! 684, 687, 689, 691, 694, 697, 701, 703, 705, 707, ! 717, 719, 721, 723, 725, 726, 733, 734, 735, 737, ! 738, 741, 743, 746, 748, 749, 752, 754, 760, 758, ! 769, 772, 774, 780, 778, 783, 788, 787, 791, 796, ! 795, 799, 804, 803, 807, 813, 818, 821, 824, 827, ! 834, 837, 840, 842, 844, 846, 851, 860, 863, 865, ! 867, 870, 872, 877, 884, 887, 889, 894, 893, 902, ! 909, 915, 920, 931, 934, 942, 945, 948, 953, 957, ! 960, 965, 967, 968, 969, 970, 973, 975, 976, 979, ! 981, 982, 987, 985, 991, 990, 995, 994, 998, 997, ! 1001, 1000, 1007, 1005, 1012, 1011, 1016, 1015, 1021, 1025, ! 1031, 1035, 1038, 1041, 1043, 1048, 1054, 1064, 1066, 1074, ! 1077, 1080, 1083, 1088, 1087, 1096, 1099, 1105, 1111, 1112, ! 1124, 1127, 1129, 1131, 1133, 1137, 1140, 1143, 1148, 1152, ! 1157, 1161, 1164, 1165, 1171, 1169, 1192, 1195, 1197, 1198, ! 1199, 1202, 1206, 1209, 1211, 1215, 1218, 1221, 1225, 1228, ! 1230, 1232, 1234, 1237, 1239, 1242, 1246, 1249, 1255, 1258, ! 1261, 1264, 1267, 1272, 1275, 1278, 1282, 1284, 1288, 1292, ! 1294, 1298, 1301, 1306, 1309, 1311, 1316, 1326, 1331, 1337, ! 1339, 1341, 1354, 1357, 1359, 1361, 1363, 1365, 1367, 1369, ! 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, ! 1391, 1393, 1395, 1397, 1401, 1403, 1405, 1409, 1412, 1414, ! 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, ! 1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1454, 1456, ! 1458, 1462, 1465, 1467, 1468, 1469, 1470, 1471, 1474, 1487, ! 1495, 1504, 1507, 1509, 1514, 1516, 1517, 1520, 1522, 1530, ! 1532, 1534, 1536, 1540, 1543, 1547, 1550, 1551, 1552, 1556, ! 1564, 1565, 1566, 1576, 1578, 1580, 1583, 1586, 1585, 1598, ! 1600, 1602, 1604, 1606, 1609, 1611, 1613, 1616, 1618, 1629, ! 1630, 1634, 1638, 1642, 1646, 1648, 1652, 1654, 1656, 1664, ! 1673, 1675, 1677, 1679, 1681, 1683, 1685, 1687, 1689, 1691, ! 1693, 1696, 1698, 1700, 1708, 1711, 1715, 1718, 1722, 1725, ! 1729, 1737, 1740, 1747, 1753, 1757, 1759, 1764, 1766, 1772, ! 1774, 1778, 1782, 1788, 1792, 1795, 1799, 1802, 1809, 1812, ! 1816, 1820, 1823, 1826, 1829, 1832, 1838, 1844, 1846, 1857, ! 1860, 1865, 1870, 1878, 1884, 1888, 1891, 1894, 1899, 1902, ! 1904, 1906, 1910, 1914, 1918, 1924, 1927, 1929, 1931, 1935, ! 1939, 1954, 1973, 1976, 1978, 1981, 1983, 1987, 1989, 1993, ! 1995, 1999, 2002, 2008, 2006, 2012, 2022, 2020, 2027, 2033, ! 2038, 2045, 2043, 2052, 2058, 2061, 2065, 2068, 2072, 2077, ! 2080, 2084, 2087, 2089, 2091, 2093, 2099, 2101, 2102, 2103, ! 2107, 2110, 2114, 2117, 2123, 2125, 2128, 2131, 2134, 2139, ! 2142, 2145, 2147, 2149, 2153, 2159, 2164, 2170, 2172, 2176, ! 2179, 2183, 2185, 2187, 2193, 2191, 2202, 2201, 2210, 2213, ! 2216, 2223, 2248, 2266, 2222, 2275, 2283, 2285, 2288, 2290, ! 2295, 2297, 2299, 2301, 2303, 2305, 2309, 2315, 2320, 2325, ! 2332, 2338, 2343, 2350, 2358, 2364, 2371, 2381, 2389, 2395, ! 2401, 2409, 2417, 2430, 2433, 2436, 2440, 2442, 2446, 2449, ! 2453, 2457, 2461, 2463, 2467, 2478, 2492, 2493, 2494, 2495, ! 2498, 2506, 2513, 2521, 2523, 2528, 2530, 2532, 2534, 2536, ! 2538, 2541, 2551, 2556, 2560, 2583, 2589, 2591, 2593, 2595, ! 2599, 2604, 2606, 2612, 2615, 2622, 2632, 2635, 2642, 2652, ! 2654, 2657, 2659, 2662, 2666, 2671, 2675, 2678, 2681, 2686, ! 2689, 2693, 2696, 2698, 2702, 2704, 2709, 2711, 2714, 2717, ! 2722, 2726, 2730, 2740, 2743, 2747, 2751, 2754, 2757, 2765, ! 2768, 2770, 2772, 2778, 2780, 2789, 2792, 2794, 2796, 2798, ! 2802, 2805, 2808, 2810, 2812, 2814, 2818, 2821, 2832, 2842, ! 2844, 2845, 2849, 2856, 2858, 2866, 2869, 2871, 2873, 2875, ! 2879, 2882, 2885, 2887, 2889, 2891, 2895, 2898, 2901, 2903, ! 2905, 2907, 2909, 2911, 2915, 2922, 2926, 2931, 2935, 2940, ! 2942, 2946, 2949, 2951, 2955, 2957, 2958, 2961, 2963, 2965, ! 2969, 2972, 2978, 2989, 2995, 3001, 3005, 3007, 3011, 3025, ! 3027, 3029, 3033, 3041, 3054, 3057, 3063, 3076, 3082, 3084, ! 3085, 3086, 3094, 3099, 3108, 3109, 3113, 3116, 3121, 3127, ! 3130, 3132, 3134, 3136, 3140, 3144, 3148, 3151, 3155, 3157, ! 3166, 3169, 3171, 3173, 3175, 3177, 3179, 3181, 3183, 3187, ! 3191, 3195, 3199, 3201, 3203, 3205, 3207, 3209, 3211, 3213, ! 3215, 3221, 3223, 3224, 3225, 3228, 3233, 3235, 3240, 3242, ! 3245, 3258, 3256, 3264, 3271, 3274, 3269, 3280, 3283, 3282, ! 3290, 3292, 3296, 3300, 3303, 3302, 3310, 3314, 3319, 3313, ! 3324, 3326, 3323, 3334, 3336, 3338, 3340, 3333, 3345, 3347, ! 3344, 3352, 3351, 3356, 3355, 3360, 3359, 3363, 3365, 3367, ! 3369, 3371, 3376, 3379, 3382, 3385, 3388, 3391, 3394, 3400, ! 3402, 3404, 3408, 3411, 3413, 3415, 3418, 3424, 3426, 3422, ! 3433, 3435, 3431, 3440, 3442, 3443, 3456, 3458, 3454, 3463, ! 3465, 3468, 3472, 3480, 3483, 3485, 3487, 3491, 3494, 3495, ! 3503, 3506, 3509, 3512, 3513, 3518, 3521, 3524, 3526, 3530, ! 3533, 3539, 3542, 3548, 3553, 3554, 3560, 3563, 3566, 3568, ! 3571, 3573, 3583, 3599, 3597, 3604, 3606, 3610, 3614, 3617, ! 3620, 3622, 3626, 3628, 3634, 3639, 3642, 3646, 3649, 3652, ! 3657, 3661, 3666, 3668, 3671, 3676, 3682, 3698, 3706, 3709, ! 3712, 3715, 3718, 3721, 3723, 3727, 3733, 3737, 3740, 3744, ! 3747, 3749, 3751, 3757, 3770, 3779, 3782, 3784, 3786, 3788, ! 3790, 3792, 3794, 3796, 3798, 3800, 3802, 3804, 3806, 3808, ! 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824, 3826, 3828, ! 3830, 3832, 3834, 3836, 3838, 3840, 3842, 3844, 3846, 3848, ! 3853 }; #endif --- 1089,1188 ---- /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { ! 0, 487, 487, 488, 497, 497, 500, 505, 506, 510, ! 514, 518, 524, 528, 528, 536, 538, 542, 541, 545, ! 547, 549, 551, 553, 556, 555, 560, 559, 563, 564, ! 566, 567, 573, 572, 584, 586, 588, 593, 595, 597, ! 603, 602, 617, 623, 633, 634, 635, 637, 642, 644, ! 652, 651, 658, 664, 665, 669, 671, 676, 679, 683, ! 685, 690, 702, 704, 706, 708, 710, 712, 720, 722, ! 727, 729, 731, 733, 736, 739, 744, 745, 747, 749, ! 760, 761, 763, 765, 767, 768, 775, 776, 777, 779, ! 780, 784, 785, 788, 790, 791, 794, 796, 804, 803, ! 814, 816, 818, 824, 823, 827, 832, 831, 835, 840, ! 839, 843, 848, 847, 851, 858, 862, 865, 868, 871, ! 880, 882, 885, 887, 889, 891, 898, 906, 909, 911, ! 913, 916, 918, 924, 931, 933, 935, 940, 940, 950, ! 957, 961, 966, 977, 982, 988, 991, 994, 1000, 1003, ! 1006, 1012, 1013, 1014, 1015, 1016, 1020, 1021, 1022, 1026, ! 1027, 1028, 1033, 1032, 1037, 1036, 1041, 1040, 1044, 1043, ! 1047, 1046, 1053, 1051, 1058, 1057, 1062, 1061, 1068, 1072, ! 1080, 1083, 1086, 1090, 1091, 1097, 1103, 1113, 1114, 1124, ! 1125, 1129, 1131, 1136, 1136, 1145, 1147, 1153, 1159, 1160, ! 1173, 1175, 1177, 1179, 1181, 1186, 1188, 1192, 1196, 1201, ! 1205, 1211, 1212, 1213, 1219, 1218, 1240, 1244, 1245, 1246, ! 1247, 1251, 1254, 1257, 1259, 1264, 1266, 1270, 1273, 1276, ! 1278, 1280, 1282, 1285, 1287, 1290, 1294, 1297, 1304, 1307, ! 1310, 1313, 1316, 1321, 1324, 1327, 1331, 1333, 1337, 1341, ! 1343, 1348, 1350, 1356, 1358, 1360, 1365, 1376, 1380, 1387, ! 1388, 1390, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, ! 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1438, ! 1440, 1442, 1444, 1446, 1450, 1452, 1454, 1459, 1461, 1463, ! 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, ! 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1503, 1505, ! 1507, 1512, 1514, 1516, 1517, 1518, 1519, 1520, 1524, 1537, ! 1544, 1554, 1556, 1558, 1564, 1565, 1566, 1570, 1571, 1580, ! 1581, 1583, 1585, 1590, 1592, 1597, 1600, 1601, 1602, 1607, ! 1614, 1615, 1616, 1626, 1628, 1630, 1633, 1636, 1635, 1650, ! 1652, 1654, 1656, 1658, 1661, 1663, 1665, 1668, 1670, 1681, ! 1682, 1686, 1690, 1694, 1698, 1700, 1704, 1706, 1708, 1716, ! 1725, 1727, 1729, 1731, 1733, 1735, 1737, 1739, 1741, 1743, ! 1745, 1748, 1750, 1752, 1797, 1799, 1804, 1806, 1811, 1813, ! 1819, 1826, 1828, 1836, 1841, 1845, 1847, 1852, 1854, 1862, ! 1863, 1868, 1871, 1878, 1881, 1884, 1888, 1891, 1902, 1904, ! 1909, 1912, 1915, 1918, 1921, 1924, 1931, 1936, 1938, 1960, ! 1962, 1967, 1972, 1980, 1991, 1994, 1997, 2000, 2006, 2008, ! 2010, 2012, 2017, 2021, 2025, 2033, 2035, 2037, 2039, 2043, ! 2047, 2062, 2082, 2084, 2086, 2090, 2091, 2096, 2097, 2102, ! 2103, 2109, 2110, 2116, 2115, 2120, 2135, 2134, 2141, 2148, ! 2153, 2159, 2158, 2166, 2175, 2176, 2181, 2183, 2188, 2193, ! 2195, 2201, 2202, 2204, 2206, 2208, 2216, 2217, 2218, 2219, ! 2224, 2226, 2231, 2233, 2241, 2242, 2245, 2248, 2251, 2258, ! 2260, 2263, 2265, 2267, 2272, 2277, 2282, 2288, 2290, 2296, ! 2298, 2303, 2304, 2306, 2312, 2311, 2321, 2320, 2329, 2332, ! 2335, 2342, 2367, 2385, 2341, 2394, 2402, 2404, 2407, 2409, ! 2415, 2416, 2418, 2420, 2422, 2424, 2429, 2434, 2439, 2444, ! 2452, 2457, 2462, 2470, 2477, 2483, 2491, 2500, 2508, 2514, ! 2520, 2528, 2536, 2551, 2552, 2555, 2560, 2561, 2566, 2568, ! 2573, 2576, 2581, 2582, 2586, 2597, 2611, 2612, 2613, 2614, ! 2618, 2627, 2633, 2642, 2643, 2648, 2650, 2652, 2654, 2656, ! 2658, 2661, 2671, 2676, 2684, 2705, 2711, 2713, 2715, 2717, ! 2728, 2733, 2735, 2743, 2744, 2751, 2763, 2764, 2771, 2782, ! 2783, 2787, 2788, 2792, 2795, 2801, 2804, 2807, 2810, 2816, ! 2818, 2823, 2825, 2827, 2832, 2833, 2841, 2842, 2846, 2848, ! 2854, 2857, 2862, 2873, 2875, 2880, 2883, 2886, 2889, 2899, ! 2901, 2903, 2905, 2912, 2913, 2923, 2925, 2927, 2929, 2931, ! 2935, 2939, 2941, 2943, 2945, 2947, 2951, 2955, 2965, 2976, ! 2977, 2978, 2983, 2991, 2992, 3001, 3003, 3005, 3007, 3009, ! 3013, 3017, 3019, 3021, 3023, 3025, 3029, 3033, 3035, 3037, ! 3039, 3041, 3043, 3045, 3049, 3057, 3060, 3066, 3069, 3075, ! 3076, 3081, 3083, 3085, 3090, 3091, 3092, 3096, 3097, 3099, ! 3103, 3106, 3114, 3124, 3130, 3136, 3141, 3142, 3147, 3160, ! 3162, 3164, 3169, 3176, 3189, 3192, 3200, 3212, 3218, 3220, ! 3221, 3222, 3231, 3236, 3244, 3245, 3250, 3252, 3259, 3265, ! 3267, 3269, 3271, 3273, 3277, 3281, 3286, 3288, 3293, 3294, ! 3304, 3306, 3308, 3310, 3312, 3314, 3316, 3318, 3320, 3324, ! 3328, 3333, 3336, 3338, 3340, 3342, 3344, 3346, 3348, 3350, ! 3352, 3361, 3362, 3363, 3364, 3368, 3373, 3375, 3381, 3382, ! 3386, 3398, 3397, 3405, 3411, 3414, 3410, 3421, 3423, 3423, ! 3431, 3432, 3437, 3440, 3443, 3442, 3450, 3454, 3459, 3453, ! 3464, 3466, 3463, 3474, 3476, 3478, 3480, 3473, 3485, 3487, ! 3484, 3492, 3491, 3496, 3495, 3500, 3499, 3503, 3505, 3507, ! 3509, 3511, 3516, 3519, 3522, 3525, 3528, 3531, 3534, 3540, ! 3542, 3544, 3548, 3551, 3553, 3555, 3558, 3564, 3566, 3563, ! 3573, 3575, 3572, 3581, 3582, 3584, 3596, 3598, 3595, 3604, ! 3605, 3609, 3625, 3634, 3636, 3638, 3640, 3645, 3647, 3648, ! 3658, 3659, 3664, 3665, 3666, 3674, 3675, 3679, 3680, 3685, ! 3687, 3694, 3696, 3708, 3711, 3712, 3720, 3722, 3725, 3727, ! 3730, 3732, 3742, 3758, 3757, 3764, 3765, 3770, 3773, 3776, ! 3779, 3781, 3786, 3787, 3797, 3800, 3803, 3807, 3810, 3813, ! 3819, 3822, 3828, 3829, 3833, 3838, 3843, 3860, 3868, 3870, ! 3874, 3876, 3880, 3882, 3884, 3889, 3894, 3899, 3901, 3906, ! 3908, 3910, 3912, 3919, 3932, 3941, 3943, 3945, 3947, 3949, ! 3951, 3953, 3955, 3957, 3959, 3961, 3963, 3965, 3967, 3969, ! 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, 3989, ! 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, ! 4017 }; #endif *************** static const short yypgoto[] = *** 1964,1970 **** /* 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 -931 static const short yytable[] = { --- 1959,1965 ---- /* 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 -931 static const short yytable[] = { *************** static const unsigned short yystos[] = *** 4845,4851 **** #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) ! #define YYEMPTY -2 #define YYEOF 0 #define YYACCEPT goto yyacceptlab --- 4840,4846 ---- #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) ! #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab *************** do \ *** 4866,4878 **** { \ yychar = (Token); \ yylval = (Value); \ ! yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ ! yyerror ("syntax error: cannot back up"); \ YYERROR; \ } \ while (0) --- 4861,4873 ---- { \ yychar = (Token); \ yylval = (Value); \ ! yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ ! yyerror ("syntax error: cannot back up");\ YYERROR; \ } \ while (0) *************** while (0) *** 4884,4890 **** 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; \ --- 4879,4885 ---- 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) *** 4893,4899 **** /* YYLEX -- calling `yylex' with the right arguments. */ ! #define YYLEX yylex () /* Enable debugging if requested. */ #if YYDEBUG --- 4888,4898 ---- /* 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 { \ *** 4908,4926 **** --- 4907,4999 ---- 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) *** 4999,5093 **** #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. */ --- 5072,5156 ---- #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; *** 5096,5108 **** /* 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; --- 5159,5190 ---- /* 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) *** 5111,5117 **** /* 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, --- 5193,5199 ---- /* 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) *** 5175,5181 **** 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; --- 5257,5263 ---- 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) *** 5207,5216 **** goto yyoverflowlab; # else /* Extend the stack our own way. */ ! if (yystacksize >= YYMAXDEPTH) goto yyoverflowlab; yystacksize *= 2; ! if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; { --- 5289,5298 ---- 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) *** 5236,5242 **** YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); ! if (yyssp >= yyss + yystacksize - 1) YYABORT; } --- 5318,5324 ---- YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); ! if (yyss + yystacksize - 1 <= yyssp) YYABORT; } *************** yybackup: *** 5261,5299 **** /* 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) --- 5343,5370 ---- /* 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: *** 5308,5315 **** 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) --- 5379,5385 ---- 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: *** 5355,5560 **** 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 453 "parse.y" ! { finish_translation_unit (); } break; case 3: ! #line 455 "parse.y" ! { finish_translation_unit (); } break; case 4: ! #line 461 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 5: ! #line 463 "parse.y" ! { yyval.ttype = NULL_TREE; ggc_collect (); } break; case 6: ! #line 465 "parse.y" ! { yyval.ttype = NULL_TREE; ggc_collect (); } break; case 9: ! #line 474 "parse.y" { have_extern_spec = true; ! yyval.ttype = NULL_TREE; } break; case 10: ! #line 478 "parse.y" ! { have_extern_spec = false; } break; case 11: ! #line 483 "parse.y" { yyval.itype = pedantic; ! pedantic = 0; } break; case 13: ! #line 492 "parse.y" { if (pending_lang_change) do_pending_lang_change(); ! type_lookups = NULL_TREE; } break; case 14: ! #line 495 "parse.y" { if (! toplevel_bindings_p ()) ! pop_everything (); } break; case 15: ! #line 501 "parse.y" ! { do_pending_inlines (); } break; case 16: ! #line 503 "parse.y" ! { do_pending_inlines (); } break; case 17: ! #line 506 "parse.y" ! { warning ("keyword `export' not implemented, and will be ignored"); } break; case 18: ! #line 508 "parse.y" ! { do_pending_inlines (); } break; case 19: ! #line 510 "parse.y" ! { do_pending_inlines (); } break; case 20: ! #line 512 "parse.y" ! { assemble_asm (yyvsp[-2].ttype); } break; case 21: ! #line 514 "parse.y" ! { pop_lang_context (); } break; case 22: ! #line 516 "parse.y" ! { do_pending_inlines (); pop_lang_context (); } break; case 23: ! #line 518 "parse.y" ! { do_pending_inlines (); pop_lang_context (); } break; case 24: ! #line 520 "parse.y" ! { push_namespace (yyvsp[-1].ttype); } break; case 25: ! #line 522 "parse.y" ! { pop_namespace (); } break; case 26: ! #line 524 "parse.y" ! { push_namespace (NULL_TREE); } break; case 27: ! #line 526 "parse.y" ! { pop_namespace (); } break; case 29: ! #line 529 "parse.y" ! { do_toplevel_using_decl (yyvsp[-1].ttype); } break; case 31: ! #line 532 "parse.y" ! { pedantic = yyvsp[-1].itype; } break; case 32: ! #line 537 "parse.y" ! { begin_only_namespace_names (); } break; case 33: ! #line 539 "parse.y" { end_only_namespace_names (); if (lastiddecl) yyvsp[-1].ttype = lastiddecl; do_namespace_alias (yyvsp[-4].ttype, yyvsp[-1].ttype); ! } break; case 34: ! #line 549 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 35: ! #line 551 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 36: ! #line 553 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 37: ! #line 558 "parse.y" ! { yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 38: ! #line 560 "parse.y" ! { yyval.ttype = build_nt (SCOPE_REF, global_namespace, yyvsp[0].ttype); } break; case 39: ! #line 562 "parse.y" ! { yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 40: ! #line 567 "parse.y" ! { begin_only_namespace_names (); } break; case 41: ! #line 569 "parse.y" { end_only_namespace_names (); /* If no declaration was found, the using-directive is --- 5425,5614 ---- yyval = yyvsp[1-yylen]; ! YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: ! #line 487 "parse.y" ! { finish_translation_unit (); ;} break; case 3: ! #line 489 "parse.y" ! { finish_translation_unit (); ;} break; case 4: ! #line 497 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 5: ! #line 499 "parse.y" ! { yyval.ttype = NULL_TREE; ggc_collect (); ;} break; case 6: ! #line 501 "parse.y" ! { yyval.ttype = NULL_TREE; ggc_collect (); ;} break; case 9: ! #line 510 "parse.y" { have_extern_spec = true; ! yyval.ttype = NULL_TREE; ;} break; case 10: ! #line 514 "parse.y" ! { have_extern_spec = false; ;} break; case 11: ! #line 519 "parse.y" { yyval.itype = pedantic; ! pedantic = 0; ;} break; case 13: ! #line 528 "parse.y" { if (pending_lang_change) do_pending_lang_change(); ! type_lookups = NULL_TREE; ;} break; case 14: ! #line 531 "parse.y" { if (! toplevel_bindings_p ()) ! pop_everything (); ;} break; case 15: ! #line 537 "parse.y" ! { do_pending_inlines (); ;} break; case 16: ! #line 539 "parse.y" ! { do_pending_inlines (); ;} break; case 17: ! #line 542 "parse.y" ! { warning ("keyword `export' not implemented, and will be ignored"); ;} break; case 18: ! #line 544 "parse.y" ! { do_pending_inlines (); ;} break; case 19: ! #line 546 "parse.y" ! { do_pending_inlines (); ;} break; case 20: ! #line 548 "parse.y" ! { assemble_asm (yyvsp[-2].ttype); ;} break; case 21: ! #line 550 "parse.y" ! { pop_lang_context (); ;} break; case 22: ! #line 552 "parse.y" ! { do_pending_inlines (); pop_lang_context (); ;} break; case 23: ! #line 554 "parse.y" ! { do_pending_inlines (); pop_lang_context (); ;} break; case 24: ! #line 556 "parse.y" ! { push_namespace (yyvsp[-1].ttype); ;} break; case 25: ! #line 558 "parse.y" ! { pop_namespace (); ;} break; case 26: ! #line 560 "parse.y" ! { push_namespace (NULL_TREE); ;} break; case 27: ! #line 562 "parse.y" ! { pop_namespace (); ;} break; case 29: ! #line 565 "parse.y" ! { do_toplevel_using_decl (yyvsp[-1].ttype); ;} break; case 31: ! #line 568 "parse.y" ! { pedantic = yyvsp[-1].itype; ;} break; case 32: ! #line 573 "parse.y" ! { begin_only_namespace_names (); ;} break; case 33: ! #line 575 "parse.y" { end_only_namespace_names (); if (lastiddecl) yyvsp[-1].ttype = lastiddecl; do_namespace_alias (yyvsp[-4].ttype, yyvsp[-1].ttype); ! ;} break; case 34: ! #line 585 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 35: ! #line 587 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 36: ! #line 589 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 37: ! #line 594 "parse.y" ! { yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 38: ! #line 596 "parse.y" ! { yyval.ttype = build_nt (SCOPE_REF, global_namespace, yyvsp[0].ttype); ;} break; case 39: ! #line 598 "parse.y" ! { yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 40: ! #line 603 "parse.y" ! { begin_only_namespace_names (); ;} break; case 41: ! #line 605 "parse.y" { end_only_namespace_names (); /* If no declaration was found, the using-directive is *************** yyreduce: *** 5563,6052 **** if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE && lastiddecl) yyvsp[-1].ttype = lastiddecl; do_using_directive (yyvsp[-1].ttype); ! } break; case 42: ! #line 582 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! } break; case 43: ! #line 588 "parse.y" { yyval.ttype = yyvsp[-1].ttype; if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! } break; case 46: ! #line 600 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 47: ! #line 602 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 48: ! #line 607 "parse.y" ! { push_lang_context (yyvsp[0].ttype); } break; case 49: ! #line 609 "parse.y" { if (current_lang_name != yyvsp[0].ttype) error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name); ! pop_lang_context (); push_lang_context (yyvsp[0].ttype); } break; case 50: ! #line 616 "parse.y" ! { begin_template_parm_list (); } break; case 51: ! #line 618 "parse.y" ! { yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); } break; case 52: ! #line 623 "parse.y" { begin_specialization(); ! yyval.ttype = NULL_TREE; } break; case 55: ! #line 634 "parse.y" ! { yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); } break; case 56: ! #line 636 "parse.y" ! { yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 57: ! #line 641 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 58: ! #line 643 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 59: ! #line 648 "parse.y" ! { yyval.ttype = finish_template_type_parm (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 60: ! #line 650 "parse.y" ! { yyval.ttype = finish_template_type_parm (class_type_node, yyvsp[0].ttype); } break; case 61: ! #line 655 "parse.y" ! { yyval.ttype = finish_template_template_parm (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 62: ! #line 661 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); } break; case 63: ! #line 663 "parse.y" ! { yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); } break; case 64: ! #line 665 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); } break; case 65: ! #line 667 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); } break; case 66: ! #line 669 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); } break; case 67: ! #line 671 "parse.y" { yyvsp[0].ttype = check_template_template_default_arg (yyvsp[0].ttype); yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype); ! } break; case 68: ! #line 679 "parse.y" ! { finish_template_decl (yyvsp[-1].ttype); } break; case 69: ! #line 681 "parse.y" ! { finish_template_decl (yyvsp[-1].ttype); } break; case 70: ! #line 686 "parse.y" ! { do_pending_inlines (); } break; case 71: ! #line 688 "parse.y" ! { do_pending_inlines (); } break; case 72: ! #line 690 "parse.y" ! { do_pending_inlines (); } break; case 73: ! #line 692 "parse.y" { do_pending_inlines (); ! pop_lang_context (); } break; case 74: ! #line 695 "parse.y" { do_pending_inlines (); ! pop_lang_context (); } break; case 75: ! #line 698 "parse.y" ! { pedantic = yyvsp[-1].itype; } break; case 77: ! #line 704 "parse.y" ! {} break; case 78: ! #line 706 "parse.y" ! { note_list_got_semicolon (yyvsp[-2].ftype.t); } break; case 79: ! #line 708 "parse.y" { if (yyvsp[-1].ftype.t != error_mark_node) { maybe_process_partial_specialization (yyvsp[-1].ftype.t); note_got_semicolon (yyvsp[-1].ftype.t); } ! } break; case 81: ! #line 720 "parse.y" ! {} break; case 82: ! #line 722 "parse.y" ! { note_list_got_semicolon (yyvsp[-2].ftype.t); } break; case 83: ! #line 724 "parse.y" ! { pedwarn ("empty declaration"); } break; case 85: ! #line 727 "parse.y" { tree t, attrs; split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs); shadow_tag (t); note_list_got_semicolon (yyvsp[-1].ftype.t); ! } break; case 88: ! #line 736 "parse.y" ! { end_input (); } break; case 98: ! #line 760 "parse.y" ! { yyval.ttype = begin_compound_stmt (/*has_no_scope=*/1); } break; case 99: ! #line 762 "parse.y" { STMT_LINENO (yyvsp[-1].ttype) = yyvsp[-3].itype; finish_compound_stmt (/*has_no_scope=*/1, yyvsp[-1].ttype); finish_function_body (yyvsp[-5].ttype); ! } break; case 100: ! #line 771 "parse.y" ! { expand_body (finish_function (0)); } break; case 101: ! #line 773 "parse.y" ! { expand_body (finish_function (0)); } break; case 102: ! #line 775 "parse.y" ! { } break; case 103: ! #line 780 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 104: ! #line 782 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 105: ! #line 784 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! } break; case 106: ! #line 788 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 107: ! #line 790 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 108: ! #line 792 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! } break; case 109: ! #line 796 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 110: ! #line 798 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 111: ! #line 800 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! } break; case 112: ! #line 804 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 113: ! #line 806 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 114: ! #line 808 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! } break; case 115: ! #line 815 "parse.y" { check_for_new_type ("return type", yyvsp[-1].ftype); if (!parse_begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype)) ! YYERROR1; } break; case 116: ! #line 819 "parse.y" { if (!parse_begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype)) ! YYERROR1; } break; case 117: ! #line 822 "parse.y" { if (!parse_begin_function_definition (NULL_TREE, yyvsp[0].ttype)) ! YYERROR1; } break; case 118: ! #line 825 "parse.y" { if (!parse_begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype)) ! YYERROR1; } break; case 119: ! #line 828 "parse.y" { if (!parse_begin_function_definition (NULL_TREE, yyvsp[0].ttype)) ! YYERROR1; } break; case 120: ! #line 836 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 121: ! #line 839 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 122: ! #line 841 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 123: ! #line 843 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 124: ! #line 845 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 125: ! #line 847 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 126: ! #line 853 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); rest_of_mdef: if (! yyval.ttype) YYERROR1; if (yychar == YYEMPTY) yychar = YYLEX; ! snarf_method (yyval.ttype); } break; case 127: ! #line 861 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! goto rest_of_mdef; } break; case 128: ! #line 864 "parse.y" ! { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); goto rest_of_mdef;} break; case 129: ! #line 866 "parse.y" ! { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); goto rest_of_mdef;} break; case 130: ! #line 868 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! goto rest_of_mdef; } break; case 131: ! #line 871 "parse.y" ! { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); goto rest_of_mdef;} break; case 132: ! #line 873 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! goto rest_of_mdef; } break; case 133: ! #line 879 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! } break; case 134: ! #line 886 "parse.y" ! { finish_named_return_value (yyval.ttype, yyvsp[0].ttype); } break; case 135: ! #line 888 "parse.y" ! { finish_named_return_value (yyval.ttype, yyvsp[-1].ttype); } break; case 136: ! #line 890 "parse.y" ! { finish_named_return_value (yyval.ttype, NULL_TREE); } break; case 137: ! #line 894 "parse.y" ! { begin_mem_initializers (); } break; case 138: ! #line 895 "parse.y" { if (yyvsp[0].ftype.new_type_flag == 0) error ("no base or member initializers given following ':'"); finish_mem_initializers (yyvsp[0].ftype.t); ! } break; case 139: ! #line 904 "parse.y" { yyval.ttype = begin_function_body (); ! } break; case 140: ! #line 911 "parse.y" { yyval.ftype.new_type_flag = 0; yyval.ftype.t = NULL_TREE; ! } break; case 141: ! #line 916 "parse.y" { yyval.ftype.new_type_flag = 1; yyval.ftype.t = yyvsp[0].ttype; ! } break; case 142: ! #line 921 "parse.y" { if (yyvsp[0].ttype) { --- 5617,6106 ---- if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE && lastiddecl) yyvsp[-1].ttype = lastiddecl; do_using_directive (yyvsp[-1].ttype); ! ;} break; case 42: ! #line 618 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! ;} break; case 43: ! #line 624 "parse.y" { yyval.ttype = yyvsp[-1].ttype; if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! ;} break; case 46: ! #line 636 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 47: ! #line 638 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 48: ! #line 643 "parse.y" ! { push_lang_context (yyvsp[0].ttype); ;} break; case 49: ! #line 645 "parse.y" { if (current_lang_name != yyvsp[0].ttype) error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name); ! pop_lang_context (); push_lang_context (yyvsp[0].ttype); ;} break; case 50: ! #line 652 "parse.y" ! { begin_template_parm_list (); ;} break; case 51: ! #line 654 "parse.y" ! { yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); ;} break; case 52: ! #line 659 "parse.y" { begin_specialization(); ! yyval.ttype = NULL_TREE; ;} break; case 55: ! #line 670 "parse.y" ! { yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); ;} break; case 56: ! #line 672 "parse.y" ! { yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 57: ! #line 677 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 58: ! #line 679 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 59: ! #line 684 "parse.y" ! { yyval.ttype = finish_template_type_parm (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 60: ! #line 686 "parse.y" ! { yyval.ttype = finish_template_type_parm (class_type_node, yyvsp[0].ttype); ;} break; case 61: ! #line 691 "parse.y" ! { yyval.ttype = finish_template_template_parm (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 62: ! #line 703 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;} break; case 63: ! #line 705 "parse.y" ! { yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); ;} break; case 64: ! #line 707 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;} break; case 65: ! #line 709 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); ;} break; case 66: ! #line 711 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;} break; case 67: ! #line 713 "parse.y" { yyvsp[0].ttype = check_template_template_default_arg (yyvsp[0].ttype); yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype); ! ;} break; case 68: ! #line 721 "parse.y" ! { finish_template_decl (yyvsp[-1].ttype); ;} break; case 69: ! #line 723 "parse.y" ! { finish_template_decl (yyvsp[-1].ttype); ;} break; case 70: ! #line 728 "parse.y" ! { do_pending_inlines (); ;} break; case 71: ! #line 730 "parse.y" ! { do_pending_inlines (); ;} break; case 72: ! #line 732 "parse.y" ! { do_pending_inlines (); ;} break; case 73: ! #line 734 "parse.y" { do_pending_inlines (); ! pop_lang_context (); ;} break; case 74: ! #line 737 "parse.y" { do_pending_inlines (); ! pop_lang_context (); ;} break; case 75: ! #line 740 "parse.y" ! { pedantic = yyvsp[-1].itype; ;} break; case 77: ! #line 746 "parse.y" ! {;} break; case 78: ! #line 748 "parse.y" ! { note_list_got_semicolon (yyvsp[-2].ftype.t); ;} break; case 79: ! #line 750 "parse.y" { if (yyvsp[-1].ftype.t != error_mark_node) { maybe_process_partial_specialization (yyvsp[-1].ftype.t); note_got_semicolon (yyvsp[-1].ftype.t); } ! ;} break; case 81: ! #line 762 "parse.y" ! {;} break; case 82: ! #line 764 "parse.y" ! { note_list_got_semicolon (yyvsp[-2].ftype.t); ;} break; case 83: ! #line 766 "parse.y" ! { pedwarn ("empty declaration"); ;} break; case 85: ! #line 769 "parse.y" { tree t, attrs; split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs); shadow_tag (t); note_list_got_semicolon (yyvsp[-1].ftype.t); ! ;} break; case 88: ! #line 778 "parse.y" ! { end_input (); ;} break; case 98: ! #line 804 "parse.y" ! { yyval.ttype = begin_compound_stmt (/*has_no_scope=*/1); ;} break; case 99: ! #line 806 "parse.y" { STMT_LINENO (yyvsp[-1].ttype) = yyvsp[-3].itype; finish_compound_stmt (/*has_no_scope=*/1, yyvsp[-1].ttype); finish_function_body (yyvsp[-5].ttype); ! ;} break; case 100: ! #line 815 "parse.y" ! { expand_body (finish_function (0)); ;} break; case 101: ! #line 817 "parse.y" ! { expand_body (finish_function (0)); ;} break; case 102: ! #line 819 "parse.y" ! { ;} break; case 103: ! #line 824 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 104: ! #line 826 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 105: ! #line 828 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! ;} break; case 106: ! #line 832 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 107: ! #line 834 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 108: ! #line 836 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! ;} break; case 109: ! #line 840 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 110: ! #line 842 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 111: ! #line 844 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! ;} break; case 112: ! #line 848 "parse.y" ! { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 113: ! #line 850 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 114: ! #line 852 "parse.y" { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ! ;} break; case 115: ! #line 859 "parse.y" { check_for_new_type ("return type", yyvsp[-1].ftype); if (!parse_begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype)) ! YYERROR1; ;} break; case 116: ! #line 863 "parse.y" { if (!parse_begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype)) ! YYERROR1; ;} break; case 117: ! #line 866 "parse.y" { if (!parse_begin_function_definition (NULL_TREE, yyvsp[0].ttype)) ! YYERROR1; ;} break; case 118: ! #line 869 "parse.y" { if (!parse_begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype)) ! YYERROR1; ;} break; case 119: ! #line 872 "parse.y" { if (!parse_begin_function_definition (NULL_TREE, yyvsp[0].ttype)) ! YYERROR1; ;} break; case 120: ! #line 881 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 121: ! #line 884 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 122: ! #line 886 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 123: ! #line 888 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 124: ! #line 890 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 125: ! #line 892 "parse.y" ! { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 126: ! #line 899 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); rest_of_mdef: if (! yyval.ttype) YYERROR1; if (yychar == YYEMPTY) yychar = YYLEX; ! snarf_method (yyval.ttype); ;} break; case 127: ! #line 907 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! goto rest_of_mdef; ;} break; case 128: ! #line 910 "parse.y" ! { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); goto rest_of_mdef;;} break; case 129: ! #line 912 "parse.y" ! { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); goto rest_of_mdef;;} break; case 130: ! #line 914 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! goto rest_of_mdef; ;} break; case 131: ! #line 917 "parse.y" ! { yyval.ttype = parse_method (yyvsp[0].ttype, yyvsp[-1].ftype.t, yyvsp[-1].ftype.lookups); goto rest_of_mdef;;} break; case 132: ! #line 919 "parse.y" { yyval.ttype = parse_method (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! goto rest_of_mdef; ;} break; case 133: ! #line 925 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! ;} break; case 134: ! #line 932 "parse.y" ! { finish_named_return_value (yyval.ttype, yyvsp[0].ttype); ;} break; case 135: ! #line 934 "parse.y" ! { finish_named_return_value (yyval.ttype, yyvsp[-1].ttype); ;} break; case 136: ! #line 936 "parse.y" ! { finish_named_return_value (yyval.ttype, NULL_TREE); ;} break; case 137: ! #line 940 "parse.y" ! { begin_mem_initializers (); ;} break; case 138: ! #line 941 "parse.y" { if (yyvsp[0].ftype.new_type_flag == 0) error ("no base or member initializers given following ':'"); finish_mem_initializers (yyvsp[0].ftype.t); ! ;} break; case 139: ! #line 950 "parse.y" { yyval.ttype = begin_function_body (); ! ;} break; case 140: ! #line 957 "parse.y" { yyval.ftype.new_type_flag = 0; yyval.ftype.t = NULL_TREE; ! ;} break; case 141: ! #line 962 "parse.y" { yyval.ftype.new_type_flag = 1; yyval.ftype.t = yyvsp[0].ttype; ! ;} break; case 142: ! #line 967 "parse.y" { if (yyvsp[0].ttype) { *************** yyreduce: *** 6056,6277 **** } else yyval.ftype = yyvsp[-2].ftype; ! } break; case 144: ! #line 936 "parse.y" { if (current_class_name) pedwarn ("anachronistic old style base class initializer"); yyval.ttype = expand_member_init (NULL_TREE); in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); ! } break; case 145: ! #line 943 "parse.y" { yyval.ttype = expand_member_init (yyvsp[0].ttype); ! in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); } break; case 146: ! #line 946 "parse.y" { yyval.ttype = expand_member_init (yyvsp[0].ttype); ! in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); } break; case 147: ! #line 949 "parse.y" { yyval.ttype = expand_member_init (yyvsp[0].ttype); ! in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); } break; case 148: ! #line 955 "parse.y" { in_base_initializer = 0; ! yyval.ttype = yyvsp[-3].ttype ? build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype) : NULL_TREE; } break; case 149: ! #line 958 "parse.y" { in_base_initializer = 0; ! yyval.ttype = yyvsp[-1].ttype ? build_tree_list (yyvsp[-1].ttype, void_type_node) : NULL_TREE; } break; case 150: ! #line 961 "parse.y" { in_base_initializer = 0; ! yyval.ttype = NULL_TREE; } break; case 162: ! #line 987 "parse.y" { do_type_instantiation (yyvsp[-1].ftype.t, NULL_TREE, 1); ! yyungetc (';', 1); } break; case 164: ! #line 991 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); ! parse_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); } break; case 166: ! #line 995 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); } break; case 168: ! #line 998 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); } break; case 170: ! #line 1001 "parse.y" { do_type_instantiation (yyvsp[-1].ftype.t, yyvsp[-4].ttype, 1); ! yyungetc (';', 1); } break; case 171: ! #line 1004 "parse.y" ! {} break; case 172: ! #line 1007 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); ! parse_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-4].ttype); } break; case 173: ! #line 1010 "parse.y" ! {} break; case 174: ! #line 1012 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); } break; case 175: ! #line 1014 "parse.y" ! {} break; case 176: ! #line 1016 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); } break; case 177: ! #line 1018 "parse.y" ! {} break; case 178: ! #line 1022 "parse.y" ! { begin_explicit_instantiation(); } break; case 179: ! #line 1026 "parse.y" ! { end_explicit_instantiation(); } break; case 180: ! #line 1034 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 181: ! #line 1037 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 184: ! #line 1045 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 185: ! #line 1051 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 186: ! #line 1055 "parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = finish_template_type (yyvsp[-3].ttype, yyvsp[-1].ttype, yychar == SCOPE); ! } break; case 188: ! #line 1067 "parse.y" { /* Handle `Class>' without space in the `>>' */ pedwarn ("`>>' should be `> >' in template class name"); yyungetc ('>', 1); ! } break; case 189: ! #line 1076 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 191: ! #line 1082 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); } break; case 192: ! #line 1084 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 193: ! #line 1088 "parse.y" ! { ++class_template_ok_as_expr; } break; case 194: ! #line 1090 "parse.y" { --class_template_ok_as_expr; yyval.ttype = yyvsp[0].ttype; ! } break; case 195: ! #line 1098 "parse.y" ! { yyval.ttype = groktypename (yyvsp[0].ftype.t); } break; case 196: ! #line 1100 "parse.y" { yyval.ttype = lastiddecl; if (DECL_TEMPLATE_TEMPLATE_PARM_P (yyval.ttype)) yyval.ttype = TREE_TYPE (yyval.ttype); ! } break; case 197: ! #line 1106 "parse.y" { yyval.ttype = lastiddecl; if (DECL_TEMPLATE_TEMPLATE_PARM_P (yyval.ttype)) yyval.ttype = TREE_TYPE (yyval.ttype); ! } break; case 199: ! #line 1113 "parse.y" { if (!processing_template_decl) { --- 6110,6331 ---- } else yyval.ftype = yyvsp[-2].ftype; ! ;} break; case 144: ! #line 982 "parse.y" { if (current_class_name) pedwarn ("anachronistic old style base class initializer"); yyval.ttype = expand_member_init (NULL_TREE); in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); ! ;} break; case 145: ! #line 989 "parse.y" { yyval.ttype = expand_member_init (yyvsp[0].ttype); ! in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); ;} break; case 146: ! #line 992 "parse.y" { yyval.ttype = expand_member_init (yyvsp[0].ttype); ! in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); ;} break; case 147: ! #line 995 "parse.y" { yyval.ttype = expand_member_init (yyvsp[0].ttype); ! in_base_initializer = yyval.ttype && !DECL_P (yyval.ttype); ;} break; case 148: ! #line 1001 "parse.y" { in_base_initializer = 0; ! yyval.ttype = yyvsp[-3].ttype ? build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype) : NULL_TREE; ;} break; case 149: ! #line 1004 "parse.y" { in_base_initializer = 0; ! yyval.ttype = yyvsp[-1].ttype ? build_tree_list (yyvsp[-1].ttype, void_type_node) : NULL_TREE; ;} break; case 150: ! #line 1007 "parse.y" { in_base_initializer = 0; ! yyval.ttype = NULL_TREE; ;} break; case 162: ! #line 1033 "parse.y" { do_type_instantiation (yyvsp[-1].ftype.t, NULL_TREE, 1); ! yyungetc (';', 1); ;} break; case 164: ! #line 1037 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); ! parse_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); ;} break; case 166: ! #line 1041 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;} break; case 168: ! #line 1044 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;} break; case 170: ! #line 1047 "parse.y" { do_type_instantiation (yyvsp[-1].ftype.t, yyvsp[-4].ttype, 1); ! yyungetc (';', 1); ;} break; case 171: ! #line 1050 "parse.y" ! {;} break; case 172: ! #line 1053 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); ! parse_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-4].ttype); ;} break; case 173: ! #line 1056 "parse.y" ! {;} break; case 174: ! #line 1058 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); ;} break; case 175: ! #line 1060 "parse.y" ! {;} break; case 176: ! #line 1062 "parse.y" ! { parse_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); ;} break; case 177: ! #line 1064 "parse.y" ! {;} break; case 178: ! #line 1068 "parse.y" ! { begin_explicit_instantiation(); ;} break; case 179: ! #line 1072 "parse.y" ! { end_explicit_instantiation(); ;} break; case 180: ! #line 1082 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 181: ! #line 1085 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 184: ! #line 1093 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 185: ! #line 1099 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 186: ! #line 1103 "parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = finish_template_type (yyvsp[-3].ttype, yyvsp[-1].ttype, yychar == SCOPE); ! ;} break; case 188: ! #line 1115 "parse.y" { /* Handle `Class>' without space in the `>>' */ pedwarn ("`>>' should be `> >' in template class name"); yyungetc ('>', 1); ! ;} break; case 189: ! #line 1124 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 191: ! #line 1130 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;} break; case 192: ! #line 1132 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 193: ! #line 1136 "parse.y" ! { ++class_template_ok_as_expr; ;} break; case 194: ! #line 1138 "parse.y" { --class_template_ok_as_expr; yyval.ttype = yyvsp[0].ttype; ! ;} break; case 195: ! #line 1146 "parse.y" ! { yyval.ttype = groktypename (yyvsp[0].ftype.t); ;} break; case 196: ! #line 1148 "parse.y" { yyval.ttype = lastiddecl; if (DECL_TEMPLATE_TEMPLATE_PARM_P (yyval.ttype)) yyval.ttype = TREE_TYPE (yyval.ttype); ! ;} break; case 197: ! #line 1154 "parse.y" { yyval.ttype = lastiddecl; if (DECL_TEMPLATE_TEMPLATE_PARM_P (yyval.ttype)) yyval.ttype = TREE_TYPE (yyval.ttype); ! ;} break; case 199: ! #line 1161 "parse.y" { if (!processing_template_decl) { *************** yyreduce: *** 6280,6354 **** } else yyval.ttype = make_unbound_class_template (yyvsp[-2].ttype, yyvsp[0].ttype, tf_error | tf_parsing); ! } break; case 200: ! #line 1126 "parse.y" ! { yyval.code = NEGATE_EXPR; } break; case 201: ! #line 1128 "parse.y" ! { yyval.code = CONVERT_EXPR; } break; case 202: ! #line 1130 "parse.y" ! { yyval.code = PREINCREMENT_EXPR; } break; case 203: ! #line 1132 "parse.y" ! { yyval.code = PREDECREMENT_EXPR; } break; case 204: ! #line 1134 "parse.y" ! { yyval.code = TRUTH_NOT_EXPR; } break; case 205: ! #line 1139 "parse.y" ! { yyval.ttype = build_x_compound_expr (yyval.ttype); } break; case 207: ! #line 1145 "parse.y" { error ("ISO C++ forbids an empty condition for `%s'", cond_stmt_keyword); ! yyval.ttype = integer_zero_node; } break; case 208: ! #line 1149 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 209: ! #line 1154 "parse.y" { error ("ISO C++ forbids an empty condition for `%s'", cond_stmt_keyword); ! yyval.ttype = integer_zero_node; } break; case 210: ! #line 1158 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 211: ! #line 1163 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 213: ! #line 1166 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 214: ! #line 1171 "parse.y" { { tree d; for (d = getdecls (); d; d = TREE_CHAIN (d)) --- 6334,6408 ---- } else yyval.ttype = make_unbound_class_template (yyvsp[-2].ttype, yyvsp[0].ttype, tf_error | tf_parsing); ! ;} break; case 200: ! #line 1174 "parse.y" ! { yyval.code = NEGATE_EXPR; ;} break; case 201: ! #line 1176 "parse.y" ! { yyval.code = CONVERT_EXPR; ;} break; case 202: ! #line 1178 "parse.y" ! { yyval.code = PREINCREMENT_EXPR; ;} break; case 203: ! #line 1180 "parse.y" ! { yyval.code = PREDECREMENT_EXPR; ;} break; case 204: ! #line 1182 "parse.y" ! { yyval.code = TRUTH_NOT_EXPR; ;} break; case 205: ! #line 1187 "parse.y" ! { yyval.ttype = build_x_compound_expr (yyval.ttype); ;} break; case 207: ! #line 1193 "parse.y" { error ("ISO C++ forbids an empty condition for `%s'", cond_stmt_keyword); ! yyval.ttype = integer_zero_node; ;} break; case 208: ! #line 1197 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 209: ! #line 1202 "parse.y" { error ("ISO C++ forbids an empty condition for `%s'", cond_stmt_keyword); ! yyval.ttype = integer_zero_node; ;} break; case 210: ! #line 1206 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 211: ! #line 1211 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 213: ! #line 1214 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 214: ! #line 1219 "parse.y" { { tree d; for (d = getdecls (); d; d = TREE_CHAIN (d)) *************** yyreduce: *** 6362,6607 **** } current_declspecs = yyvsp[-4].ftype.t; yyval.ttype = parse_decl (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); ! } break; case 215: ! #line 1186 "parse.y" { parse_end_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype); yyval.ttype = convert_from_reference (yyvsp[-1].ttype); if (TREE_CODE (TREE_TYPE (yyval.ttype)) == ARRAY_TYPE) error ("definition of array `%#D' in condition", yyval.ttype); ! } break; case 221: ! #line 1204 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, ! build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 222: ! #line 1207 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, ! build_tree_list (NULL_TREE, error_mark_node)); } break; case 223: ! #line 1210 "parse.y" ! { chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 224: ! #line 1212 "parse.y" ! { chainon (yyval.ttype, build_tree_list (NULL_TREE, error_mark_node)); } break; case 225: ! #line 1217 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); } break; case 227: ! #line 1223 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 228: ! #line 1226 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! pedantic = yyvsp[-1].itype; } break; case 229: ! #line 1229 "parse.y" ! { yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); } break; case 230: ! #line 1231 "parse.y" ! { yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); } break; case 231: ! #line 1233 "parse.y" ! { yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); } break; case 232: ! #line 1235 "parse.y" ! { yyval.ttype = finish_unary_op_expr (yyvsp[-1].code, yyvsp[0].ttype); } break; case 233: ! #line 1238 "parse.y" ! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); } break; case 234: ! #line 1240 "parse.y" { yyval.ttype = finish_sizeof (yyvsp[0].ttype); ! skip_evaluation--; } break; case 235: ! #line 1243 "parse.y" { yyval.ttype = finish_sizeof (groktypename (yyvsp[-1].ftype.t)); check_for_new_type ("sizeof", yyvsp[-1].ftype); ! skip_evaluation--; } break; case 236: ! #line 1247 "parse.y" { yyval.ttype = finish_alignof (yyvsp[0].ttype); ! skip_evaluation--; } break; case 237: ! #line 1250 "parse.y" { yyval.ttype = finish_alignof (groktypename (yyvsp[-1].ftype.t)); check_for_new_type ("alignof", yyvsp[-1].ftype); ! skip_evaluation--; } break; case 238: ! #line 1256 "parse.y" { yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); ! check_for_new_type ("new", yyvsp[0].ftype); } break; case 239: ! #line 1259 "parse.y" { yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); } break; case 240: ! #line 1262 "parse.y" { yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); ! check_for_new_type ("new", yyvsp[0].ftype); } break; case 241: ! #line 1265 "parse.y" { yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); } break; case 242: ! #line 1269 "parse.y" { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-3].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); } break; case 243: ! #line 1273 "parse.y" { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-4].itype); ! check_for_new_type ("new", yyvsp[-2].ftype); } break; case 244: ! #line 1276 "parse.y" { yyval.ttype = build_new (yyvsp[-3].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-4].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); } break; case 245: ! #line 1279 "parse.y" { yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); ! check_for_new_type ("new", yyvsp[-2].ftype); } break; case 246: ! #line 1283 "parse.y" ! { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); } break; case 247: ! #line 1285 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype); if (yychar == YYEMPTY) ! yychar = YYLEX; } break; case 248: ! #line 1289 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype); if (yychar == YYEMPTY) ! yychar = YYLEX; } break; case 249: ! #line 1293 "parse.y" ! { yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); } break; case 250: ! #line 1295 "parse.y" ! { yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); } break; case 251: ! #line 1300 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 252: ! #line 1302 "parse.y" { pedwarn ("old style placement syntax, use () instead"); ! yyval.ttype = yyvsp[-1].ttype; } break; case 253: ! #line 1308 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 254: ! #line 1310 "parse.y" ! { yyval.ttype = void_zero_node; } break; case 255: ! #line 1312 "parse.y" { error ("`%T' is not a valid expression", yyvsp[-1].ftype.t); yyval.ttype = error_mark_node; ! } break; case 256: ! #line 1317 "parse.y" { /* This was previously allowed as an extension, but was removed in G++ 3.3. */ error ("initialization of new expression with `='"); yyval.ttype = error_mark_node; ! } break; case 257: ! #line 1328 "parse.y" { yyvsp[-1].ftype.t = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), 0); yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE); ! check_for_new_type ("cast", yyvsp[-1].ftype); } break; case 258: ! #line 1332 "parse.y" { yyvsp[-1].ftype.t = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), 0); yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE); ! check_for_new_type ("cast", yyvsp[-1].ftype); } break; case 260: ! #line 1340 "parse.y" ! { yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); } break; case 261: ! #line 1342 "parse.y" { tree init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); --- 6416,6661 ---- } current_declspecs = yyvsp[-4].ftype.t; yyval.ttype = parse_decl (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); ! ;} break; case 215: ! #line 1234 "parse.y" { parse_end_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype); yyval.ttype = convert_from_reference (yyvsp[-1].ttype); if (TREE_CODE (TREE_TYPE (yyval.ttype)) == ARRAY_TYPE) error ("definition of array `%#D' in condition", yyval.ttype); ! ;} break; case 221: ! #line 1252 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, ! build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 222: ! #line 1255 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, ! build_tree_list (NULL_TREE, error_mark_node)); ;} break; case 223: ! #line 1258 "parse.y" ! { chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 224: ! #line 1260 "parse.y" ! { chainon (yyval.ttype, build_tree_list (NULL_TREE, error_mark_node)); ;} break; case 225: ! #line 1265 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;} break; case 227: ! #line 1271 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 228: ! #line 1274 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! pedantic = yyvsp[-1].itype; ;} break; case 229: ! #line 1277 "parse.y" ! { yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); ;} break; case 230: ! #line 1279 "parse.y" ! { yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); ;} break; case 231: ! #line 1281 "parse.y" ! { yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); ;} break; case 232: ! #line 1283 "parse.y" ! { yyval.ttype = finish_unary_op_expr (yyvsp[-1].code, yyvsp[0].ttype); ;} break; case 233: ! #line 1286 "parse.y" ! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ;} break; case 234: ! #line 1288 "parse.y" { yyval.ttype = finish_sizeof (yyvsp[0].ttype); ! skip_evaluation--; ;} break; case 235: ! #line 1291 "parse.y" { yyval.ttype = finish_sizeof (groktypename (yyvsp[-1].ftype.t)); check_for_new_type ("sizeof", yyvsp[-1].ftype); ! skip_evaluation--; ;} break; case 236: ! #line 1295 "parse.y" { yyval.ttype = finish_alignof (yyvsp[0].ttype); ! skip_evaluation--; ;} break; case 237: ! #line 1298 "parse.y" { yyval.ttype = finish_alignof (groktypename (yyvsp[-1].ftype.t)); check_for_new_type ("alignof", yyvsp[-1].ftype); ! skip_evaluation--; ;} break; case 238: ! #line 1305 "parse.y" { yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); ! check_for_new_type ("new", yyvsp[0].ftype); ;} break; case 239: ! #line 1308 "parse.y" { yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); ;} break; case 240: ! #line 1311 "parse.y" { yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); ! check_for_new_type ("new", yyvsp[0].ftype); ;} break; case 241: ! #line 1314 "parse.y" { yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); ;} break; case 242: ! #line 1318 "parse.y" { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-3].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); ;} break; case 243: ! #line 1322 "parse.y" { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-4].itype); ! check_for_new_type ("new", yyvsp[-2].ftype); ;} break; case 244: ! #line 1325 "parse.y" { yyval.ttype = build_new (yyvsp[-3].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-4].itype); ! check_for_new_type ("new", yyvsp[-1].ftype); ;} break; case 245: ! #line 1328 "parse.y" { yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); ! check_for_new_type ("new", yyvsp[-2].ftype); ;} break; case 246: ! #line 1332 "parse.y" ! { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); ;} break; case 247: ! #line 1334 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype); if (yychar == YYEMPTY) ! yychar = YYLEX; ;} break; case 248: ! #line 1338 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype); if (yychar == YYEMPTY) ! yychar = YYLEX; ;} break; case 249: ! #line 1342 "parse.y" ! { yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); ;} break; case 250: ! #line 1344 "parse.y" ! { yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); ;} break; case 251: ! #line 1349 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 252: ! #line 1351 "parse.y" { pedwarn ("old style placement syntax, use () instead"); ! yyval.ttype = yyvsp[-1].ttype; ;} break; case 253: ! #line 1357 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 254: ! #line 1359 "parse.y" ! { yyval.ttype = void_zero_node; ;} break; case 255: ! #line 1361 "parse.y" { error ("`%T' is not a valid expression", yyvsp[-1].ftype.t); yyval.ttype = error_mark_node; ! ;} break; case 256: ! #line 1366 "parse.y" { /* This was previously allowed as an extension, but was removed in G++ 3.3. */ error ("initialization of new expression with `='"); yyval.ttype = error_mark_node; ! ;} break; case 257: ! #line 1377 "parse.y" { yyvsp[-1].ftype.t = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), 0); yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE); ! check_for_new_type ("cast", yyvsp[-1].ftype); ;} break; case 258: ! #line 1381 "parse.y" { yyvsp[-1].ftype.t = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), 0); yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE); ! check_for_new_type ("cast", yyvsp[-1].ftype); ;} break; case 260: ! #line 1389 "parse.y" ! { yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); ;} break; case 261: ! #line 1391 "parse.y" { tree init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); *************** yyreduce: *** 6611,6870 **** TREE_HAS_CONSTRUCTOR (init) = 1; yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, init); ! } break; case 263: ! #line 1358 "parse.y" ! { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); } break; case 264: ! #line 1360 "parse.y" ! { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); } break; case 265: ! #line 1362 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 266: ! #line 1364 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 267: ! #line 1366 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 268: ! #line 1368 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 269: ! #line 1370 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 270: ! #line 1372 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 271: ! #line 1374 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 272: ! #line 1376 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 273: ! #line 1378 "parse.y" ! { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 274: ! #line 1380 "parse.y" ! { yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 275: ! #line 1382 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 276: ! #line 1384 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 277: ! #line 1386 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 278: ! #line 1388 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 279: ! #line 1390 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 280: ! #line 1392 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 281: ! #line 1394 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 282: ! #line 1396 "parse.y" ! { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 283: ! #line 1398 "parse.y" { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype); if (yyval.ttype != error_mark_node) ! C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); } break; case 284: ! #line 1402 "parse.y" ! { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); } break; case 285: ! #line 1404 "parse.y" ! { yyval.ttype = build_throw (NULL_TREE); } break; case 286: ! #line 1406 "parse.y" ! { yyval.ttype = build_throw (yyvsp[0].ttype); } break; case 288: ! #line 1413 "parse.y" ! { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); } break; case 289: ! #line 1415 "parse.y" ! { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); } break; case 290: ! #line 1417 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 291: ! #line 1419 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 292: ! #line 1421 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 293: ! #line 1423 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 294: ! #line 1425 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 295: ! #line 1427 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 296: ! #line 1429 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 297: ! #line 1431 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 298: ! #line 1433 "parse.y" ! { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 299: ! #line 1435 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 300: ! #line 1437 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 301: ! #line 1439 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 302: ! #line 1441 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 303: ! #line 1443 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); } break; case 304: ! #line 1445 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 305: ! #line 1447 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); } break; case 306: ! #line 1449 "parse.y" ! { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 307: ! #line 1451 "parse.y" { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype); if (yyval.ttype != error_mark_node) ! C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); } break; case 308: ! #line 1455 "parse.y" ! { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); } break; case 309: ! #line 1457 "parse.y" ! { yyval.ttype = build_throw (NULL_TREE); } break; case 310: ! #line 1459 "parse.y" ! { yyval.ttype = build_throw (yyvsp[0].ttype); } break; case 311: ! #line 1464 "parse.y" ! { yyval.ttype = build_nt (BIT_NOT_EXPR, yyvsp[0].ttype); } break; case 312: ! #line 1466 "parse.y" ! { yyval.ttype = build_nt (BIT_NOT_EXPR, yyvsp[0].ttype); } break; case 318: ! #line 1475 "parse.y" { /* If lastiddecl is a BASELINK we're in an expression like S::f, so don't --- 6665,6924 ---- TREE_HAS_CONSTRUCTOR (init) = 1; yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, init); ! ;} break; case 263: ! #line 1407 "parse.y" ! { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ;} break; case 264: ! #line 1409 "parse.y" ! { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ;} break; case 265: ! #line 1411 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 266: ! #line 1413 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 267: ! #line 1415 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 268: ! #line 1417 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 269: ! #line 1419 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 270: ! #line 1421 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 271: ! #line 1423 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 272: ! #line 1425 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 273: ! #line 1427 "parse.y" ! { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 274: ! #line 1429 "parse.y" ! { yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 275: ! #line 1431 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 276: ! #line 1433 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 277: ! #line 1435 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 278: ! #line 1437 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 279: ! #line 1439 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 280: ! #line 1441 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 281: ! #line 1443 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 282: ! #line 1445 "parse.y" ! { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 283: ! #line 1447 "parse.y" { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype); if (yyval.ttype != error_mark_node) ! C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;} break; case 284: ! #line 1451 "parse.y" ! { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ;} break; case 285: ! #line 1453 "parse.y" ! { yyval.ttype = build_throw (NULL_TREE); ;} break; case 286: ! #line 1455 "parse.y" ! { yyval.ttype = build_throw (yyvsp[0].ttype); ;} break; case 288: ! #line 1462 "parse.y" ! { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ;} break; case 289: ! #line 1464 "parse.y" ! { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ;} break; case 290: ! #line 1466 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 291: ! #line 1468 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 292: ! #line 1470 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 293: ! #line 1472 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 294: ! #line 1474 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 295: ! #line 1476 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 296: ! #line 1478 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 297: ! #line 1480 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 298: ! #line 1482 "parse.y" ! { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 299: ! #line 1484 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 300: ! #line 1486 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 301: ! #line 1488 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 302: ! #line 1490 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 303: ! #line 1492 "parse.y" ! { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;} break; case 304: ! #line 1494 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 305: ! #line 1496 "parse.y" ! { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;} break; case 306: ! #line 1498 "parse.y" ! { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 307: ! #line 1500 "parse.y" { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype); if (yyval.ttype != error_mark_node) ! C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;} break; case 308: ! #line 1504 "parse.y" ! { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ;} break; case 309: ! #line 1506 "parse.y" ! { yyval.ttype = build_throw (NULL_TREE); ;} break; case 310: ! #line 1508 "parse.y" ! { yyval.ttype = build_throw (yyvsp[0].ttype); ;} break; case 311: ! #line 1513 "parse.y" ! { yyval.ttype = build_nt (BIT_NOT_EXPR, yyvsp[0].ttype); ;} break; case 312: ! #line 1515 "parse.y" ! { yyval.ttype = build_nt (BIT_NOT_EXPR, yyvsp[0].ttype); ;} break; case 318: ! #line 1524 "parse.y" { /* If lastiddecl is a BASELINK we're in an expression like S::f, so don't *************** yyreduce: *** 6874,6968 **** yyval.ttype = do_identifier (yyvsp[-1].ttype, 3, NULL_TREE); else yyval.ttype = yyvsp[-1].ttype; ! } break; case 319: ! #line 1489 "parse.y" { tree template_name = yyvsp[-2].ttype; if (TREE_CODE (template_name) == COMPONENT_REF) template_name = TREE_OPERAND (template_name, 1); yyval.ttype = lookup_template_function (template_name, yyvsp[-1].ttype); ! } break; case 320: ! #line 1496 "parse.y" { tree template_name = yyvsp[-2].ttype; if (TREE_CODE (template_name) == COMPONENT_REF) template_name = TREE_OPERAND (template_name, 1); yyval.ttype = lookup_template_function (template_name, yyvsp[-1].ttype); ! } break; case 321: ! #line 1506 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 322: ! #line 1508 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 323: ! #line 1511 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 328: ! #line 1523 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! } break; case 330: ! #line 1533 "parse.y" ! { yyval.ttype = build_nt (INDIRECT_REF, yyvsp[0].ttype); } break; case 331: ! #line 1535 "parse.y" ! { yyval.ttype = build_nt (ADDR_EXPR, yyvsp[0].ttype); } break; case 332: ! #line 1537 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 333: ! #line 1542 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 334: ! #line 1544 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 338: ! #line 1553 "parse.y" ! { yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); } break; case 339: ! #line 1558 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == BIT_NOT_EXPR) yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyvsp[0].ttype, 0)); else yyval.ttype = finish_id_expr (yyvsp[0].ttype); ! } break; case 342: ! #line 1567 "parse.y" { yyval.ttype = fix_string_type (yyval.ttype); /* fix_string_type doesn't set up TYPE_MAIN_VARIANT of --- 6928,7022 ---- yyval.ttype = do_identifier (yyvsp[-1].ttype, 3, NULL_TREE); else yyval.ttype = yyvsp[-1].ttype; ! ;} break; case 319: ! #line 1538 "parse.y" { tree template_name = yyvsp[-2].ttype; if (TREE_CODE (template_name) == COMPONENT_REF) template_name = TREE_OPERAND (template_name, 1); yyval.ttype = lookup_template_function (template_name, yyvsp[-1].ttype); ! ;} break; case 320: ! #line 1545 "parse.y" { tree template_name = yyvsp[-2].ttype; if (TREE_CODE (template_name) == COMPONENT_REF) template_name = TREE_OPERAND (template_name, 1); yyval.ttype = lookup_template_function (template_name, yyvsp[-1].ttype); ! ;} break; case 321: ! #line 1555 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 322: ! #line 1557 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 323: ! #line 1560 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 328: ! #line 1572 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! ;} break; case 330: ! #line 1582 "parse.y" ! { yyval.ttype = build_nt (INDIRECT_REF, yyvsp[0].ttype); ;} break; case 331: ! #line 1584 "parse.y" ! { yyval.ttype = build_nt (ADDR_EXPR, yyvsp[0].ttype); ;} break; case 332: ! #line 1586 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 333: ! #line 1591 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 334: ! #line 1593 "parse.y" ! { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 338: ! #line 1603 "parse.y" ! { yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); ;} break; case 339: ! #line 1608 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == BIT_NOT_EXPR) yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyvsp[0].ttype, 0)); else yyval.ttype = finish_id_expr (yyvsp[0].ttype); ! ;} break; case 342: ! #line 1617 "parse.y" { yyval.ttype = fix_string_type (yyval.ttype); /* fix_string_type doesn't set up TYPE_MAIN_VARIANT of *************** yyreduce: *** 6971,7002 **** TREE_TYPE (yyval.ttype) = build_cplus_array_type (TREE_TYPE (TREE_TYPE (yyval.ttype)), TYPE_DOMAIN (TREE_TYPE (yyval.ttype))); ! } break; case 343: ! #line 1577 "parse.y" ! { yyval.ttype = finish_fname (yyvsp[0].ttype); } break; case 344: ! #line 1579 "parse.y" ! { yyval.ttype = finish_parenthesized_expr (yyvsp[-1].ttype); } break; case 345: ! #line 1581 "parse.y" { yyvsp[-1].ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype); ! yyval.ttype = finish_parenthesized_expr (yyvsp[-1].ttype); } break; case 346: ! #line 1584 "parse.y" ! { yyval.ttype = error_mark_node; } break; case 347: ! #line 1586 "parse.y" { if (!at_function_scope_p ()) { error ("braced-group within expression allowed only inside a function"); --- 7025,7056 ---- TREE_TYPE (yyval.ttype) = build_cplus_array_type (TREE_TYPE (TREE_TYPE (yyval.ttype)), TYPE_DOMAIN (TREE_TYPE (yyval.ttype))); ! ;} break; case 343: ! #line 1627 "parse.y" ! { yyval.ttype = finish_fname (yyvsp[0].ttype); ;} break; case 344: ! #line 1629 "parse.y" ! { yyval.ttype = finish_parenthesized_expr (yyvsp[-1].ttype); ;} break; case 345: ! #line 1631 "parse.y" { yyvsp[-1].ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype); ! yyval.ttype = finish_parenthesized_expr (yyvsp[-1].ttype); ;} break; case 346: ! #line 1634 "parse.y" ! { yyval.ttype = error_mark_node; ;} break; case 347: ! #line 1636 "parse.y" { if (!at_function_scope_p ()) { error ("braced-group within expression allowed only inside a function"); *************** yyreduce: *** 7005,7066 **** if (pedantic) pedwarn ("ISO C++ forbids braced-groups within expressions"); yyval.ttype = begin_stmt_expr (); ! } break; case 348: ! #line 1596 "parse.y" ! { yyval.ttype = finish_stmt_expr (yyvsp[-2].ttype); } break; case 349: ! #line 1599 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); } break; case 350: ! #line 1601 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 1); } break; case 351: ! #line 1603 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 0); } break; case 352: ! #line 1605 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 0); } break; case 353: ! #line 1607 "parse.y" { yyval.ttype = build_x_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ftype.t)); ! check_for_new_type ("__builtin_va_arg", yyvsp[-1].ftype); } break; case 354: ! #line 1610 "parse.y" ! { yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); } break; case 355: ! #line 1612 "parse.y" ! { yyval.ttype = finish_increment_expr (yyvsp[-1].ttype, POSTINCREMENT_EXPR); } break; case 356: ! #line 1614 "parse.y" ! { yyval.ttype = finish_increment_expr (yyvsp[-1].ttype, POSTDECREMENT_EXPR); } break; case 357: ! #line 1617 "parse.y" ! { yyval.ttype = finish_this_expr (); } break; case 358: ! #line 1619 "parse.y" { /* This is a C cast in C++'s `functional' notation using the "implicit int" extension so that: --- 7059,7120 ---- if (pedantic) pedwarn ("ISO C++ forbids braced-groups within expressions"); yyval.ttype = begin_stmt_expr (); ! ;} break; case 348: ! #line 1646 "parse.y" ! { yyval.ttype = finish_stmt_expr (yyvsp[-2].ttype); ;} break; case 349: ! #line 1651 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); ;} break; case 350: ! #line 1653 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 1); ;} break; case 351: ! #line 1655 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 0); ;} break; case 352: ! #line 1657 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 0); ;} break; case 353: ! #line 1659 "parse.y" { yyval.ttype = build_x_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ftype.t)); ! check_for_new_type ("__builtin_va_arg", yyvsp[-1].ftype); ;} break; case 354: ! #line 1662 "parse.y" ! { yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); ;} break; case 355: ! #line 1664 "parse.y" ! { yyval.ttype = finish_increment_expr (yyvsp[-1].ttype, POSTINCREMENT_EXPR); ;} break; case 356: ! #line 1666 "parse.y" ! { yyval.ttype = finish_increment_expr (yyvsp[-1].ttype, POSTDECREMENT_EXPR); ;} break; case 357: ! #line 1669 "parse.y" ! { yyval.ttype = finish_this_expr (); ;} break; case 358: ! #line 1671 "parse.y" { /* This is a C cast in C++'s `functional' notation using the "implicit int" extension so that: *************** yyreduce: *** 7070,7141 **** type = hash_tree_cons (NULL_TREE, yyvsp[-3].ttype, NULL_TREE); type = groktypename (build_tree_list (type, NULL_TREE)); yyval.ttype = build_functional_cast (type, yyvsp[-1].ttype); ! } break; case 360: ! #line 1631 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("dynamic_cast", yyvsp[-4].ftype); ! yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); } break; case 361: ! #line 1635 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("static_cast", yyvsp[-4].ftype); ! yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); } break; case 362: ! #line 1639 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype); ! yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); } break; case 363: ! #line 1643 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("const_cast", yyvsp[-4].ftype); ! yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); } break; case 364: ! #line 1647 "parse.y" ! { yyval.ttype = build_typeid (yyvsp[-1].ttype); } break; case 365: ! #line 1649 "parse.y" { tree type = groktypename (yyvsp[-1].ftype.t); check_for_new_type ("typeid", yyvsp[-1].ftype); ! yyval.ttype = get_typeid (type); } break; case 366: ! #line 1653 "parse.y" ! { yyval.ttype = parse_scoped_id (yyvsp[0].ttype); } break; case 367: ! #line 1655 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 368: ! #line 1657 "parse.y" { got_scope = NULL_TREE; if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = parse_scoped_id (yyvsp[0].ttype); else yyval.ttype = yyvsp[0].ttype; ! } break; case 369: ! #line 1665 "parse.y" { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); if (!class_template_ok_as_expr && DECL_CLASS_TEMPLATE_P (yyval.ttype)) --- 7124,7195 ---- type = hash_tree_cons (NULL_TREE, yyvsp[-3].ttype, NULL_TREE); type = groktypename (build_tree_list (type, NULL_TREE)); yyval.ttype = build_functional_cast (type, yyvsp[-1].ttype); ! ;} break; case 360: ! #line 1683 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("dynamic_cast", yyvsp[-4].ftype); ! yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); ;} break; case 361: ! #line 1687 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("static_cast", yyvsp[-4].ftype); ! yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); ;} break; case 362: ! #line 1691 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype); ! yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); ;} break; case 363: ! #line 1695 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("const_cast", yyvsp[-4].ftype); ! yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); ;} break; case 364: ! #line 1699 "parse.y" ! { yyval.ttype = build_typeid (yyvsp[-1].ttype); ;} break; case 365: ! #line 1701 "parse.y" { tree type = groktypename (yyvsp[-1].ftype.t); check_for_new_type ("typeid", yyvsp[-1].ftype); ! yyval.ttype = get_typeid (type); ;} break; case 366: ! #line 1705 "parse.y" ! { yyval.ttype = parse_scoped_id (yyvsp[0].ttype); ;} break; case 367: ! #line 1707 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 368: ! #line 1709 "parse.y" { got_scope = NULL_TREE; if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = parse_scoped_id (yyvsp[0].ttype); else yyval.ttype = yyvsp[0].ttype; ! ;} break; case 369: ! #line 1717 "parse.y" { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); if (!class_template_ok_as_expr && DECL_CLASS_TEMPLATE_P (yyval.ttype)) *************** yyreduce: *** 7143,7550 **** error ("invalid use of template `%D'", yyval.ttype); yyval.ttype = error_mark_node; } ! } break; case 370: ! #line 1674 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 0); } break; case 371: ! #line 1676 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 0); } break; case 372: ! #line 1678 "parse.y" ! { yyval.ttype = finish_class_member_access_expr (yyval.ttype, yyvsp[0].ttype); } break; case 373: ! #line 1680 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); } break; case 374: ! #line 1682 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); } break; case 375: ! #line 1684 "parse.y" ! { yyval.ttype = finish_class_member_access_expr (yyval.ttype, yyvsp[0].ttype); } break; case 376: ! #line 1686 "parse.y" ! { yyval.ttype = finish_class_member_access_expr (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 377: ! #line 1688 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); } break; case 378: ! #line 1690 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); } break; case 379: ! #line 1692 "parse.y" ! { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); } break; case 380: ! #line 1694 "parse.y" ! { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); } break; case 381: ! #line 1697 "parse.y" ! { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-3].ttype, NULL_TREE, yyvsp[-1].ttype); } break; case 382: ! #line 1699 "parse.y" ! { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-5].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); } break; case 383: ! #line 1701 "parse.y" { yyval.ttype = error_mark_node; ! } break; case 384: ! #line 1710 "parse.y" ! { yyval.itype = 0; } break; case 385: ! #line 1712 "parse.y" ! { got_scope = NULL_TREE; yyval.itype = 1; } break; case 386: ! #line 1717 "parse.y" ! { yyval.itype = 0; } break; case 387: ! #line 1719 "parse.y" ! { got_scope = NULL_TREE; yyval.itype = 1; } break; case 388: ! #line 1724 "parse.y" ! { yyval.ttype = boolean_true_node; } break; case 389: ! #line 1726 "parse.y" ! { yyval.ttype = boolean_false_node; } break; case 390: ! #line 1731 "parse.y" { if (DECL_CONSTRUCTOR_P (current_function_decl)) finish_mem_initializers (NULL_TREE); ! } break; case 391: ! #line 1739 "parse.y" ! { got_object = TREE_TYPE (yyval.ttype); } break; case 392: ! #line 1741 "parse.y" { yyval.ttype = build_x_arrow (yyval.ttype); got_object = TREE_TYPE (yyval.ttype); ! } break; case 393: ! #line 1749 "parse.y" { if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t))) note_got_semicolon (yyvsp[-2].ftype.t); ! } break; case 394: ! #line 1754 "parse.y" { note_list_got_semicolon (yyvsp[-2].ftype.t); ! } break; case 395: ! #line 1758 "parse.y" ! {} break; case 396: ! #line 1760 "parse.y" { shadow_tag (yyvsp[-1].ftype.t); note_list_got_semicolon (yyvsp[-1].ftype.t); ! } break; case 397: ! #line 1765 "parse.y" ! { warning ("empty declaration"); } break; case 398: ! #line 1767 "parse.y" ! { pedantic = yyvsp[-1].itype; } break; case 401: ! #line 1780 "parse.y" { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (), ! NULL_TREE, NULL_TREE); } break; case 402: ! #line 1783 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE, ! NULL_TREE); } break; case 403: ! #line 1790 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 404: ! #line 1793 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 405: ! #line 1796 "parse.y" { yyval.ftype.t = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 406: ! #line 1800 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 407: ! #line 1803 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 408: ! #line 1811 "parse.y" ! { yyval.ftype.lookups = type_lookups; } break; case 409: ! #line 1813 "parse.y" ! { yyval.ftype.lookups = type_lookups; } break; case 410: ! #line 1818 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 411: ! #line 1821 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 412: ! #line 1824 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); ! yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; } break; case 413: ! #line 1827 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 414: ! #line 1830 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 415: ! #line 1833 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ftype.t))); ! yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; } break; case 416: ! #line 1840 "parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyval.ttype)); ! yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); } break; case 417: ! #line 1845 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); } break; case 418: ! #line 1847 "parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); } break; case 419: ! #line 1859 "parse.y" ! { yyval.ftype.lookups = NULL_TREE; TREE_STATIC (yyval.ftype.t) = 1; } break; case 420: ! #line 1861 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ! } break; case 421: ! #line 1866 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); TREE_STATIC (yyval.ftype.t) = 1; ! } break; case 422: ! #line 1871 "parse.y" { if (extra_warnings && TREE_STATIC (yyval.ftype.t)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); TREE_STATIC (yyval.ftype.t) = TREE_STATIC (yyvsp[-1].ftype.t); ! } break; case 423: ! #line 1879 "parse.y" ! { yyval.ftype.t = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ftype.t); } break; case 424: ! #line 1886 "parse.y" { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 425: ! #line 1889 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 426: ! #line 1892 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 427: ! #line 1895 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 428: ! #line 1901 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); } break; case 429: ! #line 1903 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); } break; case 430: ! #line 1905 "parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); } break; case 431: ! #line 1907 "parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); } break; case 432: ! #line 1911 "parse.y" ! { skip_evaluation++; } break; case 433: ! #line 1915 "parse.y" ! { skip_evaluation++; } break; case 434: ! #line 1919 "parse.y" ! { skip_evaluation++; } break; case 435: ! #line 1926 "parse.y" ! { yyval.ftype.lookups = NULL_TREE; } break; case 436: ! #line 1928 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; } break; case 437: ! #line 1930 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; } break; case 438: ! #line 1932 "parse.y" { yyval.ftype.t = finish_typeof (yyvsp[-1].ttype); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ! skip_evaluation--; } break; case 439: ! #line 1936 "parse.y" { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ! skip_evaluation--; } break; case 440: ! #line 1940 "parse.y" { tree type = TREE_TYPE (yyvsp[-1].ttype); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; --- 7197,7604 ---- error ("invalid use of template `%D'", yyval.ttype); yyval.ttype = error_mark_node; } ! ;} break; case 370: ! #line 1726 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 0); ;} break; case 371: ! #line 1728 "parse.y" ! { yyval.ttype = parse_finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 0); ;} break; case 372: ! #line 1730 "parse.y" ! { yyval.ttype = finish_class_member_access_expr (yyval.ttype, yyvsp[0].ttype); ;} break; case 373: ! #line 1732 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;} break; case 374: ! #line 1734 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;} break; case 375: ! #line 1736 "parse.y" ! { yyval.ttype = finish_class_member_access_expr (yyval.ttype, yyvsp[0].ttype); ;} break; case 376: ! #line 1738 "parse.y" ! { yyval.ttype = finish_class_member_access_expr (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 377: ! #line 1740 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;} break; case 378: ! #line 1742 "parse.y" ! { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;} break; case 379: ! #line 1744 "parse.y" ! { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;} break; case 380: ! #line 1746 "parse.y" ! { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;} break; case 381: ! #line 1749 "parse.y" ! { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-3].ttype, NULL_TREE, yyvsp[-1].ttype); ;} break; case 382: ! #line 1751 "parse.y" ! { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-5].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;} break; case 383: ! #line 1753 "parse.y" { yyval.ttype = error_mark_node; ! ;} break; case 384: ! #line 1798 "parse.y" ! { yyval.itype = 0; ;} break; case 385: ! #line 1800 "parse.y" ! { got_scope = NULL_TREE; yyval.itype = 1; ;} break; case 386: ! #line 1805 "parse.y" ! { yyval.itype = 0; ;} break; case 387: ! #line 1807 "parse.y" ! { got_scope = NULL_TREE; yyval.itype = 1; ;} break; case 388: ! #line 1812 "parse.y" ! { yyval.ttype = boolean_true_node; ;} break; case 389: ! #line 1814 "parse.y" ! { yyval.ttype = boolean_false_node; ;} break; case 390: ! #line 1819 "parse.y" { if (DECL_CONSTRUCTOR_P (current_function_decl)) finish_mem_initializers (NULL_TREE); ! ;} break; case 391: ! #line 1827 "parse.y" ! { got_object = TREE_TYPE (yyval.ttype); ;} break; case 392: ! #line 1829 "parse.y" { yyval.ttype = build_x_arrow (yyval.ttype); got_object = TREE_TYPE (yyval.ttype); ! ;} break; case 393: ! #line 1837 "parse.y" { if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t))) note_got_semicolon (yyvsp[-2].ftype.t); ! ;} break; case 394: ! #line 1842 "parse.y" { note_list_got_semicolon (yyvsp[-2].ftype.t); ! ;} break; case 395: ! #line 1846 "parse.y" ! {;} break; case 396: ! #line 1848 "parse.y" { shadow_tag (yyvsp[-1].ftype.t); note_list_got_semicolon (yyvsp[-1].ftype.t); ! ;} break; case 397: ! #line 1853 "parse.y" ! { warning ("empty declaration"); ;} break; case 398: ! #line 1855 "parse.y" ! { pedantic = yyvsp[-1].itype; ;} break; case 401: ! #line 1869 "parse.y" { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (), ! NULL_TREE, NULL_TREE); ;} break; case 402: ! #line 1872 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE, ! NULL_TREE); ;} break; case 403: ! #line 1879 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 404: ! #line 1882 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 405: ! #line 1885 "parse.y" { yyval.ftype.t = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 406: ! #line 1889 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 407: ! #line 1892 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 408: ! #line 1903 "parse.y" ! { yyval.ftype.lookups = type_lookups; ;} break; case 409: ! #line 1905 "parse.y" ! { yyval.ftype.lookups = type_lookups; ;} break; case 410: ! #line 1910 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 411: ! #line 1913 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 412: ! #line 1916 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); ! yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;} break; case 413: ! #line 1919 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 414: ! #line 1922 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 415: ! #line 1925 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ftype.t))); ! yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;} break; case 416: ! #line 1932 "parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyval.ttype)); ! yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;} break; case 417: ! #line 1937 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ;} break; case 418: ! #line 1939 "parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;} break; case 419: ! #line 1961 "parse.y" ! { yyval.ftype.lookups = NULL_TREE; TREE_STATIC (yyval.ftype.t) = 1; ;} break; case 420: ! #line 1963 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ! ;} break; case 421: ! #line 1968 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); TREE_STATIC (yyval.ftype.t) = 1; ! ;} break; case 422: ! #line 1973 "parse.y" { if (extra_warnings && TREE_STATIC (yyval.ftype.t)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); TREE_STATIC (yyval.ftype.t) = TREE_STATIC (yyvsp[-1].ftype.t); ! ;} break; case 423: ! #line 1981 "parse.y" ! { yyval.ftype.t = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ftype.t); ;} break; case 424: ! #line 1992 "parse.y" { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 425: ! #line 1995 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 426: ! #line 1998 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 427: ! #line 2001 "parse.y" { yyval.ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 428: ! #line 2007 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;} break; case 429: ! #line 2009 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;} break; case 430: ! #line 2011 "parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;} break; case 431: ! #line 2013 "parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;} break; case 432: ! #line 2017 "parse.y" ! { skip_evaluation++; ;} break; case 433: ! #line 2021 "parse.y" ! { skip_evaluation++; ;} break; case 434: ! #line 2025 "parse.y" ! { skip_evaluation++; ;} break; case 435: ! #line 2034 "parse.y" ! { yyval.ftype.lookups = NULL_TREE; ;} break; case 436: ! #line 2036 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ;} break; case 437: ! #line 2038 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ;} break; case 438: ! #line 2040 "parse.y" { yyval.ftype.t = finish_typeof (yyvsp[-1].ttype); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ! skip_evaluation--; ;} break; case 439: ! #line 2044 "parse.y" { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; ! skip_evaluation--; ;} break; case 440: ! #line 2048 "parse.y" { tree type = TREE_TYPE (yyvsp[-1].ttype); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; *************** yyreduce: *** 7558,7568 **** error ("`sigof' applied to non-aggregate expression"); yyval.ftype.t = error_mark_node; } ! } break; case 441: ! #line 1955 "parse.y" { tree type = groktypename (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; --- 7612,7622 ---- error ("`sigof' applied to non-aggregate expression"); yyval.ftype.t = error_mark_node; } ! ;} break; case 441: ! #line 2063 "parse.y" { tree type = groktypename (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = 0; yyval.ftype.lookups = NULL_TREE; *************** yyreduce: *** 7576,7908 **** error("`sigof' applied to non-aggregate type"); yyval.ftype.t = error_mark_node; } ! } break; case 442: ! #line 1975 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; } break; case 443: ! #line 1977 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; } break; case 446: ! #line 1984 "parse.y" ! { check_multiple_declarators (); } break; case 448: ! #line 1990 "parse.y" ! { check_multiple_declarators (); } break; case 450: ! #line 1996 "parse.y" ! { check_multiple_declarators (); } break; case 451: ! #line 2001 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 452: ! #line 2003 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 453: ! #line 2008 "parse.y" ! { yyval.ttype = parse_decl (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); } break; case 454: ! #line 2011 "parse.y" ! { parse_end_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); } break; case 455: ! #line 2013 "parse.y" { yyval.ttype = parse_decl (yyvsp[-2].ttype, yyvsp[0].ttype, 0); parse_end_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype); ! } break; case 456: ! #line 2022 "parse.y" { yyval.ttype = parse_decl0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, ! yyvsp[-4].ftype.lookups, yyvsp[-1].ttype, 1); } break; case 457: ! #line 2026 "parse.y" ! { parse_end_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); } break; case 458: ! #line 2028 "parse.y" { tree d = parse_decl0 (yyvsp[-2].ttype, yyvsp[-3].ftype.t, yyvsp[-3].ftype.lookups, yyvsp[0].ttype, 0); ! parse_end_decl (d, NULL_TREE, yyvsp[-1].ttype); } break; case 459: ! #line 2035 "parse.y" ! {} break; case 460: ! #line 2040 "parse.y" ! {} break; case 461: ! #line 2045 "parse.y" { /* Set things up as initdcl0_innards expects. */ yyval.ttype = yyvsp[0].ttype; yyvsp[0].ttype = yyvsp[-1].ttype; yyvsp[-1].ftype.t = NULL_TREE; ! yyvsp[-1].ftype.lookups = NULL_TREE; } break; case 462: ! #line 2051 "parse.y" ! {} break; case 463: ! #line 2053 "parse.y" { tree d = parse_decl0 (yyvsp[-2].ttype, NULL_TREE, NULL_TREE, yyvsp[0].ttype, 0); ! parse_end_decl (d, NULL_TREE, yyvsp[-1].ttype); } break; case 464: ! #line 2060 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 465: ! #line 2062 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 466: ! #line 2067 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 467: ! #line 2069 "parse.y" ! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 468: ! #line 2074 "parse.y" ! { yyval.ttype = yyvsp[-2].ttype; } break; case 469: ! #line 2079 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 470: ! #line 2081 "parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 471: ! #line 2086 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 472: ! #line 2088 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); } break; case 473: ! #line 2090 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); } break; case 474: ! #line 2092 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); } break; case 475: ! #line 2094 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 480: ! #line 2109 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); } break; case 481: ! #line 2111 "parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 482: ! #line 2116 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 483: ! #line 2118 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 485: ! #line 2126 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE); ! TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; } break; case 486: ! #line 2129 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ! TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; } break; case 487: ! #line 2132 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ! TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; } break; case 488: ! #line 2135 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 489: ! #line 2141 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); } break; case 490: ! #line 2143 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); } break; case 491: ! #line 2146 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 492: ! #line 2148 "parse.y" ! { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[0].ttype); } break; case 493: ! #line 2150 "parse.y" ! { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); } break; case 494: ! #line 2155 "parse.y" { expand_body (finish_function (2)); process_next_inline (yyvsp[-2].pi); ! } break; case 495: ! #line 2160 "parse.y" { expand_body (finish_function (2)); process_next_inline (yyvsp[-2].pi); ! } break; case 496: ! #line 2165 "parse.y" { finish_function (2); ! process_next_inline (yyvsp[-2].pi); } break; case 499: ! #line 2178 "parse.y" ! { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 500: ! #line 2180 "parse.y" ! { replace_defarg (yyvsp[-2].ttype, error_mark_node); } break; case 502: ! #line 2186 "parse.y" ! { do_pending_defargs (); } break; case 503: ! #line 2188 "parse.y" ! { do_pending_defargs (); } break; case 504: ! #line 2193 "parse.y" { yyval.ttype = current_enum_type; ! current_enum_type = start_enum (yyvsp[-1].ttype); } break; case 505: ! #line 2196 "parse.y" { yyval.ftype.t = current_enum_type; finish_enum (current_enum_type); yyval.ftype.new_type_flag = 1; current_enum_type = yyvsp[-2].ttype; ! check_for_missing_semicolon (yyval.ftype.t); } break; case 506: ! #line 2202 "parse.y" { yyval.ttype = current_enum_type; ! current_enum_type = start_enum (make_anon_name ()); } break; case 507: ! #line 2205 "parse.y" { yyval.ftype.t = current_enum_type; finish_enum (current_enum_type); yyval.ftype.new_type_flag = 1; current_enum_type = yyvsp[-2].ttype; ! check_for_missing_semicolon (yyval.ftype.t); } break; case 508: ! #line 2211 "parse.y" { yyval.ftype.t = parse_xref_tag (enum_type_node, yyvsp[0].ttype, 1); ! yyval.ftype.new_type_flag = 0; } break; case 509: ! #line 2214 "parse.y" { yyval.ftype.t = parse_xref_tag (enum_type_node, yyvsp[0].ttype, 1); ! yyval.ftype.new_type_flag = 0; } break; case 510: ! #line 2217 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; if (!processing_template_decl) ! pedwarn ("using `typename' outside of template"); } break; case 511: ! #line 2223 "parse.y" { if (yyvsp[-1].ttype && yyvsp[-2].ftype.t != error_mark_node) { --- 7630,7962 ---- error("`sigof' applied to non-aggregate type"); yyval.ftype.t = error_mark_node; } ! ;} break; case 442: ! #line 2083 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;} break; case 443: ! #line 2085 "parse.y" ! { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;} break; case 446: ! #line 2092 "parse.y" ! { check_multiple_declarators (); ;} break; case 448: ! #line 2098 "parse.y" ! { check_multiple_declarators (); ;} break; case 450: ! #line 2104 "parse.y" ! { check_multiple_declarators (); ;} break; case 451: ! #line 2109 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 452: ! #line 2111 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 453: ! #line 2116 "parse.y" ! { yyval.ttype = parse_decl (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); ;} break; case 454: ! #line 2119 "parse.y" ! { parse_end_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;} break; case 455: ! #line 2121 "parse.y" { yyval.ttype = parse_decl (yyvsp[-2].ttype, yyvsp[0].ttype, 0); parse_end_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype); ! ;} break; case 456: ! #line 2135 "parse.y" { yyval.ttype = parse_decl0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, ! yyvsp[-4].ftype.lookups, yyvsp[-1].ttype, 1); ;} break; case 457: ! #line 2140 "parse.y" ! { parse_end_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;} break; case 458: ! #line 2142 "parse.y" { tree d = parse_decl0 (yyvsp[-2].ttype, yyvsp[-3].ftype.t, yyvsp[-3].ftype.lookups, yyvsp[0].ttype, 0); ! parse_end_decl (d, NULL_TREE, yyvsp[-1].ttype); ;} break; case 459: ! #line 2149 "parse.y" ! {;} break; case 460: ! #line 2154 "parse.y" ! {;} break; case 461: ! #line 2159 "parse.y" { /* Set things up as initdcl0_innards expects. */ yyval.ttype = yyvsp[0].ttype; yyvsp[0].ttype = yyvsp[-1].ttype; yyvsp[-1].ftype.t = NULL_TREE; ! yyvsp[-1].ftype.lookups = NULL_TREE; ;} break; case 462: ! #line 2165 "parse.y" ! {;} break; case 463: ! #line 2167 "parse.y" { tree d = parse_decl0 (yyvsp[-2].ttype, NULL_TREE, NULL_TREE, yyvsp[0].ttype, 0); ! parse_end_decl (d, NULL_TREE, yyvsp[-1].ttype); ;} break; case 464: ! #line 2175 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 465: ! #line 2177 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 466: ! #line 2182 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 467: ! #line 2184 "parse.y" ! { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 468: ! #line 2189 "parse.y" ! { yyval.ttype = yyvsp[-2].ttype; ;} break; case 469: ! #line 2194 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 470: ! #line 2196 "parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 471: ! #line 2201 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 472: ! #line 2203 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;} break; case 473: ! #line 2205 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;} break; case 474: ! #line 2207 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;} break; case 475: ! #line 2209 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 480: ! #line 2225 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;} break; case 481: ! #line 2227 "parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 482: ! #line 2232 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 483: ! #line 2234 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 485: ! #line 2243 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE); ! TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;} break; case 486: ! #line 2246 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ! TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;} break; case 487: ! #line 2249 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ! TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;} break; case 488: ! #line 2252 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 489: ! #line 2259 "parse.y" ! { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;} break; case 490: ! #line 2261 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;} break; case 491: ! #line 2264 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 492: ! #line 2266 "parse.y" ! { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[0].ttype); ;} break; case 493: ! #line 2268 "parse.y" ! { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;} break; case 494: ! #line 2273 "parse.y" { expand_body (finish_function (2)); process_next_inline (yyvsp[-2].pi); ! ;} break; case 495: ! #line 2278 "parse.y" { expand_body (finish_function (2)); process_next_inline (yyvsp[-2].pi); ! ;} break; case 496: ! #line 2283 "parse.y" { finish_function (2); ! process_next_inline (yyvsp[-2].pi); ;} break; case 499: ! #line 2297 "parse.y" ! { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 500: ! #line 2299 "parse.y" ! { replace_defarg (yyvsp[-2].ttype, error_mark_node); ;} break; case 502: ! #line 2305 "parse.y" ! { do_pending_defargs (); ;} break; case 503: ! #line 2307 "parse.y" ! { do_pending_defargs (); ;} break; case 504: ! #line 2312 "parse.y" { yyval.ttype = current_enum_type; ! current_enum_type = start_enum (yyvsp[-1].ttype); ;} break; case 505: ! #line 2315 "parse.y" { yyval.ftype.t = current_enum_type; finish_enum (current_enum_type); yyval.ftype.new_type_flag = 1; current_enum_type = yyvsp[-2].ttype; ! check_for_missing_semicolon (yyval.ftype.t); ;} break; case 506: ! #line 2321 "parse.y" { yyval.ttype = current_enum_type; ! current_enum_type = start_enum (make_anon_name ()); ;} break; case 507: ! #line 2324 "parse.y" { yyval.ftype.t = current_enum_type; finish_enum (current_enum_type); yyval.ftype.new_type_flag = 1; current_enum_type = yyvsp[-2].ttype; ! check_for_missing_semicolon (yyval.ftype.t); ;} break; case 508: ! #line 2330 "parse.y" { yyval.ftype.t = parse_xref_tag (enum_type_node, yyvsp[0].ttype, 1); ! yyval.ftype.new_type_flag = 0; ;} break; case 509: ! #line 2333 "parse.y" { yyval.ftype.t = parse_xref_tag (enum_type_node, yyvsp[0].ttype, 1); ! yyval.ftype.new_type_flag = 0; ;} break; case 510: ! #line 2336 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; if (!processing_template_decl) ! pedwarn ("using `typename' outside of template"); ;} break; case 511: ! #line 2342 "parse.y" { if (yyvsp[-1].ttype && yyvsp[-2].ftype.t != error_mark_node) { *************** yyreduce: *** 7926,7936 **** } yyvsp[-2].ftype.t = begin_class_definition (TREE_TYPE (yyvsp[-2].ftype.t)); check_class_key (current_aggr, yyvsp[-2].ftype.t); ! current_aggr = NULL_TREE; } break; case 512: ! #line 2248 "parse.y" { int semi; tree t; --- 7980,7990 ---- } yyvsp[-2].ftype.t = begin_class_definition (TREE_TYPE (yyvsp[-2].ftype.t)); check_class_key (current_aggr, yyvsp[-2].ftype.t); ! current_aggr = NULL_TREE; ;} break; case 512: ! #line 2367 "parse.y" { int semi; tree t; *************** yyreduce: *** 7947,8096 **** ? union_type_node : CLASSTYPE_DECLARED_CLASS (t) ? class_type_node : record_type_node; ! } break; case 513: ! #line 2266 "parse.y" { done_pending_defargs (); begin_inline_definitions (); ! } break; case 514: ! #line 2271 "parse.y" { yyval.ftype.t = yyvsp[-3].ttype; yyval.ftype.new_type_flag = 1; ! } break; case 515: ! #line 2276 "parse.y" { yyval.ftype.t = TREE_TYPE (yyvsp[0].ftype.t); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; check_class_key (current_aggr, yyval.ftype.t); ! } break; case 519: ! #line 2291 "parse.y" { if (pedantic && !in_system_header) ! pedwarn ("comma at end of enumerator list"); } break; case 521: ! #line 2298 "parse.y" ! { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); } break; case 522: ! #line 2300 "parse.y" ! { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); } break; case 523: ! #line 2302 "parse.y" ! { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); } break; case 524: ! #line 2304 "parse.y" ! { error ("no body nor ';' separates two class, struct or union declarations"); } break; case 525: ! #line 2306 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 526: ! #line 2311 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ! } break; case 527: ! #line 2316 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ! } break; case 528: ! #line 2321 "parse.y" { current_aggr = yyvsp[-3].ttype; yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ! } break; case 529: ! #line 2326 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = build_tree_list (global_namespace, yyvsp[0].ttype); ! } break; case 530: ! #line 2334 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ttype = yyvsp[0].ttype; ! } break; case 531: ! #line 2339 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = yyvsp[0].ttype; ! } break; case 532: ! #line 2344 "parse.y" { current_aggr = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ! } break; case 533: ! #line 2352 "parse.y" { yyval.ftype.t = parse_handle_class_head (current_aggr, TREE_PURPOSE (yyvsp[0].ttype), TREE_VALUE (yyvsp[0].ttype), 0, &yyval.ftype.new_type_flag); ! } break; case 534: ! #line 2359 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ftype.t = TYPE_MAIN_DECL (parse_xref_tag (current_aggr, yyvsp[0].ttype, 0)); yyval.ftype.new_type_flag = 1; ! } break; case 535: ! #line 2365 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ! } break; case 536: ! #line 2373 "parse.y" { yyungetc ('{', 1); yyval.ftype.t = parse_handle_class_head (current_aggr, --- 8001,8150 ---- ? union_type_node : CLASSTYPE_DECLARED_CLASS (t) ? class_type_node : record_type_node; ! ;} break; case 513: ! #line 2385 "parse.y" { done_pending_defargs (); begin_inline_definitions (); ! ;} break; case 514: ! #line 2390 "parse.y" { yyval.ftype.t = yyvsp[-3].ttype; yyval.ftype.new_type_flag = 1; ! ;} break; case 515: ! #line 2395 "parse.y" { yyval.ftype.t = TREE_TYPE (yyvsp[0].ftype.t); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; check_class_key (current_aggr, yyval.ftype.t); ! ;} break; case 519: ! #line 2410 "parse.y" { if (pedantic && !in_system_header) ! pedwarn ("comma at end of enumerator list"); ;} break; case 521: ! #line 2417 "parse.y" ! { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;} break; case 522: ! #line 2419 "parse.y" ! { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;} break; case 523: ! #line 2421 "parse.y" ! { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;} break; case 524: ! #line 2423 "parse.y" ! { error ("no body nor ';' separates two class, struct or union declarations"); ;} break; case 525: ! #line 2425 "parse.y" ! { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 526: ! #line 2430 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ! ;} break; case 527: ! #line 2435 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ! ;} break; case 528: ! #line 2440 "parse.y" { current_aggr = yyvsp[-3].ttype; yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ! ;} break; case 529: ! #line 2445 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = build_tree_list (global_namespace, yyvsp[0].ttype); ! ;} break; case 530: ! #line 2453 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ttype = yyvsp[0].ttype; ! ;} break; case 531: ! #line 2458 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = yyvsp[0].ttype; ! ;} break; case 532: ! #line 2463 "parse.y" { current_aggr = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ! ;} break; case 533: ! #line 2471 "parse.y" { yyval.ftype.t = parse_handle_class_head (current_aggr, TREE_PURPOSE (yyvsp[0].ttype), TREE_VALUE (yyvsp[0].ttype), 0, &yyval.ftype.new_type_flag); ! ;} break; case 534: ! #line 2478 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ftype.t = TYPE_MAIN_DECL (parse_xref_tag (current_aggr, yyvsp[0].ttype, 0)); yyval.ftype.new_type_flag = 1; ! ;} break; case 535: ! #line 2484 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ! ;} break; case 536: ! #line 2492 "parse.y" { yyungetc ('{', 1); yyval.ftype.t = parse_handle_class_head (current_aggr, *************** yyreduce: *** 8098,8159 **** TREE_VALUE (yyvsp[-1].ttype), 1, &yyval.ftype.new_type_flag); ! } break; case 537: ! #line 2382 "parse.y" { yyungetc (':', 1); yyval.ftype.t = parse_handle_class_head (current_aggr, TREE_PURPOSE (yyvsp[-1].ttype), TREE_VALUE (yyvsp[-1].ttype), 1, &yyval.ftype.new_type_flag); ! } break; case 538: ! #line 2390 "parse.y" { yyungetc ('{', 1); yyval.ftype.t = handle_class_head_apparent_template (yyvsp[-1].ttype, &yyval.ftype.new_type_flag); ! } break; case 539: ! #line 2396 "parse.y" { yyungetc (':', 1); yyval.ftype.t = handle_class_head_apparent_template (yyvsp[-1].ttype, &yyval.ftype.new_type_flag); ! } break; case 540: ! #line 2402 "parse.y" { yyungetc ('{', 1); current_aggr = yyvsp[-2].ttype; yyval.ftype.t = parse_handle_class_head (current_aggr, NULL_TREE, yyvsp[-1].ttype, 1, &yyval.ftype.new_type_flag); ! } break; case 541: ! #line 2410 "parse.y" { yyungetc (':', 1); current_aggr = yyvsp[-2].ttype; yyval.ftype.t = parse_handle_class_head (current_aggr, NULL_TREE, yyvsp[-1].ttype, 1, &yyval.ftype.new_type_flag); ! } break; case 542: ! #line 2418 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ftype.t = TYPE_MAIN_DECL (parse_xref_tag (yyvsp[-1].ttype, --- 8152,8213 ---- TREE_VALUE (yyvsp[-1].ttype), 1, &yyval.ftype.new_type_flag); ! ;} break; case 537: ! #line 2501 "parse.y" { yyungetc (':', 1); yyval.ftype.t = parse_handle_class_head (current_aggr, TREE_PURPOSE (yyvsp[-1].ttype), TREE_VALUE (yyvsp[-1].ttype), 1, &yyval.ftype.new_type_flag); ! ;} break; case 538: ! #line 2509 "parse.y" { yyungetc ('{', 1); yyval.ftype.t = handle_class_head_apparent_template (yyvsp[-1].ttype, &yyval.ftype.new_type_flag); ! ;} break; case 539: ! #line 2515 "parse.y" { yyungetc (':', 1); yyval.ftype.t = handle_class_head_apparent_template (yyvsp[-1].ttype, &yyval.ftype.new_type_flag); ! ;} break; case 540: ! #line 2521 "parse.y" { yyungetc ('{', 1); current_aggr = yyvsp[-2].ttype; yyval.ftype.t = parse_handle_class_head (current_aggr, NULL_TREE, yyvsp[-1].ttype, 1, &yyval.ftype.new_type_flag); ! ;} break; case 541: ! #line 2529 "parse.y" { yyungetc (':', 1); current_aggr = yyvsp[-2].ttype; yyval.ftype.t = parse_handle_class_head (current_aggr, NULL_TREE, yyvsp[-1].ttype, 1, &yyval.ftype.new_type_flag); ! ;} break; case 542: ! #line 2537 "parse.y" { current_aggr = yyvsp[-1].ttype; yyval.ftype.t = TYPE_MAIN_DECL (parse_xref_tag (yyvsp[-1].ttype, *************** yyreduce: *** 8163,8222 **** CLASSTYPE_DECLARED_CLASS (TREE_TYPE (yyval.ftype.t)) = yyvsp[-1].ttype == class_type_node; yyungetc ('{', 1); ! } break; case 543: ! #line 2432 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 544: ! #line 2434 "parse.y" { error ("no bases given following `:'"); ! yyval.ttype = NULL_TREE; } break; case 545: ! #line 2437 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 547: ! #line 2443 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); } break; case 548: ! #line 2448 "parse.y" ! { yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype); } break; case 549: ! #line 2450 "parse.y" ! { yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 550: ! #line 2455 "parse.y" { if (!TYPE_P (yyval.ttype)) ! yyval.ttype = error_mark_node; } break; case 551: ! #line 2458 "parse.y" ! { yyval.ttype = TREE_TYPE (yyval.ttype); } break; case 553: ! #line 2464 "parse.y" { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL]) error ("`%D' access", yyvsp[-1].ttype); ! yyval.ttype = access_default_virtual_node; } break; case 554: ! #line 2468 "parse.y" { if (yyvsp[-2].ttype != access_default_virtual_node) error ("multiple access specifiers"); --- 8217,8276 ---- CLASSTYPE_DECLARED_CLASS (TREE_TYPE (yyval.ftype.t)) = yyvsp[-1].ttype == class_type_node; yyungetc ('{', 1); ! ;} break; case 543: ! #line 2551 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 544: ! #line 2553 "parse.y" { error ("no bases given following `:'"); ! yyval.ttype = NULL_TREE; ;} break; case 545: ! #line 2556 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 547: ! #line 2562 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;} break; case 548: ! #line 2567 "parse.y" ! { yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype); ;} break; case 549: ! #line 2569 "parse.y" ! { yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 550: ! #line 2574 "parse.y" { if (!TYPE_P (yyval.ttype)) ! yyval.ttype = error_mark_node; ;} break; case 551: ! #line 2577 "parse.y" ! { yyval.ttype = TREE_TYPE (yyval.ttype); ;} break; case 553: ! #line 2583 "parse.y" { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL]) error ("`%D' access", yyvsp[-1].ttype); ! yyval.ttype = access_default_virtual_node; ;} break; case 554: ! #line 2587 "parse.y" { if (yyvsp[-2].ttype != access_default_virtual_node) error ("multiple access specifiers"); *************** yyreduce: *** 8226,8236 **** yyval.ttype = access_protected_virtual_node; else /* $2 == access_private_node */ yyval.ttype = access_private_virtual_node; ! } break; case 555: ! #line 2479 "parse.y" { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL]) error ("`%D' access", yyvsp[-1].ttype); else if (yyval.ttype == access_public_node) --- 8280,8290 ---- yyval.ttype = access_protected_virtual_node; else /* $2 == access_private_node */ yyval.ttype = access_private_virtual_node; ! ;} break; case 555: ! #line 2598 "parse.y" { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL]) error ("`%D' access", yyvsp[-1].ttype); else if (yyval.ttype == access_public_node) *************** yyreduce: *** 8241,8313 **** yyval.ttype = access_private_virtual_node; else error ("multiple `virtual' specifiers"); ! } break; case 560: ! #line 2500 "parse.y" { current_access_specifier = yyvsp[-1].ttype; ! } break; case 561: ! #line 2508 "parse.y" { finish_member_declaration (yyvsp[0].ttype); current_aggr = NULL_TREE; reset_type_access_control (); ! } break; case 562: ! #line 2514 "parse.y" { finish_member_declaration (yyvsp[0].ttype); current_aggr = NULL_TREE; reset_type_access_control (); ! } break; case 564: ! #line 2524 "parse.y" { error ("missing ';' before right brace"); ! yyungetc ('}', 0); } break; case 565: ! #line 2529 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); } break; case 566: ! #line 2531 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); } break; case 567: ! #line 2533 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); } break; case 568: ! #line 2535 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); } break; case 569: ! #line 2537 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 570: ! #line 2539 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! pedantic = yyvsp[-1].itype; } break; case 571: ! #line 2542 "parse.y" { if (yyvsp[0].ttype) yyval.ttype = finish_member_template_decl (yyvsp[0].ttype); --- 8295,8367 ---- yyval.ttype = access_private_virtual_node; else error ("multiple `virtual' specifiers"); ! ;} break; case 560: ! #line 2619 "parse.y" { current_access_specifier = yyvsp[-1].ttype; ! ;} break; case 561: ! #line 2628 "parse.y" { finish_member_declaration (yyvsp[0].ttype); current_aggr = NULL_TREE; reset_type_access_control (); ! ;} break; case 562: ! #line 2634 "parse.y" { finish_member_declaration (yyvsp[0].ttype); current_aggr = NULL_TREE; reset_type_access_control (); ! ;} break; case 564: ! #line 2644 "parse.y" { error ("missing ';' before right brace"); ! yyungetc ('}', 0); ;} break; case 565: ! #line 2649 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); ;} break; case 566: ! #line 2651 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); ;} break; case 567: ! #line 2653 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); ;} break; case 568: ! #line 2655 "parse.y" ! { yyval.ttype = finish_method (yyval.ttype); ;} break; case 569: ! #line 2657 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 570: ! #line 2659 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! pedantic = yyvsp[-1].itype; ;} break; case 571: ! #line 2662 "parse.y" { if (yyvsp[0].ttype) yyval.ttype = finish_member_template_decl (yyvsp[0].ttype); *************** yyreduce: *** 8316,8339 **** yyval.ttype = NULL_TREE; finish_template_decl (yyvsp[-1].ttype); ! } break; case 572: ! #line 2552 "parse.y" { yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); finish_template_decl (yyvsp[-2].ttype); ! } break; case 573: ! #line 2557 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 574: ! #line 2563 "parse.y" { /* Most of the productions for component_decl only allow the creation of one new member, so we call --- 8370,8393 ---- yyval.ttype = NULL_TREE; finish_template_decl (yyvsp[-1].ttype); ! ;} break; case 572: ! #line 2672 "parse.y" { yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); finish_template_decl (yyvsp[-2].ttype); ! ;} break; case 573: ! #line 2677 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 574: ! #line 2685 "parse.y" { /* Most of the productions for component_decl only allow the creation of one new member, so we call *************** yyreduce: *** 8353,8673 **** if (!yyvsp[0].itype) grok_x_components (yyvsp[-1].ftype.t); yyval.ttype = NULL_TREE; ! } break; case 575: ! #line 2584 "parse.y" { if (!yyvsp[0].itype) grok_x_components (yyvsp[-1].ftype.t); yyval.ttype = NULL_TREE; ! } break; case 576: ! #line 2590 "parse.y" ! { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 577: ! #line 2592 "parse.y" ! { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 578: ! #line 2594 "parse.y" ! { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); } break; case 579: ! #line 2596 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 580: ! #line 2600 "parse.y" { tree specs, attrs; split_specs_attrs (yyvsp[-4].ftype.t, &specs, &attrs); yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype, ! chainon (yyvsp[-1].ttype, attrs)); } break; case 581: ! #line 2605 "parse.y" ! { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); } break; case 582: ! #line 2607 "parse.y" ! { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); } break; case 583: ! #line 2614 "parse.y" ! { yyval.itype = 0; } break; case 584: ! #line 2616 "parse.y" { if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 1; ! } break; case 585: ! #line 2623 "parse.y" { check_multiple_declarators (); if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 2; ! } break; case 586: ! #line 2634 "parse.y" ! { yyval.itype = 0; } break; case 587: ! #line 2636 "parse.y" { if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 1; ! } break; case 588: ! #line 2643 "parse.y" { check_multiple_declarators (); if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 2; ! } break; case 593: ! #line 2664 "parse.y" { yyval.ttype = parse_field0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 594: ! #line 2667 "parse.y" { yyval.ttype = parse_bitfield0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 595: ! #line 2673 "parse.y" { yyval.ttype = parse_field0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 596: ! #line 2676 "parse.y" { yyval.ttype = parse_field0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 597: ! #line 2679 "parse.y" { yyval.ttype = parse_bitfield0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 598: ! #line 2682 "parse.y" { yyval.ttype = parse_bitfield0 (NULL_TREE, yyvsp[-3].ftype.t, ! yyvsp[-3].ftype.lookups, yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 599: ! #line 2688 "parse.y" ! { yyval.ttype = parse_field (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 600: ! #line 2690 "parse.y" ! { yyval.ttype = parse_bitfield (yyvsp[-3].ttype, yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 601: ! #line 2695 "parse.y" ! { yyval.ttype = parse_field (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); } break; case 602: ! #line 2697 "parse.y" ! { yyval.ttype = parse_bitfield (yyvsp[-3].ttype, yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 603: ! #line 2699 "parse.y" ! { yyval.ttype = parse_bitfield (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 608: ! #line 2716 "parse.y" ! { build_enumerator (yyvsp[0].ttype, NULL_TREE, current_enum_type); } break; case 609: ! #line 2718 "parse.y" ! { build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype, current_enum_type); } break; case 610: ! #line 2724 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 611: ! #line 2727 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 612: ! #line 2731 "parse.y" { if (pedantic) pedwarn ("ISO C++ forbids array dimensions with parenthesized type in new"); yyval.ftype.t = build_nt (ARRAY_REF, TREE_VALUE (yyvsp[-4].ftype.t), yyvsp[-1].ttype); yyval.ftype.t = build_tree_list (TREE_PURPOSE (yyvsp[-4].ftype.t), yyval.ftype.t); yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag; ! } break; case 613: ! #line 2742 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 614: ! #line 2744 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); } break; case 615: ! #line 2749 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! yyval.ftype.new_type_flag = 0; } break; case 616: ! #line 2752 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 617: ! #line 2755 "parse.y" { yyval.ftype.t = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! yyval.ftype.new_type_flag = 0; } break; case 618: ! #line 2758 "parse.y" { yyval.ftype.t = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 619: ! #line 2767 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 620: ! #line 2769 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 621: ! #line 2771 "parse.y" ! { yyval.ttype = empty_parms (); } break; case 622: ! #line 2773 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 624: ! #line 2781 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! } break; case 625: ! #line 2791 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 626: ! #line 2793 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 627: ! #line 2795 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 628: ! #line 2797 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 629: ! #line 2799 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! } break; case 631: ! #line 2807 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 632: ! #line 2809 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); } break; case 633: ! #line 2811 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, NULL_TREE); } break; case 634: ! #line 2813 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 635: ! #line 2815 "parse.y" { push_nested_class (yyvsp[-1].ttype, 3); yyval.ttype = build_nt (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ! TREE_COMPLEXITY (yyval.ttype) = current_class_depth; } break; case 637: ! #line 2823 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) { --- 8407,8727 ---- if (!yyvsp[0].itype) grok_x_components (yyvsp[-1].ftype.t); yyval.ttype = NULL_TREE; ! ;} break; case 575: ! #line 2706 "parse.y" { if (!yyvsp[0].itype) grok_x_components (yyvsp[-1].ftype.t); yyval.ttype = NULL_TREE; ! ;} break; case 576: ! #line 2712 "parse.y" ! { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 577: ! #line 2714 "parse.y" ! { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 578: ! #line 2716 "parse.y" ! { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;} break; case 579: ! #line 2718 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 580: ! #line 2729 "parse.y" { tree specs, attrs; split_specs_attrs (yyvsp[-4].ftype.t, &specs, &attrs); yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype, ! chainon (yyvsp[-1].ttype, attrs)); ;} break; case 581: ! #line 2734 "parse.y" ! { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype); ;} break; case 582: ! #line 2736 "parse.y" ! { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;} break; case 583: ! #line 2743 "parse.y" ! { yyval.itype = 0; ;} break; case 584: ! #line 2745 "parse.y" { if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 1; ! ;} break; case 585: ! #line 2752 "parse.y" { check_multiple_declarators (); if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 2; ! ;} break; case 586: ! #line 2763 "parse.y" ! { yyval.itype = 0; ;} break; case 587: ! #line 2765 "parse.y" { if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 1; ! ;} break; case 588: ! #line 2772 "parse.y" { check_multiple_declarators (); if (PROCESSING_REAL_TEMPLATE_DECL_P ()) yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype); finish_member_declaration (yyvsp[0].ttype); yyval.itype = 2; ! ;} break; case 593: ! #line 2793 "parse.y" { yyval.ttype = parse_field0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 594: ! #line 2796 "parse.y" { yyval.ttype = parse_bitfield0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 595: ! #line 2802 "parse.y" { yyval.ttype = parse_field0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 596: ! #line 2805 "parse.y" { yyval.ttype = parse_field0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 597: ! #line 2808 "parse.y" { yyval.ttype = parse_bitfield0 (yyvsp[-3].ttype, yyvsp[-4].ftype.t, yyvsp[-4].ftype.lookups, ! yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 598: ! #line 2811 "parse.y" { yyval.ttype = parse_bitfield0 (NULL_TREE, yyvsp[-3].ftype.t, ! yyvsp[-3].ftype.lookups, yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 599: ! #line 2817 "parse.y" ! { yyval.ttype = parse_field (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 600: ! #line 2819 "parse.y" ! { yyval.ttype = parse_bitfield (yyvsp[-3].ttype, yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 601: ! #line 2824 "parse.y" ! { yyval.ttype = parse_field (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;} break; case 602: ! #line 2826 "parse.y" ! { yyval.ttype = parse_bitfield (yyvsp[-3].ttype, yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 603: ! #line 2828 "parse.y" ! { yyval.ttype = parse_bitfield (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 608: ! #line 2847 "parse.y" ! { build_enumerator (yyvsp[0].ttype, NULL_TREE, current_enum_type); ;} break; case 609: ! #line 2849 "parse.y" ! { build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype, current_enum_type); ;} break; case 610: ! #line 2855 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 611: ! #line 2858 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 612: ! #line 2863 "parse.y" { if (pedantic) pedwarn ("ISO C++ forbids array dimensions with parenthesized type in new"); yyval.ftype.t = build_nt (ARRAY_REF, TREE_VALUE (yyvsp[-4].ftype.t), yyvsp[-1].ttype); yyval.ftype.t = build_tree_list (TREE_PURPOSE (yyvsp[-4].ftype.t), yyval.ftype.t); yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag; ! ;} break; case 613: ! #line 2874 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 614: ! #line 2876 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;} break; case 615: ! #line 2881 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! yyval.ftype.new_type_flag = 0; ;} break; case 616: ! #line 2884 "parse.y" { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 617: ! #line 2887 "parse.y" { yyval.ftype.t = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! yyval.ftype.new_type_flag = 0; ;} break; case 618: ! #line 2890 "parse.y" { yyval.ftype.t = hash_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 619: ! #line 2900 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 620: ! #line 2902 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 621: ! #line 2904 "parse.y" ! { yyval.ttype = empty_parms (); ;} break; case 622: ! #line 2906 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 624: ! #line 2914 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! ;} break; case 625: ! #line 2924 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 626: ! #line 2926 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 627: ! #line 2928 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 628: ! #line 2930 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 629: ! #line 2932 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! ;} break; case 631: ! #line 2940 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 632: ! #line 2942 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;} break; case 633: ! #line 2944 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, NULL_TREE); ;} break; case 634: ! #line 2946 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 635: ! #line 2948 "parse.y" { push_nested_class (yyvsp[-1].ttype, 3); yyval.ttype = build_nt (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ! TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;} break; case 637: ! #line 2956 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) { *************** yyreduce: *** 8676,8882 **** } else yyval.ttype = yyvsp[0].ttype; ! } break; case 638: ! #line 2833 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); else yyval.ttype = yyvsp[0].ttype; got_scope = NULL_TREE; ! } break; case 641: ! #line 2846 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 642: ! #line 2851 "parse.y" ! { yyval.ttype = get_type_decl (yyvsp[0].ttype); } break; case 644: ! #line 2859 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! } break; case 645: ! #line 2868 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 646: ! #line 2870 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 647: ! #line 2872 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 648: ! #line 2874 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 649: ! #line 2876 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! } break; case 651: ! #line 2884 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 652: ! #line 2886 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 653: ! #line 2888 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 654: ! #line 2890 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 655: ! #line 2892 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! } break; case 657: ! #line 2900 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 658: ! #line 2902 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 659: ! #line 2904 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); } break; case 660: ! #line 2906 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, NULL_TREE); } break; case 661: ! #line 2908 "parse.y" ! { enter_scope_of (yyvsp[0].ttype); } break; case 662: ! #line 2910 "parse.y" ! { enter_scope_of (yyvsp[0].ttype); yyval.ttype = yyvsp[0].ttype;} break; case 663: ! #line 2912 "parse.y" { yyval.ttype = build_nt (SCOPE_REF, global_namespace, yyvsp[0].ttype); enter_scope_of (yyval.ttype); ! } break; case 664: ! #line 2916 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); enter_scope_of (yyval.ttype); ! } break; case 665: ! #line 2924 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); } break; case 666: ! #line 2927 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 667: ! #line 2933 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); } break; case 668: ! #line 2936 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 670: ! #line 2943 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 671: ! #line 2948 "parse.y" ! { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); } break; case 672: ! #line 2950 "parse.y" ! { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); } break; case 673: ! #line 2952 "parse.y" ! { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 678: ! #line 2964 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 679: ! #line 2966 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); } break; case 680: ! #line 2970 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); } break; case 681: ! #line 2973 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); } break; case 682: ! #line 2980 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) { --- 8730,8936 ---- } else yyval.ttype = yyvsp[0].ttype; ! ;} break; case 638: ! #line 2966 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); else yyval.ttype = yyvsp[0].ttype; got_scope = NULL_TREE; ! ;} break; case 641: ! #line 2979 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 642: ! #line 2984 "parse.y" ! { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;} break; case 644: ! #line 2993 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! ;} break; case 645: ! #line 3002 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 646: ! #line 3004 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 647: ! #line 3006 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 648: ! #line 3008 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 649: ! #line 3010 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! ;} break; case 651: ! #line 3018 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 652: ! #line 3020 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 653: ! #line 3022 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 654: ! #line 3024 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 655: ! #line 3026 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! ;} break; case 657: ! #line 3034 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 658: ! #line 3036 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 659: ! #line 3038 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;} break; case 660: ! #line 3040 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, NULL_TREE); ;} break; case 661: ! #line 3042 "parse.y" ! { enter_scope_of (yyvsp[0].ttype); ;} break; case 662: ! #line 3044 "parse.y" ! { enter_scope_of (yyvsp[0].ttype); yyval.ttype = yyvsp[0].ttype;;} break; case 663: ! #line 3046 "parse.y" { yyval.ttype = build_nt (SCOPE_REF, global_namespace, yyvsp[0].ttype); enter_scope_of (yyval.ttype); ! ;} break; case 664: ! #line 3050 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); enter_scope_of (yyval.ttype); ! ;} break; case 665: ! #line 3058 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;} break; case 666: ! #line 3061 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 667: ! #line 3067 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;} break; case 668: ! #line 3070 "parse.y" { got_scope = NULL_TREE; ! yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 670: ! #line 3077 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 671: ! #line 3082 "parse.y" ! { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;} break; case 672: ! #line 3084 "parse.y" ! { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;} break; case 673: ! #line 3086 "parse.y" ! { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 678: ! #line 3098 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 679: ! #line 3100 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); ;} break; case 680: ! #line 3104 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); ;} break; case 681: ! #line 3107 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); ;} break; case 682: ! #line 3115 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) { *************** yyreduce: *** 8885,8923 **** } got_scope = yyval.ttype = complete_type (TYPE_MAIN_VARIANT (TREE_TYPE (yyval.ttype))); ! } break; case 683: ! #line 2990 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype = TREE_TYPE (yyval.ttype); ! } break; case 684: ! #line 2996 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! } break; case 685: ! #line 3002 "parse.y" ! { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); } break; case 687: ! #line 3008 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 688: ! #line 3013 "parse.y" { if (TYPE_P (yyvsp[-1].ttype)) yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype, tf_error | tf_parsing); --- 8939,8977 ---- } got_scope = yyval.ttype = complete_type (TYPE_MAIN_VARIANT (TREE_TYPE (yyval.ttype))); ! ;} break; case 683: ! #line 3125 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype = TREE_TYPE (yyval.ttype); ! ;} break; case 684: ! #line 3131 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! ;} break; case 685: ! #line 3137 "parse.y" ! { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;} break; case 687: ! #line 3143 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 688: ! #line 3148 "parse.y" { if (TYPE_P (yyvsp[-1].ttype)) yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype, tf_error | tf_parsing); *************** yyreduce: *** 8929,8964 **** if (TREE_CODE (yyval.ttype) == TYPE_DECL) yyval.ttype = TREE_TYPE (yyval.ttype); } ! } break; case 689: ! #line 3026 "parse.y" ! { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); } break; case 690: ! #line 3028 "parse.y" ! { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype, tf_error | tf_parsing); } break; case 691: ! #line 3030 "parse.y" ! { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype, tf_error | tf_parsing); } break; case 692: ! #line 3035 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) error ("`%T' is not a class or namespace", yyvsp[0].ttype); else if (TREE_CODE (yyvsp[0].ttype) == TYPE_DECL) yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ! } break; case 693: ! #line 3042 "parse.y" { if (TYPE_P (yyvsp[-1].ttype)) yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype, tf_error | tf_parsing); --- 8983,9018 ---- if (TREE_CODE (yyval.ttype) == TYPE_DECL) yyval.ttype = TREE_TYPE (yyval.ttype); } ! ;} break; case 689: ! #line 3161 "parse.y" ! { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;} break; case 690: ! #line 3163 "parse.y" ! { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype, tf_error | tf_parsing); ;} break; case 691: ! #line 3165 "parse.y" ! { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype, tf_error | tf_parsing); ;} break; case 692: ! #line 3170 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) error ("`%T' is not a class or namespace", yyvsp[0].ttype); else if (TREE_CODE (yyvsp[0].ttype) == TYPE_DECL) yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ! ;} break; case 693: ! #line 3177 "parse.y" { if (TYPE_P (yyvsp[-1].ttype)) yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype, tf_error | tf_parsing); *************** yyreduce: *** 8970,8992 **** if (TREE_CODE (yyval.ttype) == TYPE_DECL) yyval.ttype = TREE_TYPE (yyval.ttype); } ! } break; case 694: ! #line 3055 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); } break; case 695: ! #line 3058 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); } break; case 696: ! #line 3065 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != TYPE_DECL) yyval.ttype = lastiddecl; --- 9024,9046 ---- if (TREE_CODE (yyval.ttype) == TYPE_DECL) yyval.ttype = TREE_TYPE (yyval.ttype); } ! ;} break; case 694: ! #line 3190 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); ;} break; case 695: ! #line 3193 "parse.y" { got_scope = yyval.ttype ! = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype, tf_error | tf_parsing); ;} break; case 696: ! #line 3201 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != TYPE_DECL) yyval.ttype = lastiddecl; *************** yyreduce: *** 8997,9571 **** if (yyval.ttype == error_mark_node) error ("`%T' is not a class or namespace", yyvsp[-1].ttype); ! } break; case 697: ! #line 3077 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != TYPE_DECL) yyval.ttype = lastiddecl; got_scope = complete_type (TREE_TYPE (yyval.ttype)); ! } break; case 698: ! #line 3083 "parse.y" ! { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); } break; case 701: ! #line 3087 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! } break; case 702: ! #line 3096 "parse.y" ! { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 703: ! #line 3101 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); else yyval.ttype = yyvsp[0].ttype; got_scope = NULL_TREE; ! } break; case 705: ! #line 3110 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 706: ! #line 3115 "parse.y" ! { got_scope = NULL_TREE; } break; case 707: ! #line 3117 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; } break; case 708: ! #line 3123 "parse.y" ! { got_scope = void_type_node; } break; case 709: ! #line 3129 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 710: ! #line 3131 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); } break; case 711: ! #line 3133 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 712: ! #line 3135 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); } break; case 713: ! #line 3137 "parse.y" { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, arg); ! } break; case 714: ! #line 3141 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! } break; case 716: ! #line 3150 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); } break; case 717: ! #line 3152 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); } break; case 719: ! #line 3158 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! } break; case 720: ! #line 3168 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 721: ! #line 3170 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 722: ! #line 3172 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); } break; case 723: ! #line 3174 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); } break; case 724: ! #line 3176 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 725: ! #line 3178 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); } break; case 726: ! #line 3180 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); } break; case 727: ! #line 3182 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); } break; case 728: ! #line 3184 "parse.y" { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, arg); ! } break; case 729: ! #line 3188 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! } break; case 731: ! #line 3197 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 732: ! #line 3200 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 733: ! #line 3202 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 734: ! #line 3204 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); } break; case 735: ! #line 3206 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, NULL_TREE); } break; case 736: ! #line 3208 "parse.y" ! { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 737: ! #line 3210 "parse.y" ! { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 738: ! #line 3212 "parse.y" ! { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 739: ! #line 3214 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); } break; case 740: ! #line 3216 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); } break; case 747: ! #line 3236 "parse.y" { if (pedantic) ! pedwarn ("ISO C++ forbids label declarations"); } break; case 750: ! #line 3247 "parse.y" { while (yyvsp[-1].ttype) { finish_label_decl (TREE_VALUE (yyvsp[-1].ttype)); yyvsp[-1].ttype = TREE_CHAIN (yyvsp[-1].ttype); } ! } break; case 751: ! #line 3258 "parse.y" ! { yyval.ttype = begin_compound_stmt (0); } break; case 752: ! #line 3260 "parse.y" { STMT_LINENO (yyvsp[-1].ttype) = yyvsp[-3].itype; ! finish_compound_stmt (0, yyvsp[-1].ttype); } break; case 753: ! #line 3266 "parse.y" ! { last_expr_type = NULL_TREE; } break; case 754: ! #line 3271 "parse.y" { yyval.ttype = begin_if_stmt (); ! cond_stmt_keyword = "if"; } break; case 755: ! #line 3274 "parse.y" ! { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 756: ! #line 3276 "parse.y" { yyval.ttype = yyvsp[-3].ttype; ! finish_then_clause (yyvsp[-3].ttype); } break; case 758: ! #line 3283 "parse.y" ! { yyval.ttype = begin_compound_stmt (0); } break; case 759: ! #line 3285 "parse.y" { STMT_LINENO (yyvsp[-2].ttype) = yyvsp[-1].itype; if (yyvsp[0].ttype) STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].itype; ! finish_compound_stmt (0, yyvsp[-2].ttype); } break; case 761: ! #line 3293 "parse.y" ! { if (yyvsp[0].ttype) STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].itype; } break; case 762: ! #line 3298 "parse.y" { finish_stmt (); ! yyval.ttype = NULL_TREE; } break; case 763: ! #line 3301 "parse.y" ! { yyval.ttype = finish_expr_stmt (yyvsp[-1].ttype); } break; case 764: ! #line 3303 "parse.y" ! { begin_else_clause (); } break; case 765: ! #line 3305 "parse.y" { yyval.ttype = yyvsp[-3].ttype; finish_else_clause (yyvsp[-3].ttype); finish_if_stmt (); ! } break; case 766: ! #line 3311 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! finish_if_stmt (); } break; case 767: ! #line 3314 "parse.y" { yyval.ttype = begin_while_stmt (); cond_stmt_keyword = "while"; ! } break; case 768: ! #line 3319 "parse.y" ! { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 769: ! #line 3321 "parse.y" { yyval.ttype = yyvsp[-3].ttype; ! finish_while_stmt (yyvsp[-3].ttype); } break; case 770: ! #line 3324 "parse.y" ! { yyval.ttype = begin_do_stmt (); } break; case 771: ! #line 3326 "parse.y" { finish_do_body (yyvsp[-2].ttype); cond_stmt_keyword = "do"; ! } break; case 772: ! #line 3331 "parse.y" { yyval.ttype = yyvsp[-5].ttype; ! finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); } break; case 773: ! #line 3334 "parse.y" ! { yyval.ttype = begin_for_stmt (); } break; case 774: ! #line 3336 "parse.y" ! { finish_for_init_stmt (yyvsp[-2].ttype); } break; case 775: ! #line 3338 "parse.y" ! { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); } break; case 776: ! #line 3340 "parse.y" ! { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); } break; case 777: ! #line 3342 "parse.y" { yyval.ttype = yyvsp[-10].ttype; ! finish_for_stmt (yyvsp[-10].ttype); } break; case 778: ! #line 3345 "parse.y" ! { yyval.ttype = begin_switch_stmt (); } break; case 779: ! #line 3347 "parse.y" ! { finish_switch_cond (yyvsp[-1].ttype, yyvsp[-3].ttype); } break; case 780: ! #line 3349 "parse.y" { yyval.ttype = yyvsp[-5].ttype; ! finish_switch_stmt (yyvsp[-5].ttype); } break; case 781: ! #line 3352 "parse.y" ! { yyval.ttype = finish_case_label (yyvsp[-1].ttype, NULL_TREE); } break; case 782: ! #line 3354 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 783: ! #line 3356 "parse.y" ! { yyval.ttype = finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); } break; case 784: ! #line 3358 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 785: ! #line 3360 "parse.y" ! { yyval.ttype = finish_case_label (NULL_TREE, NULL_TREE); } break; case 786: ! #line 3362 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 787: ! #line 3364 "parse.y" ! { yyval.ttype = finish_break_stmt (); } break; case 788: ! #line 3366 "parse.y" ! { yyval.ttype = finish_continue_stmt (); } break; case 789: ! #line 3368 "parse.y" ! { yyval.ttype = finish_return_stmt (NULL_TREE); } break; case 790: ! #line 3370 "parse.y" ! { yyval.ttype = finish_return_stmt (yyvsp[-1].ttype); } break; case 791: ! #line 3372 "parse.y" { yyval.ttype = finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE, NULL_TREE); ! ASM_INPUT_P (yyval.ttype) = 1; } break; case 792: ! #line 3377 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); } break; case 793: ! #line 3381 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); } break; case 794: ! #line 3383 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, NULL_TREE, yyvsp[-2].ttype, NULL_TREE); } break; case 795: ! #line 3387 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); } break; case 796: ! #line 3390 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, NULL_TREE, yyvsp[-4].ttype, yyvsp[-2].ttype); } break; case 797: ! #line 3393 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, NULL_TREE, yyvsp[-2].ttype); } break; case 798: ! #line 3395 "parse.y" { if (pedantic) pedwarn ("ISO C++ forbids computed gotos"); yyval.ttype = finish_goto_stmt (yyvsp[-1].ttype); ! } break; case 799: ! #line 3401 "parse.y" ! { yyval.ttype = finish_goto_stmt (yyvsp[-1].ttype); } break; case 800: ! #line 3403 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 801: ! #line 3405 "parse.y" { error ("label must be followed by statement"); yyungetc ('}', 0); ! yyval.ttype = NULL_TREE; } break; case 802: ! #line 3409 "parse.y" { finish_stmt (); ! yyval.ttype = NULL_TREE; } break; case 803: ! #line 3412 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 804: ! #line 3414 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 805: ! #line 3416 "parse.y" { do_local_using_decl (yyvsp[0].ttype); ! yyval.ttype = NULL_TREE; } break; case 806: ! #line 3419 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 807: ! #line 3424 "parse.y" ! { yyval.ttype = begin_function_try_block (); } break; case 808: ! #line 3426 "parse.y" ! { finish_function_try_block (yyvsp[-1].ttype); } break; case 809: ! #line 3428 "parse.y" ! { finish_function_handler_sequence (yyvsp[-3].ttype); } break; case 810: ! #line 3433 "parse.y" ! { yyval.ttype = begin_try_block (); } break; case 811: ! #line 3435 "parse.y" ! { finish_try_block (yyvsp[-1].ttype); } break; case 812: ! #line 3437 "parse.y" ! { finish_handler_sequence (yyvsp[-3].ttype); } break; case 815: ! #line 3444 "parse.y" { /* Generate a fake handler block to avoid later aborts. */ tree fake_handler = begin_handler (); finish_handler_parms (NULL_TREE, fake_handler); --- 9051,9625 ---- if (yyval.ttype == error_mark_node) error ("`%T' is not a class or namespace", yyvsp[-1].ttype); ! ;} break; case 697: ! #line 3213 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != TYPE_DECL) yyval.ttype = lastiddecl; got_scope = complete_type (TREE_TYPE (yyval.ttype)); ! ;} break; case 698: ! #line 3219 "parse.y" ! { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;} break; case 701: ! #line 3223 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype; ! ;} break; case 702: ! #line 3232 "parse.y" ! { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 703: ! #line 3237 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); else yyval.ttype = yyvsp[0].ttype; got_scope = NULL_TREE; ! ;} break; case 705: ! #line 3246 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 706: ! #line 3251 "parse.y" ! { got_scope = NULL_TREE; ;} break; case 707: ! #line 3253 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;} break; case 708: ! #line 3260 "parse.y" ! { got_scope = void_type_node; ;} break; case 709: ! #line 3266 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 710: ! #line 3268 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;} break; case 711: ! #line 3270 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 712: ! #line 3272 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;} break; case 713: ! #line 3274 "parse.y" { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, arg); ! ;} break; case 714: ! #line 3278 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! ;} break; case 716: ! #line 3287 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;} break; case 717: ! #line 3289 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;} break; case 719: ! #line 3295 "parse.y" { /* Provide support for '(' attributes '*' declarator ')' etc */ yyval.ttype = tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE); ! ;} break; case 720: ! #line 3305 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 721: ! #line 3307 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 722: ! #line 3309 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;} break; case 723: ! #line 3311 "parse.y" ! { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;} break; case 724: ! #line 3313 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 725: ! #line 3315 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;} break; case 726: ! #line 3317 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;} break; case 727: ! #line 3319 "parse.y" ! { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;} break; case 728: ! #line 3321 "parse.y" { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-1].ttype, arg); ! ;} break; case 729: ! #line 3325 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! ;} break; case 731: ! #line 3334 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 732: ! #line 3337 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 733: ! #line 3339 "parse.y" ! { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 734: ! #line 3341 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;} break; case 735: ! #line 3343 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyval.ttype, NULL_TREE); ;} break; case 736: ! #line 3345 "parse.y" ! { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 737: ! #line 3347 "parse.y" ! { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 738: ! #line 3349 "parse.y" ! { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 739: ! #line 3351 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;} break; case 740: ! #line 3353 "parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;} break; case 747: ! #line 3376 "parse.y" { if (pedantic) ! pedwarn ("ISO C++ forbids label declarations"); ;} break; case 750: ! #line 3387 "parse.y" { while (yyvsp[-1].ttype) { finish_label_decl (TREE_VALUE (yyvsp[-1].ttype)); yyvsp[-1].ttype = TREE_CHAIN (yyvsp[-1].ttype); } ! ;} break; case 751: ! #line 3398 "parse.y" ! { yyval.ttype = begin_compound_stmt (0); ;} break; case 752: ! #line 3400 "parse.y" { STMT_LINENO (yyvsp[-1].ttype) = yyvsp[-3].itype; ! finish_compound_stmt (0, yyvsp[-1].ttype); ;} break; case 753: ! #line 3406 "parse.y" ! { last_expr_type = NULL_TREE; ;} break; case 754: ! #line 3411 "parse.y" { yyval.ttype = begin_if_stmt (); ! cond_stmt_keyword = "if"; ;} break; case 755: ! #line 3414 "parse.y" ! { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 756: ! #line 3416 "parse.y" { yyval.ttype = yyvsp[-3].ttype; ! finish_then_clause (yyvsp[-3].ttype); ;} break; case 758: ! #line 3423 "parse.y" ! { yyval.ttype = begin_compound_stmt (0); ;} break; case 759: ! #line 3425 "parse.y" { STMT_LINENO (yyvsp[-2].ttype) = yyvsp[-1].itype; if (yyvsp[0].ttype) STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].itype; ! finish_compound_stmt (0, yyvsp[-2].ttype); ;} break; case 761: ! #line 3433 "parse.y" ! { if (yyvsp[0].ttype) STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].itype; ;} break; case 762: ! #line 3438 "parse.y" { finish_stmt (); ! yyval.ttype = NULL_TREE; ;} break; case 763: ! #line 3441 "parse.y" ! { yyval.ttype = finish_expr_stmt (yyvsp[-1].ttype); ;} break; case 764: ! #line 3443 "parse.y" ! { begin_else_clause (); ;} break; case 765: ! #line 3445 "parse.y" { yyval.ttype = yyvsp[-3].ttype; finish_else_clause (yyvsp[-3].ttype); finish_if_stmt (); ! ;} break; case 766: ! #line 3451 "parse.y" { yyval.ttype = yyvsp[0].ttype; ! finish_if_stmt (); ;} break; case 767: ! #line 3454 "parse.y" { yyval.ttype = begin_while_stmt (); cond_stmt_keyword = "while"; ! ;} break; case 768: ! #line 3459 "parse.y" ! { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 769: ! #line 3461 "parse.y" { yyval.ttype = yyvsp[-3].ttype; ! finish_while_stmt (yyvsp[-3].ttype); ;} break; case 770: ! #line 3464 "parse.y" ! { yyval.ttype = begin_do_stmt (); ;} break; case 771: ! #line 3466 "parse.y" { finish_do_body (yyvsp[-2].ttype); cond_stmt_keyword = "do"; ! ;} break; case 772: ! #line 3471 "parse.y" { yyval.ttype = yyvsp[-5].ttype; ! finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;} break; case 773: ! #line 3474 "parse.y" ! { yyval.ttype = begin_for_stmt (); ;} break; case 774: ! #line 3476 "parse.y" ! { finish_for_init_stmt (yyvsp[-2].ttype); ;} break; case 775: ! #line 3478 "parse.y" ! { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;} break; case 776: ! #line 3480 "parse.y" ! { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;} break; case 777: ! #line 3482 "parse.y" { yyval.ttype = yyvsp[-10].ttype; ! finish_for_stmt (yyvsp[-10].ttype); ;} break; case 778: ! #line 3485 "parse.y" ! { yyval.ttype = begin_switch_stmt (); ;} break; case 779: ! #line 3487 "parse.y" ! { finish_switch_cond (yyvsp[-1].ttype, yyvsp[-3].ttype); ;} break; case 780: ! #line 3489 "parse.y" { yyval.ttype = yyvsp[-5].ttype; ! finish_switch_stmt (yyvsp[-5].ttype); ;} break; case 781: ! #line 3492 "parse.y" ! { yyval.ttype = finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;} break; case 782: ! #line 3494 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 783: ! #line 3496 "parse.y" ! { yyval.ttype = finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;} break; case 784: ! #line 3498 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 785: ! #line 3500 "parse.y" ! { yyval.ttype = finish_case_label (NULL_TREE, NULL_TREE); ;} break; case 786: ! #line 3502 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 787: ! #line 3504 "parse.y" ! { yyval.ttype = finish_break_stmt (); ;} break; case 788: ! #line 3506 "parse.y" ! { yyval.ttype = finish_continue_stmt (); ;} break; case 789: ! #line 3508 "parse.y" ! { yyval.ttype = finish_return_stmt (NULL_TREE); ;} break; case 790: ! #line 3510 "parse.y" ! { yyval.ttype = finish_return_stmt (yyvsp[-1].ttype); ;} break; case 791: ! #line 3512 "parse.y" { yyval.ttype = finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE, NULL_TREE); ! ASM_INPUT_P (yyval.ttype) = 1; ;} break; case 792: ! #line 3517 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ;} break; case 793: ! #line 3521 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;} break; case 794: ! #line 3523 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, NULL_TREE, yyvsp[-2].ttype, NULL_TREE); ;} break; case 795: ! #line 3527 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;} break; case 796: ! #line 3530 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, NULL_TREE, yyvsp[-4].ttype, yyvsp[-2].ttype); ;} break; case 797: ! #line 3533 "parse.y" ! { yyval.ttype = finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, NULL_TREE, yyvsp[-2].ttype); ;} break; case 798: ! #line 3535 "parse.y" { if (pedantic) pedwarn ("ISO C++ forbids computed gotos"); yyval.ttype = finish_goto_stmt (yyvsp[-1].ttype); ! ;} break; case 799: ! #line 3541 "parse.y" ! { yyval.ttype = finish_goto_stmt (yyvsp[-1].ttype); ;} break; case 800: ! #line 3543 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 801: ! #line 3545 "parse.y" { error ("label must be followed by statement"); yyungetc ('}', 0); ! yyval.ttype = NULL_TREE; ;} break; case 802: ! #line 3549 "parse.y" { finish_stmt (); ! yyval.ttype = NULL_TREE; ;} break; case 803: ! #line 3552 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 804: ! #line 3554 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 805: ! #line 3556 "parse.y" { do_local_using_decl (yyvsp[0].ttype); ! yyval.ttype = NULL_TREE; ;} break; case 806: ! #line 3559 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 807: ! #line 3564 "parse.y" ! { yyval.ttype = begin_function_try_block (); ;} break; case 808: ! #line 3566 "parse.y" ! { finish_function_try_block (yyvsp[-1].ttype); ;} break; case 809: ! #line 3568 "parse.y" ! { finish_function_handler_sequence (yyvsp[-3].ttype); ;} break; case 810: ! #line 3573 "parse.y" ! { yyval.ttype = begin_try_block (); ;} break; case 811: ! #line 3575 "parse.y" ! { finish_try_block (yyvsp[-1].ttype); ;} break; case 812: ! #line 3577 "parse.y" ! { finish_handler_sequence (yyvsp[-3].ttype); ;} break; case 815: ! #line 3584 "parse.y" { /* Generate a fake handler block to avoid later aborts. */ tree fake_handler = begin_handler (); finish_handler_parms (NULL_TREE, fake_handler); *************** yyreduce: *** 9573,9730 **** yyval.ttype = fake_handler; error ("must have at least one catch per try block"); ! } break; case 816: ! #line 3456 "parse.y" ! { yyval.ttype = begin_handler (); } break; case 817: ! #line 3458 "parse.y" ! { finish_handler_parms (yyvsp[0].ttype, yyvsp[-1].ttype); } break; case 818: ! #line 3460 "parse.y" ! { finish_handler (yyvsp[-3].ttype); } break; case 821: ! #line 3470 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 822: ! #line 3473 "parse.y" { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype); yyval.ttype = start_handler_parms (TREE_PURPOSE (yyvsp[-1].ftype.t), TREE_VALUE (yyvsp[-1].ftype.t)); ! } break; case 823: ! #line 3482 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); } break; case 824: ! #line 3484 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); } break; case 825: ! #line 3486 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); } break; case 826: ! #line 3488 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); } break; case 827: ! #line 3493 "parse.y" ! { finish_expr_stmt (yyvsp[-1].ttype); } break; case 829: ! #line 3496 "parse.y" { if (pedantic) pedwarn ("ISO C++ forbids compound statements inside for initializations"); ! } break; case 830: ! #line 3505 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 832: ! #line 3511 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 834: ! #line 3514 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 835: ! #line 3520 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 838: ! #line 3527 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); } break; case 839: ! #line 3532 "parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); } break; case 840: ! #line 3534 "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 841: ! #line 3541 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);} break; case 842: ! #line 3543 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); } break; case 843: ! #line 3550 "parse.y" { yyval.ttype = empty_parms(); ! } break; case 845: ! #line 3555 "parse.y" { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0); ! check_for_new_type ("inside parameter list", yyvsp[0].ftype); } break; case 846: ! #line 3562 "parse.y" ! { yyval.ttype = finish_parmlist (yyval.ttype, 0); } break; case 847: ! #line 3564 "parse.y" ! { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); } break; case 848: ! #line 3567 "parse.y" ! { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); } break; case 849: ! #line 3569 "parse.y" { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, ! yyvsp[-1].ftype.t), 1); } break; case 850: ! #line 3572 "parse.y" ! { yyval.ttype = finish_parmlist (NULL_TREE, 1); } break; case 851: ! #line 3574 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right --- 9627,9784 ---- yyval.ttype = fake_handler; error ("must have at least one catch per try block"); ! ;} break; case 816: ! #line 3596 "parse.y" ! { yyval.ttype = begin_handler (); ;} break; case 817: ! #line 3598 "parse.y" ! { finish_handler_parms (yyvsp[0].ttype, yyvsp[-1].ttype); ;} break; case 818: ! #line 3600 "parse.y" ! { finish_handler (yyvsp[-3].ttype); ;} break; case 821: ! #line 3610 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 822: ! #line 3626 "parse.y" { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype); yyval.ttype = start_handler_parms (TREE_PURPOSE (yyvsp[-1].ftype.t), TREE_VALUE (yyvsp[-1].ftype.t)); ! ;} break; case 823: ! #line 3635 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); ;} break; case 824: ! #line 3637 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); ;} break; case 825: ! #line 3639 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); ;} break; case 826: ! #line 3641 "parse.y" ! { finish_label_stmt (yyvsp[-1].ttype); ;} break; case 827: ! #line 3646 "parse.y" ! { finish_expr_stmt (yyvsp[-1].ttype); ;} break; case 829: ! #line 3649 "parse.y" { if (pedantic) pedwarn ("ISO C++ forbids compound statements inside for initializations"); ! ;} break; case 830: ! #line 3658 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 832: ! #line 3664 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 834: ! #line 3667 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 835: ! #line 3674 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 838: ! #line 3681 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;} break; case 839: ! #line 3686 "parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ;} break; case 840: ! #line 3688 "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 841: ! #line 3695 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);;} break; case 842: ! #line 3697 "parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;} break; case 843: ! #line 3708 "parse.y" { yyval.ttype = empty_parms(); ! ;} break; case 845: ! #line 3713 "parse.y" { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0); ! check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;} break; case 846: ! #line 3721 "parse.y" ! { yyval.ttype = finish_parmlist (yyval.ttype, 0); ;} break; case 847: ! #line 3723 "parse.y" ! { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;} break; case 848: ! #line 3726 "parse.y" ! { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;} break; case 849: ! #line 3728 "parse.y" { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, ! yyvsp[-1].ftype.t), 1); ;} break; case 850: ! #line 3731 "parse.y" ! { yyval.ttype = finish_parmlist (NULL_TREE, 1); ;} break; case 851: ! #line 3733 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right *************** yyreduce: *** 9733,9743 **** yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 0); yyungetc (':', 0); yychar = ')'; ! } break; case 852: ! #line 3584 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right --- 9787,9797 ---- yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 0); yyungetc (':', 0); yychar = ')'; ! ;} break; case 852: ! #line 3743 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right *************** yyreduce: *** 9747,9863 **** yyvsp[-1].ftype.t), 0); yyungetc (':', 0); yychar = ')'; ! } break; case 853: ! #line 3599 "parse.y" ! { maybe_snarf_defarg (); } break; case 854: ! #line 3601 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; } break; case 857: ! #line 3612 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); ! yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); } break; case 858: ! #line 3615 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[-1].ftype); ! yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); } break; case 859: ! #line 3618 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); ! yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); } break; case 860: ! #line 3621 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); } break; case 861: ! #line 3623 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); } break; case 863: ! #line 3629 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[-1].ftype); ! yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); } break; case 864: ! #line 3637 "parse.y" { yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ! yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); } break; case 865: ! #line 3640 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 866: ! #line 3643 "parse.y" { yyval.ftype.t = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 867: ! #line 3647 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 868: ! #line 3650 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 869: ! #line 3653 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = 0; } break; case 870: ! #line 3659 "parse.y" { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; } break; case 871: ! #line 3662 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; } break; case 874: ! #line 3673 "parse.y" ! { see_typename (); } break; case 875: ! #line 3678 "parse.y" { error ("type specifier omitted for parameter"); yyval.ttype = build_tree_list (integer_type_node, NULL_TREE); ! } break; case 876: ! #line 3683 "parse.y" { if (TREE_CODE (yyval.ttype) == SCOPE_REF) { --- 9801,9917 ---- yyvsp[-1].ftype.t), 0); yyungetc (':', 0); yychar = ')'; ! ;} break; case 853: ! #line 3758 "parse.y" ! { maybe_snarf_defarg (); ;} break; case 854: ! #line 3760 "parse.y" ! { yyval.ttype = yyvsp[0].ttype; ;} break; case 857: ! #line 3771 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); ! yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;} break; case 858: ! #line 3774 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[-1].ftype); ! yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;} break; case 859: ! #line 3777 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); ! yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;} break; case 860: ! #line 3780 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;} break; case 861: ! #line 3782 "parse.y" ! { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;} break; case 863: ! #line 3788 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[-1].ftype); ! yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;} break; case 864: ! #line 3798 "parse.y" { yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ! yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;} break; case 865: ! #line 3801 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 866: ! #line 3804 "parse.y" { yyval.ftype.t = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 867: ! #line 3808 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 868: ! #line 3811 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ftype.t, NULL_TREE); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 869: ! #line 3814 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); ! yyval.ftype.new_type_flag = 0; ;} break; case 870: ! #line 3820 "parse.y" { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;} break; case 871: ! #line 3823 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ! yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;} break; case 874: ! #line 3834 "parse.y" ! { see_typename (); ;} break; case 875: ! #line 3839 "parse.y" { error ("type specifier omitted for parameter"); yyval.ttype = build_tree_list (integer_type_node, NULL_TREE); ! ;} break; case 876: ! #line 3844 "parse.y" { if (TREE_CODE (yyval.ttype) == SCOPE_REF) { *************** yyreduce: *** 9870,9958 **** else error ("type specifier omitted for parameter `%E'", yyval.ttype); yyval.ttype = build_tree_list (integer_type_node, yyval.ttype); ! } break; case 877: ! #line 3700 "parse.y" { error("'%D' is used as a type, but is not defined as a type.", yyvsp[-4].ttype); yyvsp[-2].ttype = error_mark_node; ! } break; case 878: ! #line 3708 "parse.y" ! { } break; case 880: ! #line 3714 "parse.y" ! { } break; case 882: ! #line 3720 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 883: ! #line 3722 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; } break; case 884: ! #line 3724 "parse.y" ! { yyval.ttype = empty_except_spec; } break; case 885: ! #line 3729 "parse.y" { check_for_new_type ("exception specifier", yyvsp[0].ftype); yyval.ttype = groktypename (yyvsp[0].ftype.t); ! } break; case 886: ! #line 3734 "parse.y" ! { yyval.ttype = error_mark_node; } break; case 887: ! #line 3739 "parse.y" ! { yyval.ttype = add_exception_specifier (NULL_TREE, yyvsp[0].ttype, 1); } break; case 888: ! #line 3741 "parse.y" ! { yyval.ttype = add_exception_specifier (yyvsp[-2].ttype, yyvsp[0].ttype, 1); } break; case 889: ! #line 3746 "parse.y" ! { yyval.ttype = NULL_TREE; } break; case 890: ! #line 3748 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 891: ! #line 3750 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); } break; case 892: ! #line 3752 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! } break; case 893: ! #line 3759 "parse.y" { saved_scopes = tree_cons (got_scope, got_object, saved_scopes); TREE_LANG_FLAG_0 (saved_scopes) = looking_for_typename; --- 9924,10012 ---- else error ("type specifier omitted for parameter `%E'", yyval.ttype); yyval.ttype = build_tree_list (integer_type_node, yyval.ttype); ! ;} break; case 877: ! #line 3861 "parse.y" { error("'%D' is used as a type, but is not defined as a type.", yyvsp[-4].ttype); yyvsp[-2].ttype = error_mark_node; ! ;} break; case 878: ! #line 3869 "parse.y" ! { ;} break; case 880: ! #line 3875 "parse.y" ! { ;} break; case 882: ! #line 3881 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 883: ! #line 3883 "parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ;} break; case 884: ! #line 3885 "parse.y" ! { yyval.ttype = empty_except_spec; ;} break; case 885: ! #line 3890 "parse.y" { check_for_new_type ("exception specifier", yyvsp[0].ftype); yyval.ttype = groktypename (yyvsp[0].ftype.t); ! ;} break; case 886: ! #line 3895 "parse.y" ! { yyval.ttype = error_mark_node; ;} break; case 887: ! #line 3900 "parse.y" ! { yyval.ttype = add_exception_specifier (NULL_TREE, yyvsp[0].ttype, 1); ;} break; case 888: ! #line 3902 "parse.y" ! { yyval.ttype = add_exception_specifier (yyvsp[-2].ttype, yyvsp[0].ttype, 1); ;} break; case 889: ! #line 3907 "parse.y" ! { yyval.ttype = NULL_TREE; ;} break; case 890: ! #line 3909 "parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 891: ! #line 3911 "parse.y" ! { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;} break; case 892: ! #line 3913 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_nt (SCOPE_REF, yyvsp[-2].ttype, arg); ! ;} break; case 893: ! #line 3920 "parse.y" { saved_scopes = tree_cons (got_scope, got_object, saved_scopes); TREE_LANG_FLAG_0 (saved_scopes) = looking_for_typename; *************** yyreduce: *** 9961,10181 **** looking_for_typename = 1; got_object = got_scope; got_scope = NULL_TREE; ! } break; case 894: ! #line 3771 "parse.y" { got_scope = TREE_PURPOSE (saved_scopes); got_object = TREE_VALUE (saved_scopes); looking_for_typename = TREE_LANG_FLAG_0 (saved_scopes); saved_scopes = TREE_CHAIN (saved_scopes); yyval.ttype = got_scope; ! } break; case 895: ! #line 3781 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (MULT_EXPR)); } break; case 896: ! #line 3783 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUNC_DIV_EXPR)); } break; case 897: ! #line 3785 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUNC_MOD_EXPR)); } break; case 898: ! #line 3787 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (PLUS_EXPR)); } break; case 899: ! #line 3789 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (MINUS_EXPR)); } break; case 900: ! #line 3791 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_AND_EXPR)); } break; case 901: ! #line 3793 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_IOR_EXPR)); } break; case 902: ! #line 3795 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_XOR_EXPR)); } break; case 903: ! #line 3797 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_NOT_EXPR)); } break; case 904: ! #line 3799 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (COMPOUND_EXPR)); } break; case 905: ! #line 3801 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); } break; case 906: ! #line 3803 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (LT_EXPR)); } break; case 907: ! #line 3805 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (GT_EXPR)); } break; case 908: ! #line 3807 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); } break; case 909: ! #line 3809 "parse.y" ! { yyval.ttype = frob_opname (ansi_assopname (yyvsp[-1].code)); } break; case 910: ! #line 3811 "parse.y" ! { yyval.ttype = frob_opname (ansi_assopname (NOP_EXPR)); } break; case 911: ! #line 3813 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); } break; case 912: ! #line 3815 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); } break; case 913: ! #line 3817 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (POSTINCREMENT_EXPR)); } break; case 914: ! #line 3819 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (PREDECREMENT_EXPR)); } break; case 915: ! #line 3821 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUTH_ANDIF_EXPR)); } break; case 916: ! #line 3823 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUTH_ORIF_EXPR)); } break; case 917: ! #line 3825 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUTH_NOT_EXPR)); } break; case 918: ! #line 3827 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (COND_EXPR)); } break; case 919: ! #line 3829 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); } break; case 920: ! #line 3831 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (COMPONENT_REF)); } break; case 921: ! #line 3833 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (MEMBER_REF)); } break; case 922: ! #line 3835 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (CALL_EXPR)); } break; case 923: ! #line 3837 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (ARRAY_REF)); } break; case 924: ! #line 3839 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (NEW_EXPR)); } break; case 925: ! #line 3841 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (DELETE_EXPR)); } break; case 926: ! #line 3843 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (VEC_NEW_EXPR)); } break; case 927: ! #line 3845 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (VEC_DELETE_EXPR)); } break; case 928: ! #line 3847 "parse.y" ! { yyval.ttype = frob_opname (grokoptypename (yyvsp[-2].ftype.t, yyvsp[-1].ttype, yyvsp[0].ttype)); } break; case 929: ! #line 3849 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (ERROR_MARK)); } break; case 930: ! #line 3854 "parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.itype = lineno; } break; } ! /* Line 1016 of /usr/share/bison/yacc.c. */ ! #line 10164 "p13706.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; --- 10015,10226 ---- looking_for_typename = 1; got_object = got_scope; got_scope = NULL_TREE; ! ;} break; case 894: ! #line 3932 "parse.y" { got_scope = TREE_PURPOSE (saved_scopes); got_object = TREE_VALUE (saved_scopes); looking_for_typename = TREE_LANG_FLAG_0 (saved_scopes); saved_scopes = TREE_CHAIN (saved_scopes); yyval.ttype = got_scope; ! ;} break; case 895: ! #line 3942 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (MULT_EXPR)); ;} break; case 896: ! #line 3944 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUNC_DIV_EXPR)); ;} break; case 897: ! #line 3946 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUNC_MOD_EXPR)); ;} break; case 898: ! #line 3948 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (PLUS_EXPR)); ;} break; case 899: ! #line 3950 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (MINUS_EXPR)); ;} break; case 900: ! #line 3952 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_AND_EXPR)); ;} break; case 901: ! #line 3954 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_IOR_EXPR)); ;} break; case 902: ! #line 3956 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_XOR_EXPR)); ;} break; case 903: ! #line 3958 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (BIT_NOT_EXPR)); ;} break; case 904: ! #line 3960 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (COMPOUND_EXPR)); ;} break; case 905: ! #line 3962 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); ;} break; case 906: ! #line 3964 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (LT_EXPR)); ;} break; case 907: ! #line 3966 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (GT_EXPR)); ;} break; case 908: ! #line 3968 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); ;} break; case 909: ! #line 3970 "parse.y" ! { yyval.ttype = frob_opname (ansi_assopname (yyvsp[-1].code)); ;} break; case 910: ! #line 3972 "parse.y" ! { yyval.ttype = frob_opname (ansi_assopname (NOP_EXPR)); ;} break; case 911: ! #line 3974 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); ;} break; case 912: ! #line 3976 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); ;} break; case 913: ! #line 3978 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (POSTINCREMENT_EXPR)); ;} break; case 914: ! #line 3980 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (PREDECREMENT_EXPR)); ;} break; case 915: ! #line 3982 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUTH_ANDIF_EXPR)); ;} break; case 916: ! #line 3984 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUTH_ORIF_EXPR)); ;} break; case 917: ! #line 3986 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (TRUTH_NOT_EXPR)); ;} break; case 918: ! #line 3988 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (COND_EXPR)); ;} break; case 919: ! #line 3990 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (yyvsp[-1].code)); ;} break; case 920: ! #line 3992 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (COMPONENT_REF)); ;} break; case 921: ! #line 3994 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (MEMBER_REF)); ;} break; case 922: ! #line 3996 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (CALL_EXPR)); ;} break; case 923: ! #line 3998 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (ARRAY_REF)); ;} break; case 924: ! #line 4000 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (NEW_EXPR)); ;} break; case 925: ! #line 4002 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (DELETE_EXPR)); ;} break; case 926: ! #line 4004 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (VEC_NEW_EXPR)); ;} break; case 927: ! #line 4006 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (VEC_DELETE_EXPR)); ;} break; case 928: ! #line 4008 "parse.y" ! { yyval.ttype = frob_opname (grokoptypename (yyvsp[-2].ftype.t, yyvsp[-1].ttype, yyvsp[0].ttype)); ;} break; case 929: ! #line 4010 "parse.y" ! { yyval.ttype = frob_opname (ansi_opname (ERROR_MARK)); ;} break; case 930: ! #line 4017 "parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; ! yyval.itype = lineno; ;} break; } ! /* Line 991 of yacc.c. */ ! #line 10217 "p19357.c" yyvsp -= yylen; yyssp -= yylen; ! YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *************** yyerrlab: *** 10220,10231 **** 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) --- 10265,10276 ---- 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: *** 10246,10264 **** 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 --- 10291,10305 ---- 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: *** 10270,10297 **** /* 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 (;;) --- 10311,10356 ---- /* 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: *** 10312,10337 **** 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) --- 10371,10382 ---- 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: *** 10379,10385 **** } ! #line 3858 "parse.y" #ifdef SPEW_DEBUG --- 10424,10430 ---- } ! #line 4021 "parse.y" #ifdef SPEW_DEBUG diff -Nrcpad gcc-3.3.5/gcc/cp/parse.h gcc-3.3.6/gcc/cp/parse.h *** gcc-3.3.5/gcc/cp/parse.h 2004-09-30 17:42:36.000000000 +0000 --- gcc-3.3.6/gcc/cp/parse.h 2005-05-03 12:47:06.000000000 +0000 *************** *** 1,4 **** ! /* A Bison parser, made from 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. *************** *** 23,31 **** This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ - #ifndef BISON_P______H - # define BISON_P______H - /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE --- 23,28 ---- *************** *** 212,235 **** ! #ifndef YYSTYPE ! #line 249 "parse.y" ! typedef union { GTY(()) long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; struct unparsed_text *pi; ! } yystype; ! /* Line 1281 of /usr/share/bison/yacc.c. */ ! #line 227 "p13706.h" ! # define YYSTYPE yystype #endif extern YYSTYPE yylval; - #endif /* not BISON_P______H */ ! #define YYEMPTY -2 --- 209,233 ---- ! #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 271 "parse.y" ! typedef union YYSTYPE { GTY(()) long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; struct unparsed_text *pi; ! } YYSTYPE; ! /* Line 1249 of yacc.c. */ ! #line 223 "p19357.h" ! # define yystype YYSTYPE /* obsolescent; will be withdrawn */ ! # define YYSTYPE_IS_DECLARED 1 ! # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; ! #define YYEMPTY (-2) 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