From 80b8c7cd504e742955e73fcabda34062e210a5c9 Mon Sep 17 00:00:00 2001 From: hubicka Date: Wed, 23 Nov 2005 23:42:33 +0000 Subject: [PATCH] Merge from mainline git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/ipa-branch@107437 138bc75d-0d04-0410-961f-82ee72b054a4 --- ChangeLog | 33 + MAINTAINERS | 3 + Makefile.def | 7 - Makefile.in | 11 +- Makefile.tpl | 4 + config.guess | 10 +- config.sub | 10 +- configure | 106 +- configure.in | 4 + contrib/ChangeLog | 8 + contrib/gcc_build | 7 +- contrib/regression/ChangeLog | 8 + .../GCC Regression Tester.wdgt/Default.png | Bin 0 -> 81 bytes .../regression/GCC Regression Tester.wdgt/Icon.png | Bin 0 -> 2122 bytes .../GCC Regression Tester.wdgt/Info.plist | 28 + .../GCC Regression Tester.wdgt/widget.html | 155 + contrib/regression/README | 6 + fixincludes/ChangeLog | 12 +- fixincludes/check.tpl | 3 +- gcc/BASE-VER | 2 +- gcc/ChangeLog | 1632 ++ gcc/ChangeLog.ipa | 4 + gcc/DATESTAMP | 2 +- gcc/Makefile.in | 56 +- gcc/ada/ChangeLog | 1399 ++ gcc/ada/Make-lang.in | 2704 +-- gcc/ada/Makefile.in | 331 +- gcc/ada/Makefile.rtl | 5 + gcc/ada/a-astaco.adb | 2 +- gcc/ada/a-calend-mingw.adb | 9 +- gcc/ada/a-calend-vms.adb | 2 +- gcc/ada/a-calend-vms.ads | 2 +- gcc/ada/a-calend.adb | 2 +- gcc/ada/a-calend.ads | 2 +- gcc/ada/a-cdlili.adb | 301 +- gcc/ada/a-cdlili.ads | 102 +- gcc/ada/a-cgaaso.adb | 2 +- gcc/ada/a-cgaaso.ads | 2 +- gcc/ada/a-cgarso.adb | 2 +- gcc/ada/a-cgcaso.adb | 2 +- gcc/ada/a-chacon.adb | 2 +- gcc/ada/a-chacon.ads | 2 +- gcc/ada/a-chahan.adb | 8 +- gcc/ada/a-chahan.ads | 2 +- gcc/ada/a-chlat9.ads | 2 +- gcc/ada/a-chtgke.adb | 2 +- gcc/ada/a-chtgke.ads | 2 +- gcc/ada/a-chtgop.adb | 2 +- gcc/ada/a-chzla1.ads | 2 +- gcc/ada/a-chzla9.ads | 2 +- gcc/ada/a-cidlli.adb | 344 +- gcc/ada/a-cidlli.ads | 99 +- gcc/ada/a-cihama.adb | 45 +- gcc/ada/a-cihama.ads | 84 +- gcc/ada/a-cihase.adb | 124 +- gcc/ada/a-cihase.ads | 19 +- gcc/ada/a-ciorma.adb | 399 +- gcc/ada/a-ciorma.ads | 89 +- gcc/ada/a-ciormu.adb | 361 +- gcc/ada/a-ciormu.ads | 89 +- gcc/ada/a-ciorse.adb | 300 +- gcc/ada/a-ciorse.ads | 19 +- gcc/ada/a-cohama.adb | 51 +- gcc/ada/a-cohama.ads | 55 +- gcc/ada/a-cohase.adb | 88 +- gcc/ada/a-cohase.ads | 19 +- gcc/ada/a-cohata.ads | 2 +- gcc/ada/a-coinve.adb | 189 +- gcc/ada/a-coinve.ads | 109 +- gcc/ada/a-colien.adb | 3 +- gcc/ada/a-colien.ads | 2 +- gcc/ada/a-colire.adb | 2 +- gcc/ada/a-colire.ads | 2 +- gcc/ada/a-comlin.adb | 2 +- gcc/ada/a-comlin.ads | 2 +- gcc/ada/a-convec.adb | 191 +- gcc/ada/a-convec.ads | 107 +- gcc/ada/a-coorma.adb | 357 +- gcc/ada/a-coorma.ads | 67 +- gcc/ada/a-coormu.adb | 315 +- gcc/ada/a-coormu.ads | 95 +- gcc/ada/a-coorse.adb | 281 +- gcc/ada/a-coorse.ads | 19 +- gcc/ada/a-coprnu.adb | 2 +- gcc/ada/a-crbltr.ads | 2 +- gcc/ada/a-crbtgk.adb | 2 +- gcc/ada/a-crbtgo.adb | 308 +- gcc/ada/a-crbtgo.ads | 11 +- gcc/ada/a-cwila1.ads | 2 +- gcc/ada/a-cwila9.ads | 2 +- gcc/ada/a-decima.adb | 2 +- gcc/ada/a-decima.ads | 2 +- gcc/ada/a-diocst.ads | 2 +- gcc/ada/a-direct.adb | 2 +- gcc/ada/a-direct.ads | 2 +- gcc/ada/a-direio.adb | 2 +- gcc/ada/a-direio.ads | 2 +- gcc/ada/a-dirval-mingw.adb | 2 +- gcc/ada/a-dirval.adb | 2 +- gcc/ada/a-dirval.ads | 2 +- gcc/ada/a-elchha.adb | 2 +- gcc/ada/a-excach.adb | 4 +- gcc/ada/a-except.adb | 128 +- gcc/ada/a-except.ads | 2 +- gcc/ada/a-exctra.ads | 2 +- gcc/ada/a-exexda.adb | 4 +- gcc/ada/a-exexpr-gcc.adb | 726 + gcc/ada/a-exexpr.adb | 847 +- gcc/ada/a-exextr.adb | 2 +- gcc/ada/a-exstat.adb | 2 +- gcc/ada/a-filico.ads | 2 +- gcc/ada/a-finali.ads | 2 +- gcc/ada/a-interr.ads | 2 +- gcc/ada/a-intnam-aix.ads | 23 +- gcc/ada/a-intnam-darwin.ads | 19 +- gcc/ada/a-intnam-dummy.ads | 2 +- gcc/ada/a-intnam-freebsd.ads | 2 +- gcc/ada/a-intnam-interix.ads | 2 +- gcc/ada/a-intnam-linux.ads | 23 +- gcc/ada/a-intnam-lynxos.ads | 16 +- gcc/ada/a-intnam-mingw.ads | 9 +- gcc/ada/a-intnam-solaris.ads | 23 +- gcc/ada/a-intnam-tru64.ads | 19 +- gcc/ada/a-intnam-unixware.ads | 16 +- gcc/ada/a-intnam-vms.ads | 6 +- gcc/ada/a-intnam-vxworks.ads | 2 +- gcc/ada/a-intsig.adb | 4 +- gcc/ada/a-intsig.ads | 6 +- gcc/ada/a-ngcefu.adb | 2 +- gcc/ada/a-ngcoty.adb | 3 +- gcc/ada/a-ngcoty.ads | 2 +- gcc/ada/a-nudira.adb | 4 +- gcc/ada/a-nudira.ads | 2 +- gcc/ada/a-nuflra.adb | 2 +- gcc/ada/a-numaux-darwin.adb | 19 +- gcc/ada/a-numaux-darwin.ads | 2 +- gcc/ada/a-numaux-libc-x86.ads | 2 +- gcc/ada/a-numaux-vxworks.ads | 2 +- gcc/ada/a-numaux-x86.ads | 2 +- gcc/ada/a-numaux.ads | 2 +- gcc/ada/a-rbtgso.adb | 2 +- gcc/ada/a-reatim.ads | 2 +- gcc/ada/a-secain.adb | 2 +- gcc/ada/a-sequio.adb | 2 +- gcc/ada/a-sequio.ads | 3 +- gcc/ada/a-shcain.adb | 4 +- gcc/ada/a-siocst.ads | 2 +- gcc/ada/a-slcain.adb | 4 +- gcc/ada/a-ssicst.ads | 2 +- gcc/ada/a-stmaco.ads | 2 +- gcc/ada/a-storio.adb | 2 +- gcc/ada/a-strbou.adb | 2 +- gcc/ada/a-strbou.ads | 2 +- gcc/ada/a-stream.ads | 2 +- gcc/ada/a-strfix.adb | 18 +- gcc/ada/a-strhas.adb | 2 +- gcc/ada/a-strmap.adb | 2 +- gcc/ada/a-strmap.ads | 2 +- gcc/ada/a-strsea.adb | 2 +- gcc/ada/a-strsea.ads | 2 +- gcc/ada/a-strsup.adb | 2 +- gcc/ada/a-strsup.ads | 2 +- gcc/ada/a-strunb.adb | 2 +- gcc/ada/a-strunb.ads | 2 +- gcc/ada/a-stunha.adb | 2 +- gcc/ada/a-stunha.ads | 2 - gcc/ada/a-stwibo.adb | 2 +- gcc/ada/a-stwibo.ads | 2 +- gcc/ada/a-stwifi.adb | 10 +- gcc/ada/a-stwiha.adb | 2 +- gcc/ada/a-stwima.adb | 2 +- gcc/ada/a-stwima.ads | 2 +- gcc/ada/a-stwise.adb | 2 +- gcc/ada/a-stwise.ads | 2 +- gcc/ada/a-stwisu.adb | 2 +- gcc/ada/a-stwisu.ads | 2 +- gcc/ada/a-stwiun.adb | 2 +- gcc/ada/a-stwiun.ads | 2 +- gcc/ada/a-stzbou.adb | 2 +- gcc/ada/a-stzbou.ads | 2 +- gcc/ada/a-stzfix.adb | 2 +- gcc/ada/a-stzhas.adb | 2 +- gcc/ada/a-stzmap.adb | 2 +- gcc/ada/a-stzmap.ads | 2 +- gcc/ada/a-stzsea.adb | 2 +- gcc/ada/a-stzsea.ads | 2 +- gcc/ada/a-stzsup.adb | 2 +- gcc/ada/a-stzsup.ads | 2 +- gcc/ada/a-stzunb.adb | 2 +- gcc/ada/a-stzunb.ads | 2 +- gcc/ada/a-suteio.adb | 2 +- gcc/ada/a-suteio.ads | 2 +- gcc/ada/a-swmwco.ads | 2 +- gcc/ada/a-swuwha.ads | 2 - gcc/ada/a-swuwti.adb | 2 +- gcc/ada/a-swuwti.ads | 2 +- gcc/ada/a-sytaco.adb | 2 +- gcc/ada/a-sytaco.ads | 2 +- gcc/ada/a-szuzha.adb | 2 +- gcc/ada/a-szuzha.ads | 2 - gcc/ada/a-szuzti.adb | 2 +- gcc/ada/a-szuzti.ads | 2 +- gcc/ada/a-tags.adb | 556 +- gcc/ada/a-tags.ads | 204 +- gcc/ada/a-tasatt.adb | 10 +- gcc/ada/a-taside.adb | 2 +- gcc/ada/a-taside.ads | 2 +- gcc/ada/a-teioed.adb | 2 +- gcc/ada/a-textio.adb | 2 +- gcc/ada/a-textio.ads | 2 +- gcc/ada/a-ticoau.adb | 2 +- gcc/ada/a-ticoau.ads | 2 +- gcc/ada/a-ticoio.adb | 2 +- gcc/ada/a-tideau.adb | 2 +- gcc/ada/a-tideio.adb | 2 +- gcc/ada/a-tienau.adb | 2 +- gcc/ada/a-tienio.adb | 2 +- gcc/ada/a-tifiio.adb | 2 +- gcc/ada/a-tiflio.adb | 2 +- gcc/ada/a-tigeau.adb | 2 +- gcc/ada/a-tigeau.ads | 2 +- gcc/ada/a-tiinau.adb | 2 +- gcc/ada/a-tiinio.adb | 2 +- gcc/ada/a-timoau.adb | 2 +- gcc/ada/a-timoio.adb | 2 +- gcc/ada/a-timoio.ads | 2 +- gcc/ada/a-tiocst.ads | 2 +- gcc/ada/a-titest.adb | 2 +- gcc/ada/a-wichun.adb | 4 +- gcc/ada/a-wichun.ads | 2 +- gcc/ada/a-witeio.adb | 2 +- gcc/ada/a-witeio.ads | 2 +- gcc/ada/a-wtcoau.adb | 2 +- gcc/ada/a-wtcoau.ads | 2 +- gcc/ada/a-wtcoio.adb | 2 +- gcc/ada/a-wtcstr.ads | 2 +- gcc/ada/a-wtdeau.adb | 2 +- gcc/ada/a-wtdeio.adb | 2 +- gcc/ada/a-wtedit.adb | 2 +- gcc/ada/a-wtedit.ads | 2 +- gcc/ada/a-wtenau.adb | 2 +- gcc/ada/a-wtenio.adb | 2 +- gcc/ada/a-wtfiio.adb | 2 +- gcc/ada/a-wtflio.adb | 2 +- gcc/ada/a-wtgeau.adb | 2 +- gcc/ada/a-wtinau.adb | 2 +- gcc/ada/a-wtinio.adb | 2 +- gcc/ada/a-wtmoau.adb | 2 +- gcc/ada/a-wtmoio.adb | 2 +- gcc/ada/a-wttest.adb | 2 +- gcc/ada/a-zchuni.adb | 2 +- gcc/ada/a-zchuni.ads | 2 +- gcc/ada/a-ztcoau.adb | 2 +- gcc/ada/a-ztcoau.ads | 2 +- gcc/ada/a-ztcoio.adb | 2 +- gcc/ada/a-ztcstr.adb | 2 +- gcc/ada/a-ztcstr.ads | 2 +- gcc/ada/a-ztdeau.adb | 2 +- gcc/ada/a-ztdeau.ads | 2 +- gcc/ada/a-ztdeio.adb | 3 +- gcc/ada/a-ztdeio.ads | 2 +- gcc/ada/a-ztedit.adb | 2 +- gcc/ada/a-ztedit.ads | 2 +- gcc/ada/a-ztenau.ads | 2 +- gcc/ada/a-ztenio.adb | 2 +- gcc/ada/a-ztenio.ads | 2 +- gcc/ada/a-ztexio.adb | 2 +- gcc/ada/a-ztexio.ads | 2 +- gcc/ada/a-ztfiio.adb | 2 +- gcc/ada/a-ztfiio.ads | 2 +- gcc/ada/a-ztflau.adb | 2 +- gcc/ada/a-ztflau.ads | 2 +- gcc/ada/a-ztflio.adb | 2 +- gcc/ada/a-ztflio.ads | 2 +- gcc/ada/a-ztgeau.adb | 2 +- gcc/ada/a-ztgeau.ads | 2 +- gcc/ada/a-ztinau.adb | 2 +- gcc/ada/a-ztinau.ads | 2 +- gcc/ada/a-ztinio.adb | 2 +- gcc/ada/a-ztmoau.ads | 2 +- gcc/ada/a-ztmoio.adb | 2 +- gcc/ada/a-ztmoio.ads | 2 +- gcc/ada/a-zttest.adb | 2 +- gcc/ada/adaint.c | 38 +- gcc/ada/adaint.h | 7 +- gcc/ada/ali-util.adb | 2 +- gcc/ada/ali.adb | 21 +- gcc/ada/ali.ads | 7 +- gcc/ada/atree.adb | 6 +- gcc/ada/back_end.adb | 4 +- gcc/ada/binde.adb | 63 +- gcc/ada/bindgen.adb | 4 +- gcc/ada/bindusg.adb | 12 +- gcc/ada/butil.adb | 2 +- gcc/ada/butil.ads | 2 +- gcc/ada/checks.adb | 50 +- gcc/ada/checks.ads | 4 +- gcc/ada/cio.c | 2 +- gcc/ada/clean.adb | 701 +- gcc/ada/comperr.adb | 4 +- gcc/ada/csets.ads | 2 +- gcc/ada/cstand.adb | 2 +- gcc/ada/cuintp.c | 38 +- gcc/ada/debug.adb | 18 +- gcc/ada/debug.ads | 2 +- gcc/ada/decl.c | 277 +- gcc/ada/einfo.adb | 148 +- gcc/ada/einfo.ads | 103 +- gcc/ada/elists.ads | 6 +- gcc/ada/err_vars.ads | 2 +- gcc/ada/errno.c | 2 +- gcc/ada/errout.adb | 4 +- gcc/ada/errout.ads | 7 +- gcc/ada/erroutc.adb | 2 +- gcc/ada/erroutc.ads | 2 +- gcc/ada/errutil.adb | 2 +- gcc/ada/errutil.ads | 10 +- gcc/ada/eval_fat.adb | 4 +- gcc/ada/exp_aggr.adb | 566 +- gcc/ada/exp_attr.adb | 338 +- gcc/ada/exp_ch11.adb | 2 +- gcc/ada/exp_ch11.ads | 2 +- gcc/ada/exp_ch2.adb | 2 +- gcc/ada/exp_ch3.adb | 276 +- gcc/ada/exp_ch3.ads | 66 +- gcc/ada/exp_ch4.adb | 322 +- gcc/ada/exp_ch5.adb | 261 +- gcc/ada/exp_ch6.adb | 298 +- gcc/ada/exp_ch7.adb | 27 +- gcc/ada/exp_ch7.ads | 10 +- gcc/ada/exp_ch9.adb | 1913 +- gcc/ada/exp_ch9.ads | 16 +- gcc/ada/exp_dbug.adb | 68 +- gcc/ada/exp_dbug.ads | 74 +- gcc/ada/exp_disp.adb | 3024 +-- gcc/ada/exp_disp.ads | 205 +- gcc/ada/exp_dist.adb | 151 +- gcc/ada/exp_fixd.adb | 155 +- gcc/ada/exp_imgv.adb | 18 +- gcc/ada/exp_imgv.ads | 2 +- gcc/ada/exp_intr.adb | 169 +- gcc/ada/exp_intr.ads | 2 +- gcc/ada/exp_pakd.adb | 2 +- gcc/ada/exp_prag.adb | 2 +- gcc/ada/exp_prag.ads | 2 +- gcc/ada/exp_smem.adb | 2 +- gcc/ada/exp_strm.adb | 12 + gcc/ada/exp_tss.adb | 2 +- gcc/ada/exp_tss.ads | 2 +- gcc/ada/exp_util.adb | 271 +- gcc/ada/exp_util.ads | 47 +- gcc/ada/exp_vfpt.adb | 89 +- gcc/ada/exp_vfpt.ads | 2 +- gcc/ada/expander.adb | 2 +- gcc/ada/expander.ads | 2 +- gcc/ada/expect.c | 29 +- gcc/ada/fe.h | 2 +- gcc/ada/fmap.adb | 2 +- gcc/ada/freeze.adb | 11 +- gcc/ada/freeze.ads | 4 +- gcc/ada/frontend.adb | 2 +- gcc/ada/frontend.ads | 2 +- gcc/ada/g-arrspl.adb | 4 +- gcc/ada/g-arrspl.ads | 4 +- gcc/ada/g-awk.adb | 16 +- gcc/ada/g-awk.ads | 2 +- gcc/ada/g-boumai.ads | 2 +- gcc/ada/g-calend.adb | 2 +- gcc/ada/g-calend.ads | 2 +- gcc/ada/g-catiio.adb | 4 +- gcc/ada/g-comlin.adb | 2 +- gcc/ada/g-comlin.ads | 118 +- gcc/ada/g-comver.adb | 2 +- gcc/ada/g-crc32.adb | 6 +- gcc/ada/g-crc32.ads | 16 +- gcc/ada/g-ctrl_c.ads | 10 +- gcc/ada/g-curexc.ads | 4 +- gcc/ada/g-debpoo.adb | 152 +- gcc/ada/g-debpoo.ads | 10 +- gcc/ada/g-debuti.adb | 9 +- gcc/ada/g-diopit.adb | 6 +- gcc/ada/g-diopit.ads | 2 +- gcc/ada/g-dirope.adb | 2 +- gcc/ada/g-dirope.ads | 2 +- gcc/ada/g-dyntab.adb | 4 +- gcc/ada/g-dyntab.ads | 7 +- gcc/ada/g-eacodu-vms.adb | 4 +- gcc/ada/g-enblsp-vms-alpha.adb | 10 +- gcc/ada/g-enblsp-vms-ia64.adb | 10 +- gcc/ada/g-excact.adb | 2 +- gcc/ada/g-excact.ads | 4 +- gcc/ada/g-except.ads | 4 +- gcc/ada/g-exctra.adb | 8 +- gcc/ada/g-exctra.ads | 10 +- gcc/ada/g-expect-vms.adb | 12 +- gcc/ada/g-expect.adb | 14 +- gcc/ada/g-expect.ads | 2 +- gcc/ada/g-flocon.ads | 2 +- gcc/ada/g-heasor.ads | 15 +- gcc/ada/g-hesorg.ads | 6 +- gcc/ada/g-io.adb | 6 - gcc/ada/g-locfil.ads | 2 +- gcc/ada/g-md5.adb | 10 +- gcc/ada/g-md5.ads | 5 +- gcc/ada/g-moreex.adb | 2 +- gcc/ada/g-os_lib.adb | 118 +- gcc/ada/g-os_lib.ads | 20 +- gcc/ada/g-pehage.adb | 4 +- gcc/ada/g-pehage.ads | 2 +- gcc/ada/g-regexp.adb | 20 +- gcc/ada/g-regexp.ads | 5 +- gcc/ada/g-regist.adb | 36 +- gcc/ada/g-regist.ads | 23 +- gcc/ada/g-regpat.adb | 46 +- gcc/ada/g-regpat.ads | 83 +- gcc/ada/g-semaph.adb | 2 +- gcc/ada/g-signal.adb | 2 +- gcc/ada/g-signal.ads | 2 +- gcc/ada/g-soccon-aix.ads | 13 +- gcc/ada/g-soccon-darwin.ads | 11 +- gcc/ada/g-soccon-freebsd.ads | 11 +- gcc/ada/g-soccon-hpux-ia64.ads | 181 + gcc/ada/g-soccon-hpux.ads | 11 +- gcc/ada/g-soccon-interix.ads | 2 +- gcc/ada/g-soccon-irix.ads | 11 +- gcc/ada/g-soccon-linux-64.ads | 181 + gcc/ada/g-soccon-linux-ppc.ads | 181 + gcc/ada/g-soccon-linux-x86.ads | 181 + gcc/ada/g-soccon-mingw.ads | 11 +- gcc/ada/g-soccon-solaris-64.ads | 181 + gcc/ada/g-soccon-solaris.ads | 11 +- gcc/ada/g-soccon-tru64.ads | 11 +- gcc/ada/g-soccon-unixware.ads | 2 +- gcc/ada/g-soccon-vms.ads | 11 +- gcc/ada/g-soccon-vxworks.ads | 21 +- gcc/ada/g-soccon.ads | 16 +- gcc/ada/g-socket.adb | 289 +- gcc/ada/g-socket.ads | 58 +- gcc/ada/g-socthi-mingw.adb | 25 +- gcc/ada/g-socthi-mingw.ads | 26 +- gcc/ada/g-socthi-vms.adb | 14 +- gcc/ada/g-socthi-vms.ads | 106 +- gcc/ada/g-socthi-vxworks.adb | 27 +- gcc/ada/g-socthi-vxworks.ads | 112 +- gcc/ada/g-socthi.adb | 5 +- gcc/ada/g-socthi.ads | 23 +- gcc/ada/g-soliop-mingw.ads | 2 +- gcc/ada/g-soliop-solaris.ads | 2 +- gcc/ada/g-soliop-unixware.ads | 2 +- gcc/ada/g-soliop.ads | 2 +- gcc/ada/g-spipat.adb | 2 +- gcc/ada/g-spipat.ads | 2 +- gcc/ada/g-spitbo.adb | 4 +- gcc/ada/g-sptabo.ads | 2 +- gcc/ada/g-sptain.ads | 2 +- gcc/ada/g-sptavs.ads | 2 +- gcc/ada/g-string.ads | 2 +- gcc/ada/g-tasloc.adb | 2 +- gcc/ada/g-tasloc.ads | 2 +- gcc/ada/g-trasym-vms-alpha.adb | 2 +- gcc/ada/g-trasym-vms-ia64.adb | 2 +- gcc/ada/g-trasym.adb | 10 +- gcc/ada/g-trasym.ads | 2 +- gcc/ada/gen-soccon.c | 52 +- gcc/ada/gigi.h | 23 +- gcc/ada/gnat-style.texi | 7 +- gcc/ada/gnat_rm.texi | 419 +- gcc/ada/gnat_ugn.texi | 715 +- gcc/ada/gnatbind.adb | 24 +- gcc/ada/gnatbind.ads | 2 +- gcc/ada/gnatchop.adb | 5 +- gcc/ada/gnatcmd.adb | 4 +- gcc/ada/gnatdll.adb | 6 +- gcc/ada/gnatfind.adb | 2 +- gcc/ada/gnatlbr.adb | 6 +- gcc/ada/gnatmake.ads | 11 +- gcc/ada/gnatmem.adb | 4 +- gcc/ada/gnatprep.adb | 3 +- gcc/ada/gnatprep.ads | 6 +- gcc/ada/gnatsym.adb | 4 +- gcc/ada/gnatvsn.ads | 4 +- gcc/ada/gnatxref.adb | 4 +- gcc/ada/gprep.adb | 53 +- gcc/ada/gprep.ads | 4 +- gcc/ada/gprmake.adb | 4 +- gcc/ada/gsocket.h | 6 +- gcc/ada/i-fortra.adb | 14 +- gcc/ada/i-fortra.ads | 12 +- gcc/ada/impunit.adb | 14 +- gcc/ada/indepsw.ads | 4 +- gcc/ada/init.c | 18 +- gcc/ada/inline.adb | 13 +- gcc/ada/interfac.ads | 26 +- gcc/ada/layout.adb | 4 +- gcc/ada/lib-writ.adb | 38 +- gcc/ada/lib-writ.ads | 14 +- gcc/ada/lib-xref.adb | 15 +- gcc/ada/live.adb | 4 +- gcc/ada/make.adb | 631 +- gcc/ada/make.ads | 12 +- gcc/ada/makegpr.adb | 15 +- gcc/ada/makegpr.ads | 4 +- gcc/ada/makeutl.adb | 2 +- gcc/ada/makeutl.ads | 2 +- gcc/ada/mdll-fil.adb | 4 +- gcc/ada/mdll-fil.ads | 4 +- gcc/ada/mdll-utl.ads | 4 +- gcc/ada/mdll.adb | 37 +- gcc/ada/memroot.adb | 1 - gcc/ada/memroot.ads | 4 +- gcc/ada/memtrack.adb | 12 +- gcc/ada/misc.c | 21 +- gcc/ada/mlib-fil.adb | 2 +- gcc/ada/mlib-fil.ads | 6 +- gcc/ada/mlib-prj.adb | 418 +- gcc/ada/mlib-prj.ads | 2 +- gcc/ada/mlib-tgt-aix.adb | 17 +- gcc/ada/mlib-tgt-darwin.adb | 13 +- gcc/ada/mlib-tgt-hpux.adb | 13 +- gcc/ada/mlib-tgt-irix.adb | 13 +- gcc/ada/mlib-tgt-linux.adb | 13 +- gcc/ada/mlib-tgt-lynxos.adb | 9 + gcc/ada/mlib-tgt-mingw.adb | 11 +- gcc/ada/mlib-tgt-solaris.adb | 9 + gcc/ada/mlib-tgt-tru64.adb | 13 +- gcc/ada/mlib-tgt-vms-alpha.adb | 10 +- gcc/ada/mlib-tgt-vms-ia64.adb | 10 +- gcc/ada/mlib-tgt-vxworks.adb | 9 + gcc/ada/mlib-tgt.adb | 11 +- gcc/ada/mlib-tgt.ads | 6 +- gcc/ada/mlib-utl.adb | 2 +- gcc/ada/mlib-utl.ads | 2 +- gcc/ada/mlib.adb | 22 +- gcc/ada/mlib.ads | 2 +- gcc/ada/namet.h | 7 +- gcc/ada/nlists.adb | 2 +- gcc/ada/nlists.ads | 2 +- gcc/ada/opt.ads | 68 +- gcc/ada/osint-c.adb | 11 +- gcc/ada/osint-l.adb | 2 +- gcc/ada/osint-l.ads | 2 +- gcc/ada/osint-m.adb | 13 +- gcc/ada/osint-m.ads | 2 +- gcc/ada/osint.adb | 6 +- gcc/ada/osint.ads | 52 +- gcc/ada/output.adb | 4 +- gcc/ada/par-ch10.adb | 25 +- gcc/ada/par-ch11.adb | 2 +- gcc/ada/par-ch12.adb | 4 +- gcc/ada/par-ch2.adb | 2 +- gcc/ada/par-ch3.adb | 14 +- gcc/ada/par-ch4.adb | 4 +- gcc/ada/par-ch5.adb | 2 +- gcc/ada/par-ch6.adb | 4 +- gcc/ada/par-ch9.adb | 10 +- gcc/ada/par-endh.adb | 4 +- gcc/ada/par-labl.adb | 10 +- gcc/ada/par-load.adb | 2 +- gcc/ada/par-prag.adb | 30 +- gcc/ada/par-tchk.adb | 6 +- gcc/ada/par.adb | 4 +- gcc/ada/par.ads | 2 +- gcc/ada/prep.adb | 63 +- gcc/ada/prepcomp.adb | 19 +- gcc/ada/prepcomp.ads | 4 +- gcc/ada/prj-attr-pm.ads | 8 +- gcc/ada/prj-attr.adb | 5 +- gcc/ada/prj-attr.ads | 5 +- gcc/ada/prj-com.ads | 4 +- gcc/ada/prj-dect.adb | 4 +- gcc/ada/prj-dect.ads | 2 +- gcc/ada/prj-env.adb | 38 +- gcc/ada/prj-env.ads | 2 +- gcc/ada/prj-err.ads | 19 +- gcc/ada/prj-ext.adb | 60 +- gcc/ada/prj-ext.ads | 6 +- gcc/ada/prj-makr.adb | 2 +- gcc/ada/prj-makr.ads | 4 +- gcc/ada/prj-nmsc.adb | 285 +- gcc/ada/prj-nmsc.ads | 4 +- gcc/ada/prj-pars.adb | 2 +- gcc/ada/prj-pars.ads | 2 +- gcc/ada/prj-part.adb | 15 +- gcc/ada/prj-part.ads | 4 +- gcc/ada/prj-pp.adb | 24 +- gcc/ada/prj-pp.ads | 36 +- gcc/ada/prj-proc.adb | 4 +- gcc/ada/prj-proc.ads | 12 +- gcc/ada/prj-strt.adb | 18 +- gcc/ada/prj-strt.ads | 4 +- gcc/ada/prj-tree.adb | 2 +- gcc/ada/prj-tree.ads | 30 +- gcc/ada/prj-util.adb | 2 +- gcc/ada/prj-util.ads | 37 +- gcc/ada/prj.adb | 10 +- gcc/ada/prj.ads | 100 +- gcc/ada/raise-gcc.c | 1151 + gcc/ada/raise.c | 1256 +- gcc/ada/repinfo.adb | 143 +- gcc/ada/repinfo.ads | 7 +- gcc/ada/repinfo.h | 3 +- gcc/ada/rtsfind.adb | 4 +- gcc/ada/rtsfind.ads | 85 +- gcc/ada/s-auxdec-empty.adb | 36 + gcc/ada/s-auxdec-empty.ads | 49 + gcc/ada/s-bitops.adb | 2 +- gcc/ada/s-chepoo.ads | 28 +- gcc/ada/s-exnllf.adb | 6 +- gcc/ada/s-fatflt.ads | 2 +- gcc/ada/s-fatgen.adb | 121 +- gcc/ada/s-fatgen.ads | 13 +- gcc/ada/s-fatlfl.ads | 2 +- gcc/ada/s-fatllf.ads | 2 +- gcc/ada/s-fatsfl.ads | 2 +- gcc/ada/s-fileio.ads | 4 +- gcc/ada/s-filofl.ads | 54 + gcc/ada/s-finroo.adb | 12 +- gcc/ada/s-finroo.ads | 11 +- gcc/ada/s-fishfl.ads | 54 + gcc/ada/s-fvadfl.ads | 56 + gcc/ada/s-fvaffl.ads | 56 + gcc/ada/s-fvagfl.ads | 56 + gcc/ada/s-gloloc-mingw.adb | 4 +- gcc/ada/s-imgwch.ads | 2 +- gcc/ada/s-imgwiu.adb | 2 +- gcc/ada/s-imgwiu.ads | 2 +- gcc/ada/s-inmaop-dummy.adb | 5 +- gcc/ada/s-inmaop-vms.adb | 5 +- gcc/ada/s-inmaop.ads | 20 +- gcc/ada/s-interr-sigaction.adb | 2 +- gcc/ada/s-mastop-tru64.adb | 4 +- gcc/ada/s-mastop-vms.adb | 8 +- gcc/ada/s-osinte-fsu.adb | 4 +- gcc/ada/s-pack03.adb | 4 +- gcc/ada/s-pack03.ads | 2 +- gcc/ada/s-pack05.adb | 4 +- gcc/ada/s-pack05.ads | 2 +- gcc/ada/s-pack06.adb | 4 +- gcc/ada/s-pack06.ads | 2 +- gcc/ada/s-pack07.adb | 4 +- gcc/ada/s-pack07.ads | 2 +- gcc/ada/s-pack09.adb | 4 +- gcc/ada/s-pack09.ads | 2 +- gcc/ada/s-pack10.adb | 4 +- gcc/ada/s-pack10.ads | 2 +- gcc/ada/s-pack11.adb | 4 +- gcc/ada/s-pack11.ads | 2 +- gcc/ada/s-pack12.adb | 4 +- gcc/ada/s-pack12.ads | 2 +- gcc/ada/s-pack13.adb | 4 +- gcc/ada/s-pack13.ads | 2 +- gcc/ada/s-pack14.adb | 6 +- gcc/ada/s-pack14.ads | 2 +- gcc/ada/s-pack15.adb | 4 +- gcc/ada/s-pack15.ads | 2 +- gcc/ada/s-pack17.adb | 4 +- gcc/ada/s-pack17.ads | 2 +- gcc/ada/s-pack18.adb | 6 +- gcc/ada/s-pack18.ads | 2 +- gcc/ada/s-pack19.adb | 4 +- gcc/ada/s-pack19.ads | 2 +- gcc/ada/s-pack20.adb | 6 +- gcc/ada/s-pack20.ads | 2 +- gcc/ada/s-pack21.adb | 4 +- gcc/ada/s-pack21.ads | 2 +- gcc/ada/s-pack22.adb | 6 +- gcc/ada/s-pack22.ads | 2 +- gcc/ada/s-pack23.adb | 4 +- gcc/ada/s-pack23.ads | 2 +- gcc/ada/s-pack24.adb | 6 +- gcc/ada/s-pack24.ads | 2 +- gcc/ada/s-pack25.adb | 2 +- gcc/ada/s-pack25.ads | 2 +- gcc/ada/s-pack26.adb | 6 +- gcc/ada/s-pack26.ads | 2 +- gcc/ada/s-pack27.adb | 4 +- gcc/ada/s-pack27.ads | 2 +- gcc/ada/s-pack28.adb | 6 +- gcc/ada/s-pack28.ads | 2 +- gcc/ada/s-pack29.adb | 4 +- gcc/ada/s-pack29.ads | 2 +- gcc/ada/s-pack30.adb | 6 +- gcc/ada/s-pack30.ads | 2 +- gcc/ada/s-pack31.adb | 4 +- gcc/ada/s-pack31.ads | 2 +- gcc/ada/s-pack33.adb | 4 +- gcc/ada/s-pack33.ads | 2 +- gcc/ada/s-pack34.adb | 6 +- gcc/ada/s-pack34.ads | 2 +- gcc/ada/s-pack35.adb | 4 +- gcc/ada/s-pack35.ads | 2 +- gcc/ada/s-pack36.adb | 6 +- gcc/ada/s-pack36.ads | 2 +- gcc/ada/s-pack37.adb | 4 +- gcc/ada/s-pack37.ads | 2 +- gcc/ada/s-pack38.adb | 6 +- gcc/ada/s-pack38.ads | 2 +- gcc/ada/s-pack39.adb | 4 +- gcc/ada/s-pack39.ads | 2 +- gcc/ada/s-pack40.adb | 6 +- gcc/ada/s-pack40.ads | 2 +- gcc/ada/s-pack41.adb | 4 +- gcc/ada/s-pack41.ads | 2 +- gcc/ada/s-pack42.adb | 6 +- gcc/ada/s-pack42.ads | 2 +- gcc/ada/s-pack43.adb | 4 +- gcc/ada/s-pack43.ads | 2 +- gcc/ada/s-pack44.adb | 6 +- gcc/ada/s-pack44.ads | 2 +- gcc/ada/s-pack45.adb | 4 +- gcc/ada/s-pack45.ads | 2 +- gcc/ada/s-pack46.adb | 6 +- gcc/ada/s-pack46.ads | 2 +- gcc/ada/s-pack47.adb | 4 +- gcc/ada/s-pack47.ads | 2 +- gcc/ada/s-pack48.adb | 6 +- gcc/ada/s-pack48.ads | 2 +- gcc/ada/s-pack49.adb | 4 +- gcc/ada/s-pack49.ads | 2 +- gcc/ada/s-pack50.adb | 6 +- gcc/ada/s-pack50.ads | 2 +- gcc/ada/s-pack51.adb | 4 +- gcc/ada/s-pack51.ads | 2 +- gcc/ada/s-pack52.adb | 6 +- gcc/ada/s-pack52.ads | 2 +- gcc/ada/s-pack53.adb | 4 +- gcc/ada/s-pack53.ads | 2 +- gcc/ada/s-pack54.adb | 6 +- gcc/ada/s-pack54.ads | 2 +- gcc/ada/s-pack55.adb | 4 +- gcc/ada/s-pack55.ads | 2 +- gcc/ada/s-pack56.adb | 6 +- gcc/ada/s-pack56.ads | 2 +- gcc/ada/s-pack57.adb | 4 +- gcc/ada/s-pack57.ads | 2 +- gcc/ada/s-pack58.adb | 6 +- gcc/ada/s-pack58.ads | 2 +- gcc/ada/s-pack59.adb | 4 +- gcc/ada/s-pack59.ads | 2 +- gcc/ada/s-pack60.adb | 6 +- gcc/ada/s-pack60.ads | 2 +- gcc/ada/s-pack61.adb | 4 +- gcc/ada/s-pack61.ads | 2 +- gcc/ada/s-pack62.adb | 6 +- gcc/ada/s-pack62.ads | 2 +- gcc/ada/s-pack63.adb | 4 +- gcc/ada/s-pack63.ads | 2 +- gcc/ada/s-parame-mingw.adb | 2 +- gcc/ada/s-parint.adb | 4 +- gcc/ada/s-parint.ads | 2 +- gcc/ada/s-purexc.ads | 2 +- gcc/ada/s-restri.adb | 2 +- gcc/ada/s-restri.ads | 2 +- gcc/ada/s-scaval.adb | 2 +- gcc/ada/s-scaval.ads | 2 +- gcc/ada/s-secsta.adb | 2 +- gcc/ada/s-secsta.ads | 2 +- gcc/ada/s-sequio.adb | 2 +- gcc/ada/s-sequio.ads | 2 +- gcc/ada/s-stoele.adb | 10 +- gcc/ada/s-stratt.adb | 92 +- gcc/ada/s-stratt.ads | 81 +- gcc/ada/s-strxdr.adb | 87 +- gcc/ada/s-taprop-posix.adb | 1 + gcc/ada/s-taprop-solaris.adb | 12 +- gcc/ada/s-tasini.adb | 11 - gcc/ada/s-tassta.adb | 20 +- gcc/ada/s-tasuti.adb | 8 +- gcc/ada/s-traceb-hpux.adb | 8 +- gcc/ada/s-traceb-mastop.adb | 6 +- gcc/ada/s-traceb.adb | 2 +- gcc/ada/s-traceb.ads | 4 +- gcc/ada/s-traces-default.adb | 6 +- gcc/ada/s-trafor-default.ads | 1 + gcc/ada/s-tratas-default.adb | 74 +- gcc/ada/s-vaflop-vms-alpha.adb | 6 +- gcc/ada/s-vaflop.adb | 26 +- gcc/ada/s-vaflop.ads | 8 +- gcc/ada/s-valboo.adb | 13 +- gcc/ada/s-valboo.ads | 4 +- gcc/ada/s-valcha.adb | 3 +- gcc/ada/s-valcha.ads | 4 +- gcc/ada/s-valdec.adb | 6 +- gcc/ada/s-valdec.ads | 5 +- gcc/ada/s-valint.adb | 8 +- gcc/ada/s-valint.ads | 8 +- gcc/ada/s-vallld.adb | 9 +- gcc/ada/s-vallld.ads | 8 +- gcc/ada/s-vallli.adb | 3 +- gcc/ada/s-vallli.ads | 2 +- gcc/ada/s-valllu.adb | 9 +- gcc/ada/s-valllu.ads | 8 +- gcc/ada/s-valrea.adb | 15 +- gcc/ada/s-valrea.ads | 8 +- gcc/ada/s-valuns.adb | 11 +- gcc/ada/s-valuns.ads | 12 +- gcc/ada/s-valuti.adb | 5 +- gcc/ada/s-valuti.ads | 5 +- gcc/ada/s-valwch.ads | 2 +- gcc/ada/s-veboop.adb | 2 +- gcc/ada/s-veboop.ads | 2 +- gcc/ada/s-vercon.adb | 3 +- gcc/ada/s-vercon.ads | 2 +- gcc/ada/s-wchcnv.adb | 2 +- gcc/ada/s-wchcnv.ads | 2 +- gcc/ada/s-wchcon.ads | 2 +- gcc/ada/s-wchjis.adb | 2 +- gcc/ada/s-wchjis.ads | 2 +- gcc/ada/s-wchstw.adb | 6 +- gcc/ada/s-wchstw.ads | 2 +- gcc/ada/s-wchwts.adb | 2 +- gcc/ada/s-wchwts.ads | 2 +- gcc/ada/s-widboo.adb | 2 +- gcc/ada/s-widboo.ads | 2 +- gcc/ada/s-widcha.adb | 2 +- gcc/ada/s-widcha.ads | 2 +- gcc/ada/s-widenu.adb | 2 +- gcc/ada/s-widenu.ads | 2 +- gcc/ada/s-widlli.adb | 2 +- gcc/ada/s-widlli.ads | 2 +- gcc/ada/s-widllu.adb | 2 +- gcc/ada/s-widllu.ads | 2 +- gcc/ada/s-widwch.adb | 2 +- gcc/ada/s-widwch.ads | 2 +- gcc/ada/s-wwdcha.adb | 2 +- gcc/ada/s-wwdcha.ads | 2 +- gcc/ada/s-wwdenu.adb | 2 +- gcc/ada/s-wwdenu.ads | 2 +- gcc/ada/scans.ads | 35 +- gcc/ada/scng.adb | 11 + gcc/ada/sem.adb | 12 - gcc/ada/sem.ads | 4 +- gcc/ada/sem_aggr.adb | 31 +- gcc/ada/sem_aggr.ads | 2 +- gcc/ada/sem_attr.adb | 93 +- gcc/ada/sem_case.adb | 2 +- gcc/ada/sem_case.ads | 26 +- gcc/ada/sem_cat.ads | 4 +- gcc/ada/sem_ch10.adb | 118 +- gcc/ada/sem_ch11.adb | 2 +- gcc/ada/sem_ch12.adb | 404 +- gcc/ada/sem_ch12.ads | 9 +- gcc/ada/sem_ch3.adb | 434 +- gcc/ada/sem_ch3.ads | 21 +- gcc/ada/sem_ch4.adb | 29 +- gcc/ada/sem_ch5.adb | 15 +- gcc/ada/sem_ch5.ads | 11 +- gcc/ada/sem_ch6.adb | 201 +- gcc/ada/sem_ch6.ads | 2 +- gcc/ada/sem_ch7.adb | 101 +- gcc/ada/sem_ch7.ads | 8 +- gcc/ada/sem_ch8.adb | 282 +- gcc/ada/sem_ch9.adb | 155 +- gcc/ada/sem_disp.adb | 17 +- gcc/ada/sem_dist.ads | 2 +- gcc/ada/sem_elab.adb | 220 +- gcc/ada/sem_elab.ads | 2 +- gcc/ada/sem_elim.ads | 2 +- gcc/ada/sem_eval.adb | 32 +- gcc/ada/sem_eval.ads | 2 +- gcc/ada/sem_intr.adb | 11 +- gcc/ada/sem_intr.ads | 2 +- gcc/ada/sem_maps.adb | 2 +- gcc/ada/sem_maps.ads | 12 +- gcc/ada/sem_prag.adb | 138 +- gcc/ada/sem_prag.ads | 78 +- gcc/ada/sem_res.adb | 193 +- gcc/ada/sem_res.ads | 2 +- gcc/ada/sem_type.adb | 80 +- gcc/ada/sem_type.ads | 6 +- gcc/ada/sem_util.adb | 155 +- gcc/ada/sem_util.ads | 6 + gcc/ada/sem_warn.adb | 219 +- gcc/ada/sem_warn.ads | 11 +- gcc/ada/sfn_scan.adb | 2 +- gcc/ada/sfn_scan.ads | 2 +- gcc/ada/sinfo.adb | 52 +- gcc/ada/sinfo.ads | 122 +- gcc/ada/sinput.adb | 4 +- gcc/ada/sinput.ads | 4 +- gcc/ada/snames.adb | 4 + gcc/ada/snames.ads | 1418 +- gcc/ada/snames.h | 171 +- gcc/ada/socket.c | 48 + gcc/ada/sprint.ads | 4 +- gcc/ada/stand.ads | 18 +- gcc/ada/stringt.adb | 2 +- gcc/ada/stringt.ads | 2 +- gcc/ada/styleg.ads | 6 +- gcc/ada/switch-b.adb | 42 +- gcc/ada/switch-c.adb | 281 +- gcc/ada/switch-m.adb | 48 +- gcc/ada/switch.adb | 47 +- gcc/ada/switch.ads | 23 +- gcc/ada/symbols.adb | 2 +- gcc/ada/symbols.ads | 4 +- gcc/ada/system-aix.ads | 2 +- gcc/ada/system-darwin-ppc.ads | 2 +- gcc/ada/system-freebsd-x86.ads | 2 +- gcc/ada/system-hpux-ia64.ads | 2 +- gcc/ada/system-hpux.ads | 2 +- gcc/ada/system-interix.ads | 2 +- gcc/ada/system-irix-n32.ads | 2 +- gcc/ada/system-irix-o32.ads | 2 +- gcc/ada/system-linux-hppa.ads | 2 +- gcc/ada/system-linux-ia64.ads | 2 +- gcc/ada/system-linux-ppc.ads | 2 +- gcc/ada/system-linux-x86.ads | 2 +- gcc/ada/system-linux-x86_64.ads | 2 +- gcc/ada/system-lynxos-ppc.ads | 24 +- gcc/ada/system-lynxos-x86.ads | 24 +- gcc/ada/system-mingw.ads | 2 +- gcc/ada/system-os2.ads | 2 +- gcc/ada/system-solaris-sparc.ads | 2 +- gcc/ada/system-solaris-sparcv9.ads | 2 +- gcc/ada/system-solaris-x86.ads | 2 +- gcc/ada/system-tru64.ads | 2 +- gcc/ada/system-unixware.ads | 2 +- gcc/ada/system-vms-zcx.ads | 2 +- gcc/ada/system-vms.ads | 7 +- gcc/ada/system-vms_64.ads | 7 +- gcc/ada/table.ads | 6 +- gcc/ada/targparm.adb | 2 +- gcc/ada/targparm.ads | 6 +- gcc/ada/tb-alvms.c | 2 +- gcc/ada/tb-alvxw.c | 2 +- gcc/ada/tb-gcc.c | 15 +- gcc/ada/tbuild.adb | 2 +- gcc/ada/tempdir.adb | 7 +- gcc/ada/tracebak.c | 16 +- gcc/ada/trans.c | 229 +- gcc/ada/tree_io.ads | 4 +- gcc/ada/treepr.adb | 2 +- gcc/ada/treeprs.adt | 2 +- gcc/ada/ttypef.ads | 2 +- gcc/ada/ttypes.ads | 4 +- gcc/ada/types.adb | 2 +- gcc/ada/types.ads | 21 +- gcc/ada/ug_words | 2 + gcc/ada/uintp.adb | 30 +- gcc/ada/uintp.ads | 30 +- gcc/ada/uname.ads | 2 +- gcc/ada/urealp.ads | 24 +- gcc/ada/usage.adb | 16 +- gcc/ada/usage.ads | 2 +- gcc/ada/utils.c | 100 +- gcc/ada/utils2.c | 127 +- gcc/ada/validsw.ads | 13 +- gcc/ada/vms_conv.adb | 4 +- gcc/ada/vms_conv.ads | 2 +- gcc/ada/vms_data.ads | 40 +- gcc/ada/vxaddr2line.adb | 8 +- gcc/ada/widechar.adb | 2 +- gcc/ada/widechar.ads | 2 +- gcc/ada/xeinfo.adb | 2 +- gcc/ada/xgnatugn.adb | 14 +- gcc/ada/xnmake.adb | 2 +- gcc/ada/xr_tabls.adb | 12 +- gcc/ada/xr_tabls.ads | 85 +- gcc/ada/xref_lib.adb | 9 +- gcc/ada/xref_lib.ads | 18 +- gcc/ada/xsinfo.adb | 2 +- gcc/ada/xsnames.adb | 2 +- gcc/ada/xtreeprs.adb | 2 +- gcc/builtins.c | 5 +- gcc/c-common.c | 44 +- gcc/c-common.h | 1 + gcc/c-cppbuiltin.c | 5 + gcc/c-decl.c | 14 +- gcc/c-opts.c | 27 +- gcc/c-tree.h | 1 - gcc/c-typeck.c | 17 +- gcc/c.opt | 6 + gcc/calls.c | 61 +- gcc/combine.c | 141 +- gcc/common.opt | 4 + gcc/config.gcc | 9 + gcc/config.in | 12 + gcc/config/alpha/alpha-protos.h | 5 +- gcc/config/alpha/alpha.c | 24 +- gcc/config/alpha/alpha.h | 4 +- gcc/config/alpha/freebsd.h | 19 +- gcc/config/alpha/linux.h | 5 - gcc/config/arm/arm-protos.h | 6 +- gcc/config/arm/arm.c | 647 +- gcc/config/arm/arm.h | 33 +- gcc/config/arm/arm.md | 129 +- gcc/config/arm/arm.opt | 4 + gcc/config/arm/lib1funcs.asm | 21 +- gcc/config/arm/libunwind.S | 20 +- gcc/config/arm/linux-eabi.h | 17 +- gcc/config/arm/linux-elf.h | 5 - gcc/config/arm/pr-support.c | 4 + gcc/config/arm/rtems-elf.h | 9 +- gcc/config/arm/t-bpabi | 6 +- gcc/config/arm/unwind-arm.c | 191 +- gcc/config/arm/unwind-arm.h | 93 +- gcc/config/bfin/bfin.c | 102 +- gcc/config/bfin/bfin.h | 28 +- gcc/config/bfin/bfin.md | 41 +- gcc/config/bfin/crti.s | 17 +- gcc/config/bfin/crtlibid.s | 32 + gcc/config/bfin/crtn.s | 6 + gcc/config/bfin/elf.h | 2 +- gcc/config/bfin/t-bfin-elf | 14 +- gcc/config/bfin/uclinux.h | 2 +- gcc/config/cris/cris-protos.h | 1 + gcc/config/cris/cris.c | 78 +- gcc/config/cris/cris.h | 9 + gcc/config/cris/cris.md | 22 +- gcc/config/cris/linux.h | 5 - gcc/config/cris/predicates.md | 11 +- gcc/config/darwin-c.c | 1 + gcc/config/darwin.h | 50 +- gcc/config/fp-bit.c | 50 +- gcc/config/freebsd-spec.h | 1 - gcc/config/i386/beos-elf.h | 5 - gcc/config/i386/darwin.h | 1 + gcc/config/i386/gnu.h | 5 - gcc/config/i386/i386.c | 15 +- gcc/config/i386/i386.md | 8 +- gcc/config/i386/linux.h | 5 - gcc/config/i386/linux64.h | 5 - gcc/config/i386/netware.h | 2 +- gcc/config/i386/nto.h | 5 - gcc/config/i386/predicates.md | 21 + gcc/config/i386/sco5.h | 5 - gcc/config/ia64/ia64.c | 17 +- gcc/config/ia64/unwind-ia64.c | 6 + gcc/config/m32c/cond.md | 2 +- gcc/config/m32r/m32r.h | 5 - gcc/config/m68k/linux.h | 4 +- gcc/config/m68k/m68k.h | 6 - gcc/config/m68k/m68k.md | 6 +- gcc/config/m68k/predicates.md | 44 +- gcc/config/mips/linux.h | 5 - gcc/config/mn10300/mn10300-protos.h | 4 +- gcc/config/mn10300/mn10300.c | 3 +- gcc/config/mn10300/mn10300.h | 2 +- gcc/config/ms1/crtn.asm | 2 + gcc/config/ms1/ms1.c | 390 +- gcc/config/ms1/ms1.h | 20 +- gcc/config/ms1/ms1.md | 55 +- gcc/config/pa/hpux-unwind.h | 316 + gcc/config/pa/linux-unwind.h | 7 +- gcc/config/pa/pa-hpux.h | 2 + gcc/config/pa/pa-hpux11.h | 2 +- gcc/config/pa/pa-linux.h | 38 - gcc/config/pa/pa-protos.h | 4 +- gcc/config/pa/pa.c | 26 +- gcc/config/pa/pa.h | 72 +- gcc/config/pa/pa64-hpux.h | 14 +- gcc/config/pa/som.h | 9 - gcc/config/rs6000/aix52.h | 1 + gcc/config/rs6000/altivec.md | 81 +- gcc/config/rs6000/darwin.h | 6 +- gcc/config/rs6000/linux64.h | 5 +- gcc/config/rs6000/predicates.md | 100 +- gcc/config/rs6000/rs6000-c.c | 10 + gcc/config/rs6000/rs6000-protos.h | 9 +- gcc/config/rs6000/rs6000.c | 284 +- gcc/config/rs6000/rs6000.h | 44 +- gcc/config/rs6000/rs6000.md | 532 +- gcc/config/rs6000/rs6000.opt | 12 +- gcc/config/rs6000/sysv4.h | 12 +- gcc/config/rs6000/t-fprules | 1 + gcc/config/rs6000/vxworks.h | 10 - gcc/config/rs6000/xcoff.h | 2 +- gcc/config/s390/linux.h | 5 - gcc/config/s390/s390.c | 85 +- gcc/config/s390/tpf.h | 5 - gcc/config/sh/linux.h | 5 - gcc/config/sh/sh.h | 5 - gcc/config/sol2.h | 5 - gcc/config/sparc/linux.h | 5 - gcc/config/sparc/linux64.h | 5 - gcc/config/t-darwin | 2 +- gcc/config/xtensa/xtensa.h | 5 - gcc/configure | 98 +- gcc/configure.ac | 37 +- gcc/cp/ChangeLog | 218 + gcc/cp/class.c | 49 +- gcc/cp/cp-tree.h | 3 + gcc/cp/cxx-pretty-print.c | 9 + gcc/cp/decl.c | 247 +- gcc/cp/decl2.c | 10 +- gcc/cp/error.c | 57 +- gcc/cp/init.c | 6 +- gcc/cp/method.c | 13 +- gcc/cp/name-lookup.c | 32 +- gcc/cp/name-lookup.h | 2 +- gcc/cp/parser.c | 182 +- gcc/cp/pt.c | 115 +- gcc/cp/typeck.c | 32 +- gcc/crtstuff.c | 6 + gcc/cse.c | 41 +- gcc/defaults.h | 21 + gcc/diagnostic.c | 20 +- gcc/diagnostic.h | 4 + gcc/doc/extend.texi | 32 + gcc/doc/invoke.texi | 154 +- gcc/doc/md.texi | 22 +- gcc/doc/tm.texi | 21 + gcc/dwarf2.h | 3 +- gcc/dwarf2asm.c | 27 +- gcc/dwarf2asm.h | 4 +- gcc/dwarf2out.c | 178 +- gcc/emit-rtl.c | 2 +- gcc/except.c | 4 +- gcc/expmed.c | 36 +- gcc/expr.c | 177 +- gcc/final.c | 18 +- gcc/flow.c | 11 +- gcc/fold-const.c | 340 +- gcc/fortran/ChangeLog | 342 + gcc/fortran/Make-lang.in | 3 +- gcc/fortran/check.c | 207 + gcc/fortran/data.c | 15 +- gcc/fortran/decl.c | 27 +- gcc/fortran/dump-parse-tree.c | 13 +- gcc/fortran/error.c | 6 + gcc/fortran/expr.c | 24 + gcc/fortran/gfortran.h | 15 +- gcc/fortran/gfortran.texi | 2 +- gcc/fortran/intrinsic.c | 105 +- gcc/fortran/intrinsic.h | 35 + gcc/fortran/intrinsic.texi | 107 + gcc/fortran/invoke.texi | 4 +- gcc/fortran/io.c | 20 +- gcc/fortran/ioparm.def | 67 + gcc/fortran/iresolve.c | 360 + gcc/fortran/lang-specs.h | 4 +- gcc/fortran/match.c | 7 +- gcc/fortran/module.c | 16 +- gcc/fortran/options.c | 17 + gcc/fortran/primary.c | 9 + gcc/fortran/resolve.c | 40 +- gcc/fortran/scanner.c | 16 +- gcc/fortran/simplify.c | 106 + gcc/fortran/symbol.c | 8 +- gcc/fortran/trans-decl.c | 34 +- gcc/fortran/trans-intrinsic.c | 145 +- gcc/fortran/trans-io.c | 1141 +- gcc/fortran/trans-types.c | 9 + gcc/fortran/trans.h | 3 + gcc/function.c | 28 +- gcc/gcc.c | 13 +- gcc/gcse.c | 5 +- gcc/genopinit.c | 3 +- gcc/gensupport.c | 83 +- gcc/gimplify.c | 26 +- gcc/gthr-dce.h | 122 +- gcc/gthr-posix.h | 155 +- gcc/gthr-posix95.h | 159 +- gcc/gthr-solaris.h | 126 +- gcc/gthr-tpf.h | 47 +- gcc/ifcvt.c | 125 +- gcc/ipa-inline.c | 59 +- gcc/ipa-prop.c | 51 +- gcc/java/ChangeLog | 12 + gcc/java/gjavah.c | 8 +- gcc/java/zextract.c | 21 +- gcc/lambda-code.c | 15 +- gcc/lambda.h | 3 + gcc/libgcc-std.ver | 17 + gcc/libgcc2.c | 114 + gcc/libgcc2.h | 8 + gcc/local-alloc.c | 15 +- gcc/longlong.h | 9 +- gcc/loop-invariant.c | 33 +- gcc/loop-unroll.c | 10 +- gcc/loop.c | 8 +- gcc/mklibgcc.in | 81 +- gcc/objcp/ChangeLog | 6 + gcc/objcp/objcp-decl.c | 6 - gcc/objcp/objcp-decl.h | 3 - gcc/optabs.c | 22 +- gcc/optabs.h | 3 + gcc/params.def | 46 + gcc/passes.c | 25 +- gcc/po/ChangeLog | 4 + gcc/po/gcc.pot | 21337 ++++++++++--------- gcc/postreload-gcse.c | 2 +- gcc/postreload.c | 5 +- gcc/predict.c | 13 +- gcc/predict.def | 12 - gcc/recog.c | 24 +- gcc/reg-stack.c | 4 +- gcc/regrename.c | 45 +- gcc/reload.c | 30 +- gcc/reload1.c | 246 +- gcc/rtlanal.c | 12 +- gcc/simplify-rtx.c | 27 +- gcc/stor-layout.c | 2 +- gcc/testsuite/ChangeLog | 935 +- gcc/testsuite/g++.dg/abi/empty6.C | 11 +- gcc/testsuite/g++.dg/cpp/string-1.C | 9 + gcc/testsuite/g++.dg/cpp/string-2.C | 7 + gcc/testsuite/g++.dg/debug/using2.C | 21 + gcc/testsuite/g++.dg/eh/forced1.C | 7 +- gcc/testsuite/g++.dg/eh/forced2.C | 4 +- gcc/testsuite/g++.dg/eh/forced3.C | 4 +- gcc/testsuite/g++.dg/eh/forced4.C | 4 +- gcc/testsuite/g++.dg/eh/simd-2.C | 1 + gcc/testsuite/g++.dg/eh/spec8.C | 11 + gcc/testsuite/g++.dg/eh/synth2.C | 24 + gcc/testsuite/g++.dg/ext/altivec-1.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-10.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-11.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-12.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-13.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-2.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-3.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-4.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-5.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-6.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-7.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-8.C | 2 +- gcc/testsuite/g++.dg/ext/altivec-9.C | 2 +- gcc/testsuite/g++.dg/ext/array2.C | 18 + gcc/testsuite/g++.dg/ext/c99struct1.C | 12 + gcc/testsuite/g++.dg/ext/stmtexpr7.C | 14 + gcc/testsuite/g++.dg/inherit/thunk4.C | 23 + gcc/testsuite/g++.dg/init/switch1.C | 8 + gcc/testsuite/g++.dg/lookup/ambig4.C | 6 +- gcc/testsuite/g++.dg/lookup/ambig5.C | 4 +- gcc/testsuite/g++.dg/lookup/strong-using-2.C | 4 +- gcc/testsuite/g++.dg/opt/pr24665.C | 29 + gcc/testsuite/g++.dg/opt/pr24780.C | 14 + gcc/testsuite/g++.dg/other/i386-1.C | 4 +- gcc/testsuite/g++.dg/other/pr24623.C | 69 + gcc/testsuite/g++.dg/parse/ambig4.C | 18 + gcc/testsuite/g++.dg/parse/crash22.C | 8 +- gcc/testsuite/g++.dg/tc1/dr101.C | 4 +- gcc/testsuite/g++.dg/template/asm1.C | 14 + gcc/testsuite/g++.dg/template/crash43.C | 8 + gcc/testsuite/g++.dg/template/dependent-name3.C | 17 + gcc/testsuite/g++.dg/template/dependent-name4.C | 15 + gcc/testsuite/g++.dg/template/friend39.C | 7 + gcc/testsuite/g++.dg/template/sfinae2.C | 17 + gcc/testsuite/g++.dg/tls/diag-3.C | 10 + gcc/testsuite/g++.dg/tls/diag-4.C | 9 + gcc/testsuite/g++.dg/tls/static-1.C | 28 + gcc/testsuite/g++.dg/tls/static-1a.cc | 18 + gcc/testsuite/g++.dg/tree-ssa/pr23046.C | 11 + gcc/testsuite/g++.dg/tree-ssa/pr24351-1.C | 24 + gcc/testsuite/g++.dg/tree-ssa/pr24351-2.C | 25 + gcc/testsuite/g++.dg/tree-ssa/pr24351-3.C | 101 + gcc/testsuite/g++.dg/warn/Wcast-qual1.C | 7 + gcc/testsuite/g++.dg/warn/inline2.C | 20 + gcc/testsuite/g++.dg/warn/undefined1.C | 7 + gcc/testsuite/g++.old-deja/g++.abi/vtable2.C | 8 +- gcc/testsuite/g++.old-deja/g++.mike/unused.C | 7 + gcc/testsuite/gcc.c-torture/compile/pr20583.c | 30 + gcc/testsuite/gcc.c-torture/compile/pr23435.c | 11 + gcc/testsuite/gcc.c-torture/compile/pr24883.c | 21 + gcc/testsuite/gcc.c-torture/execute/20051104-1.c | 17 + gcc/testsuite/gcc.c-torture/execute/20051110-1.c | 31 + gcc/testsuite/gcc.c-torture/execute/20051110-2.c | 39 + gcc/testsuite/gcc.c-torture/execute/20051113-1.c | 71 + .../gcc.c-torture/execute/floatunsisf-1.c | 21 + gcc/testsuite/gcc.c-torture/execute/pr24716.c | 59 + gcc/testsuite/gcc.c-torture/execute/pr24851.c | 17 + gcc/testsuite/gcc.c-torture/execute/usmul.c | 33 + .../gcc.c-torture/execute/zero-struct-2.c | 20 + gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp | 2 +- gcc/testsuite/gcc.dg/20010423-1.c | 17 - gcc/testsuite/gcc.dg/20020313-1.c | 72 - gcc/testsuite/gcc.dg/20020326-1.c | 11 - gcc/testsuite/gcc.dg/20020523-2.c | 53 - gcc/testsuite/gcc.dg/20030225-2.c | 46 - gcc/testsuite/gcc.dg/20030405-1.c | 29 - gcc/testsuite/gcc.dg/20030811-1.c | 59 - gcc/testsuite/gcc.dg/20040303-1.c | 20 - gcc/testsuite/gcc.dg/Wc++-compat.c | 9 + gcc/testsuite/gcc.dg/Wno-c++-compat.c | 9 + gcc/testsuite/gcc.dg/alpha-base-2.c | 5 - gcc/testsuite/gcc.dg/alpha-cix-2.c | 5 - gcc/testsuite/gcc.dg/alpha-max-2.c | 5 - gcc/testsuite/gcc.dg/altivec-1.c | 42 - gcc/testsuite/gcc.dg/altivec-11.c | 59 - gcc/testsuite/gcc.dg/altivec-12.c | 96 - gcc/testsuite/gcc.dg/altivec-14.c | 24 - gcc/testsuite/gcc.dg/altivec-2.c | 35 - gcc/testsuite/gcc.dg/altivec-22.c | 10 - gcc/testsuite/gcc.dg/altivec-3.c | 79 - gcc/testsuite/gcc.dg/altivec-5.c | 12 - gcc/testsuite/gcc.dg/altivec-pr22085.c | 12 - gcc/testsuite/gcc.dg/altivec-varargs-1.c | 84 - gcc/testsuite/gcc.dg/altivec-vec-merge.c | 605 - gcc/testsuite/gcc.dg/attr-weakref-1.c | 228 + gcc/testsuite/gcc.dg/attr-weakref-1a.c | 8 + gcc/testsuite/gcc.dg/builtin-strstr.c | 8 + gcc/testsuite/gcc.dg/cleanup-10.c | 5 +- gcc/testsuite/gcc.dg/cleanup-11.c | 5 +- gcc/testsuite/gcc.dg/cleanup-5.c | 3 +- gcc/testsuite/gcc.dg/cleanup-8.c | 5 +- gcc/testsuite/gcc.dg/cleanup-9.c | 5 +- gcc/testsuite/gcc.dg/cpp/strify4.c | 25 + gcc/testsuite/gcc.dg/darwin-longlong.c | 40 - gcc/testsuite/gcc.dg/delay-slot-1.c | 59 + gcc/testsuite/gcc.dg/dg.exp | 2 +- gcc/testsuite/gcc.dg/fold-div-2.c | 13 + gcc/testsuite/gcc.dg/fold-overflow-1.c | 21 + gcc/testsuite/gcc.dg/i386-mmx-4.c | 245 - gcc/testsuite/gcc.dg/i386-sse-10.c | 34 - gcc/testsuite/gcc.dg/i386-sse-11.c | 92 - gcc/testsuite/gcc.dg/i386-sse-6.c | 316 - gcc/testsuite/gcc.dg/i386-sse-7.c | 139 - gcc/testsuite/gcc.dg/i386-ssefn-3.c | 43 - gcc/testsuite/gcc.dg/i386-ssefn-4.c | 43 - gcc/testsuite/gcc.dg/ia64-asm-1.c | 29 - gcc/testsuite/gcc.dg/ia64-float80-1.c | 12 - gcc/testsuite/gcc.dg/ia64-float80-2.c | 13 - gcc/testsuite/gcc.dg/ia64-got-1.c | 23 - gcc/testsuite/gcc.dg/ia64-postinc.c | 23 - gcc/testsuite/gcc.dg/ifcvt-fabs-1.c | 21 + gcc/testsuite/gcc.dg/nested-calls-1.c | 42 + gcc/testsuite/gcc.dg/nested-func-4.c | 1 + gcc/testsuite/gcc.dg/overflow-2.c | 13 + gcc/testsuite/gcc.dg/pack-test-1.c | 2 +- gcc/testsuite/gcc.dg/pr16155.c | 17 - gcc/testsuite/gcc.dg/pr16286.c | 26 - gcc/testsuite/gcc.dg/pr19340.c | 27 + gcc/testsuite/gcc.dg/pr24101-1.i | 4 + gcc/testsuite/gcc.dg/pr24101-2.i | 4 + gcc/testsuite/gcc.dg/pr24225.c | 2 + gcc/testsuite/gcc.dg/pr24445.c | 9 + gcc/testsuite/gcc.dg/pr24624.c | 67 + gcc/testsuite/gcc.dg/pr24683.c | 11 + gcc/testsuite/gcc.dg/pr24820.c | 12 + gcc/testsuite/gcc.dg/sparc-getcontext-1.c | 118 + gcc/testsuite/gcc.dg/tls/opt-10.c | 16 + gcc/testsuite/gcc.dg/torture/pr23424-1.c | 16 + gcc/testsuite/gcc.dg/torture/pr24750-1.c | 72 + gcc/testsuite/gcc.dg/torture/pr24912-1.c | 10 + gcc/testsuite/gcc.dg/tree-ssa/loop-14.c | 19 + gcc/testsuite/gcc.dg/tree-ssa/loop-2.c | 5 +- gcc/testsuite/gcc.dg/tree-ssa/loop-3.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr23115.c | 29 + gcc/testsuite/gcc.dg/tree-ssa/pr23294.c | 38 + gcc/testsuite/gcc.dg/tree-ssa/pr23382.c | 24 + gcc/testsuite/gcc.dg/tree-ssa/pr24627.c | 66 + gcc/testsuite/gcc.dg/tree-ssa/pr24670.c | 23 + gcc/testsuite/gcc.dg/tree-ssa/pr24840.c | 17 + gcc/testsuite/gcc.dg/tree-ssa/vrp22.c | 16 + gcc/testsuite/gcc.dg/uninit-12.c | 12 + gcc/testsuite/gcc.dg/uninit-13.c | 10 + gcc/testsuite/gcc.dg/uninit-14.c | 20 + gcc/testsuite/gcc.dg/union-cast-1.c | 14 + gcc/testsuite/gcc.dg/union-cast-2.c | 15 + gcc/testsuite/gcc.dg/union-cast-3.c | 14 + gcc/testsuite/gcc.dg/vect/pr24300.c | 2 + gcc/testsuite/gcc.dg/winline-5.c | 2 +- .../{gcc.dg => gcc.target/alpha}/20000715-1.c | 0 .../{gcc.dg => gcc.target/alpha}/20011018-1.c | 0 .../{gcc.dg => gcc.target/alpha}/980217-1.c | 0 .../{gcc.dg/asm-5.c => gcc.target/alpha/asm-1.c} | 0 .../alpha-base-1.c => gcc.target/alpha/base-1.c} | 0 gcc/testsuite/gcc.target/alpha/base-2.c | 5 + .../alpha-cix-1.c => gcc.target/alpha/cix-1.c} | 0 gcc/testsuite/gcc.target/alpha/cix-2.c | 5 + .../alpha-max-1.c => gcc.target/alpha/max-1.c} | 0 gcc/testsuite/gcc.target/alpha/max-2.c | 5 + gcc/testsuite/gcc.target/cris/cris.exp | 41 + gcc/testsuite/gcc.target/cris/rld-legit1.c | 21 + gcc/testsuite/gcc.target/cris/rld-legit2.c | 16 + gcc/testsuite/gcc.target/cris/torture/pr24750-2.c | 20 + .../{gcc.dg => gcc.target/i386}/20000609-1.c | 0 .../{gcc.dg => gcc.target/i386}/20000614-1.c | 0 .../{gcc.dg => gcc.target/i386}/20000614-2.c | 0 .../{gcc.dg => gcc.target/i386}/20000720-1.c | 0 .../{gcc.dg => gcc.target/i386}/20000807-1.c | 0 .../{gcc.dg => gcc.target/i386}/20000904-1.c | 0 .../{gcc.dg => gcc.target/i386}/20001127-1.c | 0 .../{gcc.dg => gcc.target/i386}/20010202-1.c | 0 .../{gcc.dg => gcc.target/i386}/20010520-1.c | 0 .../{gcc.dg => gcc.target/i386}/20011009-1.c | 0 .../{gcc.dg => gcc.target/i386}/20011029-2.c | 0 .../{gcc.dg => gcc.target/i386}/20011107-1.c | 0 .../{gcc.dg => gcc.target/i386}/20011119-1.c | 0 .../{gcc.dg => gcc.target/i386}/20020201-3.c | 0 .../{gcc.dg => gcc.target/i386}/20020218-1.c | 0 .../{gcc.dg => gcc.target/i386}/20020224-1.c | 0 .../{gcc.dg => gcc.target/i386}/20020426-1.c | 0 .../{gcc.dg => gcc.target/i386}/20020523-1.c | 0 gcc/testsuite/gcc.target/i386/20020523-2.c | 53 + .../{gcc.dg => gcc.target/i386}/20020531-1.c | 0 .../{gcc.dg => gcc.target/i386}/20020616-1.c | 0 .../{gcc.dg => gcc.target/i386}/20020729-1.c | 0 .../{gcc.dg => gcc.target/i386}/20030217-1.c | 0 .../{gcc.dg => gcc.target/i386}/20030926-1.c | 0 .../{gcc.dg => gcc.target/i386}/20040112-1.c | 0 .../{gcc.dg => gcc.target/i386}/20050113-1.c | 0 .../i386-387-1.c => gcc.target/i386/387-1.c} | 0 .../i386-387-2.c => gcc.target/i386/387-2.c} | 0 .../i386-387-3.c => gcc.target/i386/387-3.c} | 0 .../i386-387-4.c => gcc.target/i386/387-4.c} | 0 .../i386-387-5.c => gcc.target/i386/387-5.c} | 0 .../i386-387-6.c => gcc.target/i386/387-6.c} | 0 .../i386-387-7.c => gcc.target/i386/387-7.c} | 0 .../i386-387-8.c => gcc.target/i386/387-8.c} | 0 .../i386-3dnow-1.c => gcc.target/i386/3dnow-1.c} | 0 .../i386-3dnow-2.c => gcc.target/i386/3dnow-2.c} | 0 .../i386-3dnowA-1.c => gcc.target/i386/3dnowA-1.c} | 0 .../i386-3dnowA-2.c => gcc.target/i386/3dnowA-2.c} | 0 .../{gcc.dg => gcc.target/i386}/980211-1.c | 0 .../{gcc.dg => gcc.target/i386}/980226-1.c | 0 .../{gcc.dg => gcc.target/i386}/980414-1.c | 0 .../{gcc.dg => gcc.target/i386}/980520-1.c | 0 .../{gcc.dg => gcc.target/i386}/980709-1.c | 0 .../{gcc.dg => gcc.target/i386}/990117-1.c | 0 .../{gcc.dg => gcc.target/i386}/990130-1.c | 0 .../{gcc.dg => gcc.target/i386}/990213-2.c | 0 .../{gcc.dg => gcc.target/i386}/990214-1.c | 0 .../{gcc.dg => gcc.target/i386}/990424-1.c | 0 .../{gcc.dg => gcc.target/i386}/990524-1.c | 0 .../{gcc.dg => gcc.target/i386}/991129-1.c | 0 .../{gcc.dg => gcc.target/i386}/991209-1.c | 0 .../{gcc.dg => gcc.target/i386}/991214-1.c | 0 .../{gcc.dg => gcc.target/i386}/991230-1.c | 0 .../i386-asm-2.c => gcc.target/i386/asm-2.c} | 0 .../i386-asm-3.c => gcc.target/i386/asm-3.c} | 0 .../i386-asm-4.c => gcc.target/i386/asm-4.c} | 0 .../i386-asm-1.c => gcc.target/i386/asm-5.c} | 0 .../i386/bitfield1.c} | 0 .../i386/bitfield2.c} | 0 .../i386/bitfield3.c} | 0 .../{gcc.dg/i386-cadd.c => gcc.target/i386/cadd.c} | 0 .../i386-call-1.c => gcc.target/i386/call-1.c} | 0 .../{gcc.dg => gcc.target/i386}/clobbers.c | 0 .../i386-cmov1.c => gcc.target/i386/cmov1.c} | 0 .../i386-cmov2.c => gcc.target/i386/cmov2.c} | 0 .../i386-cmov3.c => gcc.target/i386/cmov3.c} | 0 .../i386-cmov4.c => gcc.target/i386/cmov4.c} | 0 .../i386-cmov5.c => gcc.target/i386/cmov5.c} | 0 .../i386-cvt-1.c => gcc.target/i386/cvt-1.c} | 0 .../i386/fastcall-1.c} | 0 .../i386-fpcvt-1.c => gcc.target/i386/fpcvt-1.c} | 0 .../i386-fpcvt-2.c => gcc.target/i386/fpcvt-2.c} | 0 .../i386-fpcvt-3.c => gcc.target/i386/fpcvt-3.c} | 0 .../i386-fpcvt-4.c => gcc.target/i386/fpcvt-4.c} | 0 gcc/testsuite/gcc.target/i386/lea.c | 14 + .../i386-local.c => gcc.target/i386/local.c} | 0 .../i386-local2.c => gcc.target/i386/local2.c} | 0 .../i386-loop-1.c => gcc.target/i386/loop-1.c} | 0 .../i386-loop-2.c => gcc.target/i386/loop-2.c} | 0 .../i386-loop-3.c => gcc.target/i386/loop-3.c} | 0 .../i386-memset-1.c => gcc.target/i386/memset-1.c} | 0 gcc/testsuite/gcc.target/i386/minmax-1.c | 9 + gcc/testsuite/gcc.target/i386/minmax-2.c | 9 + .../i386-mmx-1.c => gcc.target/i386/mmx-1.c} | 0 .../i386-mmx-2.c => gcc.target/i386/mmx-2.c} | 0 .../i386-mmx-3.c => gcc.target/i386/mmx-3.c} | 0 gcc/testsuite/gcc.target/i386/mmx-4.c | 245 + .../i386-mmx-5.c => gcc.target/i386/mmx-5.c} | 0 .../i386-mmx-6.c => gcc.target/i386/mmx-6.c} | 0 .../{gcc.dg/i386-mul.c => gcc.target/i386/mul.c} | 0 .../i386/pentium4-not-mull.c} | 0 .../i386-pic-1.c => gcc.target/i386/pic-1.c} | 0 .../{gcc.dg => gcc.target/i386}/pr12092-1.c | 0 .../{gcc.dg => gcc.target/i386}/pr14289-1.c | 0 .../{gcc.dg => gcc.target/i386}/pr18614-1.c | 0 .../{gcc.dg => gcc.target/i386}/pr19236-1.c | 0 .../{gcc.dg => gcc.target/i386}/pr20204.c | 0 gcc/testsuite/gcc.target/i386/pr22432.c | 20 + gcc/testsuite/gcc.target/i386/pr23376.c | 21 + .../{gcc.dg => gcc.target/i386}/pr23943.c | 0 .../{gcc.dg => gcc.target/i386}/pr9771-1.c | 0 .../i386-regparm.c => gcc.target/i386/regparm.c} | 0 .../i386-rotate-1.c => gcc.target/i386/rotate-1.c} | 0 .../{gcc.dg => gcc.target/i386}/sibcall-5.c | 0 .../i386/signbit-1.c} | 0 .../i386/signbit-2.c} | 0 .../i386/signbit-3.c} | 0 gcc/testsuite/gcc.target/i386/sse-10.c | 34 + gcc/testsuite/gcc.target/i386/sse-11.c | 92 + .../i386-sse-12.c => gcc.target/i386/sse-12.c} | 0 .../i386-sse-1.c => gcc.target/i386/sse-13.c} | 0 .../i386-sse-2.c => gcc.target/i386/sse-14.c} | 0 .../i386-sse-3.c => gcc.target/i386/sse-15.c} | 0 .../i386-sse-4.c => gcc.target/i386/sse-16.c} | 0 .../i386-sse-5.c => gcc.target/i386/sse-5.c} | 0 gcc/testsuite/gcc.target/i386/sse-6.c | 316 + gcc/testsuite/gcc.target/i386/sse-7.c | 139 + .../i386-sse-8.c => gcc.target/i386/sse-8.c} | 0 .../i386-sse-9.c => gcc.target/i386/sse-9.c} | 0 .../i386/sse-vect-types.c} | 0 .../i386-ssefn-1.c => gcc.target/i386/ssefn-1.c} | 0 .../i386-ssefn-2.c => gcc.target/i386/ssefn-2.c} | 0 gcc/testsuite/gcc.target/i386/ssefn-3.c | 43 + gcc/testsuite/gcc.target/i386/ssefn-4.c | 43 + .../i386-ssefp-1.c => gcc.target/i386/ssefp-1.c} | 0 .../i386-ssefp-2.c => gcc.target/i386/ssefp-2.c} | 0 .../i386/ssetype-1.c} | 0 .../i386/ssetype-2.c} | 0 .../i386/ssetype-3.c} | 0 .../i386/ssetype-4.c} | 0 .../i386/ssetype-5.c} | 0 .../i386-unroll-1.c => gcc.target/i386/unroll-1.c} | 0 .../i386/volatile-1.c} | 0 .../i386-xorps.c => gcc.target/i386/xorps.c} | 0 gcc/testsuite/gcc.target/ia64/20010423-1.c | 17 + gcc/testsuite/gcc.target/ia64/20020313-1.c | 72 + gcc/testsuite/gcc.target/ia64/20020326-1.c | 11 + gcc/testsuite/gcc.target/ia64/20030225-2.c | 46 + gcc/testsuite/gcc.target/ia64/20030405-1.c | 29 + gcc/testsuite/gcc.target/ia64/20030811-1.c | 59 + gcc/testsuite/gcc.target/ia64/20040303-1.c | 20 + gcc/testsuite/gcc.target/ia64/asm-1.c | 29 + gcc/testsuite/gcc.target/ia64/float80-1.c | 12 + gcc/testsuite/gcc.target/ia64/float80-2.c | 13 + .../ia64-fptr-1.c => gcc.target/ia64/fptr-1.c} | 0 gcc/testsuite/gcc.target/ia64/got-1.c | 23 + gcc/testsuite/gcc.target/ia64/postinc-1.c | 23 + .../ia64-types1.c => gcc.target/ia64/types-1.c} | 0 .../ia64-types2.c => gcc.target/ia64/types-2.c} | 0 .../ia64/visibility-1.c} | 0 .../ia64/visibility-2.c} | 0 .../{gcc.dg => gcc.target/powerpc}/20020118-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/20030218-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/20030505.c | 0 .../{gcc.dg => gcc.target/powerpc}/20040121-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/20040622-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/20041111-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/20050603-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/20050603-3.c | 0 .../{gcc.dg => gcc.target/powerpc}/20050830-1.c | 0 gcc/testsuite/gcc.target/powerpc/405-macchw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-macchw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-macchwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-macchwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-machhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-machhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-machhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-machhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-maclhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-maclhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-maclhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-maclhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-mulchw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-mulchw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-mulchwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-mulchwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-mulhhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-mulhhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-mulhhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-mulhhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-mullhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-mullhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-mullhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-mullhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-nmacchw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-nmacchw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-nmachhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-nmachhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/405-nmaclhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/405-nmaclhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-macchw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-macchw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-macchwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-macchwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-machhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-machhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-machhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-machhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-maclhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-maclhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-maclhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-maclhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-mulchw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-mulchw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-mulchwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-mulchwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-mulhhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-mulhhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-mulhhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-mulhhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-mullhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-mullhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-mullhwu-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-mullhwu-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-nmacchw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-nmacchw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-nmachhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-nmachhw-2.c | 16 + gcc/testsuite/gcc.target/powerpc/440-nmaclhw-1.c | 14 + gcc/testsuite/gcc.target/powerpc/440-nmaclhw-2.c | 16 + .../{gcc.dg => gcc.target/powerpc}/980827-1.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-1.c | 42 + .../{gcc.dg => gcc.target/powerpc}/altivec-10.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-11.c | 59 + gcc/testsuite/gcc.target/powerpc/altivec-12.c | 96 + .../{gcc.dg => gcc.target/powerpc}/altivec-13.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-14.c | 24 + .../{gcc.dg => gcc.target/powerpc}/altivec-15.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-16.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-17.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-18.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-19.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-2.c | 36 + .../{gcc.dg => gcc.target/powerpc}/altivec-20.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-21.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-22.c | 11 + gcc/testsuite/gcc.target/powerpc/altivec-3.c | 79 + .../{gcc.dg => gcc.target/powerpc}/altivec-4.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-5.c | 13 + .../{gcc.dg => gcc.target/powerpc}/altivec-6.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-7.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-8.c | 0 .../{gcc.dg => gcc.target/powerpc}/altivec-9.c | 0 gcc/testsuite/gcc.target/powerpc/altivec-consts.c | 321 + gcc/testsuite/gcc.target/powerpc/altivec-pr22085.c | 13 + gcc/testsuite/gcc.target/powerpc/altivec-splat.c | 49 + .../powerpc}/altivec-types-1.c | 0 .../powerpc}/altivec-types-2.c | 0 .../powerpc}/altivec-types-3.c | 0 .../powerpc}/altivec-types-4.c | 0 .../gcc.target/powerpc/altivec-varargs-1.c | 84 + .../gcc.target/powerpc/altivec-vec-merge.c | 606 + .../{gcc.dg => gcc.target/powerpc}/altivec_check.h | 0 .../powerpc}/compress-float-ppc-pic.c | 0 .../powerpc}/compress-float-ppc.c | 0 .../{gcc.dg => gcc.target/powerpc}/darwin-abi-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/darwin-abi-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/darwin-bool-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/darwin-bool-2.c | 0 .../powerpc}/darwin-longdouble.c | 0 gcc/testsuite/gcc.target/powerpc/darwin-longlong.c | 40 + .../powerpc}/darwin-misaligned.c | 0 .../{gcc.dg => gcc.target/powerpc}/doloop-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/macho-lo-sum.c | 0 gcc/testsuite/gcc.target/powerpc/powerpc.exp | 41 + .../{gcc.dg => gcc.target/powerpc}/ppc-and-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-bitfield1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-compare-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-eabi.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-fmadd-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-fmadd-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-fmadd-3.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-fsel-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-fsel-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-fsel-3.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-ldstruct.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-mov-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-sdata-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-sdata-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-spe.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-spe64-1.c | 0 .../powerpc}/ppc-stackalign-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc-stfiwx.c | 0 .../powerpc}/ppc-vector-memcpy.c | 0 .../powerpc}/ppc-vector-memset.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc64-abi-1.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc64-abi-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc64-abi-3.c | 0 .../{gcc.dg => gcc.target/powerpc}/ppc64-toc.c | 0 gcc/testsuite/gcc.target/powerpc/pr16155.c | 18 + gcc/testsuite/gcc.target/powerpc/pr16286.c | 27 + .../{gcc.dg => gcc.target/powerpc}/pr18096-1.c | 0 .../powerpc}/rs6000-fpint-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/rs6000-fpint.c | 0 .../powerpc}/rs6000-ldouble-1.c | 0 .../powerpc}/rs6000-ldouble-2.c | 0 .../powerpc}/rs6000-power2-1.c | 0 .../powerpc}/rs6000-power2-2.c | 0 .../{gcc.dg => gcc.target/powerpc}/spe1.c | 0 .../powerpc}/stabs-attrib-vect-darwin.c | 0 gcc/testsuite/gcc.target/x86_64/pr23376.c | 21 - gcc/testsuite/gfortran.dg/arrayio_0.f90 | 19 + gcc/testsuite/gfortran.dg/arrayio_derived_1.f90 | 33 + .../gfortran.dg/auto_internal_assumed.f90 | 13 + gcc/testsuite/gfortran.dg/automatic_char_len_1.f90 | 0 .../gfortran.dg/automatic_module_variable.f90 | 16 + .../char_array_structure_constructor.f90 | 0 .../gfortran.dg/char_initialiser_actual.f90 | 0 .../gfortran.dg/char_pointer_comp_assign.f90 | 0 gcc/testsuite/gfortran.dg/complex_intrinsic_1.f90 | 5 + gcc/testsuite/gfortran.dg/complex_intrinsic_2.f90 | 7 + gcc/testsuite/gfortran.dg/data_constraints_1.f90 | 30 + gcc/testsuite/gfortran.dg/data_constraints_2.f90 | 15 + gcc/testsuite/gfortran.dg/data_initialized.f90 | 10 + .../gfortran.dg/derived_pointer_recursion.f90 | 0 gcc/testsuite/gfortran.dg/derived_recursion.f90 | 0 gcc/testsuite/gfortran.dg/f2c_4.c | 0 gcc/testsuite/gfortran.dg/f2c_4.f90 | 0 gcc/testsuite/gfortran.dg/f2c_5.c | 0 gcc/testsuite/gfortran.dg/f2c_5.f90 | 0 gcc/testsuite/gfortran.dg/fgetc_1.f90 | 39 + gcc/testsuite/gfortran.dg/fgetc_2.f90 | 39 + gcc/testsuite/gfortran.dg/fgetc_3.f90 | 34 + gcc/testsuite/gfortran.dg/fmt_t_2.f90 | 27 + gcc/testsuite/gfortran.dg/ftell_1.f90 | 13 + gcc/testsuite/gfortran.dg/ftell_2.f90 | 8 + gcc/testsuite/gfortran.dg/g77/README | 0 gcc/testsuite/gfortran.dg/g77/cpp.F | 0 gcc/testsuite/gfortran.dg/g77/cpp2.F | 0 gcc/testsuite/gfortran.dg/g77/cpp3.F | 0 gcc/testsuite/gfortran.dg/gnu_logical_1.F | 91 + gcc/testsuite/gfortran.dg/gnu_logical_2.f90 | 29 + gcc/testsuite/gfortran.dg/implicit_6.f90 | 8 + gcc/testsuite/gfortran.dg/implicit_7.f90 | 7 + gcc/testsuite/gfortran.dg/implicit_actual.f90 | 0 gcc/testsuite/gfortran.dg/inquire_9.f90 | 24 + gcc/testsuite/gfortran.dg/iomsg_1.f90 | 0 .../gfortran.dg/large_real_kind_form_io_1.f90 | 27 + gcc/testsuite/gfortran.dg/module_blank_common.f90 | 0 gcc/testsuite/gfortran.dg/module_double_reuse.f90 | 0 gcc/testsuite/gfortran.dg/namelist_12.f | 27 +- gcc/testsuite/gfortran.dg/namelist_13.f90 | 2 +- gcc/testsuite/gfortran.dg/namelist_14.f90 | 2 +- gcc/testsuite/gfortran.dg/namelist_15.f90 | 15 +- gcc/testsuite/gfortran.dg/namelist_21.f90 | 41 + gcc/testsuite/gfortran.dg/namelist_22.f90 | 41 + gcc/testsuite/gfortran.dg/namelist_empty.f90 | 17 + gcc/testsuite/gfortran.dg/namelist_use.f90 | 4 +- gcc/testsuite/gfortran.dg/namelist_use_only.f90 | 4 +- gcc/testsuite/gfortran.dg/nested_modules_4.f90 | 25 + gcc/testsuite/gfortran.dg/nested_modules_5.f90 | 26 + gcc/testsuite/gfortran.dg/open_access_append_1.f90 | 20 + gcc/testsuite/gfortran.dg/open_access_append_2.f90 | 5 + gcc/testsuite/gfortran.dg/pointer_assign_1.f90 | 17 + gcc/testsuite/gfortran.dg/private_type_2.f90 | 13 +- gcc/testsuite/gfortran.dg/private_type_3.f90 | 0 gcc/testsuite/gfortran.dg/pure_byref_1.f90 | 15 + gcc/testsuite/gfortran.dg/pure_byref_2.f90 | 17 + gcc/testsuite/gfortran.dg/read_eor.f90 | 14 + gcc/testsuite/gfortran.dg/read_noadvance.f90 | 21 + gcc/testsuite/gfortran.dg/read_x_eor.f90 | 10 + .../gfortran.dg/recursive_statement_functions.f90 | 28 +- gcc/testsuite/gfortran.dg/scan_1.f90 | 31 + gcc/testsuite/gfortran.dg/spread_scalar_source.f90 | 0 gcc/testsuite/gfortran.dg/static_linking_1.c | 6 + gcc/testsuite/gfortran.dg/static_linking_1.f | 11 + .../gfortran.dg/substring_equivalence.f90 | 8 + gcc/testsuite/gfortran.dg/x_slash_1.f | 0 .../gfortran.fortran-torture/execute/inquire_5.f90 | 32 + gcc/testsuite/lib/g++.exp | 18 +- gcc/testsuite/lib/gfortran.exp | 13 +- gcc/testsuite/lib/obj-c++.exp | 62 +- gcc/testsuite/lib/objc.exp | 23 +- gcc/testsuite/lib/target-libpath.exp | 26 +- gcc/testsuite/lib/target-supports.exp | 55 + gcc/toplev.c | 5 +- gcc/tree-data-ref.c | 221 +- gcc/tree-data-ref.h | 20 +- gcc/tree-flow-inline.h | 38 +- gcc/tree-flow.h | 19 +- gcc/tree-gimple.c | 4 +- gcc/tree-gimple.h | 2 + gcc/tree-if-conv.c | 13 +- gcc/tree-loop-linear.c | 43 +- gcc/tree-scalar-evolution.c | 116 +- gcc/tree-sra.c | 45 +- gcc/tree-ssa-ccp.c | 34 +- gcc/tree-ssa-dce.c | 6 +- gcc/tree-ssa-dom.c | 33 +- gcc/tree-ssa-dse.c | 72 +- gcc/tree-ssa-loop-ivopts.c | 17 +- gcc/tree-ssa-loop-niter.c | 6 +- gcc/tree-ssa-operands.c | 6 +- gcc/tree-ssa-structalias.c | 159 +- gcc/tree-ssa.c | 25 +- gcc/tree-vect-analyze.c | 84 +- gcc/tree-vect-generic.c | 2 +- gcc/tree-vectorizer.c | 4 +- gcc/tree-vrp.c | 119 +- gcc/tree.c | 39 +- gcc/tree.def | 4 +- gcc/tree.h | 15 +- gcc/treelang/ChangeLog | 8 + gcc/treelang/treetree.c | 35 +- gcc/unwind-c.c | 2 +- gcc/unwind-dw2.c | 10 +- gcc/unwind-sjlj.c | 19 + gcc/unwind.inc | 5 +- gcc/var-tracking.c | 5 + gcc/varasm.c | 248 +- libcpp/ChangeLog | 41 + libcpp/charset.c | 10 +- libcpp/errors.c | 27 +- libcpp/files.c | 1 + libcpp/include/cpplib.h | 8 + libcpp/init.c | 2 + libcpp/macro.c | 17 +- libcpp/po/ChangeLog | 4 + libcpp/po/cpplib.pot | 207 +- libgfortran/ChangeLog | 388 +- libgfortran/Makefile.am | 11 +- libgfortran/Makefile.in | 62 +- libgfortran/acinclude.m4 | 38 + libgfortran/aclocal.m4 | 27 +- libgfortran/config.h.in | 12 + libgfortran/config/fpu-glibc.h | 3 +- libgfortran/configure | 171 +- libgfortran/configure.ac | 17 +- libgfortran/generated/matmul_c10.c | 24 +- libgfortran/generated/matmul_c16.c | 24 +- libgfortran/generated/matmul_c4.c | 24 +- libgfortran/generated/matmul_c8.c | 24 +- libgfortran/generated/matmul_i16.c | 24 +- libgfortran/generated/matmul_i4.c | 24 +- libgfortran/generated/matmul_i8.c | 24 +- libgfortran/generated/matmul_l16.c | 16 +- libgfortran/generated/matmul_l4.c | 16 +- libgfortran/generated/matmul_l8.c | 16 +- libgfortran/generated/matmul_r10.c | 24 +- libgfortran/generated/matmul_r16.c | 24 +- libgfortran/generated/matmul_r4.c | 24 +- libgfortran/generated/matmul_r8.c | 24 +- libgfortran/intrinsics/ctime.c | 160 + libgfortran/intrinsics/fget.c | 173 + libgfortran/intrinsics/flush.c | 37 +- libgfortran/intrinsics/ftell.c | 67 + libgfortran/intrinsics/rand.c | 25 +- libgfortran/intrinsics/random.c | 73 +- libgfortran/intrinsics/string_intrinsics.c | 45 +- libgfortran/intrinsics/system_clock.c | 131 +- libgfortran/intrinsics/tty.c | 45 +- libgfortran/io/close.c | 18 +- libgfortran/io/file_pos.c | 96 +- libgfortran/io/format.c | 480 +- libgfortran/io/inquire.c | 232 +- libgfortran/io/io.h | 492 +- libgfortran/io/list_read.c | 1081 +- libgfortran/io/lock.c | 44 +- libgfortran/io/open.c | 300 +- libgfortran/io/read.c | 92 +- libgfortran/io/size_from_kind.c | 88 + libgfortran/io/transfer.c | 1189 +- libgfortran/io/unit.c | 287 +- libgfortran/io/unix.c | 221 +- libgfortran/io/unix.h | 63 + libgfortran/io/write.c | 348 +- libgfortran/libgfortran.h | 41 +- libgfortran/libtool-version | 2 +- libgfortran/m4/matmul.m4 | 24 +- libgfortran/m4/matmull.m4 | 16 +- libgfortran/runtime/error.c | 65 +- libgfortran/runtime/fpu.c | 5 - libgfortran/runtime/main.c | 8 + libgfortran/runtime/pause.c | 6 +- libgfortran/runtime/stop.c | 8 +- libgfortran/runtime/string.c | 8 +- libiberty/ChangeLog | 7 + libiberty/splay-tree.c | 191 +- libjava/ChangeLog | 299 + libjava/Makefile.in | 546 +- libjava/classpath/.classpath | 4 +- .../classpath/.settings/org.eclipse.jdt.core.prefs | 18 +- .../classpath/.settings/org.eclipse.jdt.ui.prefs | 5 +- libjava/classpath/AUTHORS | 7 +- libjava/classpath/BUGS | 2 +- libjava/classpath/ChangeLog | 10233 +++++++++ libjava/classpath/INSTALL | 35 +- libjava/classpath/LICENSE | 14 + libjava/classpath/Makefile.am | 3 +- libjava/classpath/Makefile.in | 17 +- libjava/classpath/NEWS | 55 + libjava/classpath/aclocal.m4 | 37 +- libjava/classpath/autogen.sh | 2 +- libjava/classpath/config.guess | 614 +- libjava/classpath/config.sub | 185 +- libjava/classpath/configure | 3173 +-- libjava/classpath/configure.ac | 167 +- libjava/classpath/doc/Makefile.in | 12 +- libjava/classpath/doc/api/Makefile.in | 12 +- .../doc/www.gnu.org/announce/20050906.wml | 221 + .../doc/www.gnu.org/announce/20051102.wml | 247 + libjava/classpath/doc/www.gnu.org/corba.wml | 37 + .../doc/www.gnu.org/cp-tools/cp-tools.wml | 9 + .../doc/www.gnu.org/downloads/downloads.wml | 20 +- libjava/classpath/doc/www.gnu.org/home.wml | 2 +- .../classpath/doc/www.gnu.org/include/layout.wml | 2 +- libjava/classpath/doc/www.gnu.org/newsitems.txt | 10 + libjava/classpath/doc/www.gnu.org/tasks.wml | 340 +- libjava/classpath/examples/Makefile.am | 7 +- libjava/classpath/examples/Makefile.in | 19 +- .../examples/CORBA/NamingService/Demo.java | 4 +- .../examples/CORBA/SimpleCommunication/Demo.java | 31 +- .../CORBA/SimpleCommunication/DemoServer.java | 118 + .../CORBA/SimpleCommunication/comServer.java | 118 - .../communication/DemoServant.java | 230 + .../communication/DemoTester.java | 111 + .../communication/DirectTest.java | 40 +- .../communication/RequestTest.java | 56 +- .../communication/StructureToPass.java | 66 + .../communication/StructureToPassHelper.java | 101 + .../communication/StructureToPassHolder.java | 37 + .../communication/StructureToReturn.java | 71 + .../communication/StructureToReturnHelper.java | 114 + .../communication/StructureToReturnHolder.java | 60 + .../communication/TreeNode.java | 60 + .../communication/TreeNodeHelper.java | 160 + .../communication/TreeNodeHolder.java | 100 + .../communication/WeThrowThisException.java | 75 + .../communication/WeThrowThisExceptionHelper.java | 116 + .../communication/_DemoTesterImplBase.java | 209 + .../communication/_DemoTesterStub.java | 429 + .../communication/_comTesterImplBase.java | 206 - .../communication/_comTesterStub.java | 426 - .../communication/comServant.java | 236 - .../communication/comTester.java | 111 - .../SimpleCommunication/communication/node.java | 55 - .../communication/nodeHelper.java | 160 - .../communication/nodeHolder.java | 100 - .../communication/ourUserException.java | 70 - .../communication/ourUserExceptionHelper.java | 116 - .../communication/passThis.java | 61 - .../communication/passThisHelper.java | 102 - .../communication/passThisHolder.java | 37 - .../communication/returnThis.java | 66 - .../communication/returnThisHelper.java | 115 - .../communication/returnThisHolder.java | 60 - .../gnu/classpath/examples/CORBA/swing/README.html | 493 + .../examples/CORBA/swing/x5/CanvasWorld.java | 307 + .../examples/CORBA/swing/x5/ChatConstants.java | 80 + .../examples/CORBA/swing/x5/ClientFrame.java | 417 + .../classpath/examples/CORBA/swing/x5/Demo.java | 99 + .../examples/CORBA/swing/x5/GameManager.java | 68 + .../examples/CORBA/swing/x5/GameManagerImpl.java | 135 + .../examples/CORBA/swing/x5/IorReader.java | 124 + .../examples/CORBA/swing/x5/OrbStarter.java | 236 + .../classpath/examples/CORBA/swing/x5/Player.java | 96 + .../examples/CORBA/swing/x5/PlayerImpl.java | 275 + .../examples/CORBA/swing/x5/PlayingDesk.java | 512 + .../classpath/examples/CORBA/swing/x5/State.java | 82 + .../examples/CORBA/swing/x5/X5Server.java | 175 + .../CORBA/swing/x5/_GameManagerImpl_Tie.java | 214 + .../examples/CORBA/swing/x5/_GameManager_Stub.java | 207 + .../examples/CORBA/swing/x5/_PlayerImpl_Tie.java | 212 + .../examples/CORBA/swing/x5/_Player_Stub.java | 397 + .../examples/gnu/classpath/examples/midi/Demo.java | 137 + .../gnu/classpath/examples/swing/ButtonDemo.java | 284 + .../swing/ClasspathSwingActivityBoard.launch | 19 + .../gnu/classpath/examples/swing/ComboBoxDemo.java | 360 + .../gnu/classpath/examples/swing/Demo.java | 214 +- .../classpath/examples/swing/FileChooserDemo.java | 228 + .../classpath/examples/swing/GNULookAndFeel.java | 184 +- .../classpath/examples/swing/ProgressBarDemo.java | 219 + .../classpath/examples/swing/ScrollBarDemo.java | 141 + .../gnu/classpath/examples/swing/SliderDemo.java | 249 + .../classpath/examples/swing/TextFieldDemo.java | 488 + libjava/classpath/external/Makefile.in | 12 +- libjava/classpath/external/sax/Makefile.in | 12 +- libjava/classpath/external/w3c_dom/Makefile.in | 12 +- .../classpath/gnu/CORBA/CDR/AbstractCdrInput.java | 1768 ++ .../classpath/gnu/CORBA/CDR/AbstractCdrOutput.java | 1047 + .../classpath/gnu/CORBA/CDR/AbstractDataInput.java | 392 + .../gnu/CORBA/CDR/AbstractDataOutput.java | 185 + libjava/classpath/gnu/CORBA/CDR/AligningInput.java | 131 + .../classpath/gnu/CORBA/CDR/AligningOutput.java | 148 + .../classpath/gnu/CORBA/CDR/ArrayValueHelper.java | 254 + .../gnu/CORBA/CDR/BigEndianInputStream.java | 2 +- .../gnu/CORBA/CDR/BigEndianOutputStream.java | 2 +- .../classpath/gnu/CORBA/CDR/BufferedCdrOutput.java | 156 + .../classpath/gnu/CORBA/CDR/BufferredCdrInput.java | 153 + .../gnu/CORBA/CDR/EncapsulationStream.java | 146 + libjava/classpath/gnu/CORBA/CDR/HeadlessInput.java | 749 + libjava/classpath/gnu/CORBA/CDR/IDLTypeHelper.java | 169 + .../gnu/CORBA/CDR/LittleEndianInputStream.java | 2 +- .../gnu/CORBA/CDR/LittleEndianOutputStream.java | 2 +- .../gnu/CORBA/CDR/UnknownExceptionCtxHandler.java | 292 + libjava/classpath/gnu/CORBA/CDR/VMVio.java | 101 + libjava/classpath/gnu/CORBA/CDR/Vio.java | 1459 +- .../gnu/CORBA/CDR/abstractDataInputStream.java | 392 - .../gnu/CORBA/CDR/abstractDataOutputStream.java | 185 - .../gnu/CORBA/CDR/aligningInputStream.java | 122 - .../gnu/CORBA/CDR/aligningOutputStream.java | 121 - libjava/classpath/gnu/CORBA/CDR/cdrBufInput.java | 115 - libjava/classpath/gnu/CORBA/CDR/cdrBufOutput.java | 115 - libjava/classpath/gnu/CORBA/CDR/cdrInput.java | 1672 -- libjava/classpath/gnu/CORBA/CDR/cdrOutput.java | 1009 - .../gnu/CORBA/CDR/encapsulatedOutput.java | 146 - libjava/classpath/gnu/CORBA/CDR/gnuRuntime.java | 336 + .../classpath/gnu/CORBA/CDR/gnuValueStream.java | 71 + libjava/classpath/gnu/CORBA/CDR/noHeaderInput.java | 166 - .../classpath/gnu/CORBA/CdrEncapsCodecImpl.java | 358 + libjava/classpath/gnu/CORBA/Connected_objects.java | 11 - libjava/classpath/gnu/CORBA/CorbaList.java | 115 + .../classpath/gnu/CORBA/DefaultSocketFactory.java | 79 + libjava/classpath/gnu/CORBA/DynAn/AbstractAny.java | 177 + .../classpath/gnu/CORBA/DynAn/DivideableAny.java | 514 + libjava/classpath/gnu/CORBA/DynAn/RecordAny.java | 405 + .../classpath/gnu/CORBA/DynAn/UndivideableAny.java | 493 + .../gnu/CORBA/DynAn/ValueChangeListener.java | 50 + .../classpath/gnu/CORBA/DynAn/abstractDynAny.java | 177 - .../classpath/gnu/CORBA/DynAn/abstractRecord.java | 405 - .../classpath/gnu/CORBA/DynAn/anyDivideable.java | 514 - .../classpath/gnu/CORBA/DynAn/anyUndivideable.java | 493 - libjava/classpath/gnu/CORBA/DynAn/gnuDynAny.java | 28 +- .../gnu/CORBA/DynAn/gnuDynAnyFactory.java | 8 +- libjava/classpath/gnu/CORBA/DynAn/gnuDynArray.java | 14 +- libjava/classpath/gnu/CORBA/DynAn/gnuDynEnum.java | 2 +- libjava/classpath/gnu/CORBA/DynAn/gnuDynFixed.java | 2 +- .../classpath/gnu/CORBA/DynAn/gnuDynStruct.java | 4 +- libjava/classpath/gnu/CORBA/DynAn/gnuDynUnion.java | 10 +- libjava/classpath/gnu/CORBA/DynAn/gnuDynValue.java | 14 +- .../classpath/gnu/CORBA/DynAn/gnuDynValueBox.java | 6 +- .../gnu/CORBA/DynAn/valueChangedListener.java | 50 - .../classpath/gnu/CORBA/EmptyExceptionHolder.java | 1 + libjava/classpath/gnu/CORBA/ExceptionCreator.java | 245 - .../classpath/gnu/CORBA/ForwardRequestHelper.java | 1 + libjava/classpath/gnu/CORBA/Functional_ORB.java | 1627 -- libjava/classpath/gnu/CORBA/GIOP/CharSets_OSF.java | 5 +- libjava/classpath/gnu/CORBA/GIOP/CloseMessage.java | 10 +- .../gnu/CORBA/GIOP/CodeSetServiceContext.java | 224 + .../classpath/gnu/CORBA/GIOP/ContextHandler.java | 76 + libjava/classpath/gnu/CORBA/GIOP/ErrorMessage.java | 23 +- .../classpath/gnu/CORBA/GIOP/MessageHeader.java | 200 +- libjava/classpath/gnu/CORBA/GIOP/ReplyHeader.java | 10 +- .../classpath/gnu/CORBA/GIOP/RequestHeader.java | 10 +- .../classpath/gnu/CORBA/GIOP/ServiceContext.java | 88 +- .../gnu/CORBA/GIOP/contextSupportingHeader.java | 76 - libjava/classpath/gnu/CORBA/GIOP/cxCodeSet.java | 224 - .../classpath/gnu/CORBA/GIOP/v1_0/ReplyHeader.java | 14 +- .../gnu/CORBA/GIOP/v1_0/RequestHeader.java | 14 +- .../classpath/gnu/CORBA/GIOP/v1_2/ReplyHeader.java | 16 +- .../gnu/CORBA/GIOP/v1_2/RequestHeader.java | 27 +- libjava/classpath/gnu/CORBA/GeneralHolder.java | 178 + libjava/classpath/gnu/CORBA/HolderLocator.java | 184 + libjava/classpath/gnu/CORBA/IOR.java | 96 +- libjava/classpath/gnu/CORBA/IOR_Delegate.java | 466 - .../classpath/gnu/CORBA/IOR_contructed_object.java | 109 - .../gnu/CORBA/Interceptor/IORInterceptors.java | 83 +- .../gnu/CORBA/Interceptor/Registrator.java | 8 +- .../gnu/CORBA/Interceptor/gnuIcCurrent.java | 4 +- .../gnu/CORBA/Interceptor/gnuIorInfo.java | 44 +- .../CORBA/Interceptor/gnuServerRequestInfo.java | 20 + libjava/classpath/gnu/CORBA/IorDelegate.java | 442 + libjava/classpath/gnu/CORBA/IorObject.java | 118 + libjava/classpath/gnu/CORBA/IorProvider.java | 52 + libjava/classpath/gnu/CORBA/Minor.java | 282 + libjava/classpath/gnu/CORBA/NamingService/Ext.java | 2 +- .../NamingService/NameComponentComparator.java | 98 + .../gnu/CORBA/NamingService/NameParser.java | 197 +- .../gnu/CORBA/NamingService/NameTransformer.java | 328 + .../gnu/CORBA/NamingService/NamingMap.java | 2 +- .../NamingService/NamingServiceTransient.java | 10 +- .../gnu/CORBA/NamingService/cmpNameComponent.java | 98 - .../gnu/CORBA/NamingService/snConverter.java | 328 - libjava/classpath/gnu/CORBA/ObjectCreator.java | 397 +- libjava/classpath/gnu/CORBA/OctetHolder.java | 4 +- libjava/classpath/gnu/CORBA/OrbFocused.java | 375 + libjava/classpath/gnu/CORBA/OrbFunctional.java | 1778 ++ libjava/classpath/gnu/CORBA/OrbRestricted.java | 529 + libjava/classpath/gnu/CORBA/Poa/AOM.java | 382 + .../classpath/gnu/CORBA/Poa/AccessiblePolicy.java | 62 + .../classpath/gnu/CORBA/Poa/DynamicImpHandler.java | 85 + .../classpath/gnu/CORBA/Poa/ForwardedServant.java | 16 +- libjava/classpath/gnu/CORBA/Poa/LocalDelegate.java | 79 +- libjava/classpath/gnu/CORBA/Poa/LocalRequest.java | 42 +- libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java | 51 +- .../gnu/CORBA/Poa/ServantDelegateImpl.java | 232 + .../classpath/gnu/CORBA/Poa/StandardPolicies.java | 128 + .../classpath/gnu/CORBA/Poa/activeObjectMap.java | 394 - libjava/classpath/gnu/CORBA/Poa/dynImpHandler.java | 85 - .../gnu/CORBA/Poa/gnuAdapterActivator.java | 2 +- .../gnu/CORBA/Poa/gnuIdAssignmentPolicy.java | 2 +- .../gnu/CORBA/Poa/gnuIdUniquenessPolicy.java | 2 +- .../gnu/CORBA/Poa/gnuImplicitActivationPolicy.java | 2 +- .../classpath/gnu/CORBA/Poa/gnuLifespanPolicy.java | 2 +- libjava/classpath/gnu/CORBA/Poa/gnuPOA.java | 471 +- libjava/classpath/gnu/CORBA/Poa/gnuPOAManager.java | 60 +- .../gnu/CORBA/Poa/gnuRequestProcessingPolicy.java | 2 +- .../classpath/gnu/CORBA/Poa/gnuServantObject.java | 60 +- .../gnu/CORBA/Poa/gnuServantRetentionPolicy.java | 2 +- .../classpath/gnu/CORBA/Poa/gnuThreadPolicy.java | 2 +- libjava/classpath/gnu/CORBA/Poa/policySets.java | 128 - .../classpath/gnu/CORBA/Poa/servantDelegate.java | 232 - libjava/classpath/gnu/CORBA/Poa/vPolicy.java | 62 - libjava/classpath/gnu/CORBA/RawReply.java | 95 + .../classpath/gnu/CORBA/ResponseHandlerImpl.java | 189 + libjava/classpath/gnu/CORBA/Restricted_ORB.java | 524 - .../classpath/gnu/CORBA/ServiceRequestAdapter.java | 10 +- libjava/classpath/gnu/CORBA/SimpleDelegate.java | 294 + libjava/classpath/gnu/CORBA/Simple_delegate.java | 276 - libjava/classpath/gnu/CORBA/SocketRepository.java | 86 +- .../classpath/gnu/CORBA/StreamBasedRequest.java | 60 + libjava/classpath/gnu/CORBA/StreamHolder.java | 123 + libjava/classpath/gnu/CORBA/StubLocator.java | 110 + libjava/classpath/gnu/CORBA/TypeCodeHelper.java | 35 +- libjava/classpath/gnu/CORBA/TypeKindNamer.java | 183 + libjava/classpath/gnu/CORBA/Version.java | 26 +- libjava/classpath/gnu/CORBA/WCharHolder.java | 4 +- libjava/classpath/gnu/CORBA/WStringHolder.java | 6 +- libjava/classpath/gnu/CORBA/_PolicyImplBase.java | 3 +- libjava/classpath/gnu/CORBA/aliasTypeCode.java | 142 - libjava/classpath/gnu/CORBA/binaryReply.java | 95 - .../gnu/CORBA/bufferedResponseHandler.java | 189 - libjava/classpath/gnu/CORBA/cdrEncapsCodec.java | 356 - libjava/classpath/gnu/CORBA/corbaArrayList.java | 115 - libjava/classpath/gnu/CORBA/fixedTypeCode.java | 145 - libjava/classpath/gnu/CORBA/generalTypeCode.java | 243 - libjava/classpath/gnu/CORBA/gnuAny.java | 139 +- libjava/classpath/gnu/CORBA/gnuCodecFactory.java | 2 +- libjava/classpath/gnu/CORBA/gnuContextList.java | 2 +- libjava/classpath/gnu/CORBA/gnuExceptionList.java | 2 +- libjava/classpath/gnu/CORBA/gnuNVList.java | 6 +- libjava/classpath/gnu/CORBA/gnuRequest.java | 134 +- libjava/classpath/gnu/CORBA/gnuValueHolder.java | 2 +- libjava/classpath/gnu/CORBA/holderFactory.java | 184 - .../gnu/CORBA/interfaces/SocketFactory.java | 95 + .../classpath/gnu/CORBA/interfaces/package.html | 49 + .../gnu/CORBA/primitiveArrayTypeCode.java | 265 - libjava/classpath/gnu/CORBA/primitiveTypeCode.java | 196 - libjava/classpath/gnu/CORBA/recordTypeCode.java | 245 - libjava/classpath/gnu/CORBA/recursiveTypeCode.java | 78 - libjava/classpath/gnu/CORBA/streamReadyHolder.java | 120 - libjava/classpath/gnu/CORBA/streamRequest.java | 60 - libjava/classpath/gnu/CORBA/stringTypeCode.java | 83 - libjava/classpath/gnu/CORBA/stubFinder.java | 110 - libjava/classpath/gnu/CORBA/typeNamer.java | 180 - .../gnu/CORBA/typecodes/AliasTypeCode.java | 148 + .../gnu/CORBA/typecodes/ArrayTypeCode.java | 272 + .../gnu/CORBA/typecodes/FixedTypeCode.java | 152 + .../gnu/CORBA/typecodes/GeneralTypeCode.java | 249 + .../gnu/CORBA/typecodes/PrimitiveTypeCode.java | 201 + .../gnu/CORBA/typecodes/RecordTypeCode.java | 252 + .../gnu/CORBA/typecodes/RecursiveTypeCode.java | 84 + .../gnu/CORBA/typecodes/StringTypeCode.java | 89 + libjava/classpath/gnu/CORBA/typecodes/package.html | 48 + libjava/classpath/gnu/CORBA/universalHolder.java | 174 - libjava/classpath/gnu/classpath/ByteArray.java | 109 + .../classpath/gnu/classpath/SystemProperties.java | 6 - .../gnu/classpath/jdwp/event/VmDeathEvent.java | 85 + .../classpath/jdwp/event/filters/StepFilter.java | 2 +- .../jdwp/event/filters/ThreadOnlyFilter.java | 2 +- .../jdwp/processor/ArrayReferenceCommandSet.java | 3 +- .../jdwp/processor/ArrayTypeCommandSet.java | 3 +- .../processor/ClassLoaderReferenceCommandSet.java | 3 +- .../processor/ClassObjectReferenceCommandSet.java | 3 +- .../jdwp/processor/ClassTypeCommandSet.java | 3 +- .../jdwp/processor/EventRequestCommandSet.java | 3 +- .../classpath/jdwp/processor/MethodCommandSet.java | 3 +- .../jdwp/processor/ObjectReferenceCommandSet.java | 3 +- .../jdwp/processor/ReferenceTypeCommandSet.java | 3 +- .../jdwp/processor/StackFrameCommandSet.java | 3 +- .../jdwp/processor/StringReferenceCommandSet.java | 3 +- .../processor/ThreadGroupReferenceCommandSet.java | 3 +- .../jdwp/processor/ThreadReferenceCommandSet.java | 3 +- .../jdwp/processor/VirtualMachineCommandSet.java | 13 +- libjava/classpath/gnu/java/awt/AWTUtilities.java | 9 +- libjava/classpath/gnu/java/awt/EmbeddedWindow.java | 6 +- libjava/classpath/gnu/java/awt/FocusManager.java | 52 - .../gnu/java/awt/peer/gtk/GdkFontMetrics.java | 29 +- .../gnu/java/awt/peer/gtk/GdkGraphics.java | 12 +- .../gnu/java/awt/peer/gtk/GdkGraphics2D.java | 53 +- .../gnu/java/awt/peer/gtk/GdkTextLayout.java | 5 +- .../gnu/java/awt/peer/gtk/GtkChoicePeer.java | 3 - .../gnu/java/awt/peer/gtk/GtkComponentPeer.java | 7 +- .../gnu/java/awt/peer/gtk/GtkDialogPeer.java | 6 +- .../gnu/java/awt/peer/gtk/GtkFramePeer.java | 3 +- .../gnu/java/awt/peer/gtk/GtkWindowPeer.java | 9 +- .../classpath/gnu/java/awt/peer/qt/QtToolkit.java | 4 +- .../gnu/java/beans/DummyAppletContext.java | 37 +- .../gnu/java/beans/decoder/BooleanHandler.java | 4 +- libjava/classpath/gnu/java/io/PlatformHelper.java | 5 - .../classpath/gnu/java/net/LineInputStream.java | 13 +- .../gnu/java/net/protocol/file/Connection.java | 51 +- .../protocol/http/ByteArrayResponseBodyReader.java | 123 - .../java/net/protocol/http/ChunkedInputStream.java | 2 +- .../gnu/java/net/protocol/http/Cookie.java | 2 +- .../gnu/java/net/protocol/http/HTTPConnection.java | 174 +- .../java/net/protocol/http/HTTPURLConnection.java | 108 +- .../gnu/java/net/protocol/http/Headers.java | 85 +- .../protocol/http/LimitedLengthInputStream.java | 220 + .../gnu/java/net/protocol/http/Request.java | 191 +- .../gnu/java/net/protocol/http/Response.java | 55 +- .../java/net/protocol/http/ResponseBodyReader.java | 70 - .../net/protocol/http/event/ConnectionEvent.java | 81 - .../protocol/http/event/ConnectionListener.java | 58 - .../java/net/protocol/http/event/RequestEvent.java | 107 - .../net/protocol/http/event/RequestListener.java | 70 - .../gnu/java/net/protocol/http/event/package.html | 46 - .../gnu/java/net/protocol/jar/Connection.java | 83 +- .../classpath/gnu/java/nio/SocketChannelImpl.java | 2 +- .../gnu/java/nio/channels/FileChannelImpl.java | 3 +- .../gnu/java/nio/charset/UTF_16Decoder.java | 19 +- .../gnu/java/nio/charset/UnicodeLittle.java | 2 +- .../gnu/java/nio/charset/iconv/IconvProvider.java | 6 +- .../classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java | 2 +- .../gnu/java/rmi/server/RMIClassLoaderImpl.java | 350 + .../gnu/java/rmi/server/RMIObjectInputStream.java | 2 +- .../gnu/java/rmi/server/UnicastServer.java | 5 +- .../classpath/gnu/java/security/PolicyFile.java | 6 +- .../classpath/gnu/java/security/der/BitString.java | 13 + .../classpath/gnu/java/security/der/DERReader.java | 2 +- .../provider/DiffieHellmanKeyFactoryImpl.java | 123 + .../DiffieHellmanKeyPairGeneratorImpl.java | 86 + .../classpath/gnu/java/security/provider/Gnu.java | 15 +- .../java/security/x509/ext/BasicConstraints.java | 2 +- .../gnu/java/security/x509/ext/Extension.java | 10 +- .../classpath/gnu/java/text/BaseBreakIterator.java | 7 +- .../gnu/javax/crypto/DiffieHellmanImpl.java | 159 + .../gnu/javax/crypto/GnuDHPrivateKey.java | 90 + .../classpath/gnu/javax/crypto/RSACipherImpl.java | 311 + .../gnu/javax/imageio/bmp/BMPDecoder.java | 169 + .../gnu/javax/imageio/bmp/BMPException.java | 47 + .../gnu/javax/imageio/bmp/BMPFileHeader.java | 128 + .../gnu/javax/imageio/bmp/BMPImageReader.java | 153 + .../gnu/javax/imageio/bmp/BMPImageReaderSpi.java | 123 + .../gnu/javax/imageio/bmp/BMPInfoHeader.java | 201 + .../gnu/javax/imageio/bmp/DecodeBF16.java | 104 + .../gnu/javax/imageio/bmp/DecodeBF32.java | 108 + .../gnu/javax/imageio/bmp/DecodeRGB1.java | 96 + .../gnu/javax/imageio/bmp/DecodeRGB24.java | 77 + .../gnu/javax/imageio/bmp/DecodeRGB4.java | 92 + .../gnu/javax/imageio/bmp/DecodeRGB8.java | 90 + .../gnu/javax/imageio/bmp/DecodeRLE4.java | 176 + .../gnu/javax/imageio/bmp/DecodeRLE8.java | 143 + .../classpath/gnu/javax/rmi/CORBA/CorbaInput.java | 297 + .../classpath/gnu/javax/rmi/CORBA/CorbaOutput.java | 219 + .../javax/rmi/CORBA/DefaultWriteObjectTester.java | 85 + .../gnu/javax/rmi/CORBA/DelegateFactory.java | 76 +- .../CORBA/PortableRemoteObjectDelegateImpl.java | 352 +- .../gnu/javax/rmi/CORBA/RmiUtilities.java | 946 + .../gnu/javax/rmi/CORBA/StubDelegateImpl.java | 262 +- .../gnu/javax/rmi/CORBA/TieTargetRecord.java | 93 + .../gnu/javax/rmi/CORBA/UtilDelegateImpl.java | 714 +- .../javax/rmi/CORBA/ValueHandlerDelegateImpl.java | 163 + .../gnu/javax/rmi/CORBA/ValueHandlerImpl.java | 82 - .../classpath/gnu/javax/rmi/PortableServer.java | 141 - .../javax/sound/midi/alsa/AlsaInputPortDevice.java | 130 + .../sound/midi/alsa/AlsaMidiDeviceProvider.java | 216 + .../sound/midi/alsa/AlsaMidiSequencerDevice.java | 519 + .../sound/midi/alsa/AlsaOutputPortDevice.java | 131 + .../gnu/javax/sound/midi/alsa/AlsaPortDevice.java | 153 + .../sound/midi/dssi/DSSIMidiDeviceProvider.java | 173 + .../gnu/javax/sound/midi/dssi/DSSISynthesizer.java | 745 + .../classpath/gnu/xml/aelfred2/JAXPFactory.java | 2 +- libjava/classpath/gnu/xml/aelfred2/SAXDriver.java | 4 +- libjava/classpath/gnu/xml/dom/DomDocument.java | 50 +- .../gnu/xml/libxmlj/dom/GnomeDocument.java | 48 +- .../gnu/xml/pipeline/ValidationConsumer.java | 2 +- .../gnu/xml/stream/XMLOutputFactoryImpl.java | 3 +- .../gnu/xml/stream/XMLStreamWriterImpl.java | 81 +- .../gnu/xml/transform/StreamSerializer.java | 6 +- .../gnu/xml/transform/TransformerImpl.java | 8 +- libjava/classpath/include/Makefile.am | 14 + libjava/classpath/include/Makefile.in | 26 +- libjava/classpath/include/config.h.in | 9 + .../include/gnu_java_awt_peer_gtk_GdkTextLayout.h | 1 + .../gnu_java_awt_peer_gtk_GtkComponentPeer.h | 1 + ..._javax_sound_midi_alsa_AlsaMidiDeviceProvider.h | 21 + ...javax_sound_midi_alsa_AlsaMidiSequencerDevice.h | 20 + .../gnu_javax_sound_midi_alsa_AlsaPortDevice.h | 19 + ..._javax_sound_midi_dssi_DSSIMidiDeviceProvider.h | 25 + .../gnu_javax_sound_midi_dssi_DSSISynthesizer.h | 29 + libjava/classpath/java/applet/Applet.java | 76 +- libjava/classpath/java/awt/BorderLayout.java | 130 +- libjava/classpath/java/awt/Button.java | 2 + libjava/classpath/java/awt/Canvas.java | 14 +- libjava/classpath/java/awt/Checkbox.java | 11 +- libjava/classpath/java/awt/CheckboxMenuItem.java | 2 + libjava/classpath/java/awt/Choice.java | 4 + libjava/classpath/java/awt/Color.java | 2 +- libjava/classpath/java/awt/ColorPaintContext.java | 4 +- libjava/classpath/java/awt/Component.java | 122 +- libjava/classpath/java/awt/Container.java | 146 +- .../java/awt/DefaultKeyboardFocusManager.java | 4 +- libjava/classpath/java/awt/Dialog.java | 2 + libjava/classpath/java/awt/EventQueue.java | 1 - libjava/classpath/java/awt/Font.java | 2680 +-- libjava/classpath/java/awt/FontMetrics.java | 21 + libjava/classpath/java/awt/Frame.java | 2 + libjava/classpath/java/awt/Graphics.java | 1403 +- .../classpath/java/awt/GraphicsConfiguration.java | 5 +- libjava/classpath/java/awt/GridBagLayout.java | 23 +- libjava/classpath/java/awt/Image.java | 20 +- .../classpath/java/awt/KeyboardFocusManager.java | 75 +- libjava/classpath/java/awt/List.java | 15 +- libjava/classpath/java/awt/Menu.java | 2 + libjava/classpath/java/awt/MenuComponent.java | 4 +- libjava/classpath/java/awt/MenuItem.java | 2 + libjava/classpath/java/awt/Point.java | 4 + libjava/classpath/java/awt/Polygon.java | 1 - libjava/classpath/java/awt/PopupMenu.java | 2 + libjava/classpath/java/awt/Rectangle.java | 4 + libjava/classpath/java/awt/ScrollPane.java | 4 +- .../classpath/java/awt/ScrollPaneAdjustable.java | 8 +- libjava/classpath/java/awt/TextArea.java | 2 + libjava/classpath/java/awt/TextComponent.java | 2 + libjava/classpath/java/awt/TextField.java | 2 + libjava/classpath/java/awt/Window.java | 110 +- libjava/classpath/java/awt/color/ICC_Profile.java | 18 +- libjava/classpath/java/awt/event/InputEvent.java | 41 +- .../classpath/java/awt/event/InvocationEvent.java | 25 +- libjava/classpath/java/awt/event/KeyEvent.java | 2 +- libjava/classpath/java/awt/event/MouseEvent.java | 23 +- libjava/classpath/java/awt/geom/Area.java | 2 +- libjava/classpath/java/awt/geom/GeneralPath.java | 3 +- libjava/classpath/java/awt/im/InputContext.java | 3 +- .../java/awt/im/InputMethodHighlight.java | 5 +- .../classpath/java/awt/im/InputMethodRequests.java | 2 + libjava/classpath/java/awt/im/spi/InputMethod.java | 10 +- .../java/awt/im/spi/InputMethodContext.java | 4 +- .../java/awt/im/spi/InputMethodDescriptor.java | 3 +- .../java/awt/image/AreaAveragingScaleFilter.java | 2 +- .../classpath/java/awt/image/BufferedImage.java | 18 +- libjava/classpath/java/awt/image/ColorModel.java | 2 +- .../java/awt/image/ComponentSampleModel.java | 8 +- .../classpath/java/awt/image/ImageConsumer.java | 2 +- .../java/awt/image/MemoryImageSource.java | 2 +- .../classpath/java/awt/image/PackedColorModel.java | 6 +- libjava/classpath/java/awt/image/SampleModel.java | 3 +- libjava/classpath/java/awt/print/PrinterJob.java | 7 +- .../java/beans/IndexedPropertyDescriptor.java | 728 +- .../classpath/java/beans/PropertyDescriptor.java | 17 +- .../beancontext/BeanContextServicesSupport.java | 2 +- .../java/beans/beancontext/BeanContextSupport.java | 2 +- .../classpath/java/io/ByteArrayOutputStream.java | 5 +- libjava/classpath/java/io/DataOutputStream.java | 6 +- libjava/classpath/java/io/File.java | 39 +- libjava/classpath/java/io/FilePermission.java | 8 +- libjava/classpath/java/io/FileWriter.java | 2 +- libjava/classpath/java/io/FilterReader.java | 2 +- libjava/classpath/java/io/InputStreamReader.java | 25 +- libjava/classpath/java/io/LineNumberReader.java | 6 +- libjava/classpath/java/io/ObjectInputStream.java | 588 +- libjava/classpath/java/io/ObjectOutputStream.java | 79 +- libjava/classpath/java/io/ObjectStreamClass.java | 17 +- libjava/classpath/java/io/ObjectStreamField.java | 2 +- libjava/classpath/java/io/OutputStreamWriter.java | 160 +- libjava/classpath/java/io/PipedInputStream.java | 2 +- libjava/classpath/java/io/PrintWriter.java | 75 +- libjava/classpath/java/io/PushbackInputStream.java | 9 +- libjava/classpath/java/lang/Boolean.java | 32 + libjava/classpath/java/lang/Byte.java | 32 +- libjava/classpath/java/lang/Character.java | 275 +- libjava/classpath/java/lang/Class.java | 11 +- libjava/classpath/java/lang/ClassLoader.java | 36 +- libjava/classpath/java/lang/Double.java | 23 +- .../java/lang/EnumConstantNotPresentException.java | 93 + libjava/classpath/java/lang/Float.java | 22 + libjava/classpath/java/lang/Integer.java | 4 +- libjava/classpath/java/lang/Long.java | 153 +- libjava/classpath/java/lang/Object.java | 4 +- libjava/classpath/java/lang/Process.java | 1 + libjava/classpath/java/lang/Readable.java | 1 + libjava/classpath/java/lang/RuntimePermission.java | 1 + libjava/classpath/java/lang/SecurityManager.java | 30 +- libjava/classpath/java/lang/Short.java | 44 + libjava/classpath/java/lang/StrictMath.java | 10 +- libjava/classpath/java/lang/String.java | 207 +- libjava/classpath/java/lang/StringBuffer.java | 259 +- libjava/classpath/java/lang/StringBuilder.java | 65 + libjava/classpath/java/lang/System.java | 2 +- libjava/classpath/java/lang/Thread.java | 12 +- libjava/classpath/java/lang/ThreadLocal.java | 1 - libjava/classpath/java/lang/ref/Reference.java | 6 +- libjava/classpath/java/lang/ref/WeakReference.java | 2 +- libjava/classpath/java/lang/reflect/Member.java | 4 +- libjava/classpath/java/lang/reflect/Proxy.java | 19 +- .../lang/reflect/UndeclaredThrowableException.java | 2 +- libjava/classpath/java/math/BigDecimal.java | 19 +- libjava/classpath/java/math/BigInteger.java | 19 +- libjava/classpath/java/net/DatagramSocket.java | 1 - libjava/classpath/java/net/Inet4Address.java | 2 +- libjava/classpath/java/net/InetSocketAddress.java | 2 +- libjava/classpath/java/net/ServerSocket.java | 4 +- libjava/classpath/java/net/Socket.java | 9 +- libjava/classpath/java/net/URL.java | 12 +- libjava/classpath/java/net/URLClassLoader.java | 192 +- libjava/classpath/java/net/URLConnection.java | 8 +- libjava/classpath/java/net/URLStreamHandler.java | 22 +- .../channels/spi/AbstractSelectableChannel.java | 6 + libjava/classpath/java/nio/charset/Charset.java | 27 +- .../java/rmi/activation/ActivationGroup_Stub.java | 110 + .../classpath/java/rmi/server/LoaderHandler.java | 6 +- .../classpath/java/rmi/server/RMIClassLoader.java | 516 +- .../classpath/java/rmi/server/RemoteObject.java | 4 +- libjava/classpath/java/rmi/server/RemoteRef.java | 6 +- .../java/security/AccessControlContext.java | 34 +- .../classpath/java/security/AccessController.java | 16 +- libjava/classpath/java/security/Identity.java | 8 +- .../classpath/java/security/ProtectionDomain.java | 4 +- libjava/classpath/java/security/Security.java | 4 +- libjava/classpath/java/text/AttributedString.java | 48 +- .../java/text/AttributedStringIterator.java | 183 +- libjava/classpath/java/text/CharacterIterator.java | 2 +- libjava/classpath/java/text/DateFormat.java | 3 + libjava/classpath/java/text/ParsePosition.java | 9 + libjava/classpath/java/text/RuleBasedCollator.java | 2 +- .../java/text/StringCharacterIterator.java | 12 +- libjava/classpath/java/util/ArrayList.java | 4 +- libjava/classpath/java/util/Arrays.java | 180 + libjava/classpath/java/util/Calendar.java | 23 +- libjava/classpath/java/util/Collections.java | 17 +- libjava/classpath/java/util/GregorianCalendar.java | 14 +- libjava/classpath/java/util/HashMap.java | 2 +- .../util/InvalidPropertiesFormatException.java | 57 + libjava/classpath/java/util/Locale.java | 4 +- libjava/classpath/java/util/Map.java | 8 +- libjava/classpath/java/util/Properties.java | 348 +- libjava/classpath/java/util/Random.java | 2 +- libjava/classpath/java/util/ResourceBundle.java | 9 +- libjava/classpath/java/util/SimpleTimeZone.java | 3 +- libjava/classpath/java/util/Timer.java | 93 +- libjava/classpath/java/util/TreeMap.java | 2 +- libjava/classpath/java/util/WeakHashMap.java | 28 +- libjava/classpath/java/util/jar/Manifest.java | 8 +- .../classpath/java/util/logging/FileHandler.java | 4 - libjava/classpath/java/util/logging/Handler.java | 6 +- .../classpath/java/util/logging/LogManager.java | 4 +- .../java/util/logging/LoggingPermission.java | 2 + .../java/util/logging/SimpleFormatter.java | 2 +- .../classpath/java/util/logging/XMLFormatter.java | 2 +- libjava/classpath/java/util/prefs/Preferences.java | 28 +- libjava/classpath/java/util/regex/Matcher.java | 8 +- libjava/classpath/java/util/zip/PendingBuffer.java | 2 +- libjava/classpath/java/util/zip/ZipFile.java | 17 +- libjava/classpath/javax/imageio/IIOException.java | 3 +- libjava/classpath/javax/imageio/IIOImage.java | 137 +- libjava/classpath/javax/imageio/IIOParam.java | 364 +- .../javax/imageio/IIOParamController.java | 13 +- libjava/classpath/javax/imageio/ImageIO.java | 609 +- .../classpath/javax/imageio/ImageReadParam.java | 2 + libjava/classpath/javax/imageio/ImageReader.java | 1724 +- .../classpath/javax/imageio/ImageTranscoder.java | 48 + .../javax/imageio/ImageTypeSpecifier.java | 467 + .../classpath/javax/imageio/ImageWriteParam.java | 3 + libjava/classpath/javax/imageio/ImageWriter.java | 1125 +- .../classpath/javax/imageio/metadata/IIOAttr.java | 378 - .../javax/imageio/metadata/IIOMetadata.java | 114 +- .../imageio/metadata/IIOMetadataFormatImpl.java | 842 + .../javax/imageio/metadata/IIOMetadataNode.java | 157 +- .../javax/imageio/metadata/IIONamedNodeMap.java | 138 - .../javax/imageio/metadata/IIONodeList.java | 72 - libjava/classpath/javax/imageio/package.html | 45 +- .../javax/imageio/spi/ImageReaderWriterSpi.java | 86 + libjava/classpath/javax/naming/CompoundName.java | 25 +- libjava/classpath/javax/naming/Name.java | 4 +- libjava/classpath/javax/print/DocFlavor.java | 4 + .../classpath/javax/print/attribute/Attribute.java | 20 +- .../javax/print/attribute/AttributeSet.java | 147 +- .../print/attribute/AttributeSetUtilities.java | 87 +- .../javax/print/attribute/DateTimeSyntax.java | 16 +- .../javax/print/attribute/DocAttribute.java | 19 +- .../javax/print/attribute/DocAttributeSet.java | 35 +- .../javax/print/attribute/EnumSyntax.java | 122 +- .../javax/print/attribute/HashAttributeSet.java | 190 +- .../javax/print/attribute/HashDocAttributeSet.java | 22 +- .../print/attribute/HashPrintJobAttributeSet.java | 22 +- .../attribute/HashPrintRequestAttributeSet.java | 22 +- .../attribute/HashPrintServiceAttributeSet.java | 22 +- .../javax/print/attribute/IntegerSyntax.java | 25 +- .../javax/print/attribute/PrintJobAttribute.java | 19 +- .../print/attribute/PrintJobAttributeSet.java | 35 +- .../print/attribute/PrintRequestAttribute.java | 14 +- .../print/attribute/PrintRequestAttributeSet.java | 35 +- .../print/attribute/PrintServiceAttribute.java | 19 +- .../print/attribute/PrintServiceAttributeSet.java | 35 +- .../javax/print/attribute/SetOfIntegerSyntax.java | 186 +- .../print/attribute/SupportedValuesAttribute.java | 20 +- .../classpath/javax/print/attribute/URISyntax.java | 18 +- .../print/attribute/UnmodifiableSetException.java | 12 +- .../classpath/javax/print/attribute/package.html | 9 +- .../classpath/javax/print/event/PrintEvent.java | 6 +- .../javax/print/event/PrintJobAdapter.java | 34 +- .../javax/print/event/PrintJobAttributeEvent.java | 10 +- .../print/event/PrintJobAttributeListener.java | 6 +- .../classpath/javax/print/event/PrintJobEvent.java | 27 +- .../javax/print/event/PrintJobListener.java | 15 +- .../print/event/PrintServiceAttributeEvent.java | 10 +- .../print/event/PrintServiceAttributeListener.java | 6 +- libjava/classpath/javax/print/event/package.html | 8 +- libjava/classpath/javax/rmi/BAD_OPERATION.java | 4 - libjava/classpath/javax/rmi/CORBA/ClassDesc.java | 33 +- libjava/classpath/javax/rmi/CORBA/ObjectImpl.java | 9 - .../rmi/CORBA/PortableRemoteObjectDelegate.java | 84 +- libjava/classpath/javax/rmi/CORBA/Stub.java | 170 +- .../classpath/javax/rmi/CORBA/StubDelegate.java | 56 +- .../classpath/javax/rmi/CORBA/SystemException.java | 4 - libjava/classpath/javax/rmi/CORBA/Tie.java | 101 +- libjava/classpath/javax/rmi/CORBA/Util.java | 413 +- .../classpath/javax/rmi/CORBA/UtilDelegate.java | 285 +- .../classpath/javax/rmi/CORBA/ValueHandler.java | 101 +- .../javax/rmi/CORBA/ValueHandlerMultiFormat.java | 94 + libjava/classpath/javax/rmi/CORBA/package.html | 36 +- libjava/classpath/javax/rmi/ORB.java | 4 - .../classpath/javax/rmi/PortableRemoteObject.java | 201 +- libjava/classpath/javax/rmi/package.html | 36 +- libjava/classpath/javax/security/auth/Subject.java | 12 +- .../javax/security/auth/SubjectDomainCombiner.java | 7 +- .../javax/security/auth/login/Configuration.java | 46 +- .../javax/security/auth/login/LoginContext.java | 4 +- .../javax/security/auth/x500/X500Principal.java | 16 + .../security/sasl/AuthenticationException.java | 4 +- .../javax/security/sasl/AuthorizeCallback.java | 10 +- .../javax/security/sasl/RealmCallback.java | 4 +- .../javax/security/sasl/RealmChoiceCallback.java | 4 +- libjava/classpath/javax/security/sasl/Sasl.java | 2 + .../classpath/javax/security/sasl/SaslClient.java | 6 +- .../javax/security/sasl/SaslClientFactory.java | 4 +- .../javax/security/sasl/SaslException.java | 6 +- .../classpath/javax/security/sasl/SaslServer.java | 8 +- .../javax/security/sasl/SaslServerFactory.java | 4 +- .../javax/sound/midi/ControllerEventListener.java | 58 + libjava/classpath/javax/sound/midi/Instrument.java | 77 + .../javax/sound/midi/InvalidMidiDataException.java | 90 + .../javax/sound/midi/MetaEventListener.java | 58 + .../classpath/javax/sound/midi/MetaMessage.java | 176 + .../classpath/javax/sound/midi/MidiChannel.java | 236 + libjava/classpath/javax/sound/midi/MidiDevice.java | 220 + libjava/classpath/javax/sound/midi/MidiEvent.java | 95 + .../classpath/javax/sound/midi/MidiFileFormat.java | 158 + .../classpath/javax/sound/midi/MidiMessage.java | 126 + libjava/classpath/javax/sound/midi/MidiSystem.java | 566 + .../javax/sound/midi/MidiUnavailableException.java | 90 + libjava/classpath/javax/sound/midi/Patch.java | 86 + libjava/classpath/javax/sound/midi/Receiver.java | 66 + libjava/classpath/javax/sound/midi/Sequence.java | 248 + libjava/classpath/javax/sound/midi/Sequencer.java | 402 + .../classpath/javax/sound/midi/ShortMessage.java | 344 + libjava/classpath/javax/sound/midi/Soundbank.java | 101 + .../javax/sound/midi/SoundbankResource.java | 104 + .../classpath/javax/sound/midi/Synthesizer.java | 173 + .../classpath/javax/sound/midi/SysexMessage.java | 139 + libjava/classpath/javax/sound/midi/Track.java | 160 + .../classpath/javax/sound/midi/Transmitter.java | 70 + .../classpath/javax/sound/midi/VoiceStatus.java | 79 + .../javax/sound/midi/spi/MidiDeviceProvider.java | 90 + .../javax/sound/midi/spi/MidiFileReader.java | 125 + .../javax/sound/midi/spi/MidiFileWriter.java | 143 + .../javax/sound/midi/spi/SoundbankReader.java | 97 + .../javax/sound/sampled/AudioFileFormat.java | 242 + .../classpath/javax/sound/sampled/AudioFormat.java | 345 + .../javax/sound/sampled/AudioInputStream.java | 258 + .../javax/sound/sampled/AudioPermission.java | 70 + .../classpath/javax/sound/sampled/AudioSystem.java | 744 + .../javax/sound/sampled/BooleanControl.java | 145 + libjava/classpath/javax/sound/sampled/Clip.java | 115 + .../javax/sound/sampled/CompoundControl.java | 102 + libjava/classpath/javax/sound/sampled/Control.java | 111 + .../classpath/javax/sound/sampled/DataLine.java | 265 + .../classpath/javax/sound/sampled/EnumControl.java | 126 + .../javax/sound/sampled/FloatControl.java | 267 + libjava/classpath/javax/sound/sampled/Line.java | 150 + .../classpath/javax/sound/sampled/LineEvent.java | 150 + .../javax/sound/sampled/LineListener.java | 55 + .../sound/sampled/LineUnavailableException.java | 61 + libjava/classpath/javax/sound/sampled/Mixer.java | 206 + libjava/classpath/javax/sound/sampled/Port.java | 135 + .../classpath/javax/sound/sampled/ReverbType.java | 144 + .../javax/sound/sampled/SourceDataLine.java | 77 + .../javax/sound/sampled/TargetDataLine.java | 79 + .../sampled/UnsupportedAudioFileException.java | 65 + .../javax/sound/sampled/spi/AudioFileReader.java | 146 + .../javax/sound/sampled/spi/AudioFileWriter.java | 131 + .../sampled/spi/FormatConversionProvider.java | 179 + .../javax/sound/sampled/spi/MixerProvider.java | 86 + libjava/classpath/javax/swing/AbstractButton.java | 123 +- .../javax/swing/AbstractSpinnerModel.java | 1 + libjava/classpath/javax/swing/ActionMap.java | 9 +- libjava/classpath/javax/swing/BorderFactory.java | 2 +- .../classpath/javax/swing/BoundedRangeModel.java | 4 +- libjava/classpath/javax/swing/Box.java | 21 +- libjava/classpath/javax/swing/BoxLayout.java | 1193 +- libjava/classpath/javax/swing/ButtonGroup.java | 5 +- libjava/classpath/javax/swing/ButtonModel.java | 260 +- libjava/classpath/javax/swing/CellEditor.java | 2 +- .../classpath/javax/swing/CellRendererPane.java | 38 +- libjava/classpath/javax/swing/ComboBoxEditor.java | 2 +- .../classpath/javax/swing/ComponentInputMap.java | 26 +- libjava/classpath/javax/swing/DebugGraphics.java | 308 +- .../classpath/javax/swing/DefaultButtonModel.java | 1 + .../classpath/javax/swing/DefaultCellEditor.java | 7 +- .../javax/swing/DefaultComboBoxModel.java | 172 +- .../javax/swing/DefaultDesktopManager.java | 4 + .../javax/swing/DefaultListCellRenderer.java | 14 + .../javax/swing/DefaultListSelectionModel.java | 60 +- libjava/classpath/javax/swing/DesktopManager.java | 2 +- libjava/classpath/javax/swing/FocusManager.java | 425 +- libjava/classpath/javax/swing/ImageIcon.java | 9 +- libjava/classpath/javax/swing/InputMap.java | 12 +- libjava/classpath/javax/swing/InputVerifier.java | 1 + libjava/classpath/javax/swing/JApplet.java | 60 +- libjava/classpath/javax/swing/JButton.java | 7 +- libjava/classpath/javax/swing/JCheckBox.java | 70 +- .../classpath/javax/swing/JCheckBoxMenuItem.java | 13 +- libjava/classpath/javax/swing/JColorChooser.java | 2 + libjava/classpath/javax/swing/JComboBox.java | 115 +- libjava/classpath/javax/swing/JComponent.java | 1058 +- libjava/classpath/javax/swing/JDesktopPane.java | 3 + libjava/classpath/javax/swing/JDialog.java | 48 +- libjava/classpath/javax/swing/JEditorPane.java | 472 +- libjava/classpath/javax/swing/JFileChooser.java | 767 +- libjava/classpath/javax/swing/JFrame.java | 57 +- libjava/classpath/javax/swing/JInternalFrame.java | 45 +- libjava/classpath/javax/swing/JLabel.java | 18 +- libjava/classpath/javax/swing/JLayeredPane.java | 137 +- libjava/classpath/javax/swing/JList.java | 856 +- libjava/classpath/javax/swing/JMenu.java | 30 +- libjava/classpath/javax/swing/JMenuBar.java | 206 +- libjava/classpath/javax/swing/JMenuItem.java | 34 +- libjava/classpath/javax/swing/JOptionPane.java | 160 +- libjava/classpath/javax/swing/JPanel.java | 134 +- libjava/classpath/javax/swing/JPasswordField.java | 1 + libjava/classpath/javax/swing/JPopupMenu.java | 343 +- libjava/classpath/javax/swing/JProgressBar.java | 5 +- libjava/classpath/javax/swing/JRadioButton.java | 4 +- .../javax/swing/JRadioButtonMenuItem.java | 8 +- libjava/classpath/javax/swing/JRootPane.java | 252 +- libjava/classpath/javax/swing/JScrollPane.java | 220 +- libjava/classpath/javax/swing/JSeparator.java | 2 +- libjava/classpath/javax/swing/JSlider.java | 3 + libjava/classpath/javax/swing/JSpinner.java | 42 +- libjava/classpath/javax/swing/JSplitPane.java | 123 +- libjava/classpath/javax/swing/JTabbedPane.java | 130 +- libjava/classpath/javax/swing/JTable.java | 1012 +- libjava/classpath/javax/swing/JTextArea.java | 61 +- libjava/classpath/javax/swing/JTextField.java | 183 +- libjava/classpath/javax/swing/JTextPane.java | 45 +- libjava/classpath/javax/swing/JToggleButton.java | 24 +- libjava/classpath/javax/swing/JToolBar.java | 4 +- libjava/classpath/javax/swing/JToolTip.java | 3 + libjava/classpath/javax/swing/JTree.java | 4733 ++-- libjava/classpath/javax/swing/JViewport.java | 579 +- libjava/classpath/javax/swing/JWindow.java | 48 +- libjava/classpath/javax/swing/KeyStroke.java | 1 + libjava/classpath/javax/swing/KeyboardManager.java | 280 + .../classpath/javax/swing/ListCellRenderer.java | 8 +- .../classpath/javax/swing/ListSelectionModel.java | 34 +- libjava/classpath/javax/swing/LookAndFeel.java | 115 +- libjava/classpath/javax/swing/MenuElement.java | 84 +- .../javax/swing/MenuSelectionManager.java | 9 +- .../javax/swing/MutableComboBoxModel.java | 4 +- libjava/classpath/javax/swing/OverlayLayout.java | 603 +- libjava/classpath/javax/swing/Popup.java | 112 +- libjava/classpath/javax/swing/PopupFactory.java | 33 +- libjava/classpath/javax/swing/ProgressMonitor.java | 651 +- .../javax/swing/ProgressMonitorInputStream.java | 291 +- libjava/classpath/javax/swing/Renderer.java | 32 +- libjava/classpath/javax/swing/RepaintManager.java | 292 +- .../classpath/javax/swing/RootPaneContainer.java | 96 +- .../classpath/javax/swing/ScrollPaneLayout.java | 426 +- libjava/classpath/javax/swing/Scrollable.java | 17 +- .../javax/swing/SingleSelectionModel.java | 81 +- .../classpath/javax/swing/SizeRequirements.java | 211 +- libjava/classpath/javax/swing/SizeSequence.java | 487 +- .../javax/swing/SortingFocusTraversalPolicy.java | 2 +- .../classpath/javax/swing/SpinnerListModel.java | 593 +- libjava/classpath/javax/swing/Spring.java | 1 + libjava/classpath/javax/swing/SpringLayout.java | 43 +- libjava/classpath/javax/swing/SwingUtilities.java | 26 +- libjava/classpath/javax/swing/Timer.java | 106 +- libjava/classpath/javax/swing/ToolTipManager.java | 241 +- libjava/classpath/javax/swing/TransferHandler.java | 57 +- libjava/classpath/javax/swing/UIDefaults.java | 10 +- libjava/classpath/javax/swing/UIManager.java | 100 +- .../swing/UnsupportedLookAndFeelException.java | 8 +- libjava/classpath/javax/swing/ViewportLayout.java | 5 + libjava/classpath/javax/swing/WindowConstants.java | 43 +- .../javax/swing/border/AbstractBorder.java | 46 +- .../classpath/javax/swing/border/BevelBorder.java | 13 +- libjava/classpath/javax/swing/border/Border.java | 6 +- .../javax/swing/border/CompoundBorder.java | 57 +- .../classpath/javax/swing/border/EmptyBorder.java | 4 +- .../classpath/javax/swing/border/EtchedBorder.java | 45 +- .../classpath/javax/swing/border/LineBorder.java | 44 +- .../classpath/javax/swing/border/MatteBorder.java | 4 +- .../javax/swing/border/SoftBevelBorder.java | 12 +- .../classpath/javax/swing/border/TitledBorder.java | 112 +- .../colorchooser/AbstractColorChooserPanel.java | 35 +- .../colorchooser/ColorChooserComponentFactory.java | 3 +- .../colorchooser/DefaultSwatchChooserPanel.java | 3 + .../javax/swing/event/EventListenerList.java | 1 + .../javax/swing/event/InternalFrameAdapter.java | 147 +- .../javax/swing/event/ListDataListener.java | 55 +- .../javax/swing/event/MouseInputListener.java | 13 +- .../swing/event/SwingPropertyChangeSupport.java | 7 +- .../javax/swing/event/TreeModelEvent.java | 8 +- .../javax/swing/filechooser/FileFilter.java | 77 +- .../javax/swing/filechooser/FileSystemView.java | 181 +- .../javax/swing/filechooser/FileView.java | 152 +- .../swing/filechooser/UnixFileSystemView.java | 47 +- .../javax/swing/plaf/ActionMapUIResource.java | 4 +- .../javax/swing/plaf/BorderUIResource.java | 4 +- libjava/classpath/javax/swing/plaf/ButtonUI.java | 4 +- .../classpath/javax/swing/plaf/ColorChooserUI.java | 3 +- .../javax/swing/plaf/ColorUIResource.java | 4 +- libjava/classpath/javax/swing/plaf/ComboBoxUI.java | 4 +- .../swing/plaf/ComponentInputMapUIResource.java | 3 +- .../classpath/javax/swing/plaf/ComponentUI.java | 10 +- .../classpath/javax/swing/plaf/DesktopIconUI.java | 4 +- .../classpath/javax/swing/plaf/DesktopPaneUI.java | 5 +- .../javax/swing/plaf/DimensionUIResource.java | 4 +- .../classpath/javax/swing/plaf/FileChooserUI.java | 4 +- .../classpath/javax/swing/plaf/FontUIResource.java | 4 +- .../classpath/javax/swing/plaf/IconUIResource.java | 3 +- .../javax/swing/plaf/InputMapUIResource.java | 6 +- .../javax/swing/plaf/InsetsUIResource.java | 3 +- .../javax/swing/plaf/InternalFrameUI.java | 4 +- libjava/classpath/javax/swing/plaf/LabelUI.java | 4 +- libjava/classpath/javax/swing/plaf/ListUI.java | 4 +- libjava/classpath/javax/swing/plaf/MenuBarUI.java | 4 +- libjava/classpath/javax/swing/plaf/MenuItemUI.java | 4 +- libjava/classpath/javax/swing/plaf/PanelUI.java | 4 +- .../classpath/javax/swing/plaf/PopupMenuUI.java | 4 +- .../classpath/javax/swing/plaf/ProgressBarUI.java | 4 +- libjava/classpath/javax/swing/plaf/RootPaneUI.java | 4 +- .../classpath/javax/swing/plaf/ScrollBarUI.java | 4 +- .../classpath/javax/swing/plaf/ScrollPaneUI.java | 4 +- .../classpath/javax/swing/plaf/SeparatorUI.java | 1 + libjava/classpath/javax/swing/plaf/SliderUI.java | 4 +- libjava/classpath/javax/swing/plaf/SpinnerUI.java | 4 +- .../classpath/javax/swing/plaf/SplitPaneUI.java | 4 +- .../classpath/javax/swing/plaf/TabbedPaneUI.java | 4 +- .../classpath/javax/swing/plaf/TableHeaderUI.java | 4 +- libjava/classpath/javax/swing/plaf/TableUI.java | 4 +- libjava/classpath/javax/swing/plaf/TextUI.java | 4 +- libjava/classpath/javax/swing/plaf/ToolBarUI.java | 4 +- libjava/classpath/javax/swing/plaf/ToolTipUI.java | 4 +- libjava/classpath/javax/swing/plaf/TreeUI.java | 4 +- libjava/classpath/javax/swing/plaf/UIResource.java | 6 +- libjava/classpath/javax/swing/plaf/ViewportUI.java | 4 +- .../javax/swing/plaf/basic/BasicArrowButton.java | 406 +- .../javax/swing/plaf/basic/BasicBorders.java | 92 +- .../swing/plaf/basic/BasicButtonListener.java | 11 +- .../javax/swing/plaf/basic/BasicButtonUI.java | 145 +- .../swing/plaf/basic/BasicCheckBoxMenuItemUI.java | 23 +- .../javax/swing/plaf/basic/BasicCheckBoxUI.java | 6 +- .../swing/plaf/basic/BasicColorChooserUI.java | 20 +- .../swing/plaf/basic/BasicComboBoxEditor.java | 45 +- .../swing/plaf/basic/BasicComboBoxRenderer.java | 72 +- .../javax/swing/plaf/basic/BasicComboBoxUI.java | 778 +- .../javax/swing/plaf/basic/BasicComboPopup.java | 60 +- .../javax/swing/plaf/basic/BasicDesktopIconUI.java | 2 + .../javax/swing/plaf/basic/BasicDesktopPaneUI.java | 80 +- .../javax/swing/plaf/basic/BasicEditorPaneUI.java | 11 - .../javax/swing/plaf/basic/BasicFileChooserUI.java | 908 +- .../plaf/basic/BasicFormattedTextFieldUI.java | 9 +- .../javax/swing/plaf/basic/BasicGraphicsUtils.java | 1 + .../javax/swing/plaf/basic/BasicIconFactory.java | 26 +- .../plaf/basic/BasicInternalFrameTitlePane.java | 169 +- .../swing/plaf/basic/BasicInternalFrameUI.java | 691 +- .../javax/swing/plaf/basic/BasicLabelUI.java | 18 +- .../javax/swing/plaf/basic/BasicListUI.java | 683 +- .../javax/swing/plaf/basic/BasicLookAndFeel.java | 170 +- .../javax/swing/plaf/basic/BasicMenuBarUI.java | 105 +- .../javax/swing/plaf/basic/BasicMenuItemUI.java | 685 +- .../javax/swing/plaf/basic/BasicMenuUI.java | 89 +- .../javax/swing/plaf/basic/BasicOptionPaneUI.java | 81 +- .../javax/swing/plaf/basic/BasicPanelUI.java | 28 +- .../swing/plaf/basic/BasicPasswordFieldUI.java | 7 + .../javax/swing/plaf/basic/BasicPopupMenuUI.java | 47 +- .../javax/swing/plaf/basic/BasicProgressBarUI.java | 419 +- .../plaf/basic/BasicRadioButtonMenuItemUI.java | 4 +- .../javax/swing/plaf/basic/BasicRadioButtonUI.java | 39 +- .../javax/swing/plaf/basic/BasicRootPaneUI.java | 119 +- .../javax/swing/plaf/basic/BasicScrollBarUI.java | 362 +- .../javax/swing/plaf/basic/BasicScrollPaneUI.java | 418 +- .../javax/swing/plaf/basic/BasicSeparatorUI.java | 73 +- .../javax/swing/plaf/basic/BasicSliderUI.java | 51 +- .../javax/swing/plaf/basic/BasicSpinnerUI.java | 16 +- .../swing/plaf/basic/BasicSplitPaneDivider.java | 1 + .../javax/swing/plaf/basic/BasicSplitPaneUI.java | 360 +- .../javax/swing/plaf/basic/BasicTabbedPaneUI.java | 1524 +- .../javax/swing/plaf/basic/BasicTableHeaderUI.java | 63 +- .../javax/swing/plaf/basic/BasicTableUI.java | 590 +- .../javax/swing/plaf/basic/BasicTextAreaUI.java | 47 +- .../javax/swing/plaf/basic/BasicTextFieldUI.java | 22 +- .../javax/swing/plaf/basic/BasicTextPaneUI.java | 38 +- .../javax/swing/plaf/basic/BasicTextUI.java | 190 +- .../swing/plaf/basic/BasicToggleButtonUI.java | 65 +- .../swing/plaf/basic/BasicToolBarSeparatorUI.java | 5 +- .../javax/swing/plaf/basic/BasicToolBarUI.java | 61 +- .../javax/swing/plaf/basic/BasicToolTipUI.java | 99 +- .../javax/swing/plaf/basic/BasicTreeUI.java | 1528 +- .../javax/swing/plaf/basic/BasicViewportUI.java | 309 +- .../javax/swing/plaf/metal/MetalBorders.java | 862 +- .../swing/plaf/metal/MetalButtonListener.java | 86 + .../javax/swing/plaf/metal/MetalButtonUI.java | 173 +- .../javax/swing/plaf/metal/MetalCheckBoxIcon.java | 15 +- .../javax/swing/plaf/metal/MetalCheckBoxUI.java | 7 +- .../swing/plaf/metal/MetalComboBoxButton.java | 241 + .../swing/plaf/metal/MetalComboBoxEditor.java | 143 + .../javax/swing/plaf/metal/MetalComboBoxIcon.java | 9 +- .../javax/swing/plaf/metal/MetalComboBoxUI.java | 264 +- .../javax/swing/plaf/metal/MetalDesktopIconUI.java | 10 +- .../javax/swing/plaf/metal/MetalFileChooserUI.java | 430 + .../javax/swing/plaf/metal/MetalIconFactory.java | 1392 +- .../plaf/metal/MetalInternalFrameTitlePane.java | 337 +- .../swing/plaf/metal/MetalInternalFrameUI.java | 120 +- .../javax/swing/plaf/metal/MetalLabelUI.java | 19 +- .../javax/swing/plaf/metal/MetalLookAndFeel.java | 434 +- .../javax/swing/plaf/metal/MetalMenuBarUI.java | 88 + .../plaf/metal/MetalPopupMenuSeparatorUI.java | 10 +- .../javax/swing/plaf/metal/MetalProgressBarUI.java | 101 +- .../javax/swing/plaf/metal/MetalRadioButtonUI.java | 128 +- .../javax/swing/plaf/metal/MetalRootPaneUI.java | 13 +- .../javax/swing/plaf/metal/MetalScrollBarUI.java | 431 +- .../javax/swing/plaf/metal/MetalScrollButton.java | 483 + .../javax/swing/plaf/metal/MetalScrollPaneUI.java | 19 +- .../javax/swing/plaf/metal/MetalSeparatorUI.java | 63 +- .../javax/swing/plaf/metal/MetalSliderUI.java | 220 +- .../swing/plaf/metal/MetalSplitPaneDivider.java | 2 +- .../javax/swing/plaf/metal/MetalSplitPaneUI.java | 41 +- .../javax/swing/plaf/metal/MetalTabbedPaneUI.java | 30 +- .../javax/swing/plaf/metal/MetalTextFieldUI.java | 32 +- .../swing/plaf/metal/MetalToggleButtonUI.java | 148 +- .../javax/swing/plaf/metal/MetalToolBarUI.java | 112 +- .../javax/swing/plaf/metal/MetalToolTipUI.java | 270 +- .../javax/swing/plaf/metal/MetalTreeUI.java | 175 +- .../javax/swing/plaf/metal/MetalUtils.java | 353 +- .../javax/swing/plaf/metal/OceanTheme.java | 243 + .../classpath/javax/swing/plaf/metal/package.html | 13 +- .../javax/swing/plaf/multi/MultiLookAndFeel.java | 1 + .../swing/table/DefaultTableCellRenderer.java | 49 +- .../classpath/javax/swing/table/JTableHeader.java | 109 +- .../classpath/javax/swing/table/TableColumn.java | 10 +- .../javax/swing/table/TableColumnModel.java | 4 +- .../javax/swing/text/AbstractDocument.java | 308 +- .../classpath/javax/swing/text/AttributeSet.java | 6 +- libjava/classpath/javax/swing/text/BoxView.java | 289 +- .../classpath/javax/swing/text/ComponentView.java | 298 +- .../classpath/javax/swing/text/CompositeView.java | 134 +- .../classpath/javax/swing/text/DefaultCaret.java | 435 +- .../javax/swing/text/DefaultEditorKit.java | 45 +- .../javax/swing/text/DefaultFormatter.java | 15 +- .../javax/swing/text/DefaultHighlighter.java | 2 + .../javax/swing/text/DefaultStyledDocument.java | 1032 +- .../classpath/javax/swing/text/DefaultTextUI.java | 61 + libjava/classpath/javax/swing/text/EditorKit.java | 10 +- libjava/classpath/javax/swing/text/FieldView.java | 17 +- libjava/classpath/javax/swing/text/FlowView.java | 73 +- libjava/classpath/javax/swing/text/GapContent.java | 382 +- libjava/classpath/javax/swing/text/GlyphView.java | 649 +- libjava/classpath/javax/swing/text/IconView.java | 79 +- .../javax/swing/text/InternationalFormatter.java | 5 +- .../classpath/javax/swing/text/JTextComponent.java | 211 +- libjava/classpath/javax/swing/text/LabelView.java | 242 +- .../classpath/javax/swing/text/LayoutQueue.java | 1 + .../classpath/javax/swing/text/ParagraphView.java | 143 + .../classpath/javax/swing/text/PlainDocument.java | 118 +- libjava/classpath/javax/swing/text/PlainView.java | 371 +- libjava/classpath/javax/swing/text/Segment.java | 4 +- .../javax/swing/text/SimpleAttributeSet.java | 57 +- .../classpath/javax/swing/text/StringContent.java | 3 + .../classpath/javax/swing/text/StyleConstants.java | 6 +- .../classpath/javax/swing/text/StyleContext.java | 19 +- .../classpath/javax/swing/text/StyledDocument.java | 191 +- .../javax/swing/text/StyledEditorKit.java | 24 +- libjava/classpath/javax/swing/text/TabSet.java | 3 + libjava/classpath/javax/swing/text/TabStop.java | 3 + libjava/classpath/javax/swing/text/Utilities.java | 410 + libjava/classpath/javax/swing/text/View.java | 76 +- .../javax/swing/text/WrappedPlainView.java | 700 + libjava/classpath/javax/swing/text/html/CSS.java | 461 + libjava/classpath/javax/swing/text/html/HTML.java | 13 +- .../javax/swing/text/html/HTMLDocument.java | 215 + .../javax/swing/text/html/HTMLEditorKit.java | 38 +- .../swing/text/html/HTMLFrameHyperlinkEvent.java | 4 +- .../javax/swing/text/html/parser/ContentModel.java | 5 +- .../javax/swing/text/html/parser/DTD.java | 6 +- .../swing/text/html/parser/DocumentParser.java | 7 + .../javax/swing/text/html/parser/Element.java | 2 +- .../javax/swing/text/html/parser/Parser.java | 10 + .../javax/swing/tree/DefaultMutableTreeNode.java | 1 - .../javax/swing/tree/DefaultTreeCellEditor.java | 23 +- .../javax/swing/tree/DefaultTreeCellRenderer.java | 27 +- .../javax/swing/tree/DefaultTreeModel.java | 1 + .../javax/swing/tree/TreeCellRenderer.java | 34 +- libjava/classpath/javax/swing/tree/TreeModel.java | 122 +- .../javax/swing/undo/CannotRedoException.java | 4 +- .../javax/swing/undo/CannotUndoException.java | 1 + libjava/classpath/javax/xml/namespace/QName.java | 56 +- .../TransformerConfigurationException.java | 6 +- .../javax/xml/transform/TransformerException.java | 22 +- .../TransformerFactoryConfigurationError.java | 2 + .../classpath/javax/xml/xpath/XPathException.java | 2 + .../javax/xml/xpath/XPathExpressionException.java | 1 + .../xpath/XPathFactoryConfigurationException.java | 1 + .../javax/xml/xpath/XPathFunctionException.java | 1 + libjava/classpath/lib/Makefile.am | 8 +- libjava/classpath/lib/Makefile.in | 69 +- libjava/classpath/lib/copy-vmresources.sh.in | 41 + libjava/classpath/lib/gen-classlist.sh.in | 6 +- libjava/classpath/lib/split-for-gcj.sh | 2 +- libjava/classpath/lib/standard.omit | 3 - libjava/classpath/ltmain.sh | 52 +- libjava/classpath/m4/acattribute.m4 | 25 + libjava/classpath/m4/acinclude.m4 | 53 +- libjava/classpath/native/Makefile.in | 12 +- libjava/classpath/native/fdlibm/Makefile.in | 12 +- libjava/classpath/native/fdlibm/java-assert.h | 6 +- libjava/classpath/native/fdlibm/mprec.h | 5 + libjava/classpath/native/jawt/Makefile.in | 12 +- libjava/classpath/native/jawt/jawt.c | 4 +- libjava/classpath/native/jni/Makefile.am | 13 +- libjava/classpath/native/jni/Makefile.in | 20 +- libjava/classpath/native/jni/classpath/Makefile.am | 1 - libjava/classpath/native/jni/classpath/Makefile.in | 17 +- libjava/classpath/native/jni/classpath/jcl.c | 16 +- libjava/classpath/native/jni/classpath/primlib.c | 724 - libjava/classpath/native/jni/classpath/primlib.h | 119 - libjava/classpath/native/jni/gtk-peer/Makefile.am | 6 +- libjava/classpath/native/jni/gtk-peer/Makefile.in | 19 +- .../gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c | 5 +- .../gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c | 42 +- .../gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c | 66 +- .../gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c | 234 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c | 4 +- .../gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c | 2 +- .../gnu_java_awt_peer_gtk_GtkCheckboxPeer.c | 2 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c | 8 + .../gnu_java_awt_peer_gtk_GtkComponentPeer.c | 76 +- .../jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c | 2 +- .../gnu_java_awt_peer_gtk_GtkMenuBarPeer.c | 4 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c | 2 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c | 6 +- .../gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 99 +- libjava/classpath/native/jni/gtk-peer/gtkpeer.h | 11 + libjava/classpath/native/jni/java-io/Makefile.am | 2 +- libjava/classpath/native/jni/java-io/Makefile.in | 62 +- libjava/classpath/native/jni/java-lang/Makefile.am | 2 +- libjava/classpath/native/jni/java-lang/Makefile.in | 64 +- .../native/jni/java-lang/java_lang_VMDouble.c | 5 + .../native/jni/java-lang/java_lang_VMProcess.c | 3 +- .../native/jni/java-lang/java_lang_reflect_Array.c | 1 + libjava/classpath/native/jni/java-net/Makefile.am | 2 +- libjava/classpath/native/jni/java-net/Makefile.in | 62 +- .../native/jni/java-net/java_net_VMInetAddress.c | 3 +- libjava/classpath/native/jni/java-net/javanet.c | 14 +- libjava/classpath/native/jni/java-nio/Makefile.am | 2 +- libjava/classpath/native/jni/java-nio/Makefile.in | 62 +- .../gnu_java_nio_charset_iconv_IconvDecoder.c | 2 +- libjava/classpath/native/jni/java-util/Makefile.am | 2 +- libjava/classpath/native/jni/java-util/Makefile.in | 62 +- libjava/classpath/native/jni/midi-alsa/.cvsignore | 9 + libjava/classpath/native/jni/midi-alsa/Makefile.am | 11 + libjava/classpath/native/jni/midi-alsa/Makefile.in | 563 + ..._javax_sound_midi_alsa_AlsaMidiDeviceProvider.c | 148 + ...javax_sound_midi_alsa_AlsaMidiSequencerDevice.c | 59 + .../gnu_javax_sound_midi_alsa_AlsaPortDevice.c | 150 + libjava/classpath/native/jni/midi-dssi/.cvsignore | 9 + libjava/classpath/native/jni/midi-dssi/Makefile.am | 11 + libjava/classpath/native/jni/midi-dssi/Makefile.in | 562 + libjava/classpath/native/jni/midi-dssi/README | 134 + libjava/classpath/native/jni/midi-dssi/dssi_data.h | 121 + ..._javax_sound_midi_dssi_DSSIMidiDeviceProvider.c | 139 + .../gnu_javax_sound_midi_dssi_DSSISynthesizer.c | 584 + libjava/classpath/native/jni/qt-peer/Makefile.in | 12 +- .../native/jni/qt-peer/componentevent.cpp | 1 + libjava/classpath/native/jni/xmlj/Makefile.in | 12 +- libjava/classpath/native/target/Linux/Makefile.in | 12 +- libjava/classpath/native/target/Makefile.in | 12 +- .../classpath/native/target/generic/Makefile.in | 12 +- libjava/classpath/org/ietf/jgss/GSSCredential.java | 10 + libjava/classpath/org/ietf/jgss/GSSException.java | 47 +- libjava/classpath/org/ietf/jgss/GSSName.java | 9 + .../org/omg/CORBA/ACTIVITY_COMPLETED.java | 102 + .../classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java | 100 + libjava/classpath/org/omg/CORBA/AnyHolder.java | 4 +- libjava/classpath/org/omg/CORBA/AnySeqHelper.java | 4 +- libjava/classpath/org/omg/CORBA/AnySeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/BAD_OPERATION.java | 92 +- libjava/classpath/org/omg/CORBA/BAD_QOS.java | 99 + libjava/classpath/org/omg/CORBA/BooleanHolder.java | 4 +- .../classpath/org/omg/CORBA/BooleanSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/BooleanSeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/ByteHolder.java | 4 +- .../org/omg/CORBA/CODESET_INCOMPATIBLE.java | 103 + libjava/classpath/org/omg/CORBA/CharHolder.java | 4 +- libjava/classpath/org/omg/CORBA/CharSeqHelper.java | 4 +- libjava/classpath/org/omg/CORBA/CharSeqHolder.java | 6 +- .../classpath/org/omg/CORBA/CompletionStatus.java | 10 +- .../org/omg/CORBA/CompletionStatusHelper.java | 4 +- .../classpath/org/omg/CORBA/DATA_CONVERSION.java | 20 + .../org/omg/CORBA/DefinitionKindHelper.java | 6 +- libjava/classpath/org/omg/CORBA/DoubleHolder.java | 4 +- .../classpath/org/omg/CORBA/DoubleSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/DoubleSeqHolder.java | 6 +- .../org/omg/CORBA/DynamicImplementation.java | 111 +- .../classpath/org/omg/CORBA/FieldNameHelper.java | 4 +- libjava/classpath/org/omg/CORBA/FixedHolder.java | 6 +- libjava/classpath/org/omg/CORBA/FloatHolder.java | 4 +- .../classpath/org/omg/CORBA/FloatSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/FloatSeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/IDLEntity.java | 50 - libjava/classpath/org/omg/CORBA/IDLTypeHelper.java | 4 +- .../classpath/org/omg/CORBA/INVALID_ACTIVITY.java | 100 + .../classpath/org/omg/CORBA/IdentifierHelper.java | 4 +- libjava/classpath/org/omg/CORBA/IntHolder.java | 4 +- libjava/classpath/org/omg/CORBA/LocalObject.java | 128 + libjava/classpath/org/omg/CORBA/LongHolder.java | 4 +- .../classpath/org/omg/CORBA/LongLongSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/LongLongSeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/LongSeqHelper.java | 4 +- libjava/classpath/org/omg/CORBA/LongSeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/MARSHAL.java | 260 +- libjava/classpath/org/omg/CORBA/NO_RESOURCES.java | 70 +- .../org/omg/CORBA/NameValuePairHelper.java | 15 +- libjava/classpath/org/omg/CORBA/OMGVMCID.java | 126 +- libjava/classpath/org/omg/CORBA/ORB.java | 274 +- libjava/classpath/org/omg/CORBA/ObjectHelper.java | 7 +- libjava/classpath/org/omg/CORBA/ObjectHolder.java | 8 +- .../classpath/org/omg/CORBA/OctetSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/OctetSeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/PERSIST_STORE.java | 2 +- .../org/omg/CORBA/ParameterModeHelper.java | 4 +- libjava/classpath/org/omg/CORBA/PolicyError.java | 8 +- .../org/omg/CORBA/PolicyErrorCodeHelper.java | 115 + .../classpath/org/omg/CORBA/PolicyErrorHelper.java | 158 + .../classpath/org/omg/CORBA/PolicyErrorHolder.java | 103 + libjava/classpath/org/omg/CORBA/PolicyHelper.java | 6 +- .../classpath/org/omg/CORBA/PolicyListHelper.java | 6 +- .../classpath/org/omg/CORBA/PrincipalHolder.java | 4 +- libjava/classpath/org/omg/CORBA/REBIND.java | 99 + .../org/omg/CORBA/RepositoryIdHelper.java | 4 +- .../org/omg/CORBA/ServiceDetailHelper.java | 6 +- .../org/omg/CORBA/SetOverrideTypeHelper.java | 4 +- libjava/classpath/org/omg/CORBA/ShortHolder.java | 4 +- .../classpath/org/omg/CORBA/ShortSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/ShortSeqHolder.java | 6 +- libjava/classpath/org/omg/CORBA/StringHolder.java | 6 +- .../classpath/org/omg/CORBA/StringSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/StringSeqHolder.java | 6 +- .../classpath/org/omg/CORBA/StringValueHelper.java | 19 +- .../org/omg/CORBA/StructMemberHelper.java | 7 +- .../classpath/org/omg/CORBA/SystemException.java | 177 +- libjava/classpath/org/omg/CORBA/TIMEOUT.java | 98 + .../classpath/org/omg/CORBA/TRANSACTION_MODE.java | 99 + .../org/omg/CORBA/TRANSACTION_UNAVAILABLE.java | 99 + .../classpath/org/omg/CORBA/TypeCodeHolder.java | 4 +- .../org/omg/CORBA/TypeCodePackage/BadKind.java | 2 +- .../org/omg/CORBA/TypeCodePackage/Bounds.java | 2 +- .../org/omg/CORBA/ULongLongSeqHelper.java | 4 +- .../org/omg/CORBA/ULongLongSeqHolder.java | 6 +- .../classpath/org/omg/CORBA/ULongSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/ULongSeqHolder.java | 6 +- .../classpath/org/omg/CORBA/UShortSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/UShortSeqHolder.java | 6 +- .../classpath/org/omg/CORBA/UnionMemberHelper.java | 7 +- .../org/omg/CORBA/UnknownUserExceptionHelper.java | 157 + .../org/omg/CORBA/UnknownUserExceptionHolder.java | 103 + .../classpath/org/omg/CORBA/ValueBaseHelper.java | 4 +- .../classpath/org/omg/CORBA/ValueBaseHolder.java | 10 +- .../classpath/org/omg/CORBA/ValueMemberHelper.java | 7 +- .../classpath/org/omg/CORBA/VersionSpecHelper.java | 4 +- .../classpath/org/omg/CORBA/VisibilityHelper.java | 14 +- .../classpath/org/omg/CORBA/WCharSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/WCharSeqHolder.java | 6 +- .../classpath/org/omg/CORBA/WStringSeqHelper.java | 4 +- .../classpath/org/omg/CORBA/WStringSeqHolder.java | 6 +- .../org/omg/CORBA/WStringValueHelper.java | 19 +- .../org/omg/CORBA/WrongTransactionHelper.java | 151 + .../org/omg/CORBA/WrongTransactionHolder.java | 103 + libjava/classpath/org/omg/CORBA/_IDLTypeStub.java | 6 +- .../org/omg/CORBA/portable/ObjectImpl.java | 4 +- libjava/classpath/org/omg/CORBA_2_3/ORB.java | 8 +- .../org/omg/CORBA_2_3/portable/InputStream.java | 18 +- .../org/omg/CORBA_2_3/portable/OutputStream.java | 66 +- .../classpath/org/omg/CosNaming/BindingHelper.java | 7 +- .../org/omg/CosNaming/BindingIteratorHelper.java | 32 + .../org/omg/CosNaming/BindingIteratorPOA.java | 5 +- .../org/omg/CosNaming/BindingTypeHelper.java | 3 + .../classpath/org/omg/CosNaming/IstringHelper.java | 4 +- .../classpath/org/omg/CosNaming/NameComponent.java | 14 +- .../org/omg/CosNaming/NameComponentHelper.java | 3 + .../classpath/org/omg/CosNaming/NameHelper.java | 3 + .../org/omg/CosNaming/NamingContextExtHelper.java | 32 + .../org/omg/CosNaming/NamingContextExtPOA.java | 4 +- .../org/omg/CosNaming/NamingContextHelper.java | 32 + .../org/omg/CosNaming/NamingContextPOA.java | 4 +- .../NamingContextPackage/AlreadyBoundHelper.java | 7 +- .../NamingContextPackage/CannotProceedHelper.java | 7 +- .../NamingContextPackage/InvalidNameHelper.java | 7 +- .../NamingContextPackage/NotEmptyHelper.java | 7 +- .../NamingContextPackage/NotFoundHelper.java | 7 +- .../NamingContextPackage/NotFoundReasonHelper.java | 7 +- .../omg/CosNaming/_BindingIteratorImplBase.java | 5 +- .../org/omg/CosNaming/_NamingContextExtStub.java | 4 +- .../org/omg/CosNaming/_NamingContextImplBase.java | 6 +- .../org/omg/DynamicAny/DynAnyFactoryHelper.java | 32 +- .../InconsistentTypeCodeHelper.java | 2 + .../classpath/org/omg/DynamicAny/DynAnyHelper.java | 19 + .../DynAnyPackage/InvalidValueHelper.java | 2 + .../DynAnyPackage/TypeMismatchHelper.java | 2 + .../org/omg/DynamicAny/DynAnySeqHelper.java | 2 + .../org/omg/DynamicAny/DynArrayHelper.java | 19 + .../org/omg/DynamicAny/DynEnumHelper.java | 19 + .../org/omg/DynamicAny/DynFixedHelper.java | 19 + .../org/omg/DynamicAny/DynSequenceHelper.java | 19 + .../org/omg/DynamicAny/DynStructHelper.java | 19 + .../org/omg/DynamicAny/DynUnionHelper.java | 19 + .../org/omg/DynamicAny/DynValueHelper.java | 19 + .../org/omg/DynamicAny/FieldNameHelper.java | 4 +- .../org/omg/DynamicAny/NameDynAnyPairHelper.java | 2 + .../omg/DynamicAny/NameDynAnyPairSeqHelper.java | 2 + .../org/omg/DynamicAny/NameValuePairHelper.java | 2 + .../org/omg/DynamicAny/NameValuePairSeqHelper.java | 2 + .../org/omg/DynamicAny/_DynAnyFactoryStub.java | 10 +- .../classpath/org/omg/IOP/CodecFactoryHelper.java | 19 + .../CodecFactoryPackage/UnknownEncodingHelper.java | 2 + .../omg/IOP/CodecPackage/FormatMismatchHelper.java | 2 + .../CodecPackage/InvalidTypeForEncodingHelper.java | 2 + .../omg/IOP/CodecPackage/TypeMismatchHelper.java | 2 + .../org/omg/IOP/ExceptionDetailMessage.java | 60 + libjava/classpath/org/omg/IOP/IORHelper.java | 3 + .../omg/IOP/MultipleComponentProfileHelper.java | 3 + .../org/omg/IOP/RMICustomMaxStreamFormat.java | 56 + .../org/omg/IOP/ServiceContextHelper.java | 3 + .../org/omg/IOP/ServiceContextListHelper.java | 7 +- .../omg/IOP/TAG_RMI_CUSTOM_MAX_STREAM_FORMAT.java | 61 + .../org/omg/IOP/TaggedComponentHelper.java | 5 + .../classpath/org/omg/IOP/TaggedProfileHelper.java | 13 +- .../org/omg/Messaging/SyncScopeHelper.java | 8 +- .../org/omg/PortableInterceptor/ACTIVE.java | 55 + .../AdapterManagerIdHelper.java | 119 + .../omg/PortableInterceptor/AdapterNameHelper.java | 144 + .../PortableInterceptor/AdapterStateHelper.java | 119 + .../org/omg/PortableInterceptor/CurrentHelper.java | 30 +- .../org/omg/PortableInterceptor/DISCARDING.java | 55 + .../PortableInterceptor/ForwardRequestHelper.java | 2 + .../org/omg/PortableInterceptor/HOLDING.java | 55 + .../org/omg/PortableInterceptor/INACTIVE.java | 57 + .../omg/PortableInterceptor/IORInfoOperations.java | 52 +- .../IORInterceptorOperations.java | 6 +- .../PortableInterceptor/IORInterceptor_3_0.java | 59 + .../IORInterceptor_3_0Helper.java | 195 + .../IORInterceptor_3_0Holder.java | 106 + .../IORInterceptor_3_0Operations.java | 90 + .../omg/PortableInterceptor/InvalidSlotHelper.java | 2 + .../org/omg/PortableInterceptor/NON_EXISTENT.java | 57 + .../org/omg/PortableInterceptor/ORBIdHelper.java | 119 + .../PortableInterceptor/ORBInitInfoOperations.java | 17 +- .../ORBInitInfoPackage/DuplicateNameHelper.java | 1 + .../ORBInitInfoPackage/InvalidNameHelper.java | 2 + .../ORBInitInfoPackage/ObjectIdHelper.java | 10 +- .../omg/PortableInterceptor/ObjectIdHelper.java | 121 + .../ObjectReferenceFactory.java | 57 + .../ObjectReferenceFactoryHelper.java | 150 + .../ObjectReferenceFactoryHolder.java | 105 + .../ObjectReferenceFactoryOperations.java | 69 + .../ObjectReferenceTemplate.java | 78 + .../ObjectReferenceTemplateHelper.java | 144 + .../ObjectReferenceTemplateHolder.java | 103 + .../ObjectReferenceTemplateSeqHelper.java | 169 + .../ObjectReferenceTemplateSeqHolder.java | 104 + .../omg/PortableInterceptor/ServerIdHelper.java | 119 + .../ServerRequestInfoOperations.java | 38 +- .../_IORInterceptor_3_0Stub.java | 272 + .../CurrentPackage/NoContextHelper.java | 2 + .../omg/PortableServer/ForwardRequestHelper.java | 2 + .../PortableServer/IdAssignmentPolicyValue.java | 6 +- .../PortableServer/IdUniquenessPolicyValue.java | 6 +- .../ImplicitActivationPolicyValue.java | 6 +- .../omg/PortableServer/LifespanPolicyValue.java | 6 +- .../org/omg/PortableServer/POAHelper.java | 10 +- .../POAManagerPackage/AdapterInactiveHelper.java | 2 + .../PortableServer/POAManagerPackage/State.java | 11 +- .../POAPackage/AdapterAlreadyExistsHelper.java | 2 + .../POAPackage/AdapterNonExistentHelper.java | 2 + .../POAPackage/InvalidPolicyHelper.java | 2 + .../PortableServer/POAPackage/NoServantHelper.java | 2 + .../POAPackage/ObjectAlreadyActiveHelper.java | 2 + .../POAPackage/ObjectNotActiveHelper.java | 2 + .../POAPackage/ServantAlreadyActiveHelper.java | 2 + .../POAPackage/ServantNotActiveHelper.java | 2 + .../POAPackage/WrongAdapterHelper.java | 2 + .../POAPackage/WrongPolicyHelper.java | 2 + .../RequestProcessingPolicyValue.java | 6 +- .../classpath/org/omg/PortableServer/Servant.java | 4 + .../omg/PortableServer/ServantActivatorHelper.java | 31 +- .../omg/PortableServer/ServantLocatorHelper.java | 30 +- .../ServantRetentionPolicyValue.java | 6 +- .../org/omg/PortableServer/ThreadPolicyValue.java | 6 +- .../javax.sound.midi.spi.MidiDeviceProvider | 3 + libjava/classpath/resource/Makefile.in | 12 +- libjava/classpath/scripts/Makefile.in | 12 +- libjava/classpath/scripts/loc | 44 + .../classpath/test/native/lib/PrimlibInterface.c | 162 - .../classpath/test/native/lib/PrimlibInterface.h | 141 - libjava/classpath/test/native/lib/PrimlibTest.java | 88 - .../vm/reference/gnu/classpath/VMStackWalker.java | 16 +- .../reference/gnu/classpath/jdwp/VMIdManager.java | 3 +- .../vm/reference/java/io/VMObjectInputStream.java | 10 +- .../vm/reference/java/io/VMObjectStreamClass.java | 11 +- .../vm/reference/java/lang/VMClassLoader.java | 123 +- .../classpath/vm/reference/java/lang/VMThread.java | 9 +- .../java/security/VMAccessController.java | 42 +- libjava/classpath/vm/reference/standard.omit | 1 - libjava/gnu/awt/xlib/XGraphicsDevice.java | 58 + libjava/gnu/awt/xlib/XGraphicsEnvironment.java | 59 + libjava/gnu/awt/xlib/XToolkit.java | 2 +- libjava/gnu/classpath/SystemProperties.java | 3 + libjava/gnu/gcj/convert/IOConverter.java | 51 +- libjava/gnu/java/net/natPlainSocketImplPosix.cc | 58 +- libjava/gnu/java/net/natPlainSocketImplWin32.cc | 7 +- libjava/gnu/java/net/protocol/file/Connection.java | 368 - libjava/gnu/java/net/protocol/file/Handler.java | 91 - libjava/include/jvm.h | 7 + libjava/include/sh-signal.h | 4 +- libjava/java/io/ObjectInputStream.java | 30 +- libjava/java/io/ObjectStreamClass.java | 929 - libjava/java/lang/natPosixProcess.cc | 8 +- libjava/java/net/ServerSocket.java | 609 - libjava/java/net/URLClassLoader.java | 159 +- libjava/java/net/URLConnection.java | 8 +- libjava/java/net/natVMNetworkInterfaceWin32.cc | 1 + libjava/java/text/Collator.java | 23 +- libjava/java/text/DateFormat.java | 55 +- libjava/java/text/DateFormatSymbols.java | 46 +- libjava/java/text/DecimalFormatSymbols.java | 15 +- libjava/java/text/SimpleDateFormat.java | 1237 -- libjava/java/util/Calendar.java | 25 +- libjava/java/util/Date.java | 1261 -- libjava/java/util/GregorianCalendar.java | 14 +- libjava/java/util/ResourceBundle.java | 2 +- libjava/java/util/SimpleTimeZone.java | 1078 - libjava/java/util/zip/ZipEntry.java | 408 - libjava/java/util/zip/ZipFile.java | 551 - libjava/mauve-libgcj | 2 + libjava/posix-threads.cc | 21 + libjava/prims.cc | 18 +- libjava/scripts/encodings.pl | 21 +- libjava/scripts/makemake.tcl | 3 +- libjava/sources.am | 546 +- libjava/testsuite/libjava.jacks/jacks.xfail | 1 - libmudflap/ChangeLog | 10 + libmudflap/testsuite/lib/libmudflap.exp | 22 + libmudflap/testsuite/libmudflap.c++/c++frags.exp | 4 +- libmudflap/testsuite/libmudflap.c++/ctors.exp | 4 +- libmudflap/testsuite/libmudflap.c/cfrags.exp | 4 +- libmudflap/testsuite/libmudflap.c/externs.exp | 5 +- libmudflap/testsuite/libmudflap.cth/cthfrags.exp | 4 +- libobjc/ChangeLog | 15 + libobjc/Makefile.in | 8 +- libobjc/configure | 2 +- libobjc/configure.ac | 2 +- libobjc/hash_compat.c | 97 - libobjc/objc/hash.h | 100 - libobjc/thr-objc.c | 4 + libstdc++-v3/ChangeLog | 306 +- libstdc++-v3/Makefile.in | 6 +- libstdc++-v3/acinclude.m4 | 41 +- libstdc++-v3/aclocal.m4 | 1 + libstdc++-v3/config.h.in | 3 + libstdc++-v3/config/cpu/generic/cpu_defines.h | 33 + libstdc++-v3/config/cpu/powerpc/cpu_defines.h | 36 + libstdc++-v3/config/os/bsd/darwin/ppc-extra.ver | 1 + libstdc++-v3/configure | 188 +- libstdc++-v3/configure.ac | 5 + libstdc++-v3/configure.host | 15 + libstdc++-v3/include/Makefile.am | 3 +- libstdc++-v3/include/Makefile.in | 9 +- libstdc++-v3/include/bits/c++config | 3 + libstdc++-v3/include/bits/cpp_type_traits.h | 20 + libstdc++-v3/include/bits/functexcept.h | 20 +- libstdc++-v3/include/bits/stl_multiset.h | 15 +- libstdc++-v3/include/bits/stl_queue.h | 10 +- libstdc++-v3/include/bits/stl_set.h | 24 +- libstdc++-v3/include/bits/stl_tree.h | 187 +- libstdc++-v3/include/ext/rc_string_base.h | 226 +- libstdc++-v3/include/ext/sso_string_base.h | 90 +- libstdc++-v3/include/ext/vstring.h | 3 +- libstdc++-v3/include/ext/vstring.tcc | 24 - libstdc++-v3/include/ext/vstring_util.h | 61 +- libstdc++-v3/include/tr1/boost_shared_ptr.h | 444 +- libstdc++-v3/include/tr1/functional | 9 +- libstdc++-v3/include/tr1/ref_wrap_iterate.h | 2 +- libstdc++-v3/include/tr1/type_traits | 71 +- libstdc++-v3/libmath/Makefile.in | 6 +- libstdc++-v3/libsupc++/Makefile.am | 5 +- libstdc++-v3/libsupc++/Makefile.in | 8 +- libstdc++-v3/libsupc++/del_op.cc | 2 +- libstdc++-v3/libsupc++/del_opnt.cc | 2 +- libstdc++-v3/libsupc++/del_opv.cc | 2 +- libstdc++-v3/libsupc++/del_opvnt.cc | 2 +- libstdc++-v3/libsupc++/eh_alloc.cc | 4 +- libstdc++-v3/libsupc++/eh_arm.cc | 43 +- libstdc++-v3/libsupc++/eh_call.cc | 1 - libstdc++-v3/libsupc++/eh_catch.cc | 1 - libstdc++-v3/libsupc++/eh_exception.cc | 1 - libstdc++-v3/libsupc++/eh_globals.cc | 150 +- libstdc++-v3/libsupc++/eh_personality.cc | 15 +- libstdc++-v3/libsupc++/eh_term_handler.cc | 2 +- libstdc++-v3/libsupc++/eh_throw.cc | 3 +- libstdc++-v3/libsupc++/guard.cc | 2 +- libstdc++-v3/libsupc++/new_op.cc | 4 +- libstdc++-v3/libsupc++/new_opnt.cc | 4 +- libstdc++-v3/libsupc++/new_opv.cc | 2 +- libstdc++-v3/libsupc++/new_opvnt.cc | 2 +- libstdc++-v3/po/Makefile.in | 6 +- libstdc++-v3/scripts/create_testsuite_files | 4 +- libstdc++-v3/scripts/testsuite_flags.in | 2 +- libstdc++-v3/src/Makefile.am | 22 +- libstdc++-v3/src/Makefile.in | 36 +- libstdc++-v3/src/compatibility.cc | 25 + libstdc++-v3/src/mt_allocator.cc | 2 +- .../testsuite/18_support/numeric_limits.cc | 350 - .../18_support/numeric_limits/denorm_min.cc | 56 + .../18_support/numeric_limits/digits10.cc | 66 + .../testsuite/18_support/numeric_limits/epsilon.cc | 49 + .../18_support/numeric_limits/infinity.cc | 56 + .../18_support/numeric_limits/is_iec559.cc | 81 + .../testsuite/18_support/numeric_limits/min_max.cc | 95 + .../18_support/numeric_limits/quiet_NaN.cc | 56 + .../testsuite/18_support/numeric_limits/sign.cc | 60 + .../18_support/numeric_limits/specialization.cc | 107 + .../testsuite/18_support/numeric_limits/traps.cc | 63 + .../testsuite/19_diagnostics/23591_thread-1.c | 63 + libstdc++-v3/testsuite/Makefile.in | 6 +- .../testsuite/ext/mt_allocator/22309_thread.cc | 2 +- libstdc++-v3/testsuite/lib/libstdc++.exp | 27 +- libstdc++-v3/testsuite/libstdc++-dg/normal.exp | 7 +- libstdc++-v3/testsuite/testsuite_shared.cc | 39 +- libstdc++-v3/testsuite/testsuite_tr1.h | 1 + .../memory/enable_shared_from_this/not_shared.cc | 23 +- .../memory/enable_shared_from_this/not_shared2.cc | 23 +- .../memory/enable_shared_from_this/not_shared3.cc | 23 +- .../memory/shared_ptr/modifiers/24805.cc | 30 + .../3_function_objects/reference_wrapper/invoke.cc | 13 + .../composite_type_traits/is_object/24808.cc | 41 + .../primary_type_categories/is_enum/24808.cc | 41 + .../primary_type_categories/is_function/24808.cc | 41 + .../type_properties/is_polymorphic/24809.cc | 27 + .../tr1/6_containers/unordered/hash/24799.cc | 74 + ltcf-c.sh | 2 +- maintainer-scripts/ChangeLog | 34 + maintainer-scripts/crontab | 13 +- maintainer-scripts/gcc_release | 110 +- move-if-change | 54 +- 3325 files changed, 184954 insertions(+), 83402 deletions(-) create mode 100644 contrib/regression/GCC Regression Tester.wdgt/Default.png create mode 100644 contrib/regression/GCC Regression Tester.wdgt/Icon.png create mode 100644 contrib/regression/GCC Regression Tester.wdgt/Info.plist create mode 100644 contrib/regression/GCC Regression Tester.wdgt/widget.html create mode 100644 gcc/ada/a-exexpr-gcc.adb rewrite gcc/ada/a-exexpr.adb (88%) create mode 100644 gcc/ada/g-soccon-hpux-ia64.ads create mode 100644 gcc/ada/g-soccon-linux-64.ads create mode 100644 gcc/ada/g-soccon-linux-ppc.ads create mode 100644 gcc/ada/g-soccon-linux-x86.ads create mode 100644 gcc/ada/g-soccon-solaris-64.ads create mode 100644 gcc/ada/raise-gcc.c rewrite gcc/ada/raise.c (91%) create mode 100644 gcc/ada/s-auxdec-empty.adb create mode 100644 gcc/ada/s-auxdec-empty.ads create mode 100644 gcc/ada/s-filofl.ads create mode 100644 gcc/ada/s-fishfl.ads create mode 100644 gcc/ada/s-fvadfl.ads create mode 100644 gcc/ada/s-fvaffl.ads create mode 100644 gcc/ada/s-fvagfl.ads create mode 100644 gcc/config/bfin/crtlibid.s create mode 100644 gcc/config/pa/hpux-unwind.h create mode 100644 gcc/fortran/ioparm.def create mode 100644 gcc/testsuite/g++.dg/cpp/string-1.C create mode 100644 gcc/testsuite/g++.dg/cpp/string-2.C create mode 100644 gcc/testsuite/g++.dg/debug/using2.C create mode 100644 gcc/testsuite/g++.dg/eh/spec8.C create mode 100644 gcc/testsuite/g++.dg/eh/synth2.C create mode 100644 gcc/testsuite/g++.dg/ext/array2.C create mode 100644 gcc/testsuite/g++.dg/ext/c99struct1.C create mode 100644 gcc/testsuite/g++.dg/ext/stmtexpr7.C create mode 100644 gcc/testsuite/g++.dg/inherit/thunk4.C create mode 100644 gcc/testsuite/g++.dg/init/switch1.C create mode 100644 gcc/testsuite/g++.dg/opt/pr24665.C create mode 100644 gcc/testsuite/g++.dg/opt/pr24780.C create mode 100644 gcc/testsuite/g++.dg/other/pr24623.C create mode 100644 gcc/testsuite/g++.dg/parse/ambig4.C create mode 100644 gcc/testsuite/g++.dg/template/asm1.C create mode 100644 gcc/testsuite/g++.dg/template/crash43.C create mode 100644 gcc/testsuite/g++.dg/template/dependent-name3.C create mode 100644 gcc/testsuite/g++.dg/template/dependent-name4.C create mode 100644 gcc/testsuite/g++.dg/template/friend39.C create mode 100644 gcc/testsuite/g++.dg/template/sfinae2.C create mode 100644 gcc/testsuite/g++.dg/tls/diag-3.C create mode 100644 gcc/testsuite/g++.dg/tls/diag-4.C create mode 100644 gcc/testsuite/g++.dg/tls/static-1.C create mode 100644 gcc/testsuite/g++.dg/tls/static-1a.cc create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr23046.C create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr24351-1.C create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr24351-2.C create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr24351-3.C create mode 100644 gcc/testsuite/g++.dg/warn/Wcast-qual1.C create mode 100644 gcc/testsuite/g++.dg/warn/inline2.C create mode 100644 gcc/testsuite/g++.dg/warn/undefined1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/unused.C create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr20583.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr23435.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr24883.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20051104-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20051110-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20051110-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20051113-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/floatunsisf-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr24716.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr24851.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/usmul.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/zero-struct-2.c delete mode 100644 gcc/testsuite/gcc.dg/20010423-1.c delete mode 100644 gcc/testsuite/gcc.dg/20020313-1.c delete mode 100644 gcc/testsuite/gcc.dg/20020326-1.c delete mode 100644 gcc/testsuite/gcc.dg/20020523-2.c delete mode 100644 gcc/testsuite/gcc.dg/20030225-2.c delete mode 100644 gcc/testsuite/gcc.dg/20030405-1.c delete mode 100644 gcc/testsuite/gcc.dg/20030811-1.c delete mode 100644 gcc/testsuite/gcc.dg/20040303-1.c create mode 100644 gcc/testsuite/gcc.dg/Wc++-compat.c create mode 100644 gcc/testsuite/gcc.dg/Wno-c++-compat.c delete mode 100644 gcc/testsuite/gcc.dg/alpha-base-2.c delete mode 100644 gcc/testsuite/gcc.dg/alpha-cix-2.c delete mode 100644 gcc/testsuite/gcc.dg/alpha-max-2.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-1.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-11.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-12.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-14.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-2.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-22.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-3.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-5.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-pr22085.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-varargs-1.c delete mode 100644 gcc/testsuite/gcc.dg/altivec-vec-merge.c create mode 100644 gcc/testsuite/gcc.dg/attr-weakref-1.c create mode 100644 gcc/testsuite/gcc.dg/attr-weakref-1a.c create mode 100644 gcc/testsuite/gcc.dg/builtin-strstr.c create mode 100644 gcc/testsuite/gcc.dg/cpp/strify4.c delete mode 100644 gcc/testsuite/gcc.dg/darwin-longlong.c create mode 100644 gcc/testsuite/gcc.dg/delay-slot-1.c create mode 100644 gcc/testsuite/gcc.dg/fold-div-2.c create mode 100644 gcc/testsuite/gcc.dg/fold-overflow-1.c delete mode 100644 gcc/testsuite/gcc.dg/i386-mmx-4.c delete mode 100644 gcc/testsuite/gcc.dg/i386-sse-10.c delete mode 100644 gcc/testsuite/gcc.dg/i386-sse-11.c delete mode 100644 gcc/testsuite/gcc.dg/i386-sse-6.c delete mode 100644 gcc/testsuite/gcc.dg/i386-sse-7.c delete mode 100644 gcc/testsuite/gcc.dg/i386-ssefn-3.c delete mode 100644 gcc/testsuite/gcc.dg/i386-ssefn-4.c delete mode 100644 gcc/testsuite/gcc.dg/ia64-asm-1.c delete mode 100644 gcc/testsuite/gcc.dg/ia64-float80-1.c delete mode 100644 gcc/testsuite/gcc.dg/ia64-float80-2.c delete mode 100644 gcc/testsuite/gcc.dg/ia64-got-1.c delete mode 100644 gcc/testsuite/gcc.dg/ia64-postinc.c create mode 100644 gcc/testsuite/gcc.dg/ifcvt-fabs-1.c create mode 100644 gcc/testsuite/gcc.dg/nested-calls-1.c create mode 100644 gcc/testsuite/gcc.dg/overflow-2.c delete mode 100644 gcc/testsuite/gcc.dg/pr16155.c delete mode 100644 gcc/testsuite/gcc.dg/pr16286.c create mode 100644 gcc/testsuite/gcc.dg/pr19340.c create mode 100644 gcc/testsuite/gcc.dg/pr24101-1.i create mode 100644 gcc/testsuite/gcc.dg/pr24101-2.i create mode 100644 gcc/testsuite/gcc.dg/pr24445.c create mode 100644 gcc/testsuite/gcc.dg/pr24624.c create mode 100644 gcc/testsuite/gcc.dg/pr24683.c create mode 100644 gcc/testsuite/gcc.dg/pr24820.c create mode 100644 gcc/testsuite/gcc.dg/sparc-getcontext-1.c create mode 100644 gcc/testsuite/gcc.dg/tls/opt-10.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr23424-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr24750-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr24912-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/loop-14.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr23115.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr23294.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr23382.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr24627.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr24670.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr24840.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/vrp22.c create mode 100644 gcc/testsuite/gcc.dg/uninit-12.c create mode 100644 gcc/testsuite/gcc.dg/uninit-13.c create mode 100644 gcc/testsuite/gcc.dg/uninit-14.c create mode 100644 gcc/testsuite/gcc.dg/union-cast-1.c create mode 100644 gcc/testsuite/gcc.dg/union-cast-2.c create mode 100644 gcc/testsuite/gcc.dg/union-cast-3.c rename gcc/testsuite/{gcc.dg => gcc.target/alpha}/20000715-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/alpha}/20011018-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/alpha}/980217-1.c (100%) rename gcc/testsuite/{gcc.dg/asm-5.c => gcc.target/alpha/asm-1.c} (100%) rename gcc/testsuite/{gcc.dg/alpha-base-1.c => gcc.target/alpha/base-1.c} (100%) create mode 100644 gcc/testsuite/gcc.target/alpha/base-2.c rename gcc/testsuite/{gcc.dg/alpha-cix-1.c => gcc.target/alpha/cix-1.c} (100%) create mode 100644 gcc/testsuite/gcc.target/alpha/cix-2.c rename gcc/testsuite/{gcc.dg/alpha-max-1.c => gcc.target/alpha/max-1.c} (100%) create mode 100644 gcc/testsuite/gcc.target/alpha/max-2.c create mode 100644 gcc/testsuite/gcc.target/cris/cris.exp create mode 100644 gcc/testsuite/gcc.target/cris/rld-legit1.c create mode 100644 gcc/testsuite/gcc.target/cris/rld-legit2.c create mode 100644 gcc/testsuite/gcc.target/cris/torture/pr24750-2.c rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20000609-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20000614-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20000614-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20000720-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20000807-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20000904-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20001127-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20010202-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20010520-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20011009-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20011029-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20011107-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20011119-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020201-3.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020218-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020224-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020426-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020523-1.c (100%) create mode 100644 gcc/testsuite/gcc.target/i386/20020523-2.c rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020531-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020616-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20020729-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20030217-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20030926-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20040112-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/20050113-1.c (100%) rename gcc/testsuite/{gcc.dg/i386-387-1.c => gcc.target/i386/387-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-2.c => gcc.target/i386/387-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-3.c => gcc.target/i386/387-3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-4.c => gcc.target/i386/387-4.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-5.c => gcc.target/i386/387-5.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-6.c => gcc.target/i386/387-6.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-7.c => gcc.target/i386/387-7.c} (100%) rename gcc/testsuite/{gcc.dg/i386-387-8.c => gcc.target/i386/387-8.c} (100%) rename gcc/testsuite/{gcc.dg/i386-3dnow-1.c => gcc.target/i386/3dnow-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-3dnow-2.c => gcc.target/i386/3dnow-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-3dnowA-1.c => gcc.target/i386/3dnowA-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-3dnowA-2.c => gcc.target/i386/3dnowA-2.c} (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/980211-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/980226-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/980414-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/980520-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/980709-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/990117-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/990130-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/990213-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/990214-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/990424-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/990524-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/991129-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/991209-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/991214-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/991230-1.c (100%) rename gcc/testsuite/{gcc.dg/i386-asm-2.c => gcc.target/i386/asm-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-asm-3.c => gcc.target/i386/asm-3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-asm-4.c => gcc.target/i386/asm-4.c} (100%) rename gcc/testsuite/{gcc.dg/i386-asm-1.c => gcc.target/i386/asm-5.c} (100%) rename gcc/testsuite/{gcc.dg/i386-bitfield1.c => gcc.target/i386/bitfield1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-bitfield2.c => gcc.target/i386/bitfield2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-bitfield3.c => gcc.target/i386/bitfield3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-cadd.c => gcc.target/i386/cadd.c} (100%) rename gcc/testsuite/{gcc.dg/i386-call-1.c => gcc.target/i386/call-1.c} (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/clobbers.c (100%) rename gcc/testsuite/{gcc.dg/i386-cmov1.c => gcc.target/i386/cmov1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-cmov2.c => gcc.target/i386/cmov2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-cmov3.c => gcc.target/i386/cmov3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-cmov4.c => gcc.target/i386/cmov4.c} (100%) rename gcc/testsuite/{gcc.dg/i386-cmov5.c => gcc.target/i386/cmov5.c} (100%) rename gcc/testsuite/{gcc.dg/i386-cvt-1.c => gcc.target/i386/cvt-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-fastcall-1.c => gcc.target/i386/fastcall-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-fpcvt-1.c => gcc.target/i386/fpcvt-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-fpcvt-2.c => gcc.target/i386/fpcvt-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-fpcvt-3.c => gcc.target/i386/fpcvt-3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-fpcvt-4.c => gcc.target/i386/fpcvt-4.c} (100%) create mode 100644 gcc/testsuite/gcc.target/i386/lea.c rename gcc/testsuite/{gcc.dg/i386-local.c => gcc.target/i386/local.c} (100%) rename gcc/testsuite/{gcc.dg/i386-local2.c => gcc.target/i386/local2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-loop-1.c => gcc.target/i386/loop-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-loop-2.c => gcc.target/i386/loop-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-loop-3.c => gcc.target/i386/loop-3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-memset-1.c => gcc.target/i386/memset-1.c} (100%) create mode 100644 gcc/testsuite/gcc.target/i386/minmax-1.c create mode 100644 gcc/testsuite/gcc.target/i386/minmax-2.c rename gcc/testsuite/{gcc.dg/i386-mmx-1.c => gcc.target/i386/mmx-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-mmx-2.c => gcc.target/i386/mmx-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-mmx-3.c => gcc.target/i386/mmx-3.c} (100%) create mode 100644 gcc/testsuite/gcc.target/i386/mmx-4.c rename gcc/testsuite/{gcc.dg/i386-mmx-5.c => gcc.target/i386/mmx-5.c} (100%) rename gcc/testsuite/{gcc.dg/i386-mmx-6.c => gcc.target/i386/mmx-6.c} (100%) rename gcc/testsuite/{gcc.dg/i386-mul.c => gcc.target/i386/mul.c} (100%) rename gcc/testsuite/{gcc.dg/i386-pentium4-not-mull.c => gcc.target/i386/pentium4-not-mull.c} (100%) rename gcc/testsuite/{gcc.dg/i386-pic-1.c => gcc.target/i386/pic-1.c} (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr12092-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr14289-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr18614-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr19236-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr20204.c (100%) create mode 100644 gcc/testsuite/gcc.target/i386/pr22432.c create mode 100644 gcc/testsuite/gcc.target/i386/pr23376.c rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr23943.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/pr9771-1.c (100%) rename gcc/testsuite/{gcc.dg/i386-regparm.c => gcc.target/i386/regparm.c} (100%) rename gcc/testsuite/{gcc.dg/i386-rotate-1.c => gcc.target/i386/rotate-1.c} (100%) rename gcc/testsuite/{gcc.dg => gcc.target/i386}/sibcall-5.c (100%) rename gcc/testsuite/{gcc.dg/i386-signbit-1.c => gcc.target/i386/signbit-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-signbit-2.c => gcc.target/i386/signbit-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-signbit-3.c => gcc.target/i386/signbit-3.c} (100%) create mode 100644 gcc/testsuite/gcc.target/i386/sse-10.c create mode 100644 gcc/testsuite/gcc.target/i386/sse-11.c rename gcc/testsuite/{gcc.dg/i386-sse-12.c => gcc.target/i386/sse-12.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-1.c => gcc.target/i386/sse-13.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-2.c => gcc.target/i386/sse-14.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-3.c => gcc.target/i386/sse-15.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-4.c => gcc.target/i386/sse-16.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-5.c => gcc.target/i386/sse-5.c} (100%) create mode 100644 gcc/testsuite/gcc.target/i386/sse-6.c create mode 100644 gcc/testsuite/gcc.target/i386/sse-7.c rename gcc/testsuite/{gcc.dg/i386-sse-8.c => gcc.target/i386/sse-8.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-9.c => gcc.target/i386/sse-9.c} (100%) rename gcc/testsuite/{gcc.dg/i386-sse-vect-types.c => gcc.target/i386/sse-vect-types.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssefn-1.c => gcc.target/i386/ssefn-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssefn-2.c => gcc.target/i386/ssefn-2.c} (100%) create mode 100644 gcc/testsuite/gcc.target/i386/ssefn-3.c create mode 100644 gcc/testsuite/gcc.target/i386/ssefn-4.c rename gcc/testsuite/{gcc.dg/i386-ssefp-1.c => gcc.target/i386/ssefp-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssefp-2.c => gcc.target/i386/ssefp-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssetype-1.c => gcc.target/i386/ssetype-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssetype-2.c => gcc.target/i386/ssetype-2.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssetype-3.c => gcc.target/i386/ssetype-3.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssetype-4.c => gcc.target/i386/ssetype-4.c} (100%) rename gcc/testsuite/{gcc.dg/i386-ssetype-5.c => gcc.target/i386/ssetype-5.c} (100%) rename gcc/testsuite/{gcc.dg/i386-unroll-1.c => gcc.target/i386/unroll-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-volatile-1.c => gcc.target/i386/volatile-1.c} (100%) rename gcc/testsuite/{gcc.dg/i386-xorps.c => gcc.target/i386/xorps.c} (100%) create mode 100644 gcc/testsuite/gcc.target/ia64/20010423-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/20020313-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/20020326-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/20030225-2.c create mode 100644 gcc/testsuite/gcc.target/ia64/20030405-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/20030811-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/20040303-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/asm-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/float80-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/float80-2.c rename gcc/testsuite/{gcc.dg/ia64-fptr-1.c => gcc.target/ia64/fptr-1.c} (100%) create mode 100644 gcc/testsuite/gcc.target/ia64/got-1.c create mode 100644 gcc/testsuite/gcc.target/ia64/postinc-1.c rename gcc/testsuite/{gcc.dg/ia64-types1.c => gcc.target/ia64/types-1.c} (100%) rename gcc/testsuite/{gcc.dg/ia64-types2.c => gcc.target/ia64/types-2.c} (100%) rename gcc/testsuite/{gcc.dg/ia64-visibility-1.c => gcc.target/ia64/visibility-1.c} (100%) rename gcc/testsuite/{gcc.dg/ia64-visibility-2.c => gcc.target/ia64/visibility-2.c} (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20020118-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20030218-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20030505.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20040121-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20040622-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20041111-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20050603-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20050603-3.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/20050830-1.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/405-macchw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-macchw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-macchwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-macchwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-machhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-machhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-machhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-machhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-maclhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-maclhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-maclhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-maclhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulchw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulchw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulchwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulchwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulhhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulhhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulhhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mulhhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mullhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mullhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mullhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-mullhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-nmacchw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-nmacchw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-nmachhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-nmachhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-nmaclhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/405-nmaclhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-macchw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-macchw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-macchwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-macchwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-machhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-machhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-machhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-machhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-maclhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-maclhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-maclhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-maclhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulchw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulchw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulchwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulchwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulhhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulhhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulhhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mulhhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mullhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mullhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mullhwu-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-mullhwu-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-nmacchw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-nmacchw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-nmachhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-nmachhw-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-nmaclhw-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/440-nmaclhw-2.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/980827-1.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-1.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-10.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-11.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-12.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-13.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-14.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-15.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-16.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-17.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-18.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-19.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-2.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-20.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-21.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-22.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-3.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-4.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-5.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-6.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-7.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-8.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-9.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-consts.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-pr22085.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-splat.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-types-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-types-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-types-3.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec-types-4.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-varargs-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-vec-merge.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/altivec_check.h (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/compress-float-ppc-pic.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/compress-float-ppc.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/darwin-abi-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/darwin-abi-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/darwin-bool-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/darwin-bool-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/darwin-longdouble.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/darwin-longlong.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/darwin-misaligned.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/doloop-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/macho-lo-sum.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/powerpc.exp rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-and-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-bitfield1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-compare-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-eabi.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-fmadd-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-fmadd-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-fmadd-3.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-fsel-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-fsel-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-fsel-3.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-ldstruct.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-mov-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-sdata-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-sdata-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-spe.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-spe64-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-stackalign-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-stfiwx.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-vector-memcpy.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc-vector-memset.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc64-abi-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc64-abi-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc64-abi-3.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/ppc64-toc.c (100%) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr16155.c create mode 100644 gcc/testsuite/gcc.target/powerpc/pr16286.c rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/pr18096-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/rs6000-fpint-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/rs6000-fpint.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/rs6000-ldouble-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/rs6000-ldouble-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/rs6000-power2-1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/rs6000-power2-2.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/spe1.c (100%) rename gcc/testsuite/{gcc.dg => gcc.target/powerpc}/stabs-attrib-vect-darwin.c (100%) delete mode 100644 gcc/testsuite/gcc.target/x86_64/pr23376.c create mode 100755 gcc/testsuite/gfortran.dg/arrayio_0.f90 create mode 100644 gcc/testsuite/gfortran.dg/arrayio_derived_1.f90 create mode 100755 gcc/testsuite/gfortran.dg/auto_internal_assumed.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/automatic_char_len_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/automatic_module_variable.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/char_array_structure_constructor.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/char_initialiser_actual.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90 create mode 100644 gcc/testsuite/gfortran.dg/complex_intrinsic_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/complex_intrinsic_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/data_constraints_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/data_constraints_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/data_initialized.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/derived_pointer_recursion.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/derived_recursion.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/f2c_4.c mode change 100755 => 100644 gcc/testsuite/gfortran.dg/f2c_4.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/f2c_5.c mode change 100755 => 100644 gcc/testsuite/gfortran.dg/f2c_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/fgetc_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/fgetc_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/fgetc_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/fmt_t_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/ftell_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/ftell_2.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/g77/README mode change 100755 => 100644 gcc/testsuite/gfortran.dg/g77/cpp.F mode change 100755 => 100644 gcc/testsuite/gfortran.dg/g77/cpp2.F mode change 100755 => 100644 gcc/testsuite/gfortran.dg/g77/cpp3.F create mode 100644 gcc/testsuite/gfortran.dg/gnu_logical_1.F create mode 100644 gcc/testsuite/gfortran.dg/gnu_logical_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/implicit_6.f90 create mode 100644 gcc/testsuite/gfortran.dg/implicit_7.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/implicit_actual.f90 create mode 100644 gcc/testsuite/gfortran.dg/inquire_9.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/iomsg_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/large_real_kind_form_io_1.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/module_blank_common.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/module_double_reuse.f90 create mode 100644 gcc/testsuite/gfortran.dg/namelist_21.f90 create mode 100644 gcc/testsuite/gfortran.dg/namelist_22.f90 create mode 100644 gcc/testsuite/gfortran.dg/namelist_empty.f90 create mode 100644 gcc/testsuite/gfortran.dg/nested_modules_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/nested_modules_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/open_access_append_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/open_access_append_2.f90 create mode 100755 gcc/testsuite/gfortran.dg/pointer_assign_1.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/private_type_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/pure_byref_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/pure_byref_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/read_eor.f90 create mode 100644 gcc/testsuite/gfortran.dg/read_noadvance.f90 create mode 100644 gcc/testsuite/gfortran.dg/read_x_eor.f90 create mode 100644 gcc/testsuite/gfortran.dg/scan_1.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/spread_scalar_source.f90 create mode 100644 gcc/testsuite/gfortran.dg/static_linking_1.c create mode 100644 gcc/testsuite/gfortran.dg/static_linking_1.f create mode 100755 gcc/testsuite/gfortran.dg/substring_equivalence.f90 mode change 100755 => 100644 gcc/testsuite/gfortran.dg/x_slash_1.f create mode 100644 gcc/testsuite/gfortran.fortran-torture/execute/inquire_5.f90 create mode 100644 libgfortran/intrinsics/ctime.c create mode 100644 libgfortran/intrinsics/fget.c create mode 100644 libgfortran/intrinsics/ftell.c create mode 100644 libgfortran/io/size_from_kind.c create mode 100644 libgfortran/io/unix.h create mode 100644 libjava/classpath/doc/www.gnu.org/announce/20050906.wml create mode 100644 libjava/classpath/doc/www.gnu.org/announce/20051102.wml create mode 100644 libjava/classpath/doc/www.gnu.org/corba.wml rewrite libjava/classpath/doc/www.gnu.org/tasks.wml (99%) create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/DemoServer.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/comServer.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoServant.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/DemoTester.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPass.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHelper.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToPassHolder.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturn.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHelper.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/StructureToReturnHolder.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNode.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHelper.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/TreeNodeHolder.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisException.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/WeThrowThisExceptionHelper.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterImplBase.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_DemoTesterStub.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_comTesterImplBase.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/_comTesterStub.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/comServant.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/comTester.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/node.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/nodeHelper.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/nodeHolder.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/ourUserException.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/ourUserExceptionHelper.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/passThis.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/passThisHelper.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/passThisHolder.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/returnThis.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/returnThisHelper.java delete mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/SimpleCommunication/communication/returnThisHolder.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/README.html create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/CanvasWorld.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ChatConstants.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/ClientFrame.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Demo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManager.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/GameManagerImpl.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/IorReader.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/OrbStarter.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/Player.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayerImpl.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/PlayingDesk.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/State.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/X5Server.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManagerImpl_Tie.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_GameManager_Stub.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_PlayerImpl_Tie.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/CORBA/swing/x5/_Player_Stub.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/midi/Demo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java create mode 100644 libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/AbstractCdrInput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/AbstractCdrOutput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/AbstractDataInput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/AbstractDataOutput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/AligningInput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/AligningOutput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/ArrayValueHelper.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/BufferedCdrOutput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/BufferredCdrInput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/HeadlessInput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/IDLTypeHelper.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/UnknownExceptionCtxHandler.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/VMVio.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/abstractDataInputStream.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/abstractDataOutputStream.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/aligningInputStream.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/aligningOutputStream.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/cdrBufInput.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/cdrBufOutput.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/cdrInput.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/cdrOutput.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/encapsulatedOutput.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/gnuRuntime.java create mode 100644 libjava/classpath/gnu/CORBA/CDR/gnuValueStream.java delete mode 100644 libjava/classpath/gnu/CORBA/CDR/noHeaderInput.java create mode 100644 libjava/classpath/gnu/CORBA/CdrEncapsCodecImpl.java create mode 100644 libjava/classpath/gnu/CORBA/CorbaList.java create mode 100644 libjava/classpath/gnu/CORBA/DefaultSocketFactory.java create mode 100644 libjava/classpath/gnu/CORBA/DynAn/AbstractAny.java create mode 100644 libjava/classpath/gnu/CORBA/DynAn/DivideableAny.java create mode 100644 libjava/classpath/gnu/CORBA/DynAn/RecordAny.java create mode 100644 libjava/classpath/gnu/CORBA/DynAn/UndivideableAny.java create mode 100644 libjava/classpath/gnu/CORBA/DynAn/ValueChangeListener.java delete mode 100644 libjava/classpath/gnu/CORBA/DynAn/abstractDynAny.java delete mode 100644 libjava/classpath/gnu/CORBA/DynAn/abstractRecord.java delete mode 100644 libjava/classpath/gnu/CORBA/DynAn/anyDivideable.java delete mode 100644 libjava/classpath/gnu/CORBA/DynAn/anyUndivideable.java delete mode 100644 libjava/classpath/gnu/CORBA/DynAn/valueChangedListener.java delete mode 100644 libjava/classpath/gnu/CORBA/ExceptionCreator.java delete mode 100644 libjava/classpath/gnu/CORBA/Functional_ORB.java create mode 100644 libjava/classpath/gnu/CORBA/GIOP/CodeSetServiceContext.java create mode 100644 libjava/classpath/gnu/CORBA/GIOP/ContextHandler.java delete mode 100644 libjava/classpath/gnu/CORBA/GIOP/contextSupportingHeader.java delete mode 100644 libjava/classpath/gnu/CORBA/GIOP/cxCodeSet.java create mode 100644 libjava/classpath/gnu/CORBA/GeneralHolder.java create mode 100644 libjava/classpath/gnu/CORBA/HolderLocator.java delete mode 100644 libjava/classpath/gnu/CORBA/IOR_Delegate.java delete mode 100644 libjava/classpath/gnu/CORBA/IOR_contructed_object.java create mode 100644 libjava/classpath/gnu/CORBA/IorDelegate.java create mode 100644 libjava/classpath/gnu/CORBA/IorObject.java create mode 100644 libjava/classpath/gnu/CORBA/IorProvider.java create mode 100644 libjava/classpath/gnu/CORBA/Minor.java create mode 100644 libjava/classpath/gnu/CORBA/NamingService/NameComponentComparator.java create mode 100644 libjava/classpath/gnu/CORBA/NamingService/NameTransformer.java delete mode 100644 libjava/classpath/gnu/CORBA/NamingService/cmpNameComponent.java delete mode 100644 libjava/classpath/gnu/CORBA/NamingService/snConverter.java create mode 100644 libjava/classpath/gnu/CORBA/OrbFocused.java create mode 100644 libjava/classpath/gnu/CORBA/OrbFunctional.java create mode 100644 libjava/classpath/gnu/CORBA/OrbRestricted.java create mode 100644 libjava/classpath/gnu/CORBA/Poa/AOM.java create mode 100644 libjava/classpath/gnu/CORBA/Poa/AccessiblePolicy.java create mode 100644 libjava/classpath/gnu/CORBA/Poa/DynamicImpHandler.java create mode 100644 libjava/classpath/gnu/CORBA/Poa/ServantDelegateImpl.java create mode 100644 libjava/classpath/gnu/CORBA/Poa/StandardPolicies.java delete mode 100644 libjava/classpath/gnu/CORBA/Poa/activeObjectMap.java delete mode 100644 libjava/classpath/gnu/CORBA/Poa/dynImpHandler.java delete mode 100644 libjava/classpath/gnu/CORBA/Poa/policySets.java delete mode 100644 libjava/classpath/gnu/CORBA/Poa/servantDelegate.java delete mode 100644 libjava/classpath/gnu/CORBA/Poa/vPolicy.java create mode 100644 libjava/classpath/gnu/CORBA/RawReply.java create mode 100644 libjava/classpath/gnu/CORBA/ResponseHandlerImpl.java delete mode 100644 libjava/classpath/gnu/CORBA/Restricted_ORB.java create mode 100644 libjava/classpath/gnu/CORBA/SimpleDelegate.java delete mode 100644 libjava/classpath/gnu/CORBA/Simple_delegate.java create mode 100644 libjava/classpath/gnu/CORBA/StreamBasedRequest.java create mode 100644 libjava/classpath/gnu/CORBA/StreamHolder.java create mode 100644 libjava/classpath/gnu/CORBA/StubLocator.java create mode 100644 libjava/classpath/gnu/CORBA/TypeKindNamer.java delete mode 100644 libjava/classpath/gnu/CORBA/aliasTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/binaryReply.java delete mode 100644 libjava/classpath/gnu/CORBA/bufferedResponseHandler.java delete mode 100644 libjava/classpath/gnu/CORBA/cdrEncapsCodec.java delete mode 100644 libjava/classpath/gnu/CORBA/corbaArrayList.java delete mode 100644 libjava/classpath/gnu/CORBA/fixedTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/generalTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/holderFactory.java create mode 100644 libjava/classpath/gnu/CORBA/interfaces/SocketFactory.java create mode 100644 libjava/classpath/gnu/CORBA/interfaces/package.html delete mode 100644 libjava/classpath/gnu/CORBA/primitiveArrayTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/primitiveTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/recordTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/recursiveTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/streamReadyHolder.java delete mode 100644 libjava/classpath/gnu/CORBA/streamRequest.java delete mode 100644 libjava/classpath/gnu/CORBA/stringTypeCode.java delete mode 100644 libjava/classpath/gnu/CORBA/stubFinder.java delete mode 100644 libjava/classpath/gnu/CORBA/typeNamer.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/AliasTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/ArrayTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/FixedTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/GeneralTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/PrimitiveTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/RecordTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/RecursiveTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/StringTypeCode.java create mode 100644 libjava/classpath/gnu/CORBA/typecodes/package.html delete mode 100644 libjava/classpath/gnu/CORBA/universalHolder.java create mode 100644 libjava/classpath/gnu/classpath/ByteArray.java create mode 100644 libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java delete mode 100644 libjava/classpath/gnu/java/awt/FocusManager.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/ByteArrayResponseBodyReader.java create mode 100644 libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/ResponseBodyReader.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/event/ConnectionEvent.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/event/ConnectionListener.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/event/RequestEvent.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/event/RequestListener.java delete mode 100644 libjava/classpath/gnu/java/net/protocol/http/event/package.html create mode 100644 libjava/classpath/gnu/java/rmi/server/RMIClassLoaderImpl.java create mode 100644 libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyFactoryImpl.java create mode 100644 libjava/classpath/gnu/java/security/provider/DiffieHellmanKeyPairGeneratorImpl.java create mode 100644 libjava/classpath/gnu/javax/crypto/DiffieHellmanImpl.java create mode 100644 libjava/classpath/gnu/javax/crypto/GnuDHPrivateKey.java create mode 100644 libjava/classpath/gnu/javax/crypto/RSACipherImpl.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/BMPException.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB1.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB4.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB8.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE4.java create mode 100644 libjava/classpath/gnu/javax/imageio/bmp/DecodeRLE8.java create mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/CorbaInput.java create mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/CorbaOutput.java create mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/DefaultWriteObjectTester.java create mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/RmiUtilities.java create mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/TieTargetRecord.java create mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/ValueHandlerDelegateImpl.java delete mode 100644 libjava/classpath/gnu/javax/rmi/CORBA/ValueHandlerImpl.java delete mode 100644 libjava/classpath/gnu/javax/rmi/PortableServer.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/alsa/AlsaInputPortDevice.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiDeviceProvider.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/alsa/AlsaMidiSequencerDevice.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/alsa/AlsaOutputPortDevice.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java create mode 100644 libjava/classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java create mode 100644 libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h create mode 100644 libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h create mode 100644 libjava/classpath/include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h create mode 100644 libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h create mode 100644 libjava/classpath/include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h rewrite libjava/classpath/java/awt/Font.java (79%) rewrite libjava/classpath/java/awt/Graphics.java (91%) rewrite libjava/classpath/java/beans/IndexedPropertyDescriptor.java (84%) create mode 100644 libjava/classpath/java/lang/EnumConstantNotPresentException.java create mode 100644 libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java rewrite libjava/classpath/java/rmi/server/RMIClassLoader.java (67%) create mode 100644 libjava/classpath/java/util/InvalidPropertiesFormatException.java delete mode 100644 libjava/classpath/javax/imageio/metadata/IIOAttr.java delete mode 100644 libjava/classpath/javax/imageio/metadata/IIONamedNodeMap.java delete mode 100644 libjava/classpath/javax/imageio/metadata/IIONodeList.java delete mode 100644 libjava/classpath/javax/rmi/BAD_OPERATION.java delete mode 100644 libjava/classpath/javax/rmi/CORBA/ObjectImpl.java delete mode 100644 libjava/classpath/javax/rmi/CORBA/SystemException.java create mode 100644 libjava/classpath/javax/rmi/CORBA/ValueHandlerMultiFormat.java delete mode 100644 libjava/classpath/javax/rmi/ORB.java create mode 100644 libjava/classpath/javax/sound/midi/ControllerEventListener.java create mode 100644 libjava/classpath/javax/sound/midi/Instrument.java create mode 100644 libjava/classpath/javax/sound/midi/InvalidMidiDataException.java create mode 100644 libjava/classpath/javax/sound/midi/MetaEventListener.java create mode 100644 libjava/classpath/javax/sound/midi/MetaMessage.java create mode 100644 libjava/classpath/javax/sound/midi/MidiChannel.java create mode 100644 libjava/classpath/javax/sound/midi/MidiDevice.java create mode 100644 libjava/classpath/javax/sound/midi/MidiEvent.java create mode 100644 libjava/classpath/javax/sound/midi/MidiFileFormat.java create mode 100644 libjava/classpath/javax/sound/midi/MidiMessage.java create mode 100644 libjava/classpath/javax/sound/midi/MidiSystem.java create mode 100644 libjava/classpath/javax/sound/midi/MidiUnavailableException.java create mode 100644 libjava/classpath/javax/sound/midi/Patch.java create mode 100644 libjava/classpath/javax/sound/midi/Receiver.java create mode 100644 libjava/classpath/javax/sound/midi/Sequence.java create mode 100644 libjava/classpath/javax/sound/midi/Sequencer.java create mode 100644 libjava/classpath/javax/sound/midi/ShortMessage.java create mode 100644 libjava/classpath/javax/sound/midi/Soundbank.java create mode 100644 libjava/classpath/javax/sound/midi/SoundbankResource.java create mode 100644 libjava/classpath/javax/sound/midi/Synthesizer.java create mode 100644 libjava/classpath/javax/sound/midi/SysexMessage.java create mode 100644 libjava/classpath/javax/sound/midi/Track.java create mode 100644 libjava/classpath/javax/sound/midi/Transmitter.java create mode 100644 libjava/classpath/javax/sound/midi/VoiceStatus.java create mode 100644 libjava/classpath/javax/sound/midi/spi/MidiDeviceProvider.java create mode 100644 libjava/classpath/javax/sound/midi/spi/MidiFileReader.java create mode 100644 libjava/classpath/javax/sound/midi/spi/MidiFileWriter.java create mode 100644 libjava/classpath/javax/sound/midi/spi/SoundbankReader.java create mode 100644 libjava/classpath/javax/sound/sampled/AudioFileFormat.java create mode 100644 libjava/classpath/javax/sound/sampled/AudioFormat.java create mode 100644 libjava/classpath/javax/sound/sampled/AudioInputStream.java create mode 100644 libjava/classpath/javax/sound/sampled/AudioPermission.java create mode 100644 libjava/classpath/javax/sound/sampled/AudioSystem.java create mode 100644 libjava/classpath/javax/sound/sampled/BooleanControl.java create mode 100644 libjava/classpath/javax/sound/sampled/Clip.java create mode 100644 libjava/classpath/javax/sound/sampled/CompoundControl.java create mode 100644 libjava/classpath/javax/sound/sampled/Control.java create mode 100644 libjava/classpath/javax/sound/sampled/DataLine.java create mode 100644 libjava/classpath/javax/sound/sampled/EnumControl.java create mode 100644 libjava/classpath/javax/sound/sampled/FloatControl.java create mode 100644 libjava/classpath/javax/sound/sampled/Line.java create mode 100644 libjava/classpath/javax/sound/sampled/LineEvent.java create mode 100644 libjava/classpath/javax/sound/sampled/LineListener.java create mode 100644 libjava/classpath/javax/sound/sampled/LineUnavailableException.java create mode 100644 libjava/classpath/javax/sound/sampled/Mixer.java create mode 100644 libjava/classpath/javax/sound/sampled/Port.java create mode 100644 libjava/classpath/javax/sound/sampled/ReverbType.java create mode 100644 libjava/classpath/javax/sound/sampled/SourceDataLine.java create mode 100644 libjava/classpath/javax/sound/sampled/TargetDataLine.java create mode 100644 libjava/classpath/javax/sound/sampled/UnsupportedAudioFileException.java create mode 100644 libjava/classpath/javax/sound/sampled/spi/AudioFileReader.java create mode 100644 libjava/classpath/javax/sound/sampled/spi/AudioFileWriter.java create mode 100644 libjava/classpath/javax/sound/sampled/spi/FormatConversionProvider.java create mode 100644 libjava/classpath/javax/sound/sampled/spi/MixerProvider.java rewrite libjava/classpath/javax/swing/BoxLayout.java (72%) rewrite libjava/classpath/javax/swing/JTree.java (90%) create mode 100644 libjava/classpath/javax/swing/KeyboardManager.java rewrite libjava/classpath/javax/swing/OverlayLayout.java (60%) rewrite libjava/classpath/javax/swing/ProgressMonitor.java (64%) rewrite libjava/classpath/javax/swing/SizeSequence.java (68%) rewrite libjava/classpath/javax/swing/SpinnerListModel.java (69%) rewrite libjava/classpath/javax/swing/plaf/basic/BasicViewportUI.java (66%) create mode 100644 libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java create mode 100644 libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java create mode 100644 libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java create mode 100644 libjava/classpath/javax/swing/plaf/metal/MetalFileChooserUI.java create mode 100644 libjava/classpath/javax/swing/plaf/metal/MetalMenuBarUI.java create mode 100644 libjava/classpath/javax/swing/plaf/metal/MetalScrollButton.java create mode 100644 libjava/classpath/javax/swing/plaf/metal/OceanTheme.java create mode 100644 libjava/classpath/javax/swing/text/DefaultTextUI.java create mode 100644 libjava/classpath/javax/swing/text/WrappedPlainView.java create mode 100644 libjava/classpath/javax/swing/text/html/CSS.java create mode 100644 libjava/classpath/lib/copy-vmresources.sh.in create mode 100644 libjava/classpath/m4/acattribute.m4 delete mode 100644 libjava/classpath/native/jni/classpath/primlib.c delete mode 100644 libjava/classpath/native/jni/classpath/primlib.h create mode 100644 libjava/classpath/native/jni/midi-alsa/.cvsignore create mode 100644 libjava/classpath/native/jni/midi-alsa/Makefile.am create mode 100644 libjava/classpath/native/jni/midi-alsa/Makefile.in create mode 100644 libjava/classpath/native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.c create mode 100644 libjava/classpath/native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.c create mode 100644 libjava/classpath/native/jni/midi-alsa/gnu_javax_sound_midi_alsa_AlsaPortDevice.c create mode 100644 libjava/classpath/native/jni/midi-dssi/.cvsignore create mode 100644 libjava/classpath/native/jni/midi-dssi/Makefile.am create mode 100644 libjava/classpath/native/jni/midi-dssi/Makefile.in create mode 100644 libjava/classpath/native/jni/midi-dssi/README create mode 100644 libjava/classpath/native/jni/midi-dssi/dssi_data.h create mode 100644 libjava/classpath/native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.c create mode 100644 libjava/classpath/native/jni/midi-dssi/gnu_javax_sound_midi_dssi_DSSISynthesizer.c create mode 100644 libjava/classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java create mode 100644 libjava/classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java create mode 100644 libjava/classpath/org/omg/CORBA/BAD_QOS.java create mode 100644 libjava/classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java delete mode 100644 libjava/classpath/org/omg/CORBA/IDLEntity.java create mode 100644 libjava/classpath/org/omg/CORBA/INVALID_ACTIVITY.java rewrite libjava/classpath/org/omg/CORBA/OMGVMCID.java (92%) create mode 100644 libjava/classpath/org/omg/CORBA/PolicyErrorCodeHelper.java create mode 100644 libjava/classpath/org/omg/CORBA/PolicyErrorHelper.java create mode 100644 libjava/classpath/org/omg/CORBA/PolicyErrorHolder.java create mode 100644 libjava/classpath/org/omg/CORBA/REBIND.java rewrite libjava/classpath/org/omg/CORBA/SystemException.java (70%) create mode 100644 libjava/classpath/org/omg/CORBA/TIMEOUT.java create mode 100644 libjava/classpath/org/omg/CORBA/TRANSACTION_MODE.java create mode 100644 libjava/classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java create mode 100644 libjava/classpath/org/omg/CORBA/UnknownUserExceptionHelper.java create mode 100644 libjava/classpath/org/omg/CORBA/UnknownUserExceptionHolder.java create mode 100644 libjava/classpath/org/omg/CORBA/WrongTransactionHelper.java create mode 100644 libjava/classpath/org/omg/CORBA/WrongTransactionHolder.java create mode 100644 libjava/classpath/org/omg/IOP/ExceptionDetailMessage.java create mode 100644 libjava/classpath/org/omg/IOP/RMICustomMaxStreamFormat.java create mode 100644 libjava/classpath/org/omg/IOP/TAG_RMI_CUSTOM_MAX_STREAM_FORMAT.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ACTIVE.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/AdapterManagerIdHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/AdapterNameHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/AdapterStateHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/DISCARDING.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/HOLDING.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/INACTIVE.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Helper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Operations.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/NON_EXISTENT.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ORBIdHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectIdHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplate.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/ServerIdHelper.java create mode 100644 libjava/classpath/org/omg/PortableInterceptor/_IORInterceptor_3_0Stub.java create mode 100644 libjava/classpath/resource/META-INF/services/javax.sound.midi.spi.MidiDeviceProvider create mode 100755 libjava/classpath/scripts/loc delete mode 100644 libjava/classpath/test/native/lib/PrimlibInterface.c delete mode 100644 libjava/classpath/test/native/lib/PrimlibInterface.h delete mode 100644 libjava/classpath/test/native/lib/PrimlibTest.java delete mode 100644 libjava/classpath/vm/reference/standard.omit create mode 100755 libjava/gnu/awt/xlib/XGraphicsDevice.java create mode 100755 libjava/gnu/awt/xlib/XGraphicsEnvironment.java delete mode 100644 libjava/gnu/java/net/protocol/file/Connection.java delete mode 100644 libjava/gnu/java/net/protocol/file/Handler.java delete mode 100644 libjava/java/io/ObjectStreamClass.java delete mode 100644 libjava/java/net/ServerSocket.java delete mode 100644 libjava/java/text/SimpleDateFormat.java delete mode 100644 libjava/java/util/Date.java delete mode 100644 libjava/java/util/SimpleTimeZone.java delete mode 100644 libjava/java/util/zip/ZipEntry.java delete mode 100644 libjava/java/util/zip/ZipFile.java delete mode 100644 libobjc/hash_compat.c create mode 100644 libstdc++-v3/config/cpu/generic/cpu_defines.h create mode 100644 libstdc++-v3/config/cpu/powerpc/cpu_defines.h create mode 100644 libstdc++-v3/config/os/bsd/darwin/ppc-extra.ver delete mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/digits10.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/epsilon.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/infinity.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/is_iec559.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/min_max.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/quiet_NaN.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/sign.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/specialization.cc create mode 100644 libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc create mode 100644 libstdc++-v3/testsuite/19_diagnostics/23591_thread-1.c create mode 100644 libstdc++-v3/testsuite/tr1/2_general_utilities/memory/shared_ptr/modifiers/24805.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_object/24808.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_enum/24808.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_function/24808.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/24809.cc create mode 100644 libstdc++-v3/testsuite/tr1/6_containers/unordered/hash/24799.cc rewrite maintainer-scripts/crontab (64%) rewrite move-if-change (97%) diff --git a/ChangeLog b/ChangeLog index ba88dc9a8dc..c1b28611d7d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,36 @@ +2005-11-21 Kean Johnston + + * config.sub, config.guess: Sync from upstream sources. + +2005-11-21 Ben Elliston + + Import from Autoconf sources: + + 2005-09-06 Paul Eggert + * config/move-if-change: Don't output "$2 is unchanged"; + suggested by Ben Elliston. Handle weird characters correctly. + +2005-11-18 Andreas Tobler + + * ltcf-c.sh (whole_archive_flag_spec): Remove '-all_load $convenience' + to match upstream libtool for darwin. + +2005-11-11 Daniel Jacobowitz + + * Makefile.def: Remove gdb dependencies for gdbtk. + * Makefile.tpl (CONFIGURE_GDB_TK, INSTALL_GDB_TK): New variables. + (configure-gdb, install-gdb): New rules. + * configure.in: Set CONFIGURE_GDB_TK and INSTALL_GDB_TK. + * Makefile.in, configure: Regenerated. + +2005-11-06 Janne Blomqvist + + * MAINTAINERS (Write After Approval): Add myself. + +2005-11-06 Erik Edelmann + + * MAINTAINERS (Write After Approval): Add myself. + 2005-10-24 Diego Novillo * MAINTAINERS (alias analysis): Add Daniel Berlin and diff --git a/MAINTAINERS b/MAINTAINERS index e294bf2b758..997aac8b00f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -211,6 +211,7 @@ Laurynas Biveinis laurynas.biveinis@mif.vu.lt Uros Bizjak uros@kss-loka.si Eric Blake ericb@gcc.gnu.org Jim Blandy jimb@redhat.com +Janne Blomqvist jb@gcc.gnu.org Phil Blundell pb@futuretv.com Hans Boehm hboehm@gcc.gnu.org Segher Boessenkool segher@kernel.crashing.org @@ -235,6 +236,7 @@ David Daney ddaney@avtrex.com Bud Davis bdavis9659@comcast.net Jerry DeLisle jvdelisle@verizon.net Zdenek Dvorak dvorakz@suse.cz +Erik Edelmann erik.edelmann@iki.fi Steve Ellcey sje@cup.hp.com Mohan Embar gnustuff@thisiscool.com Marc Espie espie@cvs.openbsd.org @@ -272,6 +274,7 @@ Andreas Krebbel krebbel1@de.ibm.com Scott Robert Ladd scott.ladd@coyotegulch.com Razya Ladelsky razya@gcc.gnu.org Aaron W. LaFramboise aaronavay62@aaronwl.com +Terry Laurenzo tlaurenzo@gmail.com Marc Lehmann pcg@goof.com Alan Lehotsky apl@alum.mit.edu James Lemke jim@wasabisystems.com diff --git a/Makefile.def b/Makefile.def index 035def58c52..dc7d61291ab 100644 --- a/Makefile.def +++ b/Makefile.def @@ -275,9 +275,6 @@ dependencies = { module=all-fixincludes; on=all-libiberty; }; dependencies = { module=all-gnattools; on=all-target-libada; }; // Host modules specific to gdb. -dependencies = { module=configure-gdb; on=configure-itcl; }; -dependencies = { module=configure-gdb; on=configure-tcl; }; -dependencies = { module=configure-gdb; on=configure-tk; }; dependencies = { module=configure-gdb; on=configure-sim; }; dependencies = { module=all-gdb; on=all-libiberty; }; dependencies = { module=all-gdb; on=all-opcodes; }; @@ -286,10 +283,6 @@ dependencies = { module=all-gdb; on=all-readline; }; dependencies = { module=all-gdb; on=all-build-bison; }; dependencies = { module=all-gdb; on=all-build-byacc; }; dependencies = { module=all-gdb; on=all-sim; }; -dependencies = { module=install-gdb; on=install-tcl; }; -dependencies = { module=install-gdb; on=install-tk; }; -dependencies = { module=install-gdb; on=install-itcl; }; -dependencies = { module=install-gdb; on=install-libgui; }; dependencies = { module=configure-libgui; on=configure-tcl; }; dependencies = { module=configure-libgui; on=configure-tk; }; diff --git a/Makefile.in b/Makefile.in index 0344ad3ae70..fe0db6c4572 100644 --- a/Makefile.in +++ b/Makefile.in @@ -36621,9 +36621,6 @@ all-stageprofile-libcpp: maybe-all-stageprofile-intl all-stagefeedback-libcpp: maybe-all-stagefeedback-intl all-fixincludes: maybe-all-libiberty all-gnattools: maybe-all-target-libada -configure-gdb: maybe-configure-itcl -configure-gdb: maybe-configure-tcl -configure-gdb: maybe-configure-tk configure-gdb: maybe-configure-sim all-gdb: maybe-all-libiberty all-gdb: maybe-all-opcodes @@ -36632,10 +36629,6 @@ all-gdb: maybe-all-readline all-gdb: maybe-all-build-bison all-gdb: maybe-all-build-byacc all-gdb: maybe-all-sim -install-gdb: maybe-install-tcl -install-gdb: maybe-install-tk -install-gdb: maybe-install-itcl -install-gdb: maybe-install-libgui configure-libgui: maybe-configure-tcl configure-libgui: maybe-configure-tk all-libgui: maybe-all-tcl @@ -36934,8 +36927,12 @@ all-prebootstrap: maybe-all-libiberty all-prebootstrap: maybe-all-zlib @endif gcc-no-bootstrap +CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ GDB_TK = @GDB_TK@ +INSTALL_GDB_TK = @INSTALL_GDB_TK@ +configure-gdb: $(CONFIGURE_GDB_TK) all-gdb: $(gdbnlmrequirements) $(GDB_TK) +install-gdb: $(INSTALL_GDB_TK) # Serialization dependencies. Host configures don't work well in parallel to # each other, due to contention over config.cache. Target configures and diff --git a/Makefile.tpl b/Makefile.tpl index 0c3d75ed233..c99ba5b5494 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -1756,8 +1756,12 @@ all-prebootstrap: maybe-all-[+module+][+ ENDFOR host_modules +] @endif gcc-no-bootstrap +CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ GDB_TK = @GDB_TK@ +INSTALL_GDB_TK = @INSTALL_GDB_TK@ +configure-gdb: $(CONFIGURE_GDB_TK) all-gdb: $(gdbnlmrequirements) $(GDB_TK) +install-gdb: $(INSTALL_GDB_TK) # Serialization dependencies. Host configures don't work well in parallel to # each other, due to contention over config.cache. Target configures and diff --git a/config.guess b/config.guess index 917bbc50f36..52c01be4c86 100755 --- a/config.guess +++ b/config.guess @@ -3,7 +3,7 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -timestamp='2005-07-08' +timestamp='2005-11-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -779,7 +779,7 @@ EOF i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - x86:Interix*:[34]*) + x86:Interix*:[345]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) @@ -794,7 +794,7 @@ EOF i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; - amd64:CYGWIN*:*:*) + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) @@ -873,6 +873,9 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; @@ -1182,7 +1185,6 @@ EOF *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} diff --git a/config.sub b/config.sub index 1c366dfde9a..a4aba165da3 100755 --- a/config.sub +++ b/config.sub @@ -3,7 +3,7 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -timestamp='2005-07-08' +timestamp='2005-11-13' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -171,6 +171,10 @@ case $os in -hiux*) os=-hiuxwe2 ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -187,6 +191,10 @@ case $os in # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` diff --git a/configure b/configure index 2131c6cb725..42b7e28ce2b 100755 --- a/configure +++ b/configure @@ -3133,6 +3133,8 @@ case "$enable_gdbtk" in fi ;; esac +CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` +INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` # Strip out unwanted targets. @@ -3494,6 +3496,8 @@ done + + # Build module lists & subconfigure args. @@ -3521,7 +3525,7 @@ test -n "$target_alias" && ncn_target_tool_prefix=$target_alias- # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3525: checking for $ac_word" >&5 +echo "configure:3529: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3552,7 +3556,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3556: checking for $ac_word" >&5 +echo "configure:3560: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3596,7 +3600,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3600: checking for $ac_word" >&5 +echo "configure:3604: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3627,7 +3631,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3631: checking for $ac_word" >&5 +echo "configure:3635: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3671,7 +3675,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3675: checking for $ac_word" >&5 +echo "configure:3679: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3702,7 +3706,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3706: checking for $ac_word" >&5 +echo "configure:3710: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3746,7 +3750,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3750: checking for $ac_word" >&5 +echo "configure:3754: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3777,7 +3781,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3781: checking for $ac_word" >&5 +echo "configure:3785: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3821,7 +3825,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3825: checking for $ac_word" >&5 +echo "configure:3829: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3852,7 +3856,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3856: checking for $ac_word" >&5 +echo "configure:3860: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3896,7 +3900,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3900: checking for $ac_word" >&5 +echo "configure:3904: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3927,7 +3931,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3931: checking for $ac_word" >&5 +echo "configure:3935: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3966,7 +3970,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3970: checking for $ac_word" >&5 +echo "configure:3974: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3997,7 +4001,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4001: checking for $ac_word" >&5 +echo "configure:4005: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4041,7 +4045,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4045: checking for $ac_word" >&5 +echo "configure:4049: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4072,7 +4076,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4076: checking for $ac_word" >&5 +echo "configure:4080: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4116,7 +4120,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4120: checking for $ac_word" >&5 +echo "configure:4124: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4147,7 +4151,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4151: checking for $ac_word" >&5 +echo "configure:4155: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4199,7 +4203,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4203: checking for $ac_word" >&5 +echo "configure:4207: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4230,7 +4234,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4234: checking for $ac_word" >&5 +echo "configure:4238: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4274,7 +4278,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4278: checking for $ac_word" >&5 +echo "configure:4282: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4305,7 +4309,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4309: checking for $ac_word" >&5 +echo "configure:4313: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4349,7 +4353,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4353: checking for $ac_word" >&5 +echo "configure:4357: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4380,7 +4384,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4384: checking for $ac_word" >&5 +echo "configure:4388: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4424,7 +4428,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4428: checking for $ac_word" >&5 +echo "configure:4432: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4455,7 +4459,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4459: checking for $ac_word" >&5 +echo "configure:4463: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4499,7 +4503,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4503: checking for $ac_word" >&5 +echo "configure:4507: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4530,7 +4534,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4534: checking for $ac_word" >&5 +echo "configure:4538: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4574,7 +4578,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4578: checking for $ac_word" >&5 +echo "configure:4582: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4605,7 +4609,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4609: checking for $ac_word" >&5 +echo "configure:4613: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4644,7 +4648,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4648: checking for $ac_word" >&5 +echo "configure:4652: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4675,7 +4679,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4679: checking for $ac_word" >&5 +echo "configure:4683: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4719,7 +4723,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4723: checking for $ac_word" >&5 +echo "configure:4727: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4750,7 +4754,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4754: checking for $ac_word" >&5 +echo "configure:4758: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4794,7 +4798,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4798: checking for $ac_word" >&5 +echo "configure:4802: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4825,7 +4829,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4829: checking for $ac_word" >&5 +echo "configure:4833: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4869,7 +4873,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4873: checking for $ac_word" >&5 +echo "configure:4877: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4900,7 +4904,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4904: checking for $ac_word" >&5 +echo "configure:4908: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4944,7 +4948,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4948: checking for $ac_word" >&5 +echo "configure:4952: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4975,7 +4979,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4979: checking for $ac_word" >&5 +echo "configure:4983: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5019,7 +5023,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5023: checking for $ac_word" >&5 +echo "configure:5027: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5050,7 +5054,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5054: checking for $ac_word" >&5 +echo "configure:5058: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5094,7 +5098,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5098: checking for $ac_word" >&5 +echo "configure:5102: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5125,7 +5129,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5129: checking for $ac_word" >&5 +echo "configure:5133: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5164,7 +5168,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5168: checking for $ac_word" >&5 +echo "configure:5172: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5195,7 +5199,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5199: checking for $ac_word" >&5 +echo "configure:5203: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5239,7 +5243,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5243: checking for $ac_word" >&5 +echo "configure:5247: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5270,7 +5274,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5274: checking for $ac_word" >&5 +echo "configure:5278: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5380,7 +5384,7 @@ RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target} NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target} echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:5384: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:5388: 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" @@ -5427,7 +5431,7 @@ esac # gcc for stageN-gcc and stagePREV-gcc for stage(N-1). In case this is not # possible, however, we can resort to mv. echo $ac_n "checking if symbolic links between directories work""... $ac_c" 1>&6 -echo "configure:5431: checking if symbolic links between directories work" >&5 +echo "configure:5435: checking if symbolic links between directories work" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_ln_s_dir'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5673,7 +5677,9 @@ s%@BUILD_PREFIX@%$BUILD_PREFIX%g s%@BUILD_PREFIX_1@%$BUILD_PREFIX_1%g s%@tooldir@%$tooldir%g s%@build_tooldir@%$build_tooldir%g +s%@CONFIGURE_GDB_TK@%$CONFIGURE_GDB_TK%g s%@GDB_TK@%$GDB_TK%g +s%@INSTALL_GDB_TK@%$INSTALL_GDB_TK%g s%@build_configargs@%$build_configargs%g s%@build_configdirs@%$build_configdirs%g s%@host_configargs@%$host_configargs%g diff --git a/configure.in b/configure.in index 61c80404bdc..c9169b6bd58 100644 --- a/configure.in +++ b/configure.in @@ -1724,6 +1724,8 @@ case "$enable_gdbtk" in fi ;; esac +CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` +INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` # Strip out unwanted targets. @@ -2077,7 +2079,9 @@ AC_SUBST(BUILD_PREFIX) AC_SUBST(BUILD_PREFIX_1) AC_SUBST(tooldir) AC_SUBST(build_tooldir) +AC_SUBST(CONFIGURE_GDB_TK) AC_SUBST(GDB_TK) +AC_SUBST(INSTALL_GDB_TK) # Build module lists & subconfigure args. AC_SUBST(build_configargs) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 005ebe3a1bb..d3417e623fc 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,11 @@ +2005-11-03 Steven Bosscher + + * gcc_build: Fix my previous checking. + +2005-11-01 Joseph S. Myers + + * gcc_update: Include revision number in LAST_UPDATED. + 2005-10-30 Steven Bosscher * gcc_build: Use gcc.gnu.org as the default server. Set up diff --git a/contrib/gcc_build b/contrib/gcc_build index 7ad2484e216..722645ed103 100755 --- a/contrib/gcc_build +++ b/contrib/gcc_build @@ -201,7 +201,8 @@ SVN_SERVER="gcc.gnu.org" # The path to the repository on that server. SVN_REPOSITORY="/svn/gcc/" # The branch to check out from that server. -SVN_BRANCH="trunk" +# Defaults to trunk if no branch is defined with -b. +SVN_BRANCH="" # The SVN protocol to use. SVN_PROTOCOL="svn" # The username to use when connecting to the server. @@ -285,8 +286,10 @@ if [ ${CHECKOUT} -eq 0 ] && test -n "${SVN_BRANCH}"; then fi # Validate the branch name. -if test "${SVN_BRANCH}" != "trunk"; then +if test -n "${SVN_BRANCH}"; then SVN_BRANCH="branches/${SVN_BRANCH}"; +else + SVN_BRANCH="trunk"; fi # Checkout the tree. diff --git a/contrib/regression/ChangeLog b/contrib/regression/ChangeLog index ae577173200..a6ba783ff2b 100644 --- a/contrib/regression/ChangeLog +++ b/contrib/regression/ChangeLog @@ -1,3 +1,11 @@ +2005-11-23 Geoffrey Keating + + * GCC Regression Tester.wdgt/widget.html: New file. + * GCC Regression Tester.wdgt/Info.plist: New file. + * GCC Regression Tester.wdgt/Icon.png: New file. + * GCC Regression Tester.wdgt/Default.png: New file. + * README: Describe new files. + 2005-06-07 Hans-Peter Nilsson * btest-gcc.sh: Add support for option diff --git a/contrib/regression/GCC Regression Tester.wdgt/Default.png b/contrib/regression/GCC Regression Tester.wdgt/Default.png new file mode 100644 index 0000000000000000000000000000000000000000..a6dfd4655c9b0355dc6fcc392af56305f9b991e2 GIT binary patch literal 81 zcwXxa@N?(olHy`uVBq!ia0vp^j35jm7|ip2ssJgbk|4iepwN`R>wr8iPZ!4!j+x0B XKz0*D<7wedi6FI}u6{1-oD!M}AiAU|1HhEX}eM%L2(5hGh`T z&@4l-43HvXScF(avxs65kY1W$X~fbrOH(WjWRzl93b7Q;QWQ%8Mq+_s0kJ@{K(PP> zm_TDJJdC@6>>+^|hGrOwVSuc~8A1%A8ALG%2n$@K5ku1qO))eOQn;5w3`H{(#ZZ7b z;!y?=12h8^13)Mf4VW}$iD>~*KsI4$jD?4R2qHNS8X*cHAo}oHoY6F*DMSO2i&@|z zMI(wr6kzq36z)YpBcKofF@u=(yUW+q|qA9?>V!4;Q5Eq7V@zLK?_T2oFSn z2{e!sk#0oxkN|u!Y$Vo)*W!%AZ;a?|0MWfcbWsr93`AD}k?$aK7DV2G$Q=;r2a!S$ zX#f#R5b*%fCJU30M>LjejhFv=Vv5;Kz$<_)EPwd%rl(<8)kNNK6>) zjgJV8^olqdrnA-5OlPA@NT`mRr;eW?Tq^&$6?dZmM~$zoNj34ye1MpkFs%W4ZLa>Sm0|;f;p7 zoGN_VFBr(1NR~IfYjuIa15-z>cSr1*=}k=59;!B1ig%?dbm-Z}=NCMO_I9-N4HPFT z70bO3)qVff$&%jCbeE8kq3!-Wjm(i21&)tY%+{Fm!Sl}J7Hwv~P9L=W($LgsFk;r1 z-_>oZE>yFdp~9t&K3>Z-h}go}``1cUKW>?^V0y=fpn9E7lP_1u=6yfK@o15@Gqvm$ zRL^mh`y7>*9-hv&;|E{UN;$!^h+SR7Q>m6|&j?X1mCjxz@nD16a<2LciEQz8iwlGey8-al6!G z2dHFs*HXQ{o`eUF7H2G$6w1E+y4-J8-aR8lyW`xx-0Y^jb!O3BS1Ro?VtRMbBhM_Y z0$s!Zt7e*5658|NzP2Sj+$kuWDB2kQP+#zU``u=(E1J@XI`z&tt;~4XBF}22gtzw( zmrphdIfvclze{L463KlT@xQt2E+!LC5|Z>RdB<;0O*Ax(=ajcy?J1vM^jH4N=tP!$ zoXQ+66sBCJviR>jtCTotK1Do>BS$Ok&sI9k$#r*Y*pBBPX#UTka-ru>Mf19n*RH-; znfC3f_eJ-1+ARF3em;79IX~HLtT*0YB~tsdOjfUW)xY$jhQ(853*K%yWRjB;?;KPX z)VT+NriWrKFL}GShnSOukry>MfBWHppS{7@KRq^OIXrrK>%(pzSDsJI8O>UUXFTr- zVX#YI!LX@sj_R9*2zXSibf{tf!VvAx}H=8aZdO4RtdqM-{}l@($o4SWT; z{THnZ1I1zKv{O2+-J7{x$!LDwBhoeRp(@+|TXuJGSYFv%f+9WV@yEQ^v$A z@UDxGXK7Z@g;TMw&F6ZQMmN-jdoJhyHnnX$=V!~UViRT`w(;A#-adIQr@g-A+0H{g k71LUdO}2}J^`BR1DExZw?8L$y{O<)0_O9G2yWsS{0Re){%>V!Z literal 0 HcwPel00001 diff --git a/contrib/regression/GCC Regression Tester.wdgt/Info.plist b/contrib/regression/GCC Regression Tester.wdgt/Info.plist new file mode 100644 index 00000000000..0902ff7af7f --- /dev/null +++ b/contrib/regression/GCC Regression Tester.wdgt/Info.plist @@ -0,0 +1,28 @@ + + + + + AllowNetworkAccess + + CFBundleDisplayName + GCC Regression Tester + CFBundleName + GCC Regression Tester + CFBundleIdentifier + org.geoffk.widget.regress + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + CloseBoxInsetX + 0 + CloseBoxInsetY + 0 + MainHTML + widget.html + Width + 261 + Height + 192 + + diff --git a/contrib/regression/GCC Regression Tester.wdgt/widget.html b/contrib/regression/GCC Regression Tester.wdgt/widget.html new file mode 100644 index 00000000000..e2bc6acd231 --- /dev/null +++ b/contrib/regression/GCC Regression Tester.wdgt/widget.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + +
Loading...
+ + diff --git a/contrib/regression/README b/contrib/regression/README index 445704f85a4..9eecd0dd909 100644 --- a/contrib/regression/README +++ b/contrib/regression/README @@ -12,6 +12,12 @@ the newly-build tools to check that they will not cause regressions. 'site.exp' is what $DEJAGNU points to when the regression tester runs these scripts. +'GCC Regression Tester.wdgt' is a Dashboard widget that displays the +current state of the tester using Javascript. You can use it without +needing Dashboard by pointing your web browser at +'GCC%20Regression%20Tester.wdgt/widget.html', if your browser supports +and permits it. + Note that any changes made here need to be approved by the regression tester's maintainer (see MAINTAINERS). The changes will be used on the tester's next run, so `experimental' changes are very strongly diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index a01267debe1..eb739434b33 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,11 @@ +2005-11-13 Andreas Jaeger + + * check.tpl: Handle CVS additionally. + +2005-11-05 Andreas Jaeger + + * check.tpl: Adopt for move to subversion. + 2005-09-15 Joseph S. Myers PR c++/23139 @@ -41,7 +49,7 @@ PR target/21683 * fixincl.c: Don't include if SEPARATE_FIX_PROC. - + 2005-05-19 Eric Botcazou Joseph S. Myers @@ -90,7 +98,7 @@ fflush, fgetc, fgets, ferror, fread): Redefine to the associated _unlocked function. (fwrite_unlocked): Fix prototype. - + * configure, config.h.in: Regenerate. 2005-03-21 Zack Weinberg diff --git a/fixincludes/check.tpl b/fixincludes/check.tpl index 9f8750b8bac..bb93bcc3eee 100644 --- a/fixincludes/check.tpl +++ b/fixincludes/check.tpl @@ -144,7 +144,8 @@ echo $exitok` cd $TESTBASE find * -type f -print | \ -fgrep -v 'CVS/' > ${TESTDIR}/LIST +fgrep -v 'CVS/' | \ +fgrep -v '.svn/' > ${TESTDIR}/LIST exitok=` exec < ${TESTDIR}/LIST diff --git a/gcc/BASE-VER b/gcc/BASE-VER index ee74734aa22..6aba2b245a8 100644 --- a/gcc/BASE-VER +++ b/gcc/BASE-VER @@ -1 +1 @@ -4.1.0 +4.2.0 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 17a48a278a5..e96b34eed19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,1635 @@ +2005-11-23 Mark Mitchell + + * doc/invoke.texi: For man pages, include gcc-vers.texi. + List @file in the option summary. Include the libiberty + documentation for @file. + * gcc.c (main): Call expandargv. + * Makefile.in (gcc-vers.texi): Define srcdir. + +2005-11-23 Diego Novillo + + * passes.c (init_optimization_passes): Document + sequencing of passes. + +2005-11-23 Kazu Hirata + + * config/m68k/predicates.md (pcrel_address, extend_operator, + post_inc_operand, pre_dec_operand): Remove redundant + conditionals. + (const_uint32_operand, const_sint32_operand): Use gcc_assert + instead of abort. + (valid_dbcc_comparison_p): Rewrite in the lisp style. + +2005-11-23 Ben Elliston + + * dwarf2.h (enum dwarf_type): Add DW_ATE_decimal_float. + +2005-11-22 J"orn Rennecke + + Preparatory work for PR target/21623: + * alpha.c (secondary_reload_class): Rename to: + (alpha_secondary_reload_class). + * alpha.h, alpha-protos.h: Likewise. + * mn10300.c (secondary_reload_class): Rename to: + (mn10300_secondary_reload_class). + * mn10300.h, mn10300-protos.h: Likewise. + * pa.c (secondary_reload_class): Rename to: + (pa_secondary_reload_class). + * pa.h, pa-protos.h: Likewise. + * rs6000.c (secondary_reload_class): Rename to: + rs6000_secondary_reload_class. + * rs6000.h, rs6000-protos.h: Likewise. + +2005-11-22 Eric Botcazou + + PR middle-end/22561 + * tree-ssa-structalias.c (get_constraint_for): Handle ARRAY_RANGE_REF. + +2005-11-22 Ian Lance Taylor + + * optabs.c (expand_unop): Call SCALAR_FLOAT_MODE_P on a mode, not + a mode_class. + (prepare_cmp_insn): Likewise. + +2005-11-22 Kazu Hirata + + PR target/23435 + * m68k.md (zero_extendsidi2): Force operands[1] to a register + if both operands[0] and operands[1] are memory. + +2005-11-22 Andrew Pinski + + PR middle-end/23606 + * fold-const.c (fold_unary) : For + COMPARISON_CLASS_P and an integral types create create a new + expression with the new type and fold that. + +2005-11-22 Andrew Pinski + + PR target/24988 + * config/rs6000/darwin.h (TARGET_OS_CPP_BUILTINS): Remove call + to SUBTARGET_OS_CPP_BUILTINS. + +2005-11-22 Richard Earnshaw + + * arm.c (emit_set_insn): New function. + (arm_split_constant): Call it. + (arm_gen_compare_reg, arm_reload_in_hi, arm_reload_out_hi): Likewise. + (arm_legitimize_address): Likewise. Use plus_constant. + (arm_expand_prologue): Likewise. Use VOIDmode in SET. + (thumb_expand_prologue): Likewise. + (arm_gen_load_multiple): Use VOIDmode in SET. + (arm_gen_store_multiple): Likewise. + (vfp_emit_fstmx): Likewise. Use plus_constant. + (emit_multi_reg_push): Likewise. + (emit_sfm): Use plus_constant. + +2005-11-23 Alan Modra + + PR target/24954 + * config/rs6000/predicates.md (easy_vector_constant_add_self): Fix + typo last change. + +2005-11-22 Alan Modra + + PR middle-end/24950 + * expmed.c (store_bit_field): Don't attempt to insv a field + larger than the reg. + +2005-11-22 Alan Modra + + PR target/24954 + * config/rs6000/predicated.md (easy_vector_constant_add_self): Use + explicit sign extension, not a (char) cast. + +2005-11-22 Ben Elliston + + * optabs.c: Use SCALAR_FLOAT_MODE_P instead of explicitly testing + GET_MODE_CLASS (x) == MODE_FLOAT. + * config/i386/i386.c: Likewise. + * config/rs6000/xcoff.h: Likewise. + * config/rs6000/linux64.h: Likewise. + * config/rs6000/rs6000.c: Likewise. + * config/rs6000/rs6000.h: Likewise. + * config/rs6000/predicates.md: Likewise. + * config/rs6000/sysv4.h: Likewise. + +2005-11-21 Kaveh R. Ghazi + + * c-cppbuiltin.c (c_cpp_builtins): Define __pic__ and __PIC__ when + flag_pic is set. + + * config/alpha/freebsd.h, config/alpha/linux.h, + config/arm/linux-elf.h, config/bfin/bfin.h, + config/cris/linux.h, config/darwin.h, config/freebsd-spec.h, + config/i386/beos-elf.h, config/i386/gnu.h, + config/i386/linux.h, config/i386/linux64.h, config/i386/nto.h, + config/i386/sco5.h, config/m32r/m32r.h, config/m68k/linux.h, + config/m68k/m68k.h, config/mips/linux.h, config/pa/pa-linux.h, + config/rs6000/linux64.h, config/rs6000/sysv4.h, + config/rs6000/vxworks.h, config/s390/linux.h, config/s390/tpf.h, + config/sh/linux.h, config/sh/sh.h, config/sol2.h, + config/sparc/linux.h, config/sparc/linux64.h, + config/xtensa/xtensa.h: Don't define __pic__ or __PIC__. + + * doc/invoke.texi: Document that the macros __pic__ and __PIC__ + are both defined when either flag -fpic or -fPIC are used. + +2005-11-22 Joseph S. Myers + + * config/fp-bit.c (clzusi): New function. + (si_to_float, usi_to_float): Use it to compute proper shift. + (usi_to_float): Preserve guard bits when shifting right. + * libgcc-std.ver (GCC_4.2.0): New version. + * libgcc2.c (__floatundixf, __floatunditf, __floatundidf, + __floatundisf): New functions. + * libgcc2.h (__floatundixf, __floatunditf, __floatundidf, + __floatundisf): Declare. + * mklibgcc.in (lib2funcs): Add _floatundidf, _floatundisf, + _floatundixf, and _floatunditf. + * optabs.c (expand_float): If target does not define a pattern for + signed or unsigned conversion, use an unsigned libcall instead of + a signed one. + (init_optabs): Initialize ufloat_optab. + +2005-11-22 Joseph S. Myers + + * config/rs6000/rs6000.opt (mmulhw): New option. + * doc/invoke.texi (-mmulhw): Document. + * config/rs6000/rs6000.c (rs6000_override_options): Enable -mmulhw + for 405 and 440. + * config/rs6000/rs6000.md: Add half-word multiply and + multiply-accumulate instructions for 405 and 440. + +2005-11-21 Joel Sherrill + + * config/arm/rtems-elf.h: Added definition of LINK_GCC_C_SEQUENCE_SPEC + which matches behavior of gcc 4.0 and older for RTEMS targets. The + default now includes a linker group which makes the RTEMS one nest. + +2005-11-22 Ben Elliston + + * cse.c (fold_rtx): Typo fix. + (find_comparison_args): Pass the mode of arg1, not arg1 itself. + +2005-11-21 Richard Henderson + + * c-common.c, config/darwin-c.c, c-decl.c, c-tree.h, c-objc-common.h, + langhooks-def.h, langhooks.h: Revert 2005-11-18 lookup_name patch. + + * c-tree.h (lookup_name): Move declaration ... + * c-common.h (lookup_name): ... here. + * config/darwin-c.c: Include c-common.h. + * config/t-darwin: Update dependencies. + +2005-11-22 Ben Elliston + + * optabs.c (expand_abs_nojump): Use SCALAR_FLOAT_MODE_P instead of + explicitly testing GET_MODE_CLASS (x) == MODE_FLOAT. + * genopinit.c (gen_insn): Likewise. + * reload.c (find_equiv_reg): Likewise. + * loop.c (load_mems): Likewise. + * rtlanal.c (may_trap_p_1, canonicalize_condition): Likewise. + * cse.c (find_comparison_args, fold_rtx): Likewise. + * dwarf2out.c (add_const_value_attribute): Likewise. + * expr.c (convert_move): Likewise. + * recog.c (general_operand, register_operand): Likewise. + * reg-stack.c (replace_reg): Likewise. + * tree-vect-generic.c (type_for_widest_vector_mode): Likewise. + * c-common.c (handle_vector_size_attribute): Likewise. + * simplify-rtx.c (simplify_const_unary_operation): Likewise. + (simplify_binary_operation_1): Likewise. + (simplify_const_binary_operation): Likewise. + (simplify_relational_operation): Likewise. + (simplify_const_relational_operation): Likewise. + (simplify_immed_subreg): Likewise. + * emit-rtl.c (gen_lowpart_common): Likewise. + * expmed.c (expand_mult): Likewise. + * stor-layout.c (layout_type): Likewise. + +2005-11-21 Paolo Bonzini + + PR target/24951 + * config/rs6000/rs6000.c (output_vec_const_move): Load cst and + cst2 only for SPE vectors. + +2005-11-21 David Edelsohn + + PR target/24953 + * config/rs6000/predicates.md (vrsave_operation): Check + UNSPEC_VOLATILE value. + +2005-11-21 Jan Hubicka + + PR tree-optimization/24653 + * tree-ssa-ccp.c (ccp_fold): Strip down useless conversions. + +2005-11-21 Uros Bizjak + + * config/i386/predicates.md (ax_reg_operand): New predicate. + (memory_displacement_only_operand): New predicate. + * config/i386/i386.md ("modrm" attribute): Return 0 if one + operand is AX register and the other operand is memory operand + with displacement only. + +2005-11-21 Uros Bizjak + + * fold-const.c (fold_binary) : Optimize A / A to 1.0 + if we don't care about NaNs or Infinities. + +2005-11-20 Ian Lance Taylor + + PR rtl-optimization/24883 + * combine.c (combinable_i3pat): When checking whether the + destination of i3 is used in i3, consider paradoxical subregs. + +2005-11-21 Kazu Hirata + + PR middle-end/20583 + * cse.c (cse_insn): Reject invalid forms of CONST earlier. + +2005-11-20 Joseph S. Myers + + * combine.c (try_combine): Do not run subst on i1src and i2src in + the case of generating a PARALLEL for a comparison. + +2005-11-20 Richard Henderson + + PR 24931 + * tree-sra.c (struct sra_elt): Add all_no_warning. + (struct sra_walk_fns) : Add use_all argument. + (sra_walk_expr): Pass it. + (sra_walk_modify_expr): Likewise. + (scalarize_ldst): Likewise. + (scan_use): Update for new argument. + (mark_no_warning): New. + (scalarize_use): Use it. + +2005-11-20 Bernd Schmidt + + * expr.c (expand_expr_real): Use usmul_optab for widening + signed * unsigned multiplies. + * genopinit.c (optabs): Add usmul_widen_optab. + * optabs.c (init_optabs): Likewise. + * optabs.h (enum optab_index): Add OTI_usmul_widen. + (usmul_widen_optab): Define. + * config/bfin/bfin.md (usmulhisi3): New pattern. + + * doc/md.texi (usmulqihi3, usmulhisi3, usmulsidi3): Document. + +2005-11-20 Graham Stott + + * gensupport.c (std_preds): Fixed extraneous `false` in last change. + +2005-11-20 Andreas Schwab + + PR target/24757 + * config/ia64/ia64.c (ia64_expand_atomic_op): Fix condition of cmp + insn. + +2005-11-19 Richard Henderson + + PR tree-opt/24665 + * tree-gimple.c (is_gimple_id): Export. + * tree-gimple.h (is_gimple_id): Declare. + * tree-ssa-ccp.c (ccp_decl_initial_min_invariant): New. + (get_default_value): Use it. + (maybe_fold_stmt_indirect): Likewise. + +2005-11-19 James A. Morrison + + * tree-vrp.c (compare_ranges): Return false for EQ_EXPR if VR0 is less + than VR1 or vice-versa. + +2005-11-19 Hans-Peter Nilsson + + PR middle-end/24912 + PR middle-end/24750 + * reload.c (find_reloads_address_1): Mention dependency on + gen_reload. + * reload1.c (gen_reload): For IN with an unary operation, try + moving inner expression to OUT if trivial SET is not valid. + Confirm that the result is valid. Move common code block into... + (emit_insn_if_valid_for_reload): New function. + +2005-11-19 Richard Guenther + + * fold-const.c (fold_indirect_ref_1): Make sure we fold + ARRAY_REFs of constant strings. + +2005-11-19 Jakub Jelinek + + * gcc.c (version_compare_spec_function): Use '%s' rather than %qs in + fatal format string. + +2005-11-19 Joseph S. Myers + + * combine.c (make_compound_operation): Swap operands of + commutative operation if necessary before returning. + +2005-11-19 Richard Guenther + + PR middle-end/23294 + * fold-const.c (fold_plusminus_mult_expr): New function. + (fold_binary): Use to canonicalize PLUS_EXPR and MINUS_EXPR + cases, remove now unnecessary code. + +2005-11-19 Paolo Bonzini + + * gensupport.c (old_preds): Rename to std_preds, add special field. + (struct old_pred_table): Rename to struct std_pred_table, add special + field. + (NUM_KNOWN_OLD_PREDS): Rename to NUM_KNOWN_STD_PREDS. + (NUM_OLD_SPECIAL_MODE_PREDS): Remove. + (init_predicate_table): Adjust, and set along the way whether a + predicate is special. + +2005-11-18 Mark Mitchell + + * BASE-VER: Change to 4.2.0. + +2005-11-18 James E Wilson + + * builtins.c (fold_builtin_strstr): Pass s1 through fold_convert before + returning it. + +2005-11-18 Mike Stump + + * c-common.c (handle_cleanup_attribute): Use a lang hook for lookup_name. + * config/darwin-c.c (darwin_pragma_unused): Likewise. + * c-decl.c (lookup_name_two) Remove. + * c-tree.h (lookup_name_two): Remove. + * c-objc-common.h (LANG_HOOKS_LOOKUP_NAME): Add. + * langhooks-def.h (LANG_HOOKS_LOOKUP_NAME): Add. + (LANG_HOOKS_DECLS): Add initializer for LANG_HOOKS_LOOKUP_NAME. + * langhooks.h (lang_hooks_for_decls): Add lookup_name. + +2005-11-18 Richard Earnshaw + + PR target/24914 + * arm.c (arm_hard_regno_mode_ok): Co-processor registers aren't ok + when not generating code to use that co-processor. + +2005-11-18 James A. Morrison + + * tree-flow.h (reserve_phi_args_for_new_edge, create_phi_node, + add_phi_arg, remove_phi_args, remove_phi_node phi_reverse): Mention that + these functions are now in tree-phinodes.c. + +2005-11-18 Jie Zhang + + * config/bfin/bfin.md (trap): New pattern. + +2005-11-18 Richard Kenner + + * tree-ssa-dom.c (extract_range_from_cond): Deal with variable bounds + on types. + + * expr.c (expand_expr_real): Don't call record_block_change unless + ib_boundaries_block is non-null + + * postreload.c (reload_cse_move2add): Don't try to work with BImode. + + * fold-const.c (build_range_check): Use proper type for subtraction + when merging lower bound. + +2005-11-18 Zdenek Dvorak + + PR rtl-optimization/24497 + * loop-unroll.c (apply_opt_in_copies): Do not verify equality of + the copied insn. + +2005-11-18 Zdenek Dvorak + + * tree-scalar-evolution.c (expression_expensive_p): New function. + (scev_const_prop): Use compute_overall_effect_of_inner_loop. + +2005-11-18 Bernd Schmidt + + * config/bfin/crtlibid.s: New file. + +2005-11-17 John David Anglin + + PR target/24348 + * config.gcc (hppa*-*-hpux*): Add pa/t-slibgcc-elf-ver to tmake config + when not using sjlj exceptions. + * config/pa/pa64-hpux.h (LIB_SPEC): Add -lpthread in static links. + * config/pa/pa-hpux11.h (LIB_SPEC): Likewise. + * config/pa/som.h (ASM_PREFERRED_EH_DATA_FORMAT): Delete define. + * config/pa/linux-unwind.h (pa32_fallback_frame_state): Use + DWARF_ALT_FRAME_RETURN_COLUMN instead of column 0 as return column. + * config/pa/pa-hpux.h (MD_UNWIND_SUPPORT): New define. + * config/pa/pa-linux.h (INCOMING_RETURN_ADDR_RTX, + DWARF_FRAME_RETURN_COLUMN, ASM_PREFERRED_EH_DATA_FORMAT, + ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Delete defines. + * config/pa/pa.h (ARG_POINTER_CFA_OFFSET): Delete. + (FRAME_POINTER_CFA_OFFSET, INCOMING_RETURN_ADDR_RTX, + DWARF_FRAME_RETURN_COLUMN, DWARF_ALT_FRAME_RETURN_COLUMN, + ASM_PREFERRED_EH_DATA_FORMAT, ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): New + defines. + * config/pa/hpux-unwind.h: New file. + +2005-11-17 Alexandre Oliva + + * config/rs6000/rs6000.h (ASM_OUTPUT_WEAKREF): Define. + * defaults.h (ASM_OUTPUT_WEAKREF): Add decl argument. + * varasm.c (do_assemble_alias): Adjust call. + (weak_finish): Don't use ASM_WEAKEN_LABEL if ASM_WEAKEN_DECL + is defined. + * doc/tm.texi (ASM_OUTPUT_WEAKREF): Document it. + +2005-11-17 James E Wilson + + * tree.def (FUNCTION_DECL): Correct typo in comment. + +2005-11-17 Richard Henderson + + * dwarf2out.c (dw_cfi_oprnd_struct): Reduce dw_cfi_reg_num to int. + (lookup_cfa_1): Apply data alignment to DW_CFA_def_cfa_offset_sf + and DW_CFA_def_cfa_sf. + (def_cfa_1): Use DW_CFA_def_cfa_offset_sf with negative values. + (dbx_reg_number): Don't assert particular registers here. + (based_loc_descr): ... do it here instead. Fold in ... + (eliminate_reg_to_offset): ... this function. + (compute_frame_pointer_to_cfa_displacement): Fold in the effects + of eliminate_reg_to_offset; use FRAME_POINTER_CFA_OFFSET. + * unwind-dw2.c (execute_cfa_program): Apply data align factor + to DW_CFA_def_cfa_offset_sf and DW_CFA_def_cfa_sf. + * function.c (instantiate_new_reg): Use FRAME_POINTER_CFA_OFFSET. + (instantiate_virtual_regs): Likewise. + * var-tracking.c (adjust_stack_reference): Likewise. + * doc/tm.texi (FRAME_POINTER_CFA_OFFSET): New. + +2005-11-17 Bernd Schmidt + + * config/bfin/elf.h (STARTFILE_SPEC): Add "crtlibid%O%s" + * config/bfin/uclinux.h (STARFILE_SPEC): Likewise. + * config/bfin/t-bfin-elf (EXTRA_PARTS, EXTRA_MULTILIB_PARTS): Add + crtlibid.o. + ($(T)crtlibid.o): New rule. + +2005-11-16 Richard Guenther + + PR middle-end/24851 + * fold-const.c (extract_array_ref): Return byte offset + in all cases. + (fold_binary): Fold &x[a] CMP &x[b] to + a*sizeof(*x) CMP b*sizeof(*x) to get correct overflow + behavior. + +2005-11-16 Richard Henderson + + PR middle-end/23497 + * tree-ssa.c (warn_uninitialized_var): Skip real and imaginary + parts of an SSA_NAME. + +2005-11-16 Richard Earnshaw + + PR target/24861 + * arm.md (split for movsf with immediate): Restrict split to insns + that set a general register. + +2005-11-16 Daniel Jacobowitz + + * config/ia64/unwind-ia64.c (uw_advance_context): New. Call + uw_update_context. + * unwind-dw2.c (uw_advance_context): Likewise. + * unwind-sjlj.c (uw_advance_context): Likewise. Also call + _Unwind_SjLj_Unregister. + * unwind.inc (_Unwind_ForcedUnwind_Phase2): Call uw_advance_context. + +2005-11-16 Daniel Jacobowitz + + * unwind-sjlj.c (_Unwind_GetCFA): Handle the builtin_setjmp case. + +2005-11-16 Eric Botcazou + + * config/alpha/alpha.c (alpha_init_builtins): Use type_for_mode + langhook to get a DImode integer type. + +2005-11-16 Richard Henderson + J"orn Rennecke + Ulrich Weigand + + PR rtl-opt/24160 + PR target/24621 + * reload1.c (reg_equiv_invariant): New. + (reload): Allocate, initialize, and free it. + (calculate_needs_all_insns): Check it when skipping equivalence + setting insns. + (alter_reg): Likewise. + (eliminate_regs_1): Rename from eliminate_regs. Add new + may_use_invariant argument; only use reg_equiv_invariant when true. + (eliminate_regs): New. + (eliminate_regs_in_insn): Use eliminate_regs_1; track when we're in + a context for which may_use_invariant may be true. + +2005-11-16 Eric Botcazou + + * fold-const.c (const_binop): Don't constant fold the operation + if the result has overflowed and flag_trapping_math. + * simplify-rtx.c (simplify_const_binary_operation): Likewise. + +2005-11-16 Daniel Jacobowitz + + * config/arm/unwind-arm.c (abort): Add prototype here. + (UCB_FORCED_STOP_ARG): Correct typo in macro argument. + (struct phase1_vrs): Add prev_sp. + (unwind_phase2_forced): Save the original core registers instead of + modifying entry_vrs. Take a new flag argument for resuming unwinding + and set action flags accordingly. Always set _US_END_OF_STACK when + get_eit_entry fails. Unwind before calling the stop function. + (_Unwind_GetCFA): New function. + (__gnu_Unwind_ForcedUnwind): Update call to unwind_phase2_forced. + (__gnu_Unwind_Resume_or_Rethrow): Likewise. + (__gnu_Unwind_Resume): Do not unwind here for forced unwinding; + just call unwind_phase2_forced. + (_Unwind_GetDataRelBase, _Unwind_GetTextRelBase): Move to here. + * config/arm/unwind-arm.h (abort): Remove prototype. + (_Unwind_GetDataRelBase, _Unwind_GetTextRelBase): Change to + prototypes. + (_Unwind_GetCFA): New prototype. + * config/arm/pr-support.c (abort): Add prototype here. + * unwind-c.c (PERSONALITY_FUNCTION) [__ARM_EABI_UNWINDER__]: Handle + forced unwinding. + * config/arm/arm.c (arm_expand_prologue, thumb_expand_prologue): Do + not schedule the prologue with non-call exceptions and EABI. + +2005-11-16 Nathan Sidwell + + * config/arm/unwind-arm.h: Reorder interface function declarations. + (_URC_END_OF_STACK): New enumeration value. + (_US_UNWIND_ACTION_MASK, _US_FORCE_UNWIND, _US_END_OF_STACK): Likewise. + (struct _Unwind_Control_Block): Document reserved field use. + (_Unwind_Stop_Fn): New typedef. + (_Unwind_ForcedUnwind): Declare. + (_Unwind_Resume_or_Rethrow): Declare. + * gcc/config/arm/libunwind.S (UNWIND_WRAPER): Add nargs + argument. Adjust. + (_Unwind_Resume_or_Rethrow, _Unwind_ForcedUnwind): New. + * config/arm/unwind-arm.c (UCB_FORCED_STOP_FN) + (UCB_FORCED_STOP_ARG): New. + (search_EIT_table): Update boundary condition checks. + (get_eit_entry): Return _URC_END_OF_STACK when cannot unwind. + (unwind_phase2): Replace for with do..while. + (unwind_phase2_forced): New. + (__gnu_Unwind_RaiseException): Replace for with do..while. + (__gnu_Unwind_ForcedUnwind): New. + (__gnu_Unwind_Resume): Set FORCE_UNWIND flag, if forced unwinding. + Use appropriate phase2 unwinder. + (__gnu_Unwind_Resume_or_Rethrow): New. + (__gnu_unwind_pr_common): Cope with forced unwinding. + +2005-11-16 David Edelsohn + + PR target/24772 + * config/rs6000/predicates.md (vrsave_operation): SET_SRC is a VEC. + + * config/rs6000/rs6000.md (btruncsf2, ceilsf2, floorsf2, + roundsf2): Remove "s" from mnemonic. + +2005-11-16 Bernd Schmidt + + * config/bfin/crti.s (__init, __fini): Use appropriate prologue if + __PIC__ is defined. + * config/bfin/crtn.s: Change epilogues to match. + * config/bfin/t-bfin-elf (EXTRA_MULTILIB_PARTS): Define. + * config/bfin/bfin.h (TARGET_CPU_CPP_BUILTINS): If flag_pic, define + __PIC__ and __pic__. + +2005-11-16 Tobias Schl"uter + + PR 24357 + * doc/invoke.texi: Distinguish between free and fixed form instead of + Fortran and Fortran 90/95. Remove ratfor from the list of supported + languages. + * gcc.c (default_compilers): Remove double entries, add entries for + suffixes '.F90' and '.F95'. + +2005-11-16 Eric Botcazou + + * config/alpha/alpha.c (alpha_expand_prologue): Fix off-by-one bug + in the stack probing loop. + +2005-11-15 David Edelsohn + + * configure.ac: Use .machine power5 not power5x. + * configure: Regenerate. + +2005-11-15 Mike Stump + + * c-decl.c (lookup_name_two): Add. + * c-tree.h (lookup_name_two): Likewise. + * c-common.c (handle_cleanup_attribute): Use lookup_name_two instead. + * config/darwin-c.c (darwin_pragma_unused): Likewise. + +2005-11-16 Alan Modra + + PR rtl-optimization/23392 + * regrename.c (enum scan_actions) Add mark_access. + (scan_actions_name): Ditto. + (scan_rtx_reg): Handle mark_access. + (scan_rtx_address): Do nothing for mark_access. + (build_def_use): Mark source registers in REG_FRAME_RELATED_EXPR + and regs in REG_INC notes before closing chains for dead regs. + Mark destination regs in REG_FRAME_RELATED_EXPR notes after + opening chains for new writes. + +2005-11-15 David Edelsohn + + * c.opt (ffixed-line-length-none): New. + +2005-11-15 Steve Ellcey + + * mklibgcc.in: Change contents of eh_dummy.c. + +2005-11-15 Daniel Jacobowitz + + * loop.c (scan_loop): Do not insert temporaries for hard registers. + +2005-11-15 Daniel Jacobowitz + + * config/arm/lib1funcs.asm (div0) [L_dvmd_lnx]: Call raise instead + of making syscalls. + * config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define. Set r7 also. + +2005-11-15 Jan Hubicka + + * invoke.texi (large-unit-insns): Document. + * ipa-inline.c (cgraph_decide_inlining): Use large-unit-insns param. + * params.def (large-unit-insns): New param. + +2005-11-15 Hans-Peter Nilsson + + PR target/24869 + * config/cris/cris.md ("*mov_sidesisf_mem"): Do not match + special register for operand 3. Reindent constraints to align + them vertically. + +2005-11-14 David Edelsohn + + * doc/invoke.texi (RS/6000 and PowerPC Options): Add -mmfcrf, + -mpopcntb, -mfprnd. Add -mcpu=power5+. + * configure.ac: Add test for FP rounding instructions. + * configure: Regenerate. + * config.in: Regenerate. + * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define + _ARCH_PPCSQ, _ARCH_PPCGR, _ARCH_PWR4, _ARCH_PWR5, _ARCH_PWR5X if + features enabled. + * config/rs6000/rs6000.opt (mfprnd): New. + * config/rs6000/rs6000.c (processor_target_table): Add power5+. + (POWERPC_MASKS): Add MASK_POPCNTB and MASK_FPRND. + * config/rs6000/aix52.h (ASM_CPU_SPEC): Add -mpower5+. + * config/rs6000/rs6000.h (ASM_CPU_SPEC): Add -mpower5+. + (TARGET_FPRND): New. + * config/rs6000/rs6000.md (UNSPEC_FRIM, UNSPEC_FRIN, UNSPEC_FRIP, + UNSPEC_FRIZ): New. + (btrunc2): New. + (ceil2): New. + (floor2): New. + (round2): New. + +2005-11-14 Geoffrey Keating + + * gcc.c (version_compare_spec_function): Use fatal() rather than + abort(). + + * config/rs6000/darwin.h (DARWIN_CRT2_SPEC): New. + (SUBTARGET_EXTRA_SPECS): Define %(darwin_crt2). + * config/i386/darwin.h (SUBTARGET_EXTRA_SPECS): Define %(darwin_crt2) + as empty. + * config/darwin.h (STARTFILE_SPEC): Use %(darwin_crt2) to possibly + link in crt2.o. + + * config/darwin.h (REAL_LIBGCC_SPEC): Link in shared libgcc depending + on -mmacosx-version-min setting. + +2005-11-14 Diego Novillo + + PR 24840 + * tree-vrp.c (infer_value_range): Return false if STMT is a + block terminator and its basic block has no successors. + +2005-11-14 Mike Stump + + * config/i386/i386.c (override_options): -masm=intel isn't + supported on darwin. + * doc/invoke.texi (i386 and x86-64 Options): Likewise. + +2005-11-15 Joseph S. Myers + + * crtstuff.c: Undefine gid_t, pid_t, rlim_t, ssize_t, uid_t and + vfork after including auto-host.h. + +2005-11-15 Alan Modra + + PR rtl-optimization/22002 + * combine.c (distribute_notes): Detect cases where a reg dies + two or more times in a bb, including on the insn we are combining, + and place the death note on the correct range. + +2005-11-14 Dale Johannesen + + * expmed.c (store_bit_field): Add offset unconditionally for + memory targets. + (extract_bit_field): Don't force extzv or extv operand into + a register if field is too big. + +2005-11-14 Daniel Jacobowitz + + * config/arm/arm.c (pic_labelno): New. + (arm_load_pic_register): Use an UNSPEC_PIC_LABEL instead of a + LABEL_REF. Pass only the labelno to PIC insns. + (arm_call_tls_get_addr, legitimize_tls_address): Likewise. + (arm_output_addr_const_extra): Handle UNSPEC_PIC_LABEL. + * arm.md (UNSPEC_PIC_LABEL): New constant. + (pic_add_dot_plus_four, pic_add_dot_plus_eight) + (tls_load_dot_plus_eight): Expect a labelno instead of a LABEL_REF. + Use the correct label prefix. + +2005-11-14 Daniel Jacobowitz + + * config/arm/arm.c (legitimize_tls_address): Use correct rtx for + REQ_EQUIV note. + +2005-11-14 Richard Earnshaw + + * loop-invariant.c: Include tm_p.h. + * Makefile.in: Updated. + +2005-11-13 John David Anglin + + * pa.c (store_reg): Revise generation of frame notes in large frames. + (set_reg_plus_d): Likewise. + +2005-11-13 Andrew MacLeod + + PR tree-optimization/24709 + * tree-ssa-operands.c (verify_imm_links): Increase limit for infinite + loop check. + +2005-11-13 Eric Botcazou + + * gthr-posix95.h: Remove declaration of pthread_mutexattr_settype + and duplicate declaration of pthread_self. + +2005-11-13 Eric Botcazou + Ian Lance Taylor + + PR middle-end/24003 + * calls.c (expand_call): If TARGET is a MEM and some part of the + argument area has been saved, force TARGET to a register. + +2005-11-13 Razya Ladelsky + + * ipa-prop.c (ipa_callsite_compute_param ): Removed obsolete type + checking. + +2005-11-13 Jason Merrill + + PR c++/22489 + * dwarf2out.c (gen_subprogram_die): Force a declaration die for + lazily declared methods. + (force_decl_die): Stop if forcing out the context already make a + DIE for the decl. + (force_type_die): Likewise. + +2005-11-13 Andrew Pinski + + PR middle-end/24820 + * builtins.c (integer_valued_real_p): Add break in + REAL_CST having TREE_OVERFLOW set. + +2005-11-13 Zdenek Dvorak + + * tree-ssa-loop-ivopts.c (get_address_cost): Prevent splitting + addressing modes during calculation of costs. + +2005-11-12 Eric Botcazou + + * function.c (assign_stack_local_1): Restrict sanity check + on frame size overflow to 32-bit and above platforms. + +2005-11-12 Hans-Peter Nilsson + + * config/cris/cris.h (LEGITIMIZE_RELOAD_ADDRESS): Define. + * config/cris/cris.c: Include reload.h. + (cris_initial_elimination_offset): New function. + * config/cris/cris-protos.h: (cris_initial_elimination_offset): + Prototype. + +2005-11-12 Richard Guenther + + * gcse.c (find_rtx_in_ldst): Handle NULL pre_ldst_table. + +2005-11-12 Jan Hubicka + + * expr.c (expand_expr_real_1): : Canonicalize + to compare against 0 when possible. + +2005-11-12 Jie Zhang + + * config/bfin/bfin.h (REGISTER_NAMES, SHORT_REGISTER_NAMES, + HIGH_REGISTER_NAMES, FIXED_REGISTERS, CALL_USED_REGISTERS, + REG_ALLOC_ORDER, enum reg_class): Rearrange I/B/L registers. + * config/bfin/bfin.md: Redefine REG_ constants for I/B/L registers + in the new order. + +2005-11-12 Hans-Peter Nilsson + + * recog.c (constrain_operands) : For a match, require + that a non-register matches general_operand when strict >= 0. + +2005-11-11 Steven Bosscher + + * loop-invariant.c (move_loop_invariants): Fix a thinko in the + previous checkin. + +2005-11-11 Daniel Jacobowitz + + * tree-ssa-dse.c (struct address_walk_data, memory_ssa_name_same) + (memory_address_same): New. + (dse_optimize_stmt): Call memory_address_same. + +2005-11-12 Hans-Peter Nilsson + + PR middle-end/24750 + * reload.c (find_reloads_address_1) : New cases. + +2005-11-11 Daniel Jacobowitz + + * longlong.h (__clz_tab): Always provide. + +2005-11-11 Steven Bosscher + + PR 24265 + * loop-invariant.c (may_assign_reg_p): Make sure a hard register + can be assigned to. + (find_invariant_insn): Do the cheapest check, may_assign_reg_p, + before check_maybe_invariant. + (move_invariant_reg): Use gen_move_insn instead of replacing + SET_DEST with the temporary for the invariant. + (move_loop_invariants): If checking is enabled, do internal + consistency checks after completing the pass. + +2005-11-11 David Edelsohn + + PR 24644 + * common.opt (Wvolatile-register-var): New. + * varasm.c (make_decl_rtl): Only emit warning when option + specified. Clarify warning message. + * doc/invoke.texi (Wvolatile-register-var): Document new option. + + * doc/md.texi (copysign): Document standard named pattern. + +2005-11-11 Jie Zhang + + * config/bfin/bfin.c (bfin_expand_strmov): Correctly move the trailing + bytes when align is 2. + * config/bfin/bfin.md (rep_movsi, rep_movhi): Make LSETUP be followed + by the first instruction of the loop. + +2005-11-11 Jason Merrill + + PR c++/24686 + * gimplify.c (gimplify_cleanup_point_expr): Also save and restore + the cleanup list. + +2005-11-11 Zdenek Dvorak + + PR rtl-optimization/22509 + * local-alloc.c (memref_used_between_p): Check whether a function call + could not reference the memref. + +2005-11-11 Ulrich Weigand + + * postreload.c (reload_cse_simplify_operands): Fix bug in sorting + algorithm so as to choose the best, not the worst, alternative. + Reset accumulated register class before processing next alternative. + +2005-11-11 Kaz Kojima + + PR target/24445 + * calls.c (expand_call): Copy a return value to a plain register + if needed. + +2005-11-10 Alexandre Oliva + + PR target/24778 + * varasm.c (assemble_name): Recompute name only for transparent + aliases. + +2005-11-10 Hans-Peter Nilsson + + * tree-ssa-structalias.c (heapvar_lookup): Fix typo: stmt to from. + +2005-11-04 Jeff Law + + PR middle-end/23181 + * tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Do not + perform reassociation if the parent statement will not die as + a result of the optimization. + +2005-11-10 Daniel Berlin + + * tree-ssa-alias.c (compute_may_aliases): Remove call to + delete_old_heap_vars. + * tree-dfa.c (referenced_var_remove): Remove function. + * tree-ssa.c (init_tree_ssa): Call init_alias_heapvars. + (delete_tree_ssa): Remove call to delete_old_heapvars. + Add call to delete_alias_heapvars. + * tree-flow.h (referenced_var_remove): Remove prototype + (init_alias_heapvars): New prototype. + (delete_alias_heapvars): Ditto. + * Makefile.in (tree-ssa-structalias.o): Add + gt-tree-ssa-structalias.o + (GTFILES): Add tree-ssa-structalias.h and + tree-ssa-structalias.c. + (s-gtype): Add gt-tree-ssa-structalias.h. + * tree-ssa-structalias.c (heapvars): Remove. + (oldheapvars): Remove. + (heapvar_for_stmt): New variable. + (heapvar_lookup): New function. + (heapvar_insert): Ditto. + (get_constraint_for): See if we have an old heapvar + to reuse. + (init_alias_heapvars): New function. + (delete_alias_heapvars): Ditto. + Add include of gt-tree-ssa-structalias.h. + +2005-11-10 Eric Botcazou + + PR middle-end/22127 + * calls.c (special_function_p): Set ECF_RETURNS_TWICE for getcontext. + +2005-11-10 Eric Botcazou + + * tree.c (int_fits_type_p): Only look at the base type + if it has the same precision as the original type. + +2005-11-10 Jakub Jelinek + + PR other/4372 + * varasm.c (assemble_alias): Use %q+D in the error + message instead of %J and %qD. + +2005-11-10 Richard Guenther + + * gcse.c (free_ldst_entry): Only free hashtable if + it exists. + +2005-11-09 Eric Botcazou + + * function.c (assign_stack_local_1): Issue an error message if + the frame size overflows in the signed target arithmetics. + +2005-11-09 Eric Botcazou + + * tree.c (build_qualified_type): Chain the new type to the original + type's TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO linked lists if it is + a POINTER_TYPE or a REFERENCE_TYPE respectively. + (build_pointer_type_for_mode): Only return unqualified types. + (build_reference_type_for_mode): Likewise. + +2005-11-09 Jakub Jelinek + + * Makefile.in (gnucompare): Do comparison of all files using one of + the chosen methods and only afterwards decide if just warning should + be issued or comparison failure raised. + +2005-11-09 Eric Botcazou + + * ifcvt.c (noce_get_alt_condition): Use prev_nonnote_insn. + (noce_try_abs): Negate if the comparison is reversed. + Look only one instruction backwards for a REG_EQUAL note. + +2005-11-09 Alexandre Oliva + + PR other/4372 + * gthr-dce.h, gthr-posix.h, gthr-posix95.h, gthr-solaris.h, + gthr-tpf.h: Define __gthrw. For all identifiers that might + be weak, introduce weakrefs or non-weak aliases with __gthrw, + and prefix all uses with __ghtrw. + +2005-11-09 Alexandre Oliva + + PR other/4372 + * tree.h (IDENTIFIER_TRANSPARENT_ALIAS): New. + (TREE_DEPRECATED): Adjust comment. Check for a DECL. + * c-common.c (handle_weakref_attribute): New. + (c_common_attribute_table): Add weakref. + * configure.ac (HAVE_GAS_WEAKREF): Check for weakref support + in the assembler. + * configure, config.in: Rebuilt. + * defaults.h (ASM_OUTPUT_WEAKREF): Define if HAVE_GAS_WEAKREF. + * doc/extend.texi: Document weakref attribute. + * varasm.c (ultimate_transparent_alias_target): New + (assemble_name): Use it. + (weak_finish_1): Split out of... + (weak_finish): ... and deal with weakrefs in... + (weakref_targets): ... new list. + (globalize_decl): Clean up weakref_targets. + (do_assemble_alias): Handle weakrefs. + (finish_aliases_1): Do not reject weakrefs to external symbols. + (assemble_alias): Handle weakrefs. + +2005-11-09 Richard Guenther + + PR tree-optimization/24716 + * tree-scalar-evolution.c (analyze_evolution_in_loop): Use + t_bool to track results from follow_ssa_edge. + +2005-11-09 Eric Botcazou + + * final.c (force_source_line): New global variable. + (final_scan_insn): Set it to true instead of clearing last_filename. + (notice_source_line): Return true if force_source_line is true, + unless source info is absent. + +2005-11-09 Andrew Pinski + + PR c/24644 + * dwarf2-out.c (add_name_and_src_coords_attributes): Don't add + a linkage name for a variable if it a register variable. + * c-decl.c (grokdeclarator): Global register variables + should be set as PUBLIC. + +2005-11-09 Andreas Krebbel + + PR 24624 + * config/s390/s390.c (struct s390_frame_layout): New fields + first_save_gpr_slot and last_save_gpr_slot. + (cfun_grps_save_area_size, s390_frame_info, s390_emit_prologue, + s390_emit_epilogue, s390_initial_elimination_offset): Replaced + first_save_gpr and last_save_gpr with the _slot variants. + (s390_register_info): Calculate first_save_gpr_slot and + last_save_gpr_slot using regs_ever_live. + +2005-11-09 Andreas Krebbel + + PR 24623 + * config/s390/s390.c (s390_regs_ever_clobbered): Only save live eh regs + for a function containing a landing pad. + +2005-11-09 Andreas Krebbel + + PR 24034 + * flow.c (mark_set_1): Handle CLOBBERs like SETs if the register + is live afterwards. + +2005-11-08 Bernd Schmidt + + * config/bfin/t-bfin-elf (MULTILIB_OPTIONS, MULTILIB_DEFAULTS, + MULTILIB_DIRNAMES, MULTILIB_EXCEPTIONS): New. + +2005-11-09 Nathan Sidwell + + Add ms2 support + * config/ms1/ms1.md (UNSPEC_BLOCKAGE, UNSPEC_EI, UNSPEC_DI): New + constants. + (call,load,store): New insn types. + (mem_access, branch_access): Adjust reservation conditions. + (define_delay): Adjust condition. + (decrement_and_branch_until_zero): Allow for ms2. Set branch + type. + (*decrement_and_rbanch_until_zero_no_clobber): Allow for ms2. + (*movqi_internal,*movsi_internal,*movsf_internal): Use load,store + insn type. + (call_internal, call_value_internal, return_internal, + return_interrupt_internal, eh_return_internal, indirect_jump, + tablejump): Set call insn type. + (blockage, ei, di): Use appropriate unspec const. + * config/ms1/ms1.c (ms1_flag_delayed_branch): New. + (ms1_get_attr_type): Adjust to give load & store types. + (ms1_final_prescan_insn): Adjust for new insn types. Don't look + backwards past a barrier. + (ms1_override_options): Accept ms2 arch. Copy and reset delayed + branch scheduling. + (struct branch_info, struct label_info): New. + (ms1_labels): New. + (ms1_add_branches, ms1_check_delay_slot, ms1_reorg_hazard): New. + (ms1_machine_reorg): New. + (TARGET_MACHINE_DEPENDENT_REORG): Override. + * config/ms1/crtn.asm: Add nop for ms2 JAL hazard. + * config/ms1/ms1.h (processor_type): Add PROCESSOR_MS2. + (ASM_SPEC, LIB_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): Add ms2. + (TARGET_MS2): New. + +2005-11-09 Per Bothner + Uros Bizjak + + PR c/24101 + * toplev.c (process_options): Initialize debug_hooks early + in case lang_hooks.post_options ends up calling a debug_hook. + +2005-11-08 Jakub Jelinek + + * dwarf2out.c (multiple_reg_loc_descriptor): Don't assume + DBX_REGISTER_NUMBER being contiguous. + +2005-11-08 James A. Morrison + Diego Novillo + + PR 23046 + * tree-vrp.c (register_edge_assert_for): Do not register + always-false predicates. + +2005-11-08 Devang Patel + + PR tree-optimization/23115 + * tree-if-conv.c (find_phi_replacement_condition): Check domninated_by + relation. + +2005-11-08 Joseph S. Myers + + * config/rs6000/t-fprules (MULTILIB_MATCHES_FLOAT): Include + -mcpu=440. + +2005-11-08 Daniel Berlin + + Fix PR tree-optimization/23382 + + * tree-ssa-alias.c (compute_may_aliases): Call + delete_old_heap_vars. + * tree-dfa.c (referenced_var_remove): New function. + * tree-ssa.c (delete_tree_ssa): Call delete_old_heap_vars. + * tree-flow.h (referenced_var_remove): Add prototype. + (delete_old_heap_vars): Ditto. + * tree-ssa-structalias.c (heapvars): New variable. + (oldheapvars): Ditto. + (get_constraint_for): Put heap vars on heapvars list. + (delete_old_heap_vars): New function. + +2005-11-08 Jason Merrill + + * tree.h (CALL_FROM_THUNK_P): Add CALL_EXPR_CHECK. + +2005-11-08 Uros Bizjak + + PR target/19340 + * reg-stack.c (reg_to_stack): Update register liveness also + for flag_sched2_use_traces. + +2005-11-08 Alan Modra + + PR target/23704 + * config/rs6000/rs6000.c (rs6000_handle_option ): Don't + override prior explicit -mno-powerpc-gfxopt. + +2005-11-07 Eric Botcazou + + * expmed.c (extract_bit_field): Do not use insv/extv/extzv patterns + if the bitsize is zero. + * doc/md.texi (Standard Pattern Names): Document it. + + * config/ia64/ia64.c (ia64_pass_by_reference): Delete. + (TARGET_PASS_BY_REFERENCE): Likewise. + +2005-11-07 Ian Lance Taylor + + PR rtl-optimization/24683 + * config/i386/i386.c (legitimize_pic_address): If constant operand + to PLUS is too large, put it in a register. + +2005-11-07 Jie Zhang + + * configure.ac: Enable checking assembler dwarf2 support for bfin + target. + * configure: Regenerate. + +2005-11-07 Paolo Bonzini + + PR target/24230 + + * config/rs6000/rs6000.c (easy_vector_splat_const, easy_vector_same, + gen_easy_vector_constant_add_self): Delete. + (vspltis_constant, easy_altivec_constant, gen_easy_altivec_constant): + New. + (output_vec_const_move): Use gen_easy_altivec_constant. + (rs6000_expand_vector_init): Do not emit a set of a VEC_DUPLICATE. + * config/rs6000/predicates.md (easy_vector_constant): Reorganize tests. + (easy_vector_constant_add_self): Rewritten. + * config/rs6000/rs6000-protos.h (easy_vector_splat_const, + easy_vector_same, gen_easy_vector_constant_add_self): Remove prototype. + (easy_altivec_constant, gen_easy_altivec_constant): Add prototype. + * config/rs6000/altivec.md (easy_vector_constant_add_self splitters): + Macroize and adjust for the other changes. + +2005-11-07 Paolo Bonzini + + PR c/24599 + + * c-typeck.c (build_c_cast): Try using a shared constant, and see + if TREE_OVERFLOW or TREE_CONSTANT_OVERFLOW really changed. + +2005-11-07 Jakub Jelinek + + PR rtl-optimization/23567 + * ifcvt.c (noce_mem_write_may_trap_or_fault_p): New function. + (noce_process_if_block): Don't do any optimizations except + if (cond) x = x; if !set_b and write into orig_x may trap + or fault. Remove the MEM_READONLY_P check. + +2005-11-06 Diego Novillo + + PR 24670 + * tree-vrp.c (fix_equivalence_set): New. + (extract_range_from_assert): Call it. + +2005-11-05 Ian Lance Taylor + + PR target/22432 + * combine.c (apply_distributive_law): Don't distribute across a + vector mode subreg. + +2005-11-05 Kazu Hirata + + * c-typeck.c, config/i386/netware.h, config/m32c/cond.md, + config/ms1/ms1.h, config/rs6000/predicates.md, + config/s390/s390.c, params.def, postreload-gcse.c, + tree-flow-inline.h, tree-ssa-operands.c, tree-vectorizer.c, + tree-vrp.c, tree.c: Fix comment typos. + * doc/invoke.texi: Fix typos. + +2005-11-05 Sebastian Pop + + * lambda-code.c (lambda_transform_legal_p): Use DDR_NUM_DIST_VECTS + for testing whether the data_dependence_relation contains distance + vectors. Iterate over all distance vectors of the ddr. + * lambda.h: Define a vec of lambda_vector pointers. + * tree-data-ref.c (dump_data_dependence_relation, + dump_data_dependence_direction): Iterate over all distance and + direction vectors of the ddr. + (initialize_data_dependence_relation): Initialize DDR_DIR_VECTS and + DDR_DIST_VECTS. + (build_classic_dist_vector, build_classic_dir_vector): Push a set + of distance/direction vectors instead of a single one. + * tree-data-ref.h (dir_vects, dist_vects): Replace dir/dist + lambda_vectors with a vec of lambda_vectors. + (DDR_DIR_VECT, DDR_DIST_VECT): Redefined as operations on vec. + (DDR_DIR_VECTS, DDR_DIST_VECTS, DDR_NUM_DIR_VECTS, + DDR_NUM_DIST_VECTS): New. + * tree-loop-linear.c (gather_interchange_stats): Test for the + existence of distance vectors only after having checked that there + is a dependence. Iterate over all distance vectors of the ddr. + (linear_transform_loops): Use dump_data_dependence_relation. + * tree-vect-analyze.c (vect_analyze_data_ref_dependence): Test for + distance vectors using DDR_NUM_DIST_VECTS. Iterate over all the + distance vectors of the ddr. + +2005-11-05 Bernd Schmidt + + * config/bfin/bfin.c (n_dregs_to_save, n_pregs_to_save, + expand_prologue_reg_save, expand_epilogue_reg_restore): New argument + IS_INTHANDLER; all callers changed. + (n_regs_saved_by_prologue): Take interrupt handler attributes into + account. + (do_link, do_unlink): New argument ALL; all callers changed. + (expand_interrupt_handler_prologue, expand_interrupt_handler_epilogue): + If function isn't leaf, save and restore all registers. + (bfin_function_ok_for_sibcall): Only true if not an interrupt or + exception handler. + +2005-11-05 Jan Hubicka + + PR rtl-optimization/23490 + * doc/invoke.texi (max-predicted-iterations, max-cse-insns, + max-flow-memory-location): Document. + * flow.c: Include params.h + (MAX_MEM_SET_LIST_LEN): Kill. + (add_to_mem_set_list): Use new param. + * cse.c (cse_basic_block): Replace 1000 by new param. + * params.def (PARAM_MAX_PREDICTED_ITERATIONS, PARAM_MAX_CSE_INSNS, + PARAM_MAX_FLOW_MEMORY_LOCATIONS): New. + * predict.c (predict_loops): Use new param. + * predict.def (MAX_PRED_LOOP_ITERATIONS): Remove. + + * ipa-inline.c (cgraph_decide_inlining_of_small_function, + cgraph_decide_inlining, cgraph_decide_inlining_incrementally): + Do not hold memory returned by cgraph_node_name across other call. + +2005-11-04 Hans-Peter Nilsson + + PR target/23424 + * config/cris/predicates.md ("cris_bdap_sign_extend_operand"): + Disable. + +2005-11-04 Jeff Law + + PR/21883 + * doc/invoke.texi: Document max-jump-thread-duplication-stmts PARAM. + * tree-ssa-dom.c: Include params.h. + (thread_across_edge): If there are too many statements in the + target block, then do not thread through it. + * Makefile.in (tree-ssa-dom.o): Depend on $(PARAMS_H). + * params.def (PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS): New PARAM. + +2005-11-03 Diego Novillo + + PR 24627 + * tree-ssa-dce.c (pass_dce, pass_dce_loop, pass_cd_dce): Use + TODO_update_ssa instead of TODO_update_ssa_no_phi. + +2005-11-04 Sebastian Pop + + PR/18595 + * tree-scalar-evolution.c (instantiate_parameters_1, + instantiate_parameters, resolve_mixers): Compute the size of an + expression to be instantiated and give up the instantiation if the + size exceeds PARAM_SCEV_MAX_EXPR_SIZE. + +2005-11-04 Richard Guenther + + * tree-flow.h (ref_contains_indirect_ref): Rename to + array_ref_contains_indirect_ref. + * tree-flow-inline.h (ref_contains_indirect_ref): Likewise. + (array_ref_contains_indirect_ref): Make comment match the code + and vice-versa. + (ref_contains_array_ref): Likewise. + * tree-ssa-structalias.c (find_func_aliases): Remove call to + ref_contains_indirect_ref. + * tree-ssa-loop-niter.c (infer_loop_bounds_from_undefined): + Rename calls to ref_contains_indirect_ref. + +2005-11-04 Paul Brook + + * config/arm/arm.c (arm_load_pic_register): Pass extra reg to + gen_pic_add_dot_plus_four and gen_pic_add_dot_plus_eight. + (arm_call_tls_get_addr, legitimize_tls_address): Likewise. + * config/arm/arm.md: Use match_operand in peephole input templates + and match_dup in peephole output templates. + +2005-11-04 Daniel Jacobowitz + + * config/arm/arm.c (arm_init_libfuncs): Use __aeabi_idiv and + __aeabi_uidiv. + +2005-11-04 Mark Mitchell + Daniel Jacobowitz + + * longlong.h (add_ssaaaa): Clobber condition code register + in ARM version. + (sub_ddmmss): Likewise. + (umul_ppmm): Likewise. + +2005-11-04 Daniel Jacobowitz + Paul Brook + Phil Blundell + + * configure.ac: Add test for ARM TLS support. + * configure: Regenerated. + * config/arm/arm-protos.h (legitimize_tls_address) + (arm_tls_referenced_p, tls_mentioned_p) + (arm_output_addr_const_extra): New prototypes. + (thumb_legitimize_pic_address): Delete. + * config/arm/arm.c: Include "gt-arm.h". + (enum tls_reloc): New. + (arm_cannot_copy_insn_p, arm_tls_symbol_p, load_tls_operand) + (pcrel_constant_p, get_tls_get_addr, arm_load_tp) + (arm_call_tls_get_addr, legitimize_tls_address) + (arm_tls_referenced_p, arm_tls_operand_p_1, tls_mentioned_p) + (arm_init_tls_builtins, arm_emit_tls_decoration) + (arm_output_addr_const_extra): New functions. + (TARGET_CANNOT_COPY_INSN_P, TARGET_CANNOT_FORCE_CONST_MEM) + (TARGET_HAVE_TLS): Define. + (target_thread_pointer): New. + (arm_override_options): Handle -mtp=. + (legitimize_pic_address): Ignore UNSPECs. + (arm_legitimate_address_p, thumb_legitimate_address_p): Handle PC + relative symbols. + (arm_legitimize_address, thumb_legitimize_address): Handle TLS. + (tls_get_addr_libfunc): New variable. + (symbol_mentioned_p, label_mentioned_p): Ignore UNSPEC_TLS. + (arm_init_builtins): Call arm_init_tls_builtins. + (arm_expand_builtin): Handle ARM_BUILTIN_THREAD_POINTER. + (arm_encode_section_info): Call default_encode_section_info. + * config/arm/arm.h (TARGET_HARD_TP, TARGET_SOFT_TP): Define. + (enum arm_tp_type): New. + (target_thread_pointer): Add declaration. + (LEGITIMATE_CONSTANT_P): Handle TLS. + (LEGITIMATE_PIC_OPERAND_P): Handle TLS. + (OUTPUT_ADDR_CONST_EXTRA): Call arm_output_addr_const_extra. + (enum arm_builtins): Add ARM_BUILTIN_THREAD_POINTER. + * config/arm/arm.md: Add UNSPEC_TLS. + (movsi): Handle TLS. + (pic_add_dot_plus_four, pic_add_dot_plus_eight): Allow for + non-PIC. + (tls_load_dot_plus_eight): New insn and a peephole to create it. + (load_tp_hard, load_tp_soft): New insns. + * arm.opt: Add -mtp=. + * doc/invoke.texi (ARM Options): Document -mtp. + +2005-11-04 Daniel Jacobowitz + + * config/arm/lib1funcs.asm: Don't include "libunwind.S". + * config/arm/libunwind.S: Include "lib1funcs.asm". + * config/arm/t-bpabi (LIB1ASMFUNCS): Remove _unwind. + (LIB2ADDEH): Add libunwind.S. + (LIB2ADDEHDEP): Add lib1funcs.asm. + * mklibgcc.in: Handle asm files in libgcc_eh.a. + +2005-11-04 Francois-Xavier Coudert + + PR fortran/18452 + * gcc/c.opt: Add a -lang-fortran option. + * gcc/c-opts.c: Add a lang_fortran flag. + (c_common_init_options): Handling the -lang-fortran option. + (c_common_handle_option): Add a case for Fortran options in + preprocessing. Remove cases for -ffixed-form and + -ffixed-line-length. Add a case for -lang-fortran. + +2005-11-03 David Edelsohn + + * config/rs6000/rs6000.c: Include params.h + (optimization_options): Set max-grow-copy-bb-insns default to 16. + (bdesc_2arg): Delete vpkuhss and vpkuwss. + * config/rs6000/altivec.md (UNSPEC_VPKUHSS): Delete. + (UNSPEC_VPKUWSS): Delete. + (altivec_vpkuhss): Delete. + (altivec_vpkuwss): Delete. + * config/rs6000/rs6000.md (plus_eqsi): Remove optimize_size from + final condition. + (neg_eq0): Remove final condition. + (neg_eq): Remove condition and split-condition. + +2005-11-04 Alan Modra + + * config/rs6000/rs6000.c (output_toc): Make "offset" HOST_WIDE_INT. + Use associated print macros. + +2005-11-03 Joseph S. Myers + + PR c++/17964 + * diagnostic.c (diagnostic_set_info_translated): New function. + (diagnostic_set_info): Use it. Add comment. + * diagnostic.h (diagnostic_set_info_translated): Declare. + +2005-11-03 Eric Botcazou + + * dwarf2asm.c (dw2_force_const_mem): Add new parameter 'public'. + On USE_LINKONCE_INDIRECT platforms, build a DECL_ONE_ONLY indirect + reference only if 'public' is true. + (dw2_output_indirect_constant_1): On USE_LINKONCE_INDIRECT platforms, + emit the .hidden directive only if the indirect reference is public. + (dw2_asm_output_encoded_addr_rtx): Add new parameter 'public'. + Pass it to dw2_force_const_mem. + * dwarf2asm.h (dw2_asm_output_encoded_addr_rtx): New param 'public'. + * dwarf2out.c (output_cfi): Adjust calls to above function. + (output_call_frame_info): Likewise. + * except.c (output_ttype): Pass TREE_PUBLIC of the type_info object + as 'public' argument to dw2_asm_output_encoded_addr_rtx. + +2005-11-03 Zdenek Dvorak + + PR tree-optimization/24483 + * tree-ssa-loop-ivopts.c (aff_combination_add_elt): Move rest + field to elts if possible. + +2005-11-03 Andrew Pinski + + PR middle-end/23155 + * gimplifier.c (gimplify_expr): Create a temporary for lvalue + CONSTRUCTOR. + +2005-11-03 Daniel Berlin + + Fix PR tree-optimization/24351 + + * tree-ssa-structalias.c (struct variable_info): Add + collapsed_into. + (get_varinfo_fc): New function to follow collapsing. + (new_var_info): Set collapsed_to to NULL. + (dump_constraint): Follow collapsing. + (build_constraint_graph): Handle collapsing. + (do_simple_structure_copy): Return false if something bad + happened. + (collapse_rest_of_var): New function. + (do_structure_copy): Collapse if do_simple_structure_copy returns + false. + +2005-11-03 Andrew Pinski + + PR middle-end/24589 + * gimplify.c (gimplify_expr) : Add the + expressions to a statement list instead of gimplifying them. + +2005-11-03 Eric Botcazou + + PR rtl-optimization/23585 + * rtlanal.c (rtx_addr_can_trap_p_1) : Return 0 for an address + that can't trap plus a constant integer, if the mode has zero size. + +2005-11-03 Ulrich Weigand + + PR target/24620 + * config/s390/s390.md ("*insv_reg_imm"): Accept any CONST_INT + as operand 2. + ("*insv_reg_extimm"): Likewise. + +2005-11-03 Joseph S. Myers + + PR c/24329 + * c-pretty-print.c (pp_c_type_specifier): Do not recurse if + c_common_type_for_mode returns an unnamed type. + +2005-11-02 Richard Henderson + + PR target/9350 + PR target/24374 + * dwarf2out.c (dwarf2out_reg_save_reg): New. + (dwarf2out_frame_debug_expr): Return after dwarf_handle_frame_unspec. + * function.c (assign_parms): Use calls.internal_arg_pointer. + (expand_main_function): Remove FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN + code. + * target-def.h (TARGET_INTERNAL_ARG_POINTER): New. + (TARGET_CALLS): Add it. + * target.h (struct gcc_target): Add calls.internal_arg_pointer. + * targhooks.c (default_internal_arg_pointer): New. + * targhooks.h (default_internal_arg_pointer): Declare. + * tree.h (dwarf2out_reg_save_reg): Declare. + * doc/tm.texi (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN): Remove. + * config/i386/i386.c (dbx_register_map): Add return column. + (dbx64_register_map, svr4_dbx_register_map): Likewise. + (TARGET_INTERNAL_ARG_POINTER, ix86_internal_arg_pointer): New. + (TARGET_DWARF_HANDLE_FRAME_UNSPEC, ix86_dwarf_handle_frame_unspec): New. + (ix86_function_ok_for_sibcall): Disable if force_align_arg_pointer. + (ix86_save_reg): Save force_align_arg_pointer. + (ix86_emit_save_regs): Make regno unsigned. + (ix86_emit_save_regs_using_mov): Likewise. + (ix86_expand_prologue): Handle force_align_arg_pointer. + (ix86_expand_epilogue): Likewise. + * config/i386/i386.h: (dbx_register_map): Update. + (dbx64_register_map, svr4_dbx_register_map): Update. + (struct machine_function): Add force_align_arg_pointer. + * config/i386/i386.md (UNSPEC_REG_SAVE, UNSPEC_DEF_CFA): New. + (UNSPEC_TP, UNSPEC_TLS_GD, UNSPEC_TLS_LD_BASE): Renumber. + (TARGET_PUSH_MEMORY peepholes): Disable if RTX_FRAME_RELATED_P. + +2005-11-02 Jan Hubicka + + PR target/23303 + * i386.md: Add peep2 for simplyfing array accesses. + +2005-11-02 Ulrich Weigand + + PR target/24615 + * config/s390/s390-protos.h (s390_decompose_shift_count): Declare. + * config/s390/s390.c (s390_decompose_shift_count): New function. + (s390_extra_constraint_str) ['Y']: Use s390_decompose_shift_count. + (print_shift_count_operand): Use s390_decompose_shift_count. + * config/s390/predicates.md ("setmem_operand", "shift_count_operand"): + Use s390_decompose_shift_count. Do not accept any non-base hard regs. + +2005-11-02 Ulrich Weigand + + PR target/24600 + * loop.c (loop_givs_rescan): Use force_operand to expand + complex GIVs. + +2005-11-02 Andrew Pinski + + PR 22429 + * fold-const.c (build_range_check): Use unsigned when signed + overflow is undefined also. If etype is subtype, make sure that + the subtraction is in the supertype. + +2005-11-02 Richard Henderson + + PR target/24178 + * config/alpha/alpha.c (get_aligned_mem): Honor alignment given + by MEM_ALIGN. + +2005-11-01 Richard Henderson + + PR 21518 + * loop.c (scan_loop): Do not propagate computations to a hard + register destination with SMALL_REGISTER_CLASSES. + +2005-11-01 Joseph S. Myers + + * config/rs6000/rs6000.c (rs6000_rtx_costs): Do not add extra + costs for MULT inside PLUS or MINUS. + +2005-11-01 Bob Wilson + + * config/xtensa/xtensa.h (TRAMPOLINE_TEMPLATE): Add a byte of padding. + (TRAMPOLINE_SIZE): Round up to 60. + * config/xtensa/lib2funcs.S (TRAMPOLINE_SIZE): Likewise. + +2005-10-31 James E. Wilson + + PR debug/24444 + * dwarf2out.c (convert_cfa_to_loc_list): Put inside DWARF2_UNWIND_INFO + ifdef. Put ifdefs around call in gen_subprogram_die. + (compute_frame_pointer_to_cfa_displacement): Likewise. + (gen_subprogram_die): Restore old code for when DWARF2_UNWIND_INFO is + not defined. + + PR rtl-optimization/17356 + * cfgrtl.c (purge_dead_edges): Undo last change. In EDGE_EH code, + add check for CALL_INSN if EDGE_ABRNOMAL_CALL true. + 2005-10-31 Jan Hubicka PR middle-end/24093 diff --git a/gcc/ChangeLog.ipa b/gcc/ChangeLog.ipa index fe75ade14d2..68d04d24b8b 100644 --- a/gcc/ChangeLog.ipa +++ b/gcc/ChangeLog.ipa @@ -1,3 +1,7 @@ +2005-11-24 Jan Hubicka + + * Merge from mainline + 2005-11-03 Jan Hubicka * Merge from mainline (revision 106423). diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 0d713922602..9b731fb7edb 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20051031 +20051123 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index e21b556d4d6..d805beeecdf 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1744,7 +1744,8 @@ stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ toplev.h tree-ssa-structalias.o: tree-ssa-structalias.c tree-ssa-structalias.h \ $(SYSTEM_H) $(CONFIG_H) $(GGC_H) $(TREE_H) $(TREE_FLOW_H) \ - $(TM_H) coretypes.h cgraph.h tree-pass.h $(TIMEVAR_H) + $(TM_H) coretypes.h cgraph.h tree-pass.h $(TIMEVAR_H) \ + gt-tree-ssa-structalias.h tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) output.h $(DIAGNOSTIC_H) \ toplev.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \ @@ -1792,7 +1793,7 @@ tree-ssa-dom.o : tree-ssa-dom.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h $(DIAGNOSTIC_H) \ function.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \ $(BASIC_BLOCK_H) domwalk.h real.h tree-pass.h $(FLAGS_H) langhooks.h \ - tree-ssa-propagate.h $(CFGLOOP_H) + tree-ssa-propagate.h $(CFGLOOP_H) $(PARAMS_H) tree-ssa-uncprop.o : tree-ssa-uncprop.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \ $(DIAGNOSTIC_H) function.h $(TIMEVAR_H) $(TM_H) coretypes.h \ @@ -2324,7 +2325,7 @@ loop-iv.o : loop-iv.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \ output.h intl.h loop-invariant.o : loop-invariant.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h \ - $(TM_H) function.h $(FLAGS_H) $(DF_H) $(OBSTACK_H) output.h + $(TM_H) $(TM_P_H) function.h $(FLAGS_H) $(DF_H) $(OBSTACK_H) output.h cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) output.h \ coretypes.h $(TM_H) cfghooks.h $(OBSTACK_H) @@ -2760,7 +2761,8 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \ $(srcdir)/tree-chrec.h $(srcdir)/tree-vect-generic.c \ $(srcdir)/tree-ssa-operands.h \ $(srcdir)/tree-profile.c $(srcdir)/tree-nested.c \ - $(srcdir)/ipa-reference.c \ + $(srcdir)/ipa-reference.c $(srcdir)/tree-ssa-structalias.h \ + $(srcdir)/tree-ssa-structalias.c \ $(srcdir)/targhooks.c $(out_file) \ @all_gtfiles@ @@ -2782,6 +2784,7 @@ gt-tree-profile.h gt-tree-ssa-address.h \ gt-tree-iterator.h gt-gimplify.h \ gt-tree-phinodes.h gt-tree-nested.h \ gt-tree-ssa-propagate.h \ +gt-tree-ssa-structalias.h \ gt-stringpool.h gt-targhooks.h : s-gtype ; @true define echo_quoted_to_gtyp @@ -3321,6 +3324,7 @@ gcc-vers.texi: $(BASEVER) $(DEVPHASE) then echo "@set DEVELOPMENT"; \ else echo "@clear DEVELOPMENT"; \ fi) > $@T + echo "@set srcdir $(srcdir)" >> $@T mv -f $@T $@ @@ -4245,30 +4249,30 @@ fastcompare fastcompare3 fastcompare4 fastcompare-lean fastcompare3-lean fastcom for dir in . $(SUBDIRS) libgcc; do \ if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \ for file in $$dir/*$(objext); do \ - case $$file in \ - ./cc*-checksum$(objext) | libgcc/* ) \ - tail +16c ./$$file > tmp-foo1 \ - && tail +16c stage$$stage/$$file > tmp-foo2 \ - && ( cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 \ - || echo warning: $$file differs || true ) \ + case "$@" in \ + slowcompare* ) \ + tail +16c ./$$file > tmp-foo1; \ + tail +16c stage$$stage/$$file > tmp-foo2; \ + cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1; \ + cmpret=$$?; \ + ;; \ + fastcompare* ) \ + cmp $$file stage$$stage/$$file 16 16 > /dev/null 2>&1; \ + cmpret=$$?; \ + ;; \ + gnucompare* ) \ + cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \ + cmpret=$$?; \ ;; \ - *) case "$@" in \ - slowcompare* ) \ - tail +16c ./$$file > tmp-foo1; \ - tail +16c stage$$stage/$$file > tmp-foo2 \ - && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 \ - || echo $$file differs >> .bad_compare) || true; \ - ;; \ - fastcompare* ) \ - cmp $$file stage$$stage/$$file 16 16 > /dev/null 2>&1; \ - test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \ - ;; \ - gnucompare* ) \ - cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \ - test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \ - ;; \ - esac ; \ esac ; \ + if test $$cmpret -eq 1; then \ + case $$file in \ + ./cc*-checksum$(objext) | libgcc/* ) \ + echo warning: $$file differs;; \ + *) \ + echo $$file differs >> .bad_compare;; \ + esac ; \ + fi; \ done; \ else true; fi; \ done diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 31f324a142b..9ce822311f9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,1402 @@ +2005-11-23 Laurent GUERBY + + * mlib-prj.adb (Build_Library): Initialize Delete. + +2005-11-21 Joel Sherrill + + * socket.c: Add extern int h_errno for rtems since networking header + files are not available at this point in a tool bootstrap. Newlib + only has basic C library header files. + +2005-11-19 Richard Guenther + Roger Sayle + + PR ada/23717 + * misc.c (internal_error_function): Don't use vsprintf to format + the error message text, instead use pp_format_text and the new + pretty printer APIs. This allows handling of %qs, %w, etc. + +2005-11-18 Laurent GUERBY + + PR ada/24857 + * Makefile.in: Use s-auxdec-empty for RTEMS. + +2005-11-17 Richard Kenner + + PR ada/22333 + * trans.c (gnat_gimplify_expr, case ADDR_EXPR): Always make + a temporary if taking the address of something that is neither + reference, declaration, or constant, since the gimplifier + can't handle that case. + +2005-11-17 Laurent GUERBY + + PR ada/24857 + * s-auxdec-empty.ads, s-auxdec-empty.adb: New files. + +2005-11-16 Richard Guenther + + * Makefile.in: Add EH_MECHANISM=-gcc to s390(x) linux. + +2005-11-16 Joel Sherrill + + PR ada/24855 + * raise-gcc.c: Add missing stdarg.h include. + +2005-11-16 Richard Guenther + + * Make-lang.in (ada/decl.o): Add $(EXPR_H) dependency. + (ada/misc.o): Likewise. + +2005-11-14 Thomas Quinot + + * g-soccon.ads: Minor reformatting. Update comments. + + * gsocket.h: Include in the VxWorks case, in order to + gain visibility on the declaration of struct timeval. + + * g-soccon-freebsd.ads, + g-soccon-darwin.ads, + g-soccon-tru64.ads, + g-soccon-aix.ads, + g-soccon-irix.ads, + g-soccon-hpux.ads, + g-soccon-solaris.ads, + g-soccon-vms.ads, + g-soccon-mingw.ads, + g-soccon-vxworks.ads (SIZEOF_tv_sec, SIZEOF_tv_usec): New constants. + + * g-soccon-hpux-ia64.ads, g-soccon-linux-ppc.ads, + g-soccon-solaris-64.ads, g-soccon-linux-64.ads, + g-soccon-linux-x86.ads: New files. + + * g-socthi-mingw.adb: + (Socket_Error_Message): Remove redundant use of GNAT.Sockets.Constants + + * g-socthi-vxworks.ads, g-socthi-vms.ads, g-socthi-mingw.ads + (time_t, suseconds_t): New types constructed to match the tv_sec + and tv_usec fields of C struct timeval. + (Timeval): Construct structure in terms of the new types. + (Host_Errno): New function (imported from socket.c), returns last hosts + database error. + + * g-socthi-vxworks.adb: Add error handling circuitry. + + * g-socket.ads, g-socket.adb (To_Timeval): Reflect change of type for + components of struct timeval. + (Get_Host_By_Name, Get_Host_By_Address): Fix error reporting circuitry. + (Check_Selector): In error conditions, clear internal socket sets to + avoid a memory leak. + (Get_Socket_Option, Set_Socket_Option): Support for Multicast_If, + Send_Timeout, Receive_Timeout. + + * g-socthi.ads (time_t, suseconds_t): New types constructed to match + the tv_sec and tv_usec fields of C struct timeval. + (Timeval): Construct structure in terms of the new types. + (Host_Errno): New function (imported from socket.c), returns last hosts + database error. + + * socket.c (__gnat_get_h_errno): New function to retrieve h_errno, the + hosts database last error code. + + * gen-soccon.c: Complete value expansion should not be performed on + TARGET, as it has the form of a math expression, and some components + may be platform-defined macros. + For VxWorks, generate the OK and ERROR values. + New constants giving the sizes of the components of C struct timeval. + +2005-11-14 Robert Dewar + Ed Schonberg + + PR ada/18434 + + * types.ads: Include All_Checks in Suppress_Array + + * checks.adb (Check_Needed): Remove kludge for a/=b rewritten as + not(a=b), since we no longer do this rewriting, and hence it is not + needed. + (Elaboration_Checks_Suppressed): Add special casing to + deal with different cases of static and dynamic elaboration checks (all + checks does not count in the first case, but does in the second). + (Expr_Known_Valid): Do not assume that the result of any arbitrary + function call is valid, since this is not the case. + (Ensure_Valid): Do not apply validity check to a real literal + in a universal or fixed context + + * exp_ch4.adb (Expand_N_Op_Ne): Don't expand a/=b to not(a=b) for + elementary types using the operator in standard. It is cleaner not to + modify the programmers intent, especially in the case of floating-point. + (Rewrite_Comparison): Fix handling of /= (this was always wrong, but + it did not matter because we always rewrote a/=b to not(a=b). + (Expand_Allocator_Expression): For an allocator expression whose nominal + subtype is an unconstrained packed type, convert the expression to its + actual constrained subtype. + Implement warning for <= or >= where < or > not possible + Fix to Vax_Float tests (too early in many routines, causing premature + Vax_Float expansions. + + * sem_prag.adb (Analyze_Pragma, case Obsolescent): Allow this pragma + to be used with packages and generic packages as well as with + subprograms. + (Suppress): Set All_Checks, but not Elaboration_Check, for case + of pragma Suppress (All_Checks) + (Analyze_Pragma, case Warnings): Implement first argument allowed to be + a string literal for precise control over warnings. + Avoid raise of pragma in case of unrecognized pragma and just return + instead. + + * sem_prag.ads: Minor reformatting + + * switch-c.adb (Scan_Front_End_Switches): Replace "raise Bad_Switch;" + with call to new procedure Bad_Switch. Call Scan_Pos with new parameter + Switch. Do not handle any exception. + Include -gnatwx as part of -gnatg (warn on redundant parens) + Allow optional = after -gnatm + (Scan_Front_End_Switches): The -gnatp switch sets All_Checks, but no + longer sets Elaboration_Checks. + Code to set warning mode moved to Sem_Warn + so that it can be shared by pragma processing. + + * s-mastop-tru64.adb (Pop_Frame): Remove redundant parentheses in if + statement. + + * s-taprop-solaris.adb: + Change some <= to =, to avoid new warning + + * a-exexda.adb, prj-proc.adb: + Fix obvious typo (Num_Tracebacks compared <= 0 instead of < 0) + Fix obvious typo (Total_Errors_Detected <= 0 should be = 0) + +2005-11-14 Robert Dewar + + * exp_vfpt.adb: Handle /= case + (Expand_Vax_Conversion): Properly recognize Conversion_OK flag + so that we do not get duplicate scaling for fixed point conversions. + + * s-vaflop.ads, s-vaflop.adb: (Ne_F): New function + +2005-11-14 Matthew Gingell + + * system-lynxos-ppc.ads, system-lynxos-x86.ads: + Increase default priority on Lynx from 15 to 17, and meet the Ada + requirement that Default_Priority be ((Priority'First + + Priority'Last) / 2) by increasing the range of Interrupt_Priority. + +2005-11-14 Vincent Celier + + * mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb, + mlib-tgt-hpux.adb, mlib-tgt-hpux.adb, mlib-tgt-linux.adb, + mlib-tgt-solaris.adb, mlib-tgt-vms-alpha.adb, mlib-tgt-vms-alpha.adb, + mlib-tgt-vms-ia64.adb, mlib-tgt-mingw.adb, mlib-tgt-vxworks.adb, + mlib-tgt-darwin.adb, mlib-tgt.adb, mlib-tgt.ads, + mlib-tgt-lynxos.adb (DLL_Prefix): New function + +2005-11-14 Doug Rupp + + * system-vms.ads, system-vms_64.ads: ADA$GNAT: New exported object in + private part. + +2005-11-14 Arnaud Charlet + + * s-traces-default.adb, s-trafor-default.ads, + s-tratas-default.adb: Fix compilation errors. + +2005-11-14 Jose Ruiz + + * s-taprop-posix.adb (Initialize_Lock): Destroy mutex attribute before + raising the exception so the memory used is freed. + +2005-11-14 Arnaud Charlet + + * adaint.h, adaint.c (__gnat_is_cross_compiler): New constant. + (Gnat_Install_Locks, __gnatlib_install_locks): Removed, no longer used. + (convert_address): Update comments and list of platforms using this. + + * s-tasini.adb (Gnat_Install_Locks, __gnatlib_install_locks): Removed, + no longer used. + +2005-11-14 Pascal Obry + Vincent Celier + + * gnatdll.adb (Parse_Command_Line): Remove redundant use of + GNAT.Command_Line. + + * memroot.adb: Remove redundant with/use clause on + System.Storage_Elements. + +2005-11-14 Arnaud Charlet + + * a-except.adb (Zero_Cost_Exceptions): Removed, no longer used. + (builtin_longjmp, Process_Raise_Exceeption): Move setjmp/longjmp + related code to a-exexpr.adb + (Save_Occurrence_And_Private): Move GCC EH related code to + a-exexpr-gcc.adb + (Raise_Current_Excep): Add new variable Id with pragma + volatile, to ensure that the variable lives on stack. + + * a-exexpr-gcc.adb, raise-gcc.c: New file. + + * a-exexpr.adb (builtin_longjmp, Propagate_Exception): Moved here code + from a-except.adb. + Move GCC EH related code to a-exexpr-gcc.adb + + * Makefile.in: Add or update g-soccon LIBGNAT pairs for Linux/PPC and + 64-bit Solaris + Split the Linux version of g-soccon into separate variants for 32 and 64 + bit platforms. + (gnatlib): Use $(AR_FOR_TARGET) and $(RANLIB_FOR_TARGET) + vice $(AR) and $(RANLIB). Remove use of host variable $(RANLIB_FLAGS). + install-gnatlib: Use $(RANLIB_FOR_TARGET) vice $(RANLIB). Remove use + of host variable $(RANLIB_FLAGS). + (alpha64-dec-*vms*): Fix translations for 64 bit compiler. + Code clean up: remove unused/obsolete targets. + (EH_MECHANISM): New variable introduced to differenciate between the + two EH mechanisms statically. + (gnatlib-zcx, gnatlib-sjlj): Force EH_MECHANISM manually. + (LIBGNAT_OBJS): Add raise-gcc.o + (LIBGNAT_TARGET_PAIRS for ppc-vxworks): Use an specialized version of + s-osinte.adb, s-tpopsp.adb, and system.ads for the run time that + supports VxWorks 6 RTPs. + (EXTRA_GNATRTL_NONTASKING_OBJS for ppc-vxworks): Remove the use of + i-vxworks and i-vxwoio from the run time that supports VxWorks 6 RTPs. + + * raise.c: Move all GCC EH-related routines to raise-gcc.c + +2005-11-14 Jose Ruiz + + * s-tassta.adb (Create_Task): Move the code in charge of resetting the + deferral level, when abort is not allowed, to a later stage (the + Task_Wrapper). + (Task_Wrapper): If Abort is not allowed, reset the deferral level since + it will not get changed by the generated code. It was previously done + in Create_Task. + +2005-11-14 Thomas Quinot + Olivier Hainque + Eric Botcazou + + * decl.c: + Factor common code to build a storage type for an unconstrained object + from a fat or thin pointer type and a constrained object type. + (annotate_value): Handle BIT_AND_EXPR. + (annotate_rep): Don't restrict the back annotation of inherited + components to the type_annotate_only case. + (gnat_to_gnu_entity) : Do not invoke create_type_decl if + we are not defining the type. + : Likewise. + (gnat_to_gnu_entity) : Adjust comments and structure + to get advantage of the new maybe_stabilize_reference interface, to + ensure that what we reference is indeed stabilized instead of relying + on assumptions on what the stabilizer does. + (gnat_to_gnu_entity) : If the entity is an incomplete + type imported through a limited_with clause, use its non-limited view. + (Has_Stdcall_Convention): New macro, to centralize the Windows vs others + differentiation. + (gnat_to_gnu_entity): Use Has_Stdcall_Convention instead of a spread mix + of #if sections + explicit comparisons of convention identifiers. + (gnat_to_gnu_entity) : Decrement force_global if necessary + before early-returning for certain types when code generation is + disabled. + (gnat_to_gnu_entity) : Adjust comment attached to the + nullification of gnu_expr we do for objects with address clause and + that we are not defining. + (elaborate_expression_1): Do not create constants when creating + variables needed by the debug info: the dwarf2 writer considers that + CONST_DECLs is used only to represent enumeration constants, and emits + nothing for them. + (gnat_to_gnu_entity) : When turning a non-definition of an + object with an address clause into an indirect reference, drop the + initializing expression. + Include "expr.h". + (STACK_CHECK_BUILTIN): Delete. + (STACK_CHECK_PROBE_INTERVAL): Likewise. + (STACK_CHECK_MAX_FRAME_SIZE): Likewise. + (STACK_CHECK_MAX_VAR_SIZE): Likewise. + (gnat_to_gnu_entity): If gnat_entity is a renaming, do not mark the tree + corresponding to the renamed object as ignored for debugging purposes. + + * trans.c (tree_transform, case N_Attribute_Reference, case Attr_Size & + related): For a prefix that is a dereference of a fat or thin pointer, + if there is an actual subtype provided by the front-end, use that + subtype to build an actual type with bounds template. + (tree_transform, case N_Free_Statement): If an Actual_Designated_Subtype + is provided by the front-end, use that subtype to compute the size of + the deallocated object. + (gnat_to_gnu): When adding a statement into an elaboration procedure, + check for a potential violation of a No_Elaboration_Code restriction. + (maybe_stabilize_reference): New function, like gnat_stabilize_reference + with extra arguments to control whether to recurse through non-values + and to let the caller know if the stabilization has succeeded. + (gnat_stabilize_reference): Now a simple wrapper around + maybe_stabilize, for common uses without restriction on lvalues and + without need to check for the success indication. + (gnat_to_gnu, call_to_gnu): Adjust calls to gnat_stabilize_reference, to + pass false instead of 0 as the FORCE argument which is a bool. + (Identifier_to_gnu): Remove checks ensuring that an renamed object + attached to a renaming pointer has been properly stabilized, as no such + object is attached otherwise. + (call_to_gnu): Invoke create_var_decl to create the temporary when the + function uses the "target pointer" return mechanism. + Reinstate conversion of the actual to the type of the formal + parameter before any other specific treatment based on the passing + mechanism. This turns out to be necessary in order for PLACEHOLDER + substitution to work properly when the latter type is unconstrained. + + * gigi.h (build_unc_object_type_from_ptr): New subprogram, factoring a + common pattern. + (maybe_stabilize_reference): New function, like gnat_stabilize_reference + with extra arguments to control whether to recurse through non-values + and to let the caller know if the stabilization has succeeded. + + * utils2.c (gnat_build_constructor): Only sort the fields for possible + static output of record constructor if all the components are constant. + (gnat_build_constructor): For a record type, sort the list of field + initializers in increasing bit position order. + Factor common code to build a storage type for an unconstrained object + from a fat or thin pointer type and a constrained object type. + (build_unary_op) : Always recurse down conversions between + types variants, and process special cases of VIEW_CONVERT expressions + as their NOP_EXPR counterpart to ensure we get to the + CORRESPONDING_VARs associated with CONST_DECls. + (build_binary_op) : Do not strip VIEW_CONVERT_EXPRs + on the right-hand side. + + * utils.c (build_unc_object_type_from_ptr): New subprogram, factoring + a common pattern. + (convert) : Return the inner operand directly if we + are converting back to its original type. + (convert) : Fallthrough regular conversion code instead of + extracting the object if converting to a type variant. + (create_var_decl): When a variable has an initializer requiring code + generation and we are at the top level, check for a potential violation + of a No_Elaboration_Code restriction. + (create_var_decl): call expand_decl for CONST_DECLs, to set MODE, ALIGN + SIZE and SIZE_UNIT which we need for later back-annotations. + * utils.c: (convert) : Remove obsolete code. + : Do not lift the conversion if the target type + is an unchecked union. + (pushdecl): Set DECL_NO_STATIC_CHAIN on imported nested functions. + (convert) : When the types have the same + main variant, just replace the VIEW_CONVERT_EXPR. + : Revert 2005-03-02 change. + + * repinfo.h, repinfo.ads: Add tcode for BIT_AND_EXPR. + + * repinfo.adb (Print_Expr, Rep_Value): Handle Bit_And_Expressions. + +2005-11-14 Matthew Heaney + + * a-crbtgo.ads, a-crbtgo.adb, a-coorse.ads, a-coorse.adb, a-convec.ads, + a-convec.adb, a-coinve.ads, a-coinve.adb, a-cohama.ads, a-cohama.adb, + a-ciorse.ads, a-ciorse.adb, a-cihama.ads, a-cihama.adb, a-cidlli.ads, + a-cidlli.adb, a-cdlili.ads, a-cdlili.adb, a-coormu.adb, a-ciormu.adb, + a-cihase.adb, a-cihase.ads, a-cohase.adb, a-cohase.ads, a-ciorma.ads, + a-coorma.ads, a-ciormu.ads, a-coormu.ads, a-ciorma.adb, a-coorma.adb: + Compiles against the spec for ordered maps described in sections + A.18.6 of the most recent (August 2005) AI-302 draft. + +2005-11-14 Olivier Hainque + + * cuintp.c (UI_To_gnu): Use a proper type for intermediate computations + to ensure bias adjustments take place when need be and to prevent + occurrences of intermediate overflows. + +2005-11-14 Matthew Gingell + Olivier Hainque + + * tb-gcc.c (trace_callback): Work around problem with _Unwind_GetIP on + ia64 HP-UX. + + * tracebak.c (ia64 configuration): Enable _Unwind_Backtrace driven + tracebacks on ia64 HP-UX and provide explanatory comment. + Enable backtraces on ia64 GNU/Linux. + (x86 configuration): Bump FRAME_LEVEL to 1 to ensure we retrieve a real + base pointer from builtin_frame_address. Adjust BASE_SKIP accordingly. + +2005-11-14 Hristian Kirtchev + Javier Miranda + + * rtsfind.ads, exp_util.adb, exp_util.ads, exp_disp.adb, exp_disp.ads, + exp_ch7.adb, sem_ch9.adb, snames.adb, snames.ads, + exp_ch9.adb, exp_ch9.ads, exp_ch6.adb, exp_ch3.adb, exp_ch3.ads, + einfo.ads, einfo.adb: Complete support for Ada 2005 interfaces. + + * a-tags.ads, a-tags.adb: Major rewrite and additions to implement + properly new Ada 2005 interfaces (AI-345) and add run-time checks (via + assertions). + + * exp_dbug.ads, exp_dbug.adb (Get_Secondary_DT_External_Name): New + subprogram that generates the external name associated with a + secondary dispatch table. + (Get_Secondary_DT_External_Name): New subprogram that generates the + external name associated with a secondary dispatch table. + +2005-11-14 Emmanuel Briot + + * xref_lib.adb (Parse_Identifier_Info): It is possible for an entity + line in the ALI file to include both an instantiation reference, and a + returned value. + +2005-11-14 Vincent Celier + + * clean.adb (Check_Project): Look for Ada code in extending project, + even if Ada is not specified as a language. + Use new function DLL_Prefix for DLL_Name + (Clean_Interface_Copy_Directory): New procedure + (Clean_Library_Directory): New procedure + (Clean_Directory): Remove procedure, no longer used + (Clean_Project): Do not delete any file in an externally built project + + * prj-env.adb (Set_Ada_Paths.Add.Recursive_Add): Add the object + directory of an extending project, even when there are no Ada source + present. + (Ada_Objects_Path.Add): Add Library_ALI_Dir, not Library_Dir to the path + (Set_Ada_Paths.Add.Recursive_Add): Ditto + + * mlib-prj.adb (Check_Library): For all library projects, get the + library file timestamp. + (Build_Library): Copy ALI files in Library_ALI_Dir, not in Library_Dir + (Build_Library): Use new function DLL_Prefix for the DLL_Name + (Clean): Remove procedure, no longer used + (Ultimate_Extension_Of): New function + (Build_Library): When cleaning the library directory, only remove an + existing library file and any ALI file of a source of the project. + When cleaning the interface copy directory, remove any source that + could be a source of the project. + + * prj.ads, prj.adb (Project_Empty): Add values of new components + Library_TS and All_Imported_Projects. + (Project_Empty): Add values for new components of Project_Data: + Library_ALI_Dir and Display_Library_ALI_Dir + + * prj-attr.adb: New project level attribute name Library_ALI_Dir + + * prj-nmsc.adb (Check_Library_Attributes): Take into account new + attribute Library_ALI_Dir. + (Check_Library_Attributes): The library directory cannot be the same as + any source directory of the project tree. + (Check_Stand_Alone_Library): The interface copy directory cannot be + the same as any source directory of the project tree. + + * mlib.adb: Use Prj.Com.Fail, instead of Osint.Fail directly, to delete + all temporary files. + +2005-11-14 Robert Dewar + Ed Schonberg + + * sem_elab.adb: Change name Is_Package to Is_Package_Or_Generic_Package + (Check_Elab_Call): A call within a protected body is never an + elaboration call, and does not require checking. + (Same_Elaboration_Scope): Take into account protected types for both + entities. + (Activate_Elaborate_All_Desirable): New procedure + + * ali.ads, ali.adb: Implement new AD/ED for Elaborate_All/Elaborate + desirable + + * binde.adb: Implement new AD/ED for Elaborate_All/Elaborate desirable + (Elab_Error_Msg): Use -da to include internal unit links, not -de. + + * lib-writ.ads, lib-writ.adb: + Implement new AD/ED for Elaborate_All/Elaborate desirable + Use new Elaborate_All_Desirable flag in N_With_Clause node + + * sinfo.ads, sinfo.adb (Actual_Designated_Subtype): New attribute for + N_Free_Statement nodes. + Define new class N_Subprogram_Instantiation + Add Elaborate_Desirable flag to N_With_Clause node + Add N_Delay_Statement (covering two kinds of delay) + + * debug.adb: Introduce d.f flag for compiler + Add -da switch for binder + +2005-11-14 Ed Schonberg + Cyrille Comar + + * exp_aggr.adb (Build_Record_Aggr_Code): Do not create master entity + for task component, in the case of a limited aggregate. The enclosed + object declaration will create it earlier. Otherwise, in the case of a + nested aggregate, the object may appear in the wrong scope. + (Convert_Aggr_In_Object_Decl): Create a transient scope when needed. + (Gen_Assign): If the component being assigned is an array type and the + expression is itself an aggregate, wrap the assignment in a block to + force finalization actions on the temporary created for each row of the + enclosing object. + (Build_Record_Aggr_Code): Significant rewrite insuring that ctrl + structures are initialized after all discriminants are set so that + they can be accessed even when their offset is dynamic. + +2005-11-14 Robert Dewar + Hristian Kirtchev + + * sem_attr.adb: Implement Machine_Rounding attribute + (Analyze_Access_Attribute): The access attribute may appear within an + aggregate that has been expanded into a loop. + (Check_Task_Prefix): Add semantic check for attribute 'Callable and + 'Terminated whenever the prefix is of a task interface class-wide type. + (Analyze_Attribute): Add semantic check for attribute 'Identity whenever + the prefix is of a task interface class-wide type. + + * s-vaflop-vms-alpha.adb: Valid_D, Valid_F, Valid_G: Make Val constant + to avoid warnings. + + * s-fatgen.ads, s-fatgen.adb (Machine_Rounding): New function + Remove pragma Inline for [Unaligned_]Valid. + Add comments that Valid routines do not work for Vax_Float + + * exp_attr.adb: Implement Machine_Rounding attribute + + * snames.h: Add entry for Machine_Rounding attribute + +2005-11-14 Javier Miranda + Robert Dewar + Hristian Kirtchev + + * exp_attr.adb (Expand_N_Attribute_Reference, cases of Attribute_Size + and related): For a prefix that is an explicit dereference of an + access to unconstrained packed array type, annotate the dereference + with an actual subtype so GIGI can make a correct size computation. + (Expand_N_Attribute_Reference): In case of 'Unchecked_Access and + 'Unrestricted_Access, if the designated type is an interface we + add a type conversion to force the displacement of the pointer + to the secondary dispatch table. + Use Universal_Real instead of Long_Long_Float when we need a high + precision float type for the generated code (prevents gratuitous + Vax_Float stuff when pragma Float_Representation (Vax_Float) used) + (Expand_N_Attribute_Reference): Add support for attribute 'Callable and + 'Terminated for task interface class-wide objects. Generate a call to + the predefined dispatching routine used to retrieve the _task_id from + a task corresponding record. + (Expand_Fpt_Attribute): Major change to properly handle Vax_Float + + * sem_disp.adb: Change name Is_Package to Is_Package_Or_Generic_Package + (Check_Dispatching_Operation): Protect the frontend againts + previously detected errors. + + * Makefile.rtl: Add new instantiations of system.fat_gen + + * s-fatflt.ads, s-fatlfl.ads, s-fatllf.ads, s-fatsfl.ads: + Change name of instantiated package for better consistency + with newly added system.fat_gen instantiations. + + * s-filofl.ads, s-fishfl.ads, s-fvadfl.ads, s-fvaffl.ads, + s-fvagfl.ads: New files. + +2005-11-14 Cyrille Comar + Thomas Quinot + + * exp_ch5.adb (Expand_N_Assignment_Statement, Tagged_Case): For an + assignment of a value of a tagged type that has been rewritten to a + block statement, it is known by construction that no checks are + necessary for the statements within the block: analyze it with checks + suppressed. + (Expand_N_If_Statement): When killing a dead then-branch in an + if-statement that has elsif_parts, recompute the Current_Value node + for any entity whose value is known from the condition of the first + elsif_part. + (Expand_N_Return_Statement): When returning a mutable record, convert + the return value into its actual subtype in order to help the backend + to return the actual size instead of the maximum. This is another + aftermath of not returning mutable records on the sec-stack anymore. + + * sem_ch5.ads, sem_ch5.adb (Analyze_Iteration_Scheme): Minor change to + handling of error msg for suspicious reverse range iteration. + (Check_Possible_Current_Value_Condition): Move declaration from body to + spec, to allow this subprogram to be called from exp_ch5. + +2005-11-14 Thomas Quinot + + * exp_dist.adb (Append_Array_Traversal): Modify constrained case to + generate a set of nested array aggregates instead of a single flat + aggregate for multi-dimensional arrays. + +2005-11-14 Pascal Obry + + * expect.c (__gnat_kill) [Win32]: Fix implementation, the pid returned + by spawnve is a process handle, no need to convert. Add a parameter + close to control wether the process handle must be closed. + (__gnat_waitpid): Fix implementation, the pid returned by spawnve is + a process handle, not need to convert. + (__gnat_kill) [*]: Add dummy parameter close to match the Win32 spec. + + * g-expect.adb: (Kill): Document the new close parameter. + (Close): Do not release the process handle in the kill there as + waitpid() is using it. + (Send_Signal): Release the process handle. + +2005-11-14 Robert Dewar + + * exp_fixd.adb: Use Universal_Real instead of Long_Long_Float when we + need a high precision float type for the generated code (prevents + gratuitous Vax_Float stuff when pragma Float_Representation (Vax_Float) + used). + + * exp_imgv.adb: Use Universal_Real instead of Long_Long_Float when we + need a high precision float type for the generated code (prevents + gratuitous Vax_Float stuff when pragma Float_Representation (Vax_Float) + used). + (Expand_Width_Attribute): In configurable run-time, the attribute is not + allowed on non-static enumeration subtypes. Force a load error to emit + the correct diagnostic. + +2005-11-14 Thomas Quinot + Robert Dewar + Ed Schonberg + + * exp_intr.adb (Expand_Unc_Deallocation): If GIGI needs an actual + subtype to compute the size of the designated object at run-time, + create such a subtype and store it in the Actual_Designated_Subtype + attribute of the N_Free_Statement. + Generate itype for classwide designated object in both cases of + user-specified storage pool: specific and class-wide, not only in the + specific case. + Raise CE when trying to set a not null access type object to null. + (Expand_Dispatching_Constructor_Call): Retrieve subprogram actual with + an explicit loop, because freeze nodes make its position variable. + + * sem_intr.adb (Check_Intrinsic_Call): Given warning for freeing not + null object. + +2005-11-14 Javier Miranda + + * exp_strm.adb (Build_Stream_Attr_Profile, Build_Stream_Function, + Build_Stream_Procedure): Add the null-excluding attribute to the first + formal. + This has no semantic meaning under Ada95 mode but it is a + requirement under Ada05 mode. + + * par-ch3.adb (P_Access_Definition): Addition of warning message if + the null exclusion is used under Ada95 mode + (P_Null_Exclusion): The qualifier has no semantic meaning in Ada 95. + (P_Access_Definition): Remove assertion that forbids the use of + the null-exclusion feature in Ada95. + +2005-11-14 Robert Dewar + + * impunit.adb: Exclude container helper units not intended for use by + users. + +2005-11-14 Ed Schonberg + + * freeze.adb (Freeze_Entity): For an access formal that is an access + to subprogram, freeze the anonymous subprogram type at the same time, + to prevent later freezing in the wrong scope, such as the enclosing + subprogram body. + (Freeze_Entity): Freeze the equivalent_type of an access_to_protected_ + subprogram whenever available. + +2005-11-14 Arnaud Charlet + + PR ada/23732 + * gnatvsn.ads (Library_Version): Bump to 4.1 + +2005-11-14 Robert Dewar + + * g-debpoo.adb (Set_Valid): Use Integer_Address instead of + Storage_Offset to avoid wrap around causing invalid results. + +2005-11-14 Pascal Obry + + * gnatbind.adb (Is_Cross_Compiler): New function returning True for + cross-compiler. + (Scan_Bind_Arg): Fail with an error message if -M option is used + on a native compiler. + +2005-11-14 Robert Dewar + Vincent Celier + + * gprep.adb: Implement -C switch to scan comments + + * scng.adb: Scan comment symbol separately if Replace_In_Comments set + + * scans.ads: Comment updates (including new use of Tok_Comment in + preprocessing) + + * opt.ads: Add documentation for flags that are used by gprmake, + currently and in the next version of gprmake. + (Verbosity_Level): New variable + Add Replace_In_Comments switch + + * vms_data.ads: Add VMS equivalent for new gnatmake switches -vl, -vm + and -vm. + Add /REPLACE_IN_COMMENTS for gnatprep -C switch + +2005-11-14 Arnaud Charlet + + * g-regpat.adb (Fail): raise Expression_Error including the diagnostic + message, friendlier. + +2005-11-14 Robert Dewar + + * g-spitbo.adb: (Hash): Rotate by 3 instead of 1 + +2005-11-14 Doug Rupp + + * init.c [VMS]: Don't install __gnat_error_handler if DBG$TDBG defined. + +2005-11-14 Robert Dewar + + * interfac.ads: Change declarations of IEEE float types so that we no + longer need a separate version of this package for VMS. + +2005-11-14 Ed Schonberg + + * lib-xref.adb (Generate_Definition, Generate_Reference): Treat the + internal entity created for the declaration of a child subprogram body + with no spec as coming from source, to generate proper cross-reference + information. + +2005-11-14 Vincent Celier + + * make.adb (Compile_Sources): Change verbose message to minimum + verbosity level High for "is in an Ada library", "is a read-only + library" and "is an internal library", + (Create_Binder_Mapping_File): Path name of ALI file for library project + must include the library directory, not the object directory. + (Scan_Make_Arg): Make sure that Switch.M.Scan_Make_Switches is called + for new switches -vl, -vm and -vh. + (Verbose_Msg): Add new defaulted parameter Minimum_Verbosity + (Check): Use minimum verbosity Medium for some Verbose_Msg calls + (Compile_Sources): Do not attempt to compile if an ALI file is missing + in a project that is externally built. + (Compute_All_Imported_Projects): New procedure + (Gnatmake): Check if importing libraries should be regenerated because + at least an imported library is more recent. + (Initialize): For each project compute the list of the projects it + imports directly or indirectly. + (Add_Library_Search_Dir): New procedure, used in place of + Add_Lib_Search_Dir in procedure Scan_Make_Arg so that absolute paths are + put in the search paths. + (Add_Source_Search_Dir): New procedure, used in place of + Add_Src_Search_Dir in procedure Scan_Make_Arg so that absolute paths are + put in the search paths. + (Mark_Directory): Resolve the absolute path the directory before marking + it. + + * switch-m.adb (Scan_Make_Switches): Replace "raise Bad_Switch;" with + call to new procedure Bad_Switch. Call Scan_Pos with new parameter + Switch. Do not handle any exception. + (Scan_Make_Switches): Increment Ptr for new switches -vl, -vm and -vh + so that the switch is recognized as valid. + (Scan_Make_Switches): Implement new switches -vl, -vm and -vh. + +2005-11-14 GNAT Script + + * Make-lang.in: Makefile automatically updated + +2005-11-14 Pascal Obry + + * mdll.adb (Build_Reloc_DLL): Fix parameter handling when a map file is + used. + (Ada_Build_Reloc_DLL): Fix parameter handling when a map file is used. + In both cases the last argument was dropped. + +2005-11-14 Eric Botcazou + + * namet.h: (Column_Numbe): New type. + (Get_Column_Number): Define to sinput__get_column_number. + (Instantiation): Define to sinput__instantiation. + (Get_Column_Number): Declare. + (Instantiation): Likewise. + +2005-11-14 Robert Dewar + + * par-ch10.adb (P_Compilation_Unit): Add defenses against junk unit + syntax, which could cause compiler hangs. + +2005-11-14 Vincent Celier + + * prj-ext.adb: Take into account new environment variable + GPR_PROJECT_PATH. Warn if both GPR_PROJECT_PATH and ADA_PROJECT_PATH + are defined. + (Prj.Ext elaboration): For each directory in the ADA_PROJECT_PATH, + normalize its path name, making it absolute and resolving symbolic + links, and replace the original if resolved path is different. + +2005-11-14 Vincent Celier + + * prj-part.adb (Create_Virtual_Extending_Project): Put virtual project + into Prj.Tree.Tree_Private_Part.Projects_Htable for GPS. + +2005-11-14 Emmanuel Briot + + * prj-pp.adb (Print): Do not output the with statement if the + associated name is empty, which happens for virtual extending projects. + (Print): Preserve the "extends all" attribute when printing the project. + + * prj-tree.ads (String_Value_Of): Add comment about returned value for + a virtual extending project. + +2005-11-14 Ed Schonberg + + * sem_aggr.adb (Resolve_Aggregate): An others choice is legal on the + rhs of an assignment even if the type is unconstrained, when the + context is non-expanding. + In an inlined body, if the context type is private, + resolve with its full view, which must be a composite type. + +2005-11-14 Robert Dewar + Ed Schonberg + + * sem_ch10.adb: Change name Is_Package to Is_Package_Or_Generic_Package + Do not give obsolescent warning on with of subprogram (since we + diagnose calls) + (Analyze_With_Clause): Add test for obsolescent package + (Install_Context_Clauses): If the unit is the body of a child unit, do + not install twice the private declarations of the parents, to prevent + circular lists of Use_Clauses in a parent. + (Implicit_With_On_Parent): Do add duplicate with_clause on parent when + compiling body of child unit. + Use new class N_Subprogram_Instantiation + (Expand_With_Clause): If this is a private with_clause for a child unit, + appearing in the context of a package declaration, then the implicit + with_clauses generated for parent units are private as well. + (License_Check): Do not generate message if with'ed unit is internal + +2005-11-14 Gary Dismukes + Ed Schonberg + Thomas Quinot + + * sem_ch12.ads, sem_ch12.adb (Map_Entities): Exclude entities whose + names are internal, because they will not have a corresponding partner + in the actual package. + (Analyze_Formal_Package): Move the setting of the formal package spec's + Generic_Parent field so that it occurs prior to analyzing the package, + to allow proper operation of Install_Parent_Private_Declarations. + (Analyze_Package_Instantiation): Set the instantiated package entity's + Package_Instantiation field. + (Get_Package_Instantiation_Node): Move declaration to package spec. + Retrieve the N_Package_Instantiation node when the Package_Instantiation + field is present. + (Check_Generic_Child_Unit): Within an inlined call, the only possible + instantiation is Unchecked_Conversion, for which no parents are needed. + (Inline_Instance_Body): Deinstall and record the use_clauses for all + parent scopes of a scope being removed prior to inlining an instance + body. + (Analyze_Package_Instantiation): Do not perform front-end inlining when + the current context is itself an instance within a non-instance child + unit, to prevent scope stack errors. + (Save_References): If the node is an aggregate that is an actual in a + call, rewrite as a qualified expression to preserve some type + information, to resolve possible ambiguities in the instance. + (Instance_Parent_Unit): New global variable to record the ultimate + parent unit associated with a generic child unit instance (associated + with the existing Parent_Unit_Visible flag). + (type Instance_Env): New component Instance_Parent_Unit for stacking + parents recorded in the global Instance_Parent_Unit. + (Init_Env): Save value of Instance_Parent_Unit in the Instance_Env + stack. + (Install_Spec): Save the parent unit entity in Instance_Parent_Unit when + it's not a top-level unit, and only do this if Instance_Parent_Unit is + not already set. Replace test of Is_Child_Unit with test of parent's + scope against package Standard. Add comments and a ??? comment. + (Remove_Parent): Revise condition for resetting Is_Immediately_Visible + on a child instance parent to test that the parent equals + Instance_Parent rather than simply checking that the unit is not a + child unit. + (Restore_Env): Restore value of Instance_Parent_Unit from Instance_Env. + (Validate_Derived_Interface_Type_Instance): Verify that all ancestors of + a formal interface are ancestors of the corresponding actual. + (Validate_Formal_Interface_Type): Additional legality checks. + (Analyze_Formal_Derived_Interface_Type): New procedure to handle formal + interface types with ancestors. + (Analyze_Formal_Package): If formal is a renaming, use renamed entity + to diagnose attempts to use generic within its own declaration. + +2005-11-14 Ed Schonberg + Javier Miranda + + * sem_ch3.ads, sem_ch3.adb (Build_Discriminal): Add link to original + discriminant. + (Build_Private_Derived_Type): The entity of the created full view of the + derived type does not come from source. If after installing the private + declarations of the parent scope the parent is still private, use its + full view to construct the full declaration of the derived type. + (Build_Derived_Record_Type): Relax the condition that controls the + execution of the check that verifies that the partial view and + the full view agree in the set of implemented interfaces. In + addition, this test now only takes into account the progenitors. + (Derive_Interface_Subprograms): No need to derive subprograms + of ancestors that are interfaces. + (Derive_Subprograms): Remove formal No_Predefined_Prims and the + associated code. + Change name Is_Package to Is_Package_Or_Generic_Package + (Complete_Subprograms_Derivation): Handle the case in which the full + view is a transitive derivation of the ancestor of the partial view. + (Process_Full_View): Rename local subprogram Find_Interface_In_ + Descendant to Find_Ancestor_Interface to leave the code more clear. + Remove wrong code that avoids the generation of an error message + when the immediate ancestor of the partial view is an interface. + In addition some minor reorganization of the code has been done to + leave it more clear. + (Analyze_Type_Declaration): If type has previous incomplete tagged + partial view, inherit properly its primitive operations. + (Collect_Interfaces): Make public, for analysis of formal + interfaces. + (Analyze_Interface_Declaration): New procedure for use for regular and + formal interface declarations. + (Build_Derived_Record_Type): Add support for private types to the code + that checks if a tagged type implements abstract interfaces. + (Check_Aliased_Component_Type): The test applies in the spec of an + instance as well. + (Access_Type_Declaration): Clean up declaration of malformed type + declared as an access to its own classwide type, to prevent cascaded + crash. + (Collect_Interfaces): For private extensions and for derived task types + and derived protected types, the parent may be an interface that must + be included in the interface list. + (Access_Definition): If the designated type is an interface that may + contain tasks, create Master_Id for it before analyzing the expression + of the declaration, which may be an allocator. + (Record_Type_Declaration): Set properly the interface kind, for use + in allocators, the creation of master id's for task interfaces, etc. + +2005-11-14 Javier Miranda + Ed Schonberg + + * sem_ch6.adb (Check_Conformance): The null-exclusion feature can be + omitted in case of stream attribute subprograms. + (Check_Inline_Pragma): Handle Inline and Inline_Always pragmas that + appear immediately after a subprogram body, when there is no previous + subprogram declaration. + Change name Is_Package to Is_Package_Or_Generic_Package + (Process_Formals): A non null qualifier on a non null named access + type is not an error, and is a warning only if Redundant_Constructs + are flagged. + +2005-11-14 Gary Dismukes + Ed Schonberg + + * sem_ch7.adb (Install_Parent_Private_Declarations): New procedure + nested within Analyze_Package_Specification to install the private + declarations and use clauses within each of the parent units of a + package instance of a generic child package. + (Analyze_Package_Specification): When entering a private part of a + package associated with a generic instance or formal package, the + private declarations of the parent must be installed (by calling new + procedure Install_Parent_Private_Declarations). + Change name Is_Package to Is_Package_Or_Generic_Package + (Preserve_Full_Attributes): For a synchronized type, the corresponding + record is absent in a generic context, which does not indicate a + compiler error. + +2005-11-14 Ed Schonberg + + * sem_ch8.adb (Analyze_Subprogram_Renaming): In a generic context, do + not try to rewrite a renamed stream attribute, because the operations + on the type may not have been generated. + Handle properly a renaming_as_body generated for a stream operation + whose default is abstract because the object type itself is abstract. + (Find_Type): If the type is incomplete and appears as the prefix of a + 'Class reference, it is tagged, and its list of primitive operations + must be initialized properly. + (Chain_Use_Clauses): When chaining the use clauses that appear in the + private declaration of a parent unit, prior to compiling the private + part of a child unit, find on the scope stack the proper parent entity + on which to link the use clause. + (Note_Redundant_Use): Emit a warning when a redundant use clause is + detected. + (Analyze_Object_Renaming): An attribute reference is not a legal object + if it is not a function call. + +2005-11-14 Robert Dewar + Ed Schonberg + + * sem_eval.adb: Implement d.f flag + (Subtype_Statically_Match): A generic actual type has unknown + discriminants when the corresponding actual has a similar partial view. + If the routine is called to validate the signature of an inherited + operation in a child instance, the generic actual matches the full view, + +2005-11-14 Hristian Kirtchev + Ed Schonberg + Robert Dewar + Thomas Quinot + + * sem_res.adb (Resolve_Call): Provide a better error message whenever + a procedure call is used as a select statement trigger and is not an + entry renaming or a primitive of a limited interface. + (Valid_Conversion): If the operand has a single interpretation do not + remove address operations. + (Check_Infinite_Recursion): Skip freeze nodes when looking for a raise + statement to inhibit warning. + (Resolve_Unary_Op): Do not produce a warning when + processing an expression of the form -(A mod B) + Use Universal_Real instead of Long_Long_Float when we need a high + precision float type for the generated code (prevents gratuitous + Vax_Float stuff when pragma Float_Representation (Vax_Float) used) + (Resolve_Concatenation_Arg): Improve error message when argument is an + ambiguous call to a function that returns an array. + (Make_Call_Into_Operator, Operand_Type_In_Scope): Do not check that + there is an implicit operator in the given scope if we are within an + instance: legality check has been performed on the generic. + (Resolve_Unary_Op): Apply warnings checks on argument of Abs operator + after resolving operand, to avoid false warnings on overloaded calls. + +2005-11-14 Ed Schonberg + Javier Miranda + + PR ada/15604 + + * sem_type.adb (Covers): In an inlined body, a composite type matches + a private type whose full view is a composite type. + (Interface_Present_In_Ancestor): Protect the frontend against + previously detected errors to ensure that its compilation + with assertions enabled gives the same output that its + compilation without assertions. + (Interface_Present_In_Ancestor): Add support for private types. + Change name In_Actual to In_Generic_Actual (clean up) + (Disambiguate): New predicate In_Actual, to recognize expressions that + appear in the renaming declaration generated for generic actuals, and + which must be resolved in the outer context. + +2005-11-14 Robert Dewar + Thomas Quinot + Hristian Kirtchev + Ed Schonberg + + * sem_util.ads, sem_util.adb: Change name Is_Package to + Is_Package_Or_Generic_Package. + (Check_Obsolescent): New procedure. + (Set_Is_Public): Remove obsolete junk test. + (Set_Public_Status): Do not set Is_Public on an object whose declaration + occurs within a handled_sequence_of_statemets. + (Is_Controlling_Limited_Procedure): Factor some of the logic, account + for a parameterless procedure. + (Enter_Name): Recognize renaming declarations created for private + component of a protected type within protected operations, so that + the source name of the component can be used in the debugger. + +2005-11-14 Ed Schonberg + Robert Dewar + + * sem_warn.ads, sem_warn.adb (Publicly_Referenceable): Generic formals + of a generic subprogram are not visible outside the body. + (Set_Warning_Switch): New procedure (code to set warning mode moved + here from Switch.C so that it can be shared by pragma processing. + (Check_References): Special case warning for non-modified non-imported + volatile objects. + * par-prag.adb: Modify processing of pragma Warnings to accomodate new + form with a string literal argument + +2005-11-14 Javier Miranda + + * s-finroo.ads, s-finroo.adb (Read): Addition of "not null" to the + anonymous access. + (Write): Addition of "not null" to the anonymous access. + (Read): Addition of "not null" to the anonymous access. + (Write): Addition of "not null" to the anonymous access. + + * s-strxdr.adb, s-stratt.ads, s-stratt.adb (I_AD, I_AS, I_B, I_C, I_F, + I_I, I_LF, I_LI, I_LLF, I_LLI, I_LLU, I_LU, I_SF, I_SI, I_SSI, I_SSU, + I_SU, I_U, I_WC): Addition of "not null" to the anonymous access. + (W_AD, W_AS, W_B, W_C, W_F, W_I, W_LF, W_LI, W_LLF, W_LLI, W_LLU, + W_LU, W_SF, W_SI, W_SSI, W_SSU, W_SU, W_U, W_WC): Addition of + "not null" to the anonymous access. + +2005-11-14 Robert Dewar + + * s-stoele.adb: Fix code for Address mod Storage_Offset for negative + offset values + +2005-11-14 Vincent Celier + + * switch.adb (Bad_Switch): New procedure + (Scan_Nat, Scan_Pos): Directly call Osint.Fail with the appropriate + message when in error. + + * switch.ads (Bad_Switch, Bad_Switch_Value, Missing_Switch_Value, + Too_Many_Output_Files): Remove declarations, no longer used. + (Scan_Nat): New parameter Switch + (Scan_Pos): Ditto + (Bad_Switch): New procedure + + * switch-b.adb (Scan_Binder_Switches): Replace "raise Bad_Switch;" + with call to new procedure Bad_Switch. Call Scan_Pos and Scan_Natwith + new parameter Switch. Replace "raise Too_Many_Output_Files;" with call + to Osint.Fail. Do not handle any exception. + +2005-11-14 Vincent Celier + + * tempdir.adb (Tempdir): Do not use environment variable TMPDIR if it + designates a non existent directory. + +2005-11-14 Robert Dewar + + * xgnatugn.adb: Replace invalid membership test by 'Valid + +2005-11-14 Vincent Celier + + * makegpr.adb (Gprmake): Do not attempt to build the global archive if + there is no object directory. + +2005-11-14 Robert Dewar + + * usage.adb: Minor adjustment to output format, use nn instead of nnn + (so that -gnateInnn does not run into next column) + +2005-11-14 Ed Falis + + * s-bitops.adb (Bits_Array): corrected comment: "unconstrained" => + "constrained" + +2005-11-14 Cyrille Comar + + * s-chepoo.ads: Add comments on Dereference. + Remove unnecessary inherited abstract primitives. + Cosmetic cleanup. + +2005-11-14 Robert Dewar + + * sem_cat.ads (Validate_Access_Type_Declaration): Remove declaration + node parameter, not needed, since it is available as Declaration_Node. + +2005-11-14 Geert Bosch + + * s-exnllf.adb (Exn_LLF): Fix comment to be more precise and + grammatically correct. + +2005-11-14 Vincent Celier + + * s-fileio.ads: Correct spelling error in comment + +2005-11-14 Cyrille Comar + Robert Dewar + Vincent Celier + Ben Brosgol + Jose Ruiz + Pascal Obry + + * gnat_ugn.texi: + Document that -fstack-check is needed for strict compliance with the + Ada 95 Reference Manual. + Correct reference to VAX systems to meet HP guidelines + Add documentation for new gnatmake switches -vl, -vm and -vh + Replace DEC Ada by HP Ada + Replace DIGITAL by HP + Remove empty section on tools in compatibility section + Clarify the Windows convention semantics. + Document the Win32 calling convention. + The Stdcall, Win32 and DLL convention are synonyms. + Add a note in -gnatR description about zero size record components + Note on new >= and <= warnings for -gnatwc + Document that equal sign after -gnatm is optional. + Note that strip is working fine on DLL built with a Library + Project. The restriction apply only to DLL built with gnatdll. + Update section about the way to debug a DLL. + Update information about the DLL convention. + Document -C switch for gnatprep + Document new attribute Library_ALI_Dir + Update elaboration doc to include implicit Elaborate pragmas now + generated for subprogram instantiations. + Document limitation on executable names that include spaces for --GCC, + --GNATBIND, and --GNATLINK switches. + Document that -w causes -gnatws to be added at start of gcc switches + + * gnat_rm.texi: Document that -mieee is needed for generating infinite + and NaN values in case of overflow on machines that are not fully + compliant with the IEEE floating-point standard. + Create a section describing the set of compiler options needed for + strict compliance with the Ada 95 Reference Manual. + Add documentation for pragma Obsolescent applied to a package + Clarify potential issues of mixed language programs related to the + I/O buffering enabling in the elaboration of the GNAT runtime. + Add extra documentation for pragma Restrictions (No_Elaboration_Code) + This documentation only patch adds extra documentsion for pragma + Restrictions (No_Elaboration_Code), explaining why it is not possible + to document this restriction in terms of allowed source constructs. + Document string literal form of pragma Warnings + Document new attribute Library_ALI_Dir + Add documentation on stable attributes in project files that was missing + + * gnat-style.texi: Indicate that paragraphs within a single comment + should be separated by empty comment lines + + * ug_words: Added replacements for -gnat95 and -gnat05 (/95 and + /05 respectively) + + * bindusg.adb: Minor cleanup, put -m before -M for consistency + +2005-11-14 Robert Dewar + + * a-secain.adb, a-slcain.adb, a-shcain.adb, a-chtgke.ads, a-chtgke.adb, + a-stwiha.adb, a-strhas.adb, a-chzla1.ads, a-chzla9.ads, a-stzbou.adb, + a-stzbou.ads, a-stzfix.adb, a-stzhas.adb, a-stzmap.adb, a-stzmap.ads, + a-stzsea.adb, a-stzsea.ads, a-stzsup.adb, a-stzsup.ads, a-stzunb.adb, + a-stzunb.ads, a-szuzha.adb, a-szuzha.ads, a-szuzti.adb, a-szuzti.ads, + a-ztcoau.adb, a-ztcoau.ads, a-ztcoio.adb, a-ztcstr.adb, a-ztcstr.ads, + a-ztdeau.adb, a-ztdeau.ads, a-ztdeio.adb, a-ztdeio.ads, a-ztedit.adb, + a-ztedit.ads, a-ztenau.ads, a-ztenio.adb, a-ztenio.ads, a-ztexio.adb, + a-ztexio.ads, a-ztfiio.adb, a-ztfiio.ads, a-ztflau.adb, a-ztflau.ads, + a-ztflio.adb, a-ztflio.ads, a-ztgeau.adb, a-ztgeau.ads, a-ztinau.adb, + a-ztinau.ads, a-ztinio.adb, a-ztmoau.ads, a-ztmoio.adb, a-ztmoio.ads, + a-zttest.adb, g-enblsp-vms-alpha.adb, g-enblsp-vms-alpha.adb, + g-enblsp-vms-ia64.adb, g-enblsp-vms-ia64.adb, system-linux-hppa.ads, + a-chacon.adb, a-chacon.ads, a-wichun.adb, a-wichun.ads, a-zchuni.adb, + a-zchuni.ads, g-trasym-vms-alpha.adb, g-trasym-vms-ia64.adb, + system-hpux-ia64.ads, g-soccon-unixware.ads, g-soliop-unixware.ads, + g-soccon-interix.ads, g-soliop-solaris.ads, g-eacodu-vms.adb, + g-expect-vms.adb, g-socthi-vms.adb, g-soliop-mingw.ads, + a-intnam-unixware.ads, a-intnam-lynxos.ads, a-intnam-tru64.ads, + a-intnam-aix.ads, a-intnam-linux.ads, a-intnam-linux.ads, + a-intnam-dummy.ads, a-numaux-libc-x86.ads, a-intnam-interix.ads, + a-intnam-solaris.ads, a-calend-vms.adb, a-calend-vms.ads, + a-intnam-vms.ads, a-calend-mingw.adb, a-intnam-mingw.ads, + a-intnam-vxworks.ads, a-numaux-vxworks.ads, system-unixware.ads, + system-linux-ia64.ads, a-intnam-freebsd.ads, system-freebsd-x86.ads, + system-lynxos-ppc.ads, system-linux-x86_64.ads, a-stunha.adb, + a-cgaaso.ads, a-cgaaso.adb, a-chtgop.adb, a-cgcaso.adb, a-cgarso.adb, + a-cohata.ads, a-crbtgk.adb, a-crbltr.ads, a-coprnu.adb, a-rbtgso.adb, + a-intnam-darwin.ads, system-darwin-ppc.ads, gprmake.adb, makegpr.ads, + system-tru64.ads, system-aix.ads, system-solaris-x86.ads, + system-irix-o32.ads, s-interr-sigaction.adb, system-irix-n32.ads, + s-parame-mingw.adb, system-hpux.ads, s-traceb-hpux.adb, + system-linux-x86.ads, s-inmaop-dummy.adb, system-os2.ads, + system-interix.ads, system-solaris-sparc.ads, + system-solaris-sparcv9.ads, s-inmaop-vms.adb, + s-mastop-vms.adb, expander.adb, expander.ads, s-gloloc-mingw.adb, + system-mingw.ads, system-vms-zcx.ads, s-osinte-fsu.adb, + s-traceb-mastop.adb, a-exextr.adb, a-exstat.adb, a-filico.ads, + a-finali.ads, a-interr.ads, a-intsig.adb, a-intsig.ads, + a-except.ads, a-numaux-x86.ads, a-astaco.adb, a-calend.adb, + a-calend.ads, a-chahan.adb, a-chahan.ads, a-chlat9.ads, + a-colien.adb, a-colien.ads, a-colire.adb, a-colire.ads, + a-comlin.adb, a-comlin.ads, a-cwila1.ads, a-cwila9.ads, + a-elchha.adb, a-decima.adb, a-decima.ads, a-diocst.ads, + a-direio.adb, a-direio.ads, a-excach.adb, a-excach.adb, + a-exctra.ads, ali-util.adb, a-ngcefu.adb, a-ngcoty.adb, + a-ngcoty.ads, a-nudira.adb, a-nudira.ads, a-nuflra.adb, + a-numaux.ads, a-reatim.ads, a-sequio.adb, a-sequio.ads, + a-siocst.ads, a-ssicst.ads, a-stmaco.ads, a-storio.adb, + a-strbou.adb, a-strbou.ads, a-stream.ads, a-strfix.adb, + a-strmap.adb, a-strmap.ads, a-strsea.adb, a-strsea.ads, + a-strsup.adb, a-strsup.ads, a-strunb.adb, a-strunb.ads, + a-stwibo.adb, a-stwibo.ads, a-stwifi.adb, a-stwima.adb, + a-stwima.ads, a-stwise.adb, a-stwise.ads, a-stwisu.adb, + a-stwisu.ads, a-stwiun.adb, a-stwiun.ads, a-suteio.adb, + a-suteio.ads, a-swmwco.ads, a-swuwti.adb, a-swuwti.ads, + a-sytaco.adb, a-sytaco.ads, a-tasatt.adb, a-taside.adb, + a-taside.ads, a-teioed.adb, a-textio.adb, a-textio.ads, + a-ticoau.adb, a-ticoau.ads, a-ticoio.adb, a-tideau.adb, + a-tideio.adb, a-tienau.adb, a-tienio.adb, a-tifiio.adb, + a-tiflio.adb, a-tigeau.adb, a-tigeau.ads, a-tiinau.adb, + a-tiinio.adb, a-timoau.adb, a-timoio.adb, a-timoio.ads, + a-tiocst.ads, a-titest.adb, atree.adb, a-witeio.adb, + a-witeio.ads, a-wtcoau.adb, a-wtcoau.ads, a-wtcoio.adb, + a-wtcstr.ads, a-wtdeau.adb, a-wtdeio.adb, a-wtedit.adb, + a-wtedit.ads, a-wtenau.adb, a-wtenio.adb, a-wtfiio.adb, + a-wtflio.adb, a-wtgeau.adb, a-wtinau.adb, a-wtinio.adb, + a-wtmoau.adb, a-wtmoio.adb, a-wttest.adb, back_end.adb, + bindgen.adb, butil.adb, butil.ads, checks.ads, cio.c, comperr.adb, + csets.ads, cstand.adb, debug.ads, elists.ads, errno.c, errout.adb, + errout.ads, erroutc.adb, erroutc.ads, errutil.adb, errutil.ads, + errutil.ads, err_vars.ads, eval_fat.adb, exp_ch11.adb, exp_ch11.ads, + exp_ch2.adb, exp_ch7.ads, exp_imgv.ads, exp_pakd.adb, exp_prag.adb, + exp_prag.ads, exp_tss.adb, exp_tss.ads, exp_vfpt.ads, fe.h, fmap.adb, + freeze.ads, frontend.adb, frontend.ads, g-arrspl.adb, g-arrspl.ads, + g-awk.adb, g-awk.ads, g-boumai.ads, g-calend.adb, g-calend.ads, + g-catiio.adb, g-comlin.adb, g-comlin.ads, g-comlin.ads, g-comlin.ads, + g-comver.adb, g-crc32.adb, g-crc32.ads, g-ctrl_c.ads, g-curexc.ads, + g-debpoo.ads, g-debuti.adb, g-diopit.adb, g-diopit.ads, g-dirope.adb, + g-dirope.ads, g-dyntab.adb, g-dyntab.ads, g-excact.adb, g-excact.ads, + g-except.ads, g-exctra.adb, g-exctra.ads, g-expect.ads, g-flocon.ads, + g-hesorg.ads, g-io.adb, g-locfil.ads, g-md5.adb, g-md5.ads, g-md5.ads, + g-moreex.adb, g-signal.ads, g-signal.adb, gnatbind.ads, gnatchop.adb, + gnatcmd.adb, gnatfind.adb, gnatlbr.adb, gnatmake.ads, gnatmem.adb, + gnatprep.adb, gnatprep.ads, gnatsym.adb, gnatxref.adb, g-os_lib.adb, + g-os_lib.ads, g-pehage.adb, g-pehage.ads, gprep.ads, g-regexp.adb, + g-regexp.ads, g-regist.adb, g-regist.ads, g-regpat.ads, g-semaph.adb, + g-socthi.adb, g-soliop.ads, g-spipat.adb, g-spipat.ads, g-sptabo.ads, + g-sptain.ads, g-sptavs.ads, g-string.ads, g-tasloc.adb, g-tasloc.ads, + g-trasym.adb, g-trasym.ads, i-fortra.adb, i-fortra.ads, inline.adb, + layout.adb, live.adb, make.ads, makeutl.ads, makeutl.adb, mdll-fil.adb, + mdll-fil.ads, mdll-utl.ads, memroot.ads, memtrack.adb, mlib.ads, + mlib-fil.adb, mlib-fil.ads, mlib-prj.ads, mlib-utl.adb, mlib-utl.ads, + nlists.adb, nlists.ads, osint.adb, osint.ads, osint-c.adb, osint-l.adb, + osint-l.ads, osint-m.ads, output.adb, par.adb, par.adb, par.ads, + par-ch11.adb, par-ch12.adb, par-ch2.adb, par-ch4.adb, par-ch5.adb, + par-ch6.adb, par-ch9.adb, par-endh.adb, par-labl.adb, par-load.adb, + par-tchk.adb, prep.adb, prepcomp.adb, prepcomp.ads, prj-attr.ads, + prj-com.ads, prj-dect.adb, prj-dect.ads, prj-env.ads, prj-err.ads, + prj-ext.ads, prj-makr.adb, prj-makr.ads, prj-nmsc.ads, prj-pars.adb, + prj-pars.ads, prj-part.ads, prj-pp.ads, prj-proc.ads, prj-strt.adb, + prj-strt.ads, prj-tree.adb, prj-util.adb, prj-util.ads, rtsfind.adb, + sem.adb, sem.ads, sem_case.adb, sem_case.ads, sem_ch11.adb, + sem_ch4.adb, sem_ch6.ads, sem_ch7.ads, sem_dist.ads, sem_elab.ads, + sem_elim.ads, sem_eval.ads, sem_intr.ads, sem_maps.adb, sem_maps.ads, + sem_maps.ads, sem_res.ads, sem_type.ads, sfn_scan.adb, sfn_scan.ads, + s-imgwch.ads, s-imgwiu.adb, s-imgwiu.ads, s-inmaop.ads, sinput.adb, + sinput.ads, s-pack03.adb, s-pack03.ads, s-pack05.adb, s-pack05.ads, + s-pack06.adb, s-pack06.ads, s-pack07.adb, s-pack07.ads, s-pack09.adb, + s-pack09.ads, s-pack10.adb, s-pack10.ads, s-pack11.adb, s-pack11.ads, + s-pack12.adb, s-pack12.ads, s-pack13.adb, s-pack13.ads, s-pack14.adb, + s-pack14.ads, s-pack15.adb, s-pack15.ads, s-pack17.adb, s-pack17.ads, + s-pack18.adb, s-pack18.ads, s-pack19.adb, s-pack19.ads, s-pack20.adb, + s-pack20.ads, s-pack21.adb, s-pack21.ads, s-pack22.adb, s-pack22.ads, + s-pack23.adb, s-pack23.ads, s-pack24.adb, s-pack24.ads, s-pack25.adb, + s-pack25.ads, s-pack26.adb, s-pack26.ads, s-pack27.adb, s-pack27.ads, + s-pack28.adb, s-pack28.ads, s-pack29.adb, s-pack29.ads, s-pack30.adb, + s-pack30.ads, s-pack31.adb, s-pack31.ads, s-pack33.adb, s-pack33.ads, + s-pack34.adb, s-pack34.ads, s-pack35.adb, s-pack35.ads, s-pack36.adb, + s-pack36.ads, s-pack37.adb, s-pack37.ads, s-pack38.adb, s-pack38.ads, + s-pack39.adb, s-pack39.ads, s-pack40.adb, s-pack40.ads, s-pack41.adb, + s-pack41.ads, s-pack42.adb, s-pack42.ads, s-pack43.adb, s-pack43.ads, + s-pack44.adb, s-pack44.ads, s-pack45.adb, s-pack45.ads, s-pack46.adb, + s-pack46.ads, s-pack47.adb, s-pack47.ads, s-pack48.adb, s-pack48.ads, + s-pack49.adb, s-pack49.ads, s-pack50.adb, s-pack50.ads, s-pack51.adb, + s-pack51.ads, s-pack52.adb, s-pack52.ads, s-pack53.adb, s-pack53.ads, + s-pack54.adb, s-pack54.ads, s-pack55.adb, s-pack55.ads, s-pack56.adb, + s-pack56.ads, s-pack57.adb, s-pack57.ads, s-pack58.adb, s-pack58.ads, + s-pack59.adb, s-pack59.ads, s-pack60.adb, s-pack60.adb, s-pack60.ads, + s-pack61.adb, s-pack61.ads, s-pack62.adb, s-pack62.ads, s-pack63.adb, + s-pack63.ads, s-parint.adb, s-parint.adb, s-parint.ads, sprint.ads, + s-purexc.ads, s-restri.ads, s-restri.adb, s-scaval.adb, s-scaval.ads, + s-secsta.adb, s-secsta.ads, s-sequio.adb, s-sequio.ads, stand.ads, + s-tasuti.adb, s-traceb.adb, s-traceb.ads, stringt.adb, stringt.ads, + styleg.ads, s-valboo.adb, s-valboo.ads, s-valcha.adb, s-valcha.ads, + s-valdec.adb, s-valdec.ads, s-valint.adb, s-valint.ads, s-valint.ads, + s-vallld.adb, s-vallld.ads, s-vallli.adb, s-vallli.ads, s-valllu.adb, + s-valllu.ads, s-valrea.adb, s-valrea.ads, s-valuns.adb, s-valuns.ads, + s-valuti.adb, s-valuti.ads, s-valwch.ads, s-veboop.adb, s-veboop.ads, + s-vercon.adb, s-vercon.ads, s-wchcnv.adb, s-wchcnv.ads, s-wchcon.ads, + s-wchjis.adb, s-wchjis.ads, s-wchstw.adb, s-wchstw.adb, s-wchstw.ads, + s-wchwts.adb, s-wchwts.ads, s-widboo.adb, s-widboo.ads, s-widcha.adb, + s-widcha.ads, s-widenu.adb, s-widenu.ads, s-widlli.adb, s-widlli.ads, + s-widllu.adb, s-widllu.ads, s-widwch.adb, s-widwch.ads, s-wwdcha.adb, + s-wwdcha.ads, s-wwdenu.adb, s-wwdenu.ads, symbols.adb, symbols.ads, + table.ads, targparm.adb, targparm.ads, tb-alvms.c, tb-alvxw.c, + tbuild.adb, tree_io.ads, treepr.adb, treeprs.adt, ttypef.ads, + ttypes.ads, types.adb, uintp.adb, uintp.ads, uname.ads, urealp.ads, + usage.ads, validsw.ads, vxaddr2line.adb, widechar.adb, widechar.ads, + xeinfo.adb, xnmake.adb, xref_lib.ads, xr_tabls.adb, xr_tabls.ads, + xsinfo.adb, xtreeprs.adb, xsnames.adb, vms_conv.ads, vms_conv.adb, + a-dirval.ads, a-dirval.adb, a-dirval-mingw.adb, a-direct.ads, + a-direct.adb, indepsw.ads, prj-attr-pm.ads, system-linux-ppc.ads, + a-numaux-darwin.ads, a-numaux-darwin.adb, + a-swuwha.ads, a-stunha.ads: Minor reformatting + +2005-11-14 Robert Dewar + + PR ada/18434 + * osint-m.adb: Add pragma Elaborate_All for Osint + +2005-11-10 Eric Botcazou + + PR ada/23995 + * trans.c (call_to_gnu): Restore statement lost in translation. + +2005-11-08 Eric Botcazou + + * init.c: Use the Linux-specific section for the IA-64/Linux target. + (__gnat_adjust_context_for_raise): Add conditional code so that the + IA-64 is also supported. + +2005-11-03 James E Wilson + + PR ada/23427 + * trans.c (gnat_to_gnu): Use TYPE_SIZE_UNIT not TYPE_SIZE in + TREE_OVERFLOW check. + 2005-09-21 Olivier Hainque PR ada/22418 diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in index 8b476305152..d6f78bdf501 100644 --- a/gcc/ada/Make-lang.in +++ b/gcc/ada/Make-lang.in @@ -1049,10 +1049,10 @@ ada/decl.o : ada/decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ flags.h toplev.h convert.h target.h ada/ada.h ada/types.h ada/atree.h \ ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/snames.h \ ada/namet.h ada/stringt.h ada/repinfo.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \ - gt-ada-decl.h + gt-ada-decl.h $(EXPR_H) ada/misc.o : ada/misc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ - $(RTL_H) expr.h insn-codes.h insn-flags.h insn-config.h recog.h flags.h \ + $(RTL_H) $(EXPR_H) insn-codes.h insn-flags.h recog.h flags.h \ diagnostic.h output.h except.h $(TM_P_H) langhooks.h debug.h \ $(LANGHOOKS_DEF_H) libfuncs.h $(OPTABS_H) ada/ada.h ada/types.h \ ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h ada/namet.h \ @@ -1092,23 +1092,21 @@ ada/a-chlat1.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \ ada/system.ads ada/a-elchha.o : ada/ada.ads ada/a-except.ads ada/a-elchha.ads \ - ada/a-elchha.adb ada/system.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/a-elchha.adb ada/system.ads ada/s-parame.ads ada/s-stalib.ads \ ada/s-traent.ads ada/unchconv.ads ada/a-except.o : ada/ada.ads ada/a-except.ads ada/a-except.adb \ ada/a-excach.adb ada/a-exexda.adb ada/a-exexpr.adb ada/a-exextr.adb \ ada/a-elchha.ads ada/a-excpol.adb ada/a-exstat.adb ada/a-unccon.ads \ ada/a-uncdea.ads ada/interfac.ads ada/system.ads ada/s-exctab.ads \ - ada/s-mastop.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traceb.ads ada/s-traent.ads ada/s-traent.adb ada/s-unstyp.ads \ - ada/unchconv.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traceb.ads \ + ada/s-traent.ads ada/s-traent.adb ada/s-unstyp.ads ada/unchconv.ads ada/a-ioexce.o : ada/ada.ads ada/a-except.ads ada/a-ioexce.ads \ ada/system.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads + ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads ada/ada.o : ada/ada.ads ada/system.ads @@ -1116,17 +1114,18 @@ ada/ali-util.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \ ada/ali-util.ads ada/ali-util.adb ada/alloc.ads ada/binderr.ads \ ada/casing.ads ada/csets.ads ada/debug.ads ada/err_vars.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ - ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads \ - ada/rident.ads ada/scans.ads ada/scng.ads ada/scng.adb ada/sinput.ads \ - ada/sinput.adb ada/sinput-c.ads ada/snames.ads ada/stringt.ads \ - ada/stringt.adb ada/styleg.ads ada/styleg.adb ada/stylesw.ads \ - ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb \ - ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ + ada/g-utf_32.ads ada/g-utf_32.adb ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/lib.ads ada/namet.ads ada/namet.adb ada/opt.ads \ + ada/osint.ads ada/output.ads ada/rident.ads ada/scans.ads ada/scng.ads \ + ada/scng.adb ada/sinput.ads ada/sinput.adb ada/sinput-c.ads \ + ada/snames.ads ada/stringt.ads ada/stringt.adb ada/styleg.ads \ + ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \ + ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads \ + ada/s-htable.adb ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \ ada/widechar.ads @@ -1136,11 +1135,11 @@ ada/ali.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/ali.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads \ ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads ada/rident.ads \ ada/system.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ - ada/s-htable.adb ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads + ada/s-htable.adb ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/alloc.o : ada/alloc.ads ada/system.ads @@ -1148,15 +1147,15 @@ ada/atree.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \ ada/atree.ads ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads \ ada/einfo.adb ada/elists.ads ada/elists.adb ada/gnat.ads \ ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/hostparm.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/system.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/back_end.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/back_end.ads ada/back_end.adb ada/casing.ads \ @@ -1168,29 +1167,29 @@ ada/back_end.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/output.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/switch.ads ada/switch-c.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/bcheck.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.ads \ ada/ali-util.adb ada/alloc.ads ada/bcheck.ads ada/bcheck.adb \ ada/binderr.ads ada/butil.ads ada/casing.ads ada/csets.ads \ ada/debug.ads ada/err_vars.ads ada/fname.ads ada/gnat.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/namet.ads \ - ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads ada/rident.ads \ - ada/scans.ads ada/scng.ads ada/scng.adb ada/sinput.ads ada/sinput-c.ads \ - ada/snames.ads ada/stringt.ads ada/styleg.ads ada/styleg.adb \ - ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/widechar.ads + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ + ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads \ + ada/rident.ads ada/scans.ads ada/scng.ads ada/scng.adb ada/sinput.ads \ + ada/sinput-c.ads ada/snames.ads ada/stringt.ads ada/styleg.ads \ + ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/binde.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.ads \ ada/binde.ads ada/binde.adb ada/binderr.ads ada/butil.ads \ @@ -1198,27 +1197,28 @@ ada/binde.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.ads \ ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/lib.ads ada/namet.ads ada/namet.adb ada/opt.ads \ ada/output.ads ada/rident.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/widechar.ads + ada/s-htable.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/targparm.ads ada/tree_io.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/binderr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/binderr.ads \ ada/binderr.adb ada/butil.ads ada/debug.ads ada/gnat.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/namet.ads ada/opt.ads ada/output.ads ada/system.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/bindgen.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.ads \ - ada/binde.ads ada/bindgen.ads ada/bindgen.adb ada/butil.ads \ - ada/casing.ads ada/debug.ads ada/fname.ads ada/gnat.ads \ - ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/opt.ads \ - ada/osint.ads ada/osint-b.ads ada/output.ads ada/rident.ads \ - ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-memory.ads \ + ada/binde.ads ada/bindgen.ads ada/bindgen.adb ada/casing.ads \ + ada/debug.ads ada/fname.ads ada/gnat.ads ada/g-hesora.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/namet.ads ada/opt.ads ada/osint.ads \ + ada/osint-b.ads ada/output.ads ada/rident.ads ada/system.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-memory.ads ada/s-parame.ads \ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads \ ada/s-sopco3.ads ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads \ @@ -1235,38 +1235,39 @@ ada/butil.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/butil.ads \ ada/butil.adb ada/debug.ads ada/gnat.ads ada/g-os_lib.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads \ ada/opt.ads ada/output.ads ada/system.ads ada/s-exctab.ads \ - ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/casing.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/casing.adb ada/csets.ads ada/csets.adb ada/debug.ads ada/gnat.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/namet.ads ada/opt.ads ada/output.ads ada/system.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/widechar.ads + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/widechar.ads ada/checks.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch7.ads \ - ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \ - ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/itypes.ads \ - ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \ - ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \ - ada/sem.ads ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads \ - ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \ - ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ + ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch2.ads ada/exp_ch7.ads \ + ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ + ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ + ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ + ada/lib-load.ads ada/lib-sort.adb ada/namet.ads ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ + ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ + ada/rtsfind.adb ada/sem.ads ada/sem_cat.ads ada/sem_ch3.ads \ + ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_dist.ads ada/sem_eval.ads \ + ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ + ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \ + ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ @@ -1286,12 +1287,12 @@ ada/comperr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/output.adb ada/sdefault.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/sinput.adb ada/snames.ads ada/sprint.ads \ ada/stand.ads ada/stringt.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/treepr.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/treepr.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/csets.o : ada/csets.ads ada/csets.adb ada/gnat.ads ada/g-string.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads ada/system.ads \ @@ -1304,10 +1305,10 @@ ada/cstand.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ ada/exp_tss.ads ada/exp_util.ads ada/fname.ads ada/freeze.ads \ ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ - ada/layout.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/layout.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/rident.ads ada/rtsfind.ads \ ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ ada/sem_ch8.ads ada/sem_eval.ads ada/sem_mech.ads ada/sem_res.ads \ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \ @@ -1315,13 +1316,14 @@ ada/cstand.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \ ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/urealp.adb ada/widechar.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \ + ada/widechar.ads ada/debug.o : ada/debug.ads ada/debug.adb ada/system.ads @@ -1329,14 +1331,14 @@ ada/debug_a.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/debug_a.ads \ ada/debug_a.adb ada/einfo.ads ada/elists.ads ada/gnat.ads \ ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/nlists.ads ada/nlists.adb ada/opt.ads \ - ada/output.ads ada/sinfo.ads ada/sinput.ads ada/snames.ads \ + ada/hostparm.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ + ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinput.ads ada/snames.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/einfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -1345,28 +1347,29 @@ ada/einfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/snames.adb \ ada/stand.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/elists.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/elists.ads ada/elists.adb ada/gnat.ads ada/g-os_lib.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads \ ada/output.ads ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/err_vars.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/err_vars.ads ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads ada/output.ads \ ada/system.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ - ada/s-memory.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-memory.ads ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/errout.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ @@ -1380,11 +1383,11 @@ ada/errout.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \ ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/erroutc.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/debug.ads ada/err_vars.ads ada/erroutc.ads ada/erroutc.adb \ @@ -1392,10 +1395,10 @@ ada/erroutc.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/hostparm.ads ada/namet.ads ada/opt.ads ada/output.ads \ ada/output.adb ada/rident.ads ada/sinput.ads ada/sinput.adb \ ada/snames.ads ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads + ada/s-parame.ads ada/s-rident.ads ada/s-stalib.ads ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/eval_fat.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -1406,19 +1409,19 @@ ada/eval_fat.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/rident.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/snames.ads ada/stand.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/targparm.ads ada/tree_io.ads ada/ttypef.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/urealp.adb + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/targparm.ads ada/tree_io.ads ada/ttypef.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/exp_aggr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ - ada/exp_aggr.ads ada/exp_aggr.adb ada/exp_ch11.ads ada/exp_ch2.ads \ - ada/exp_ch3.ads ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_tss.ads \ + ada/exp_aggr.ads ada/exp_aggr.adb ada/exp_ch2.ads ada/exp_ch3.ads \ + ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_pakd.ads ada/exp_tss.ads \ ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/fname.ads \ ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ @@ -1432,35 +1435,36 @@ ada/exp_aggr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \ ada/stand.ads ada/stringt.ads ada/stringt.adb ada/system.ads \ ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/validsw.ads + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ - ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ - ada/errout.ads ada/erroutc.ads ada/exp_attr.ads ada/exp_attr.adb \ - ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_ch9.ads \ - ada/exp_imgv.ads ada/exp_pakd.ads ada/exp_strm.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/exp_util.adb ada/fname.ads ada/fname-uf.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ - ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \ - ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ - ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ - ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \ + ada/exp_attr.ads ada/exp_attr.adb ada/exp_ch2.ads ada/exp_ch7.ads \ + ada/exp_ch9.ads ada/exp_imgv.ads ada/exp_pakd.ads ada/exp_strm.ads \ + ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/exp_vfpt.ads \ + ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ + ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \ + ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_ch7.ads \ + ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \ + ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-carun8.ads \ + ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ @@ -1470,32 +1474,26 @@ ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/widechar.ads ada/exp_ch11.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ - ada/atree.adb ada/casing.ads ada/casing.adb ada/checks.ads \ - ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads \ - ada/exp_ch11.adb ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads \ - ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ - ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/interfac.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/output.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \ - ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ - ada/sem.ads ada/sem_ch5.ads ada/sem_ch8.ads ada/sem_eval.ads \ - ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-carun8.ads \ - ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads - + ada/atree.adb ada/casing.ads ada/casing.adb ada/csets.ads ada/debug.ads \ + ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ + ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch11.adb \ + ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \ + ada/fname-uf.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/lib.ads \ + ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \ + ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_ch8.ads \ + ada/sem_res.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads + ada/exp_ch12.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ ada/einfo.adb ada/elists.ads ada/exp_ch12.ads ada/exp_ch12.adb \ @@ -1504,14 +1502,14 @@ ada/exp_ch12.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \ ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ ada/rident.ads ada/rtsfind.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/stand.ads ada/system.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tbuild.ads ada/tbuild.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/exp_ch13.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ @@ -1525,16 +1523,17 @@ ada/exp_ch13.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-carun8.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ - ada/tree_io.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tbuild.ads ada/tree_io.ads ada/types.ads ada/types.adb \ + ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/exp_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ ada/einfo.adb ada/elists.ads ada/elists.adb ada/err_vars.ads \ - ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch2.ads \ + ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads ada/exp_ch2.ads \ ada/exp_ch2.adb ada/exp_ch7.ads ada/exp_smem.ads ada/exp_tss.ads \ ada/exp_util.ads ada/exp_util.adb ada/exp_vfpt.ads ada/get_targ.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ @@ -1542,16 +1541,16 @@ ada/exp_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \ ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_ch8.ads \ - ada/sem_eval.ads ada/sem_res.ads ada/sem_util.ads ada/sem_warn.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/validsw.ads + ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ + ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \ + ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/exp_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ @@ -1559,45 +1558,45 @@ ada/exp_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \ ada/exp_ch3.adb ada/exp_ch4.ads ada/exp_ch7.ads ada/exp_ch9.ads \ - ada/exp_disp.ads ada/exp_dist.ads ada/exp_smem.ads ada/exp_strm.ads \ - ada/exp_tss.ads ada/exp_tss.adb ada/exp_util.ads ada/fname.ads \ - ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/lib.ads ada/namet.ads ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/sem.ads ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads \ - ada/sem_mech.ads ada/sem_res.ads ada/sem_util.ads ada/sem_warn.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \ - ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ - ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/validsw.ads + ada/exp_disp.ads ada/exp_dist.ads ada/exp_pakd.ads ada/exp_smem.ads \ + ada/exp_strm.ads ada/exp_tss.ads ada/exp_tss.adb ada/exp_util.ads \ + ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/lib.ads ada/namet.ads \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/output.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \ + ada/rtsfind.ads ada/sem.ads ada/sem_attr.ads ada/sem_ch3.ads \ + ada/sem_ch8.ads ada/sem_eval.ads ada/sem_mech.ads ada/sem_res.ads \ + ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ + ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ - ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \ - ada/exp_ch4.ads ada/exp_ch4.adb ada/exp_ch7.ads ada/exp_ch9.ads \ - ada/exp_disp.ads ada/exp_fixd.ads ada/exp_pakd.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/exp_util.adb ada/exp_vfpt.ads ada/freeze.ads \ - ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_cat.ads \ - ada/sem_ch13.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_eval.adb \ + ada/exp_aggr.ads ada/exp_ch2.ads ada/exp_ch3.ads ada/exp_ch4.ads \ + ada/exp_ch4.adb ada/exp_ch7.ads ada/exp_ch9.ads ada/exp_fixd.ads \ + ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ + ada/exp_vfpt.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/inline.ads ada/itypes.ads ada/lib.ads \ + ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ + ada/rtsfind.ads ada/sem.ads ada/sem_cat.ads ada/sem_ch13.ads \ + ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_eval.adb \ ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \ - ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \ - ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \ + ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ @@ -1608,29 +1607,30 @@ ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ - ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch5.ads \ - ada/exp_ch5.adb ada/exp_ch7.ads ada/exp_dbug.ads ada/exp_pakd.ads \ - ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \ - ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_ch13.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ + ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ + ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads \ + ada/exp_ch5.ads ada/exp_ch5.adb ada/exp_ch7.ads ada/exp_dbug.ads \ + ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ + ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ + ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \ + ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_ch13.ads \ + ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ + ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ ada/widechar.ads @@ -1638,61 +1638,62 @@ ada/exp_ch6.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch3.ads \ + ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch2.ads ada/exp_ch3.ads \ ada/exp_ch6.ads ada/exp_ch6.adb ada/exp_ch7.ads ada/exp_ch9.ads \ ada/exp_dbug.ads ada/exp_disp.ads ada/exp_dist.ads ada/exp_intr.ads \ ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \ - ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \ - ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ - ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \ - ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ - ada/scng.adb ada/sem.ads ada/sem_ch12.ads ada/sem_ch13.ads \ - ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \ - ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ - ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ - ada/widechar.ads - -ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ - ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ - ada/einfo.adb ada/elists.ads ada/err_vars.ads ada/errout.ads \ - ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_ch7.adb \ - ada/exp_ch9.ads ada/exp_dbug.ads ada/exp_tss.ads ada/exp_util.ads \ - ada/exp_util.adb ada/fname.ads ada/fname-uf.ads ada/freeze.ads \ - ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \ - ada/sem_ch3.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \ - ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sinfo.ads \ - ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \ + ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ + ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch6.ads \ + ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \ + ada/sem_eval.ads ada/sem_mech.ads ada/sem_res.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \ + ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \ + ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ + ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/validsw.ads + ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads + +ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ + ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ + ada/einfo.adb ada/elists.ads ada/err_vars.ads ada/errout.ads \ + ada/erroutc.ads ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch7.ads \ + ada/exp_ch7.adb ada/exp_ch9.ads ada/exp_dbug.ads ada/exp_tss.ads \ + ada/exp_util.ads ada/exp_util.adb ada/fname.ads ada/fname-uf.ads \ + ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ + ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/inline.ads ada/itypes.ads ada/lib.ads ada/namet.ads ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ + ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ + ada/sem.ads ada/sem_ch3.ads ada/sem_ch7.ads ada/sem_ch8.ads \ + ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ + ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ ada/einfo.adb ada/elists.ads ada/err_vars.ads ada/errout.ads \ - ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_ch8.ads \ + ada/erroutc.ads ada/exp_aggr.ads ada/exp_ch7.ads ada/exp_ch8.ads \ ada/exp_ch8.adb ada/exp_dbug.ads ada/exp_tss.ads ada/exp_util.ads \ ada/exp_util.adb ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ @@ -1700,43 +1701,45 @@ ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/opt.ads \ ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ ada/sem.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ - ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/validsw.ads + ada/sem_type.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ + ada/validsw.ads ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads \ - ada/exp_ch3.ads ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_ch9.ads \ - ada/exp_ch9.adb ada/exp_dbug.ads ada/exp_smem.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/exp_util.adb ada/fname.ads ada/fname-uf.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_ch11.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_elab.ads \ - ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \ + ada/exp_ch11.ads ada/exp_ch3.ads ada/exp_ch6.ads ada/exp_ch7.ads \ + ada/exp_ch9.ads ada/exp_ch9.adb ada/exp_dbug.ads ada/exp_smem.ads \ + ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \ + ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ + ada/itypes.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/output.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \ + ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ + ada/sem.ads ada/sem_ch11.ads ada/sem_ch6.ads ada/sem_ch8.ads \ + ada/sem_elab.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ + ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ + ada/widechar.ads ada/exp_code.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ @@ -1744,20 +1747,20 @@ ada/exp_code.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_code.ads \ ada/exp_code.adb ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \ ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib.adb \ - ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \ - ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ - ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ - ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ - ada/sem.ads ada/sem_cat.ads ada/sem_ch8.ads ada/sem_eval.ads \ - ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ - ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-carun8.ads \ - ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ + ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/rident.ads ada/rtsfind.ads \ + ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ + ada/sem_cat.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_eval.adb \ + ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ + ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \ @@ -1774,24 +1777,23 @@ ada/exp_dbug.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_eval.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \ ada/widechar.ads ada/exp_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads \ + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \ ada/exp_ch7.ads ada/exp_disp.ads ada/exp_disp.adb ada/exp_tss.ads \ ada/exp_tss.adb ada/exp_util.ads ada/exp_util.adb ada/fname.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ + ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ + ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_ch8.ads \ @@ -1800,12 +1802,12 @@ ada/exp_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ + ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ ada/widechar.ads @@ -1813,20 +1815,21 @@ ada/exp_dist.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/alloc.ads ada/atree.ads ada/atree.adb ada/casing.ads ada/debug.ads \ ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ ada/exp_dist.ads ada/exp_dist.adb ada/exp_strm.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/fname.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_ch3.ads \ - ada/sem_ch8.ads ada/sem_dist.ads ada/sem_util.ads ada/sinfo.ads \ - ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ + ada/exp_util.ads ada/fname.ads ada/get_targ.ads ada/gnat.ads \ + ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-sort.adb ada/namet.ads ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ + ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/sem.ads \ + ada/sem_ch3.ads ada/sem_ch8.ads ada/sem_dist.ads ada/sem_eval.ads \ + ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ ada/unchdeal.ads ada/urealp.ads @@ -1842,12 +1845,12 @@ ada/exp_fixd.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tbuild.ads ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/urealp.adb + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/exp_imgv.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ @@ -1859,22 +1862,23 @@ ada/exp_imgv.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/sem_res.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/exp_intr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ - ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ - ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch4.ads \ - ada/exp_ch7.ads ada/exp_code.ads ada/exp_fixd.ads ada/exp_intr.ads \ - ada/exp_intr.adb ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ - ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ - ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \ + ada/exp_ch11.ads ada/exp_ch4.ads ada/exp_ch7.ads ada/exp_code.ads \ + ada/exp_disp.ads ada/exp_fixd.ads ada/exp_intr.ads ada/exp_intr.adb \ + ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \ + ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ ada/itypes.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \ ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ @@ -1883,10 +1887,10 @@ ada/exp_intr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \ - ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \ + ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ + ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ @@ -1899,25 +1903,25 @@ ada/exp_pakd.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ - ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_dbug.ads \ + ada/exp_aggr.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_dbug.ads \ ada/exp_pakd.ads ada/exp_pakd.adb ada/exp_tss.ads ada/exp_util.ads \ ada/exp_util.adb ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/inline.ads ada/itypes.ads ada/lib.ads \ ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ - ada/rtsfind.ads ada/sem.ads ada/sem_ch13.ads ada/sem_ch3.ads \ - ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_util.ads \ - ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \ - ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/validsw.ads + ada/rtsfind.ads ada/sem.ads ada/sem_ch13.ads ada/sem_ch3.ads \ + ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ + ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/exp_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/casing.adb ada/csets.ads ada/debug.ads \ @@ -1930,14 +1934,14 @@ ada/exp_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_eval.ads \ ada/sem_res.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/snames.ads ada/snames.adb ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-carun8.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/types.ads \ - ada/types.adb ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/exp_smem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -1949,12 +1953,13 @@ ada/exp_smem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/rtsfind.ads ada/sem.ads ada/sem_util.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/exp_strm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -1963,15 +1968,15 @@ ada/exp_strm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/lib.ads \ ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ - ada/rtsfind.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/rtsfind.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tbuild.ads ada/tbuild.adb \ + ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/exp_tss.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -1984,16 +1989,16 @@ ada/exp_tss.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/exp_util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ ada/einfo.adb ada/elists.ads ada/elists.adb ada/err_vars.ads \ - ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_ch11.ads \ + ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_aggr.ads \ ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ ada/fname.ads ada/fname-uf.ads ada/get_targ.ads ada/gnat.ads \ ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ @@ -2006,13 +2011,14 @@ ada/exp_util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \ + ada/validsw.ads ada/exp_vfpt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -2022,12 +2028,13 @@ ada/exp_vfpt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/rtsfind.ads \ ada/sem_res.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/snames.ads ada/stand.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tbuild.ads ada/tree_io.ads \ - ada/ttypef.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ + ada/tree_io.ads ada/ttypef.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ + ada/urealp.adb ada/expander.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/debug_a.ads \ @@ -2038,25 +2045,25 @@ ada/expander.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/exp_ch7.ads ada/exp_ch8.ads ada/exp_ch9.ads ada/exp_prag.ads \ ada/expander.ads ada/expander.adb ada/gnat.ads ada/g-htable.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ + ada/namet.ads ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ ada/rtsfind.ads ada/sem.ads ada/sem_ch8.ads ada/sem_util.ads \ ada/sinfo.ads ada/sinput.ads ada/snames.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/fmap.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \ ada/debug.ads ada/fmap.ads ada/fmap.adb ada/gnat.ads ada/g-htable.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/namet.ads ada/opt.ads ada/osint.ads ada/output.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/fname-uf.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/alloc.ads ada/casing.ads ada/debug.ads ada/fmap.ads ada/fname.ads \ @@ -2064,29 +2071,29 @@ ada/fname-uf.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/krunch.ads ada/namet.ads ada/opt.ads ada/osint.ads ada/output.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb \ - ada/s-memory.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uname.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/fname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/fname.ads ada/fname.adb ada/gnat.ads ada/g-os_lib.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads \ ada/opt.ads ada/output.ads ada/system.ads ada/s-exctab.ads \ - ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/freeze.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_pakd.ads ada/exp_tss.ads \ + ada/exp_ch7.ads ada/exp_disp.ads ada/exp_pakd.ads ada/exp_tss.ads \ ada/exp_util.ads ada/expander.ads ada/fname.ads ada/freeze.ads \ ada/freeze.adb ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/interfac.ads ada/itypes.ads ada/layout.ads ada/lib.ads \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/interfac.ads ada/itypes.ads ada/layout.ads \ + ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ @@ -2099,38 +2106,40 @@ ada/freeze.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \ - ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/frontend.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads \ ada/cstand.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch11.ads \ - ada/exp_dbug.ads ada/fmap.ads ada/fname.ads ada/fname-uf.ads \ - ada/frontend.ads ada/frontend.adb ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_dbug.ads \ + ada/fmap.ads ada/fname.ads ada/fname-uf.ads ada/frontend.ads \ + ada/frontend.adb ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \ + ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/lib.ads \ ada/lib.adb ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb \ - ada/live.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/osint.ads ada/output.ads ada/par.ads \ - ada/prepcomp.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_ch8.ads ada/sem_elab.ads ada/sem_prag.ads ada/sem_warn.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ - ada/sinput-l.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ - ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/live.ads ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb \ + ada/nmake.ads ada/nmake.adb ada/opt.ads ada/osint.ads ada/output.ads \ + ada/par.ads ada/prepcomp.ads ada/restrict.ads ada/rident.ads \ + ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ + ada/sem.ads ada/sem_ch8.ads ada/sem_elab.ads ada/sem_prag.ads \ + ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/sinput.adb ada/sinput-l.ads ada/snames.ads ada/sprint.ads \ + ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \ + ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ + ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/g-hesora.o : ada/gnat.ads ada/g-hesora.ads ada/g-hesora.adb \ ada/system.ads @@ -2151,7 +2160,8 @@ ada/g-speche.o : ada/gnat.ads ada/g-speche.ads ada/g-speche.adb \ ada/g-string.o : ada/gnat.ads ada/g-string.ads ada/g-string.adb \ ada/system.ads ada/unchdeal.ads -ada/g-utf_32.o : ada/gnat.ads ada/g-utf_32.ads ada/g-utf_32.adb +ada/g-utf_32.o : ada/gnat.ads ada/g-utf_32.ads ada/g-utf_32.adb \ + ada/system.ads ada/get_targ.o : ada/get_targ.ads ada/get_targ.adb ada/system.ads \ ada/s-exctab.ads ada/s-stalib.ads ada/s-unstyp.ads ada/types.ads \ @@ -2175,13 +2185,14 @@ ada/gnat1drv.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ ada/sinput-l.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-assert.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tree_gen.ads ada/tree_io.ads ada/treepr.ads ada/ttypes.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/usage.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tree_gen.ads ada/tree_io.ads ada/treepr.ads \ + ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/usage.ads \ + ada/widechar.ads ada/gnatbind.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.ads \ ada/alloc.ads ada/bcheck.ads ada/binde.ads ada/binderr.ads \ @@ -2190,14 +2201,14 @@ ada/gnatbind.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/ali-util.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatbind.ads ada/gnatbind.adb \ ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/opt.ads \ ada/osint.ads ada/osint-b.ads ada/output.ads ada/rident.ads \ - ada/switch.ads ada/switch-b.ads ada/system.ads ada/s-casuti.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads \ - ada/s-sopco3.ads ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/targparm.ads ada/tree_io.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads + ada/snames.ads ada/switch.ads ada/switch-b.ads ada/system.ads \ + ada/s-casuti.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads ada/s-sopco4.ads \ + ada/s-sopco5.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tree_io.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/gnatvsn.o : ada/gnatvsn.ads ada/gnatvsn.adb ada/system.ads \ ada/s-secsta.ads ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads @@ -2217,31 +2228,31 @@ ada/impunit.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/namet.adb ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/widechar.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/inline.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \ - ada/erroutc.ads ada/exp_ch11.ads ada/exp_ch7.ads ada/exp_tss.ads \ - ada/exp_tss.adb ada/exp_util.ads ada/fname.ads ada/fname-uf.ads \ - ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/inline.adb ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/opt.ads ada/output.ads ada/rtsfind.ads ada/sem_ch10.ads \ - ada/sem_ch12.ads ada/sem_ch8.ads ada/sem_util.ads ada/sinfo.ads \ - ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/erroutc.ads ada/exp_ch7.ads ada/exp_tss.ads ada/exp_tss.adb \ + ada/exp_util.ads ada/fname.ads ada/fname-uf.ads ada/gnat.ads \ + ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/inline.adb \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/namet.ads \ + ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ + ada/rtsfind.ads ada/sem_ch10.ads ada/sem_ch12.ads ada/sem_ch8.ads \ + ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/interfac.o : ada/interfac.ads ada/system.ads @@ -2253,11 +2264,11 @@ ada/itypes.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/output.ads ada/sem.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/snames.ads ada/stand.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/krunch.o : ada/hostparm.ads ada/krunch.ads ada/krunch.adb \ ada/system.ads ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads @@ -2268,78 +2279,80 @@ ada/layout.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/errout.ads ada/erroutc.ads ada/exp_ch3.ads ada/exp_tss.ads \ ada/exp_util.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/layout.ads \ - ada/layout.adb ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/output.ads ada/repinfo.ads ada/repinfo.adb ada/restrict.ads \ - ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ - ada/scng.adb ada/sem.ads ada/sem_ch13.ads ada/sem_ch8.ads \ - ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ + ada/layout.ads ada/layout.adb ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/repinfo.ads \ + ada/repinfo.adb ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ + ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ + ada/sem_ch13.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ + ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ + ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ + ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/lib-load.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ ada/einfo.adb ada/elists.ads ada/err_vars.ads ada/errout.ads \ ada/erroutc.ads ada/fname.ads ada/fname-uf.ads ada/gnat.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib-load.ads \ - ada/lib-load.adb ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/nmake.ads ada/nmake.adb ada/opt.ads ada/osint.ads ada/osint-c.ads \ - ada/output.ads ada/par.ads ada/restrict.ads ada/rident.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sinfo.ads \ - ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/sinput-l.ads \ - ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/widechar.ads + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ + ada/lib-load.ads ada/lib-load.adb ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/osint.ads ada/osint-c.ads ada/output.ads ada/par.ads \ + ada/restrict.ads ada/rident.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ + ada/sinput-l.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-crc32.adb \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/lib-util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/lib.ads ada/lib-util.ads ada/lib-util.adb \ ada/namet.ads ada/opt.ads ada/osint.ads ada/osint-c.ads ada/output.ads \ - ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/lib-writ.o : ada/ada.ads ada/a-except.ads ada/ali.ads ada/alloc.ads \ ada/atree.ads ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads \ ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ ada/errout.ads ada/erroutc.ads ada/fname.ads ada/fname-uf.ads \ - ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ - ada/lib-util.ads ada/lib-util.adb ada/lib-writ.ads ada/lib-writ.adb \ - ada/lib-xref.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ - ada/nmake.ads ada/nmake.adb ada/opt.ads ada/osint.ads ada/osint-c.ads \ - ada/output.ads ada/par.ads ada/restrict.ads ada/rident.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sinfo.ads \ - ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \ - ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ - ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ + ada/lib.ads ada/lib-util.ads ada/lib-util.adb ada/lib-writ.ads \ + ada/lib-writ.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/osint.ads ada/osint-c.ads ada/output.ads ada/par.ads \ + ada/restrict.ads ada/rident.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-casuti.ads ada/s-carun8.ads \ + ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/types.adb \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/lib-xref.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ @@ -2349,14 +2362,16 @@ ada/lib-xref.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/hostparm.ads ada/lib.ads ada/lib-util.ads ada/lib-util.adb \ ada/lib-xref.ads ada/lib-xref.adb ada/namet.ads ada/nlists.ads \ ada/nlists.adb ada/opt.ads ada/osint.ads ada/osint-c.ads ada/output.ads \ - ada/sem_prag.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/restrict.ads ada/rident.ads ada/sem.ads ada/sem_prag.ads \ + ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ + ada/widechar.ads ada/lib.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -2367,12 +2382,12 @@ ada/lib.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nlists.adb ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/widechar.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/live.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -2383,37 +2398,39 @@ ada/live.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nlists.adb ada/opt.ads ada/output.ads ada/sem_util.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/memtrack.o : ada/ada.ads ada/a-except.ads ada/gnat.ads ada/g-io.ads \ - ada/system.ads ada/s-memory.ads ada/memtrack.adb ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traceb.ads ada/s-traent.ads ada/s-traent.adb ada/unchconv.ads + ada/system.ads ada/s-memory.ads ada/memtrack.adb ada/s-parame.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traceb.ads ada/s-traent.ads ada/s-traent.adb \ + ada/unchconv.ads ada/namet.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/namet.adb ada/opt.ads ada/output.ads \ ada/system.ads ada/s-carun8.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/types.adb \ + ada/s-parame.ads ada/s-secsta.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/types.adb \ ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/nlists.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/nlists.ads ada/nlists.adb \ - ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinput.ads ada/snames.ads \ - ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/nlists.ads \ + ada/nlists.adb ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinput.ads \ + ada/snames.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/nmake.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \ @@ -2422,38 +2439,39 @@ ada/nmake.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/opt.o : ada/ada.ads ada/a-except.ads ada/gnat.ads ada/g-os_lib.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads \ - ada/opt.adb ada/system.ads ada/s-exctab.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/opt.adb ada/system.ads ada/s-exctab.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/tree_io.ads ada/types.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/osint-b.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/opt.ads ada/osint.ads \ ada/osint-b.ads ada/osint-b.adb ada/output.ads ada/system.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/osint-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads \ ada/osint-c.ads ada/osint-c.adb ada/output.ads ada/system.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/widechar.ads + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/osint.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \ ada/debug.ads ada/fmap.ads ada/gnat.ads ada/g-htable.ads \ @@ -2461,11 +2479,12 @@ ada/osint.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \ ada/namet.ads ada/namet.adb ada/opt.ads ada/osint.ads ada/osint.adb \ ada/output.ads ada/sdefault.ads ada/system.ads ada/s-casuti.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads \ - ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strops.ads \ + ada/s-sopco3.ads ada/s-sopco4.ads ada/s-sopco5.ads ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/widechar.ads ada/output.o : ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \ ada/output.ads ada/output.adb ada/system.ads ada/s-exctab.ads \ @@ -2477,30 +2496,30 @@ ada/par.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/einfo.adb ada/elists.ads ada/elists.adb ada/err_vars.ads \ ada/errout.ads ada/erroutc.ads ada/fname.ads ada/fname-uf.ads \ ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-speche.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/interfac.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-load.ads ada/lib-sort.adb ada/namet.ads ada/namet.adb \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/osint.ads ada/output.ads ada/par.ads ada/par.adb ada/par-ch10.adb \ - ada/par-ch11.adb ada/par-ch12.adb ada/par-ch13.adb ada/par-ch2.adb \ - ada/par-ch3.adb ada/par-ch4.adb ada/par-ch5.adb ada/par-ch6.adb \ - ada/par-ch7.adb ada/par-ch8.adb ada/par-ch9.adb ada/par-endh.adb \ - ada/par-labl.adb ada/par-load.adb ada/par-prag.adb ada/par-sync.adb \ - ada/par-tchk.adb ada/par-util.adb ada/restrict.ads ada/rident.ads \ - ada/scans.ads ada/scans.adb ada/scn.ads ada/scng.ads ada/scng.adb \ - ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \ - ada/sinput.adb ada/sinput-l.ads ada/snames.ads ada/snames.adb \ - ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb \ - ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ - ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ - ada/widechar.ads + ada/g-speche.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/namet.ads \ + ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/osint.ads ada/output.ads ada/par.ads ada/par.adb \ + ada/par-ch10.adb ada/par-ch11.adb ada/par-ch12.adb ada/par-ch13.adb \ + ada/par-ch2.adb ada/par-ch3.adb ada/par-ch4.adb ada/par-ch5.adb \ + ada/par-ch6.adb ada/par-ch7.adb ada/par-ch8.adb ada/par-ch9.adb \ + ada/par-endh.adb ada/par-labl.adb ada/par-load.adb ada/par-prag.adb \ + ada/par-sync.adb ada/par-tchk.adb ada/par-util.adb ada/restrict.ads \ + ada/rident.ads ada/scans.ads ada/scans.adb ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads \ + ada/sinput.ads ada/sinput.adb ada/sinput-l.ads ada/snames.ads \ + ada/snames.adb ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \ + ada/s-crc32.adb ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/types.ads ada/types.adb \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads ada/prep.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/csets.ads ada/debug.ads ada/err_vars.ads ada/gnat.ads \ @@ -2509,24 +2528,25 @@ ada/prep.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/namet.ads ada/opt.ads ada/osint.ads ada/output.ads ada/prep.ads \ ada/prep.adb ada/scans.ads ada/sinput.ads ada/snames.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-carun8.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/prepcomp.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/alloc.ads ada/casing.ads ada/csets.ads ada/debug.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/gnat.ads \ ada/g-dyntab.ads ada/g-dyntab.adb ada/g-hesorg.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ - ada/lib.ads ada/lib-writ.ads ada/namet.ads ada/opt.ads ada/osint.ads \ - ada/output.ads ada/prep.ads ada/prepcomp.ads ada/prepcomp.adb \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sinput.ads \ - ada/sinput.adb ada/sinput-l.ads ada/snames.ads ada/stringt.ads \ - ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ - ada/s-crc32.adb ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/lib.ads ada/lib-writ.ads ada/namet.ads \ + ada/namet.adb ada/opt.ads ada/osint.ads ada/output.ads ada/prep.ads \ + ada/prepcomp.ads ada/prepcomp.adb ada/scans.ads ada/scn.ads \ + ada/scng.ads ada/scng.adb ada/sinput.ads ada/sinput.adb \ + ada/sinput-l.ads ada/snames.ads ada/stringt.ads ada/stringt.adb \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-crc32.adb \ + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ @@ -2542,11 +2562,12 @@ ada/repinfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/repinfo.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ + ada/widechar.ads ada/restrict.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -2559,11 +2580,12 @@ ada/restrict.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/rident.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/rident.o : ada/rident.ads ada/system.ads ada/s-rident.ads @@ -2575,24 +2597,27 @@ ada/rtsfind.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/lib.ads \ ada/lib.adb ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb \ ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/rtsfind.ads \ - ada/rtsfind.adb ada/sem.ads ada/sem_ch7.ads ada/sem_util.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb ada/sem.ads \ + ada/sem_ch7.ads ada/sem_dist.ads ada/sem_util.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-exctab.adb \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tbuild.ads ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tbuild.ads ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/s-addope.o : ada/system.ads ada/s-addope.ads ada/s-addope.adb \ ada/unchconv.ads ada/s-assert.o : ada/ada.ads ada/a-except.ads ada/system.ads \ ada/s-assert.ads ada/s-assert.adb ada/s-exctab.ads ada/s-exctab.adb \ - ada/s-htable.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads + ada/s-htable.ads ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/unchconv.ads ada/s-carun8.o : ada/system.ads ada/s-addope.ads ada/s-addope.adb \ ada/s-carun8.ads ada/s-carun8.adb ada/s-stoele.ads ada/s-stoele.adb \ @@ -2607,8 +2632,9 @@ ada/s-crtl.o : ada/system.ads ada/s-crtl.ads ada/s-parame.ads ada/s-exctab.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/system.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ - ada/s-htable.adb ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads + ada/s-htable.adb ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/unchconv.ads ada/s-htable.o : ada/ada.ads ada/a-uncdea.ads ada/system.ads \ ada/s-htable.ads ada/s-htable.adb @@ -2616,9 +2642,8 @@ ada/s-htable.o : ada/ada.ads ada/a-uncdea.ads ada/system.ads \ ada/s-imgenu.o : ada/system.ads ada/s-imgenu.ads ada/s-imgenu.adb \ ada/s-secsta.ads ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads -ada/s-mastop.o : ada/ada.ads ada/a-except.ads ada/system.ads \ - ada/s-mastop.ads ada/s-mastop.adb ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads +ada/s-mastop.o : ada/system.ads ada/s-mastop.ads ada/s-mastop.adb \ + ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads ada/s-memory.o : ada/ada.ads ada/a-except.ads ada/system.ads \ ada/s-crtl.ads ada/s-memory.ads ada/s-memory.adb ada/s-parame.ads \ @@ -2635,9 +2660,9 @@ ada/s-secsta.o : ada/ada.ads ada/a-except.ads ada/system.ads \ ada/s-traent.ads ada/unchconv.ads ada/unchdeal.ads ada/s-soflin.o : ada/ada.ads ada/a-except.ads ada/system.ads \ - ada/s-mastop.ads ada/s-parame.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-soflin.adb ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/unchconv.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-soflin.adb \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/unchconv.ads ada/s-sopco3.o : ada/system.ads ada/s-secsta.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-strops.ads ada/s-sopco3.ads ada/s-sopco3.adb \ @@ -2655,9 +2680,9 @@ ada/s-stache.o : ada/system.ads ada/s-stache.ads ada/s-stache.adb \ ada/s-stoele.ads ada/s-stoele.adb ada/unchconv.ads ada/s-stalib.o : ada/ada.ads ada/a-except.ads ada/system.ads \ - ada/s-memory.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stalib.adb ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/unchconv.ads + ada/s-memory.ads ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stalib.adb ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/unchconv.ads ada/s-stoele.o : ada/system.ads ada/s-stoele.ads ada/s-stoele.adb \ ada/unchconv.ads @@ -2684,48 +2709,50 @@ ada/s-wchjis.o : ada/system.ads ada/s-wchjis.ads ada/s-wchjis.adb ada/scans.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/opt.ads ada/output.ads ada/scans.ads ada/scans.adb \ - ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/scn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/namet.ads \ - ada/namet.adb ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ - ada/scans.ads ada/scn.ads ada/scn.adb ada/scng.ads ada/scng.adb \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ + ada/g-utf_32.ads ada/g-utf_32.adb ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/rident.ads ada/scans.ads ada/scn.ads ada/scn.adb ada/scng.ads \ + ada/scng.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ ada/snames.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \ - ada/widechar.ads + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/types.adb ada/uintp.ads \ + ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ + ada/urealp.adb ada/widechar.ads ada/scng.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/csets.ads ada/debug.ads ada/err_vars.ads ada/gnat.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/interfac.ads ada/namet.ads ada/opt.ads ada/output.ads ada/scans.ads \ - ada/scng.ads ada/scng.adb ada/sinput.ads ada/snames.ads ada/stringt.ads \ - ada/styleg.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/interfac.ads ada/namet.ads ada/opt.ads \ + ada/output.ads ada/scans.ads ada/scng.ads ada/scng.adb ada/sinput.ads \ + ada/snames.ads ada/stringt.ads ada/styleg.ads ada/stylesw.ads \ + ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/sem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/debug_a.ads \ ada/debug_a.adb ada/einfo.ads ada/einfo.adb ada/elists.ads \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/expander.ads \ - ada/fname.ads ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hlo.ads \ - ada/hostparm.ads ada/inline.ads ada/lib.ads ada/lib.adb \ + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_tss.ads \ + ada/expander.ads ada/fname.ads ada/gnat.ads ada/g-hesora.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ + ada/hlo.ads ada/hostparm.ads ada/inline.ads ada/lib.ads ada/lib.adb \ ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/namet.ads \ ada/nlists.ads ada/nlists.adb ada/opt.ads ada/output.ads \ ada/restrict.ads ada/rident.ads ada/sem.ads ada/sem.adb \ @@ -2735,63 +2762,66 @@ ada/sem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_prag.ads ada/sem_util.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-carun8.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ + ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/sem_aggr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch7.ads \ - ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/fname.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-speche.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ - ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ - ada/sem_aggr.adb ada/sem_cat.ads ada/sem_ch13.ads ada/sem_ch8.ads \ + ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch2.ads ada/exp_ch7.ads \ + ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ + ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads ada/g-string.ads \ + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ + ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_aggr.adb \ + ada/sem_cat.ads ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch8.ads \ ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \ ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \ ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/validsw.ads ada/widechar.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ + ada/widechar.ads ada/sem_attr.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \ ada/a-except.ads ada/alloc.ads ada/atree.ads ada/atree.adb \ ada/casing.ads ada/checks.ads ada/checks.adb ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ - ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/freeze.ads \ - ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/itypes.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ - ada/sdefault.ads ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \ - ada/sem_attr.adb ada/sem_cat.ads ada/sem_ch4.ads ada/sem_ch6.ads \ - ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \ - ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads \ - ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ - ada/snames.ads ada/snames.adb ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-carun8.ads \ - ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/exp_aggr.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_disp.ads \ + ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ + ada/expander.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/inline.ads ada/itypes.ads ada/lib.ads \ + ada/lib-xref.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \ + ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/rident.ads ada/rtsfind.ads ada/sdefault.ads ada/sem.ads \ + ada/sem_aggr.ads ada/sem_attr.ads ada/sem_attr.adb ada/sem_cat.ads \ + ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads \ + ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads ada/sem_eval.ads \ + ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \ + ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \ + ada/snames.adb ada/sprint.ads ada/stand.ads ada/stringt.ads \ + ada/stringt.adb ada/system.ads ada/s-carun8.ads ada/s-exctab.ads \ + ada/s-exctab.adb ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ @@ -2808,13 +2838,14 @@ ada/sem_case.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ ada/output.ads ada/sem.ads ada/sem_case.ads ada/sem_case.adb \ ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ - ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tbuild.ads ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tbuild.ads ada/tree_io.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/sem_cat.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -2827,19 +2858,20 @@ ada/sem_cat.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_cat.adb ada/sem_eval.ads ada/sem_util.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/sem_ch10.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ - ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/fname.ads ada/fname-uf.ads ada/freeze.ads \ - ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ + ada/errout.ads ada/erroutc.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/impunit.ads ada/inline.ads ada/interfac.ads ada/lib.ads ada/lib.adb \ ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads \ ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ @@ -2853,13 +2885,13 @@ ada/sem_ch10.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/widechar.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_ch11.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ @@ -2872,12 +2904,12 @@ ada/sem_ch11.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_ch11.adb ada/sem_ch5.ads ada/sem_ch8.ads ada/sem_res.ads \ ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/snames.ads ada/stand.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/sem_ch12.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/alloc.ads ada/atree.ads ada/atree.adb ada/casing.ads ada/checks.ads \ @@ -2886,28 +2918,29 @@ ada/sem_ch12.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \ ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ - ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \ - ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch12.ads ada/sem_ch12.adb \ - ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch7.ads \ - ada/sem_ch8.ads ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads \ - ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ - ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads \ - ada/sinput.ads ada/sinput-l.ads ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ - ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-htable.adb \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/widechar.ads + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ + ada/interfac.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ + ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \ + ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ + ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ + ada/sem.ads ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch12.ads \ + ada/sem_ch12.adb ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch6.ads \ + ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_elab.ads \ + ada/sem_elim.ads ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput-l.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ + ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ + ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb \ + ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ + ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/urealp.adb ada/widechar.ads ada/sem_ch13.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/debug.ads ada/einfo.ads \ @@ -2922,13 +2955,13 @@ ada/sem_ch13.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/urealp.adb + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/sem_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \ @@ -2939,39 +2972,41 @@ ada/sem_ch2.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_ch2.ads ada/sem_ch2.adb ada/sem_ch8.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/system.ads ada/s-carun8.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/types.adb \ - ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/types.adb ada/uintp.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/sem_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \ ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \ - ada/erroutc.ads ada/eval_fat.ads ada/exp_ch11.ads ada/exp_ch2.ads \ - ada/exp_ch3.ads ada/exp_ch7.ads ada/exp_dist.ads ada/exp_tss.ads \ - ada/exp_util.ads ada/exp_util.adb ada/expander.ads ada/fname.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ - ada/layout.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ - ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ - ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_aggr.ads ada/sem_attr.ads ada/sem_case.ads ada/sem_case.adb \ - ada/sem_cat.ads ada/sem_cat.adb ada/sem_ch13.ads ada/sem_ch3.ads \ - ada/sem_ch3.adb ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch7.ads \ - ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \ - ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \ - ada/sem_mech.ads ada/sem_res.ads ada/sem_res.adb ada/sem_smem.ads \ - ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \ - ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ - ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ - ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ + ada/erroutc.ads ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch2.ads \ + ada/exp_ch3.ads ada/exp_ch7.ads ada/exp_disp.ads ada/exp_dist.ads \ + ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \ + ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/inline.ads ada/interfac.ads ada/itypes.ads ada/layout.ads \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \ + ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ + ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ + ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ + ada/sem_attr.ads ada/sem_case.ads ada/sem_case.adb ada/sem_cat.ads \ + ada/sem_cat.adb ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch3.adb \ + ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \ + ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads \ + ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads ada/sem_mech.ads \ + ada/sem_res.ads ada/sem_res.adb ada/sem_smem.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \ + ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \ + ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ + ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ @@ -2983,25 +3018,26 @@ ada/sem_ch3.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_ch4.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ - ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch7.ads \ - ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ - ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ - ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch4.ads \ - ada/sem_ch4.adb ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \ - ada/sem_dist.ads ada/sem_elab.ads ada/sem_eval.ads ada/sem_intr.ads \ - ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ - ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ - ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ + ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ + ada/exp_ch7.ads ada/exp_disp.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-speche.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \ + ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \ + ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch4.adb \ + ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \ + ada/sem_elab.ads ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads \ + ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ + ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ + ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ + ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ @@ -3013,27 +3049,28 @@ ada/sem_ch5.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/eval_fat.ads \ - ada/exp_ch2.ads ada/exp_tss.ads ada/exp_util.ads ada/expander.ads \ - ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ - ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_case.ads \ - ada/sem_case.adb ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch5.ads \ - ada/sem_ch5.adb ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads \ - ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ - ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ - ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \ - ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/exp_ch2.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads \ + ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ + ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ + ada/sem.ads ada/sem_case.ads ada/sem_case.adb ada/sem_cat.ads \ + ada/sem_ch3.ads ada/sem_ch5.ads ada/sem_ch5.adb ada/sem_ch8.ads \ + ada/sem_disp.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \ + ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \ ada/widechar.ads @@ -3043,23 +3080,24 @@ ada/sem_ch6.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch7.ads \ ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \ ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/lib.ads \ - ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ - ada/scng.adb ada/sem.ads ada/sem_cat.ads ada/sem_ch12.ads \ - ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads \ - ada/sem_ch6.adb ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \ - ada/sem_elim.ads ada/sem_eval.ads ada/sem_mech.ads ada/sem_prag.ads \ - ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ - ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads \ - ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ - ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ - ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ + ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ + ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ + ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ + ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch12.ads ada/sem_ch3.ads \ + ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch6.adb \ + ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elim.ads \ + ada/sem_eval.ads ada/sem_mech.ads ada/sem_prag.ads ada/sem_res.ads \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \ + ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \ + ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-carun8.ads \ + ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ @@ -3073,11 +3111,11 @@ ada/sem_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_dbug.ads \ ada/exp_disp.ads ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \ ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/lib.ads \ - ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \ + ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ ada/scng.adb ada/sem.ads ada/sem_cat.ads ada/sem_ch10.ads \ ada/sem_ch12.ads ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch7.ads \ @@ -3087,42 +3125,43 @@ ada/sem_ch7.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \ ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_ch8.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads ada/expander.ads \ - ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/inline.ads \ - ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \ - ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ - ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \ - ada/sem_cat.ads ada/sem_ch12.ads ada/sem_ch3.ads ada/sem_ch4.ads \ - ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_ch8.adb ada/sem_disp.ads \ - ada/sem_dist.ads ada/sem_elab.ads ada/sem_eval.ads ada/sem_intr.ads \ - ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb ada/snames.ads \ - ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \ - ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ - ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \ - ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/exp_ch7.ads ada/exp_disp.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-speche.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \ + ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ + ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ + ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch12.ads \ + ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads \ + ada/sem_ch8.adb ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \ + ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \ + ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_ch9.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ @@ -3130,24 +3169,25 @@ ada/sem_ch9.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \ ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ ada/eval_fat.ads ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_ch9.ads \ - ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \ - ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch3.ads \ - ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch8.ads \ - ada/sem_ch9.ads ada/sem_ch9.adb ada/sem_disp.ads ada/sem_dist.ads \ - ada/sem_elab.ads ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads \ - ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ - ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/sinput.adb ada/snames.ads ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ - ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/exp_disp.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/expander.ads ada/fname.ads ada/fname-uf.ads ada/freeze.ads \ + ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \ + ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ + ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch4.ads \ + ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_ch9.ads \ + ada/sem_ch9.adb ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \ + ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ + ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ @@ -3162,10 +3202,10 @@ ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_ch7.ads \ ada/exp_disp.ads ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \ ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-htable.ads \ - ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/interfac.ads ada/lib.ads ada/lib-xref.ads ada/namet.ads \ - ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/opt.ads \ - ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ + ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads \ + ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/rident.ads ada/rtsfind.ads \ ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_disp.adb \ ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ @@ -3173,32 +3213,31 @@ ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/widechar.ads + ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_dist.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ ada/exp_dist.ads ada/exp_tss.ads ada/gnat.ads ada/g-htable.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ - ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/rident.ads ada/rtsfind.ads ada/sem.ads ada/sem_dist.ads \ + ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/rtsfind.ads ada/sem.ads ada/sem_dist.ads \ ada/sem_dist.adb ada/sem_res.ads ada/sem_util.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-carun8.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ - ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/tbuild.ads ada/tree_io.ads ada/types.ads ada/types.adb \ + ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/sem_elab.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ @@ -3206,26 +3245,27 @@ ada/sem_elab.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_tss.ads \ ada/exp_util.ads ada/expander.ads ada/fname.ads ada/fname-uf.ads \ ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/interfac.ads ada/lib.ads ada/lib.adb \ - ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ - ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \ - ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_cat.ads \ - ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_elab.ads ada/sem_elab.adb \ - ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ - ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ - ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ + ada/lib.adb ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb \ + ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ + ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ + ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ + ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_elab.ads \ + ada/sem_elab.adb ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \ + ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ + ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-crc32.ads \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \ + ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/alloc.ads ada/atree.ads ada/atree.adb ada/casing.ads ada/debug.ads \ @@ -3237,38 +3277,39 @@ ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads \ ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \ ada/stand.ads ada/stringt.ads ada/system.ads ada/s-exctab.ads \ ada/s-htable.ads ada/s-htable.adb ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_eval.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/eval_fat.ads ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads \ - ada/expander.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ - ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ - ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ - ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch4.ads ada/sem_ch6.ads \ - ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \ - ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads \ - ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ - ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ - ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ - ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/eval_fat.ads ada/exp_ch7.ads ada/exp_disp.ads ada/exp_tss.ads \ + ada/exp_util.ads ada/expander.ads ada/fname.ads ada/freeze.ads \ + ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \ + ada/sem_cat.ads ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads \ + ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads ada/sem_eval.ads \ + ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ + ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ + ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ + ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/widechar.ads ada/sem_intr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ @@ -3281,12 +3322,13 @@ ada/sem_intr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_eval.ads ada/sem_intr.ads ada/sem_intr.adb ada/sem_util.ads \ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/sem_maps.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -3296,11 +3338,11 @@ ada/sem_maps.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_maps.ads ada/sem_maps.adb ada/sinfo.ads ada/sinfo.adb \ ada/sinput.ads ada/snames.ads ada/stand.ads ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/sem_mech.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ @@ -3311,73 +3353,74 @@ ada/sem_mech.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_mech.ads ada/sem_mech.adb ada/sem_util.ads ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tree_io.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/sem_prag.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ - ada/atree.adb ada/casing.ads ada/casing.adb ada/checks.ads \ - ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \ - ada/elists.ads ada/elists.adb ada/err_vars.ads ada/errout.ads \ - ada/erroutc.ads ada/eval_fat.ads ada/exp_ch7.ads ada/exp_dist.ads \ + ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ + ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ + ada/elists.adb ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ + ada/eval_fat.ads ada/exp_ch7.ads ada/exp_disp.ads ada/exp_dist.ads \ ada/exp_tss.ads ada/exp_util.ads ada/expander.ads ada/fname.ads \ ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-speche.ads \ - ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ - ada/itypes.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/lib-writ.ads ada/lib-xref.ads ada/namet.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-sort.adb ada/lib-writ.ads ada/lib-xref.ads \ + ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ + ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \ + ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \ + ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_aggr.ads \ + ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch13.ads ada/sem_ch3.ads \ + ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \ + ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads \ + ada/sem_eval.adb ada/sem_intr.ads ada/sem_mech.ads ada/sem_prag.ads \ + ada/sem_prag.adb ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads \ + ada/sem_util.ads ada/sem_util.adb ada/sem_vfpt.ads ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \ + ada/sinput.adb ada/snames.ads ada/snames.adb ada/stand.ads \ + ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ + ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ + ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ + ada/ttypes.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \ + ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ + ada/urealp.adb ada/validsw.ads ada/widechar.ads + +ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ + ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ + ada/csets.ads ada/debug.ads ada/debug_a.ads ada/debug_a.adb \ + ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ + ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_aggr.ads \ + ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_disp.ads ada/exp_pakd.ads \ + ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/expander.ads \ + ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads \ ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ ada/opt.ads ada/output.ads ada/restrict.ads ada/restrict.adb \ ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \ - ada/sem_cat.ads ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads \ - ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \ - ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb \ - ada/sem_intr.ads ada/sem_mech.ads ada/sem_prag.ads ada/sem_prag.adb \ - ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_vfpt.ads ada/sem_warn.ads ada/sinfo.ads \ - ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb \ - ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \ + ada/sem_cat.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads \ + ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \ + ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads \ + ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \ + ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \ ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \ ada/styleg-c.ads ada/stylesw.ads ada/system.ads ada/s-carun8.ads \ - ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \ - ada/widechar.ads - -ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ - ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ - ada/csets.ads ada/debug.ads ada/debug_a.ads ada/debug_a.adb \ - ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ - ada/errout.ads ada/erroutc.ads ada/eval_fat.ads ada/exp_ch11.ads \ - ada/exp_ch2.ads ada/exp_ch7.ads ada/exp_tss.ads ada/exp_util.ads \ - ada/exp_util.adb ada/expander.ads ada/fname.ads ada/fname-uf.ads \ - ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_aggr.ads ada/sem_attr.ads ada/sem_cat.ads ada/sem_ch4.ads \ - ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \ - ada/sem_elab.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \ - ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ - ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ - ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ @@ -3394,36 +3437,37 @@ ada/sem_smem.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/nlists.adb ada/opt.ads ada/output.ads ada/sem_smem.ads \ ada/sem_smem.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/snames.ads ada/stand.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/sem_type.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ - ada/einfo.ads ada/einfo.adb ada/elists.ads ada/err_vars.ads \ - ada/errout.ads ada/erroutc.ads ada/exp_tss.ads ada/exp_util.ads \ - ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ - ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ - ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ - ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ - ada/sem.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_eval.ads \ - ada/sem_res.ads ada/sem_type.ads ada/sem_type.adb ada/sem_util.ads \ - ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ - ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads ada/widechar.ads + ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \ + ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_tss.ads \ + ada/exp_util.ads ada/fname.ads ada/freeze.ads ada/get_targ.ads \ + ada/gnat.ads ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads \ + ada/g-string.ads ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads \ + ada/interfac.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ + ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/opt.ads ada/output.ads \ + ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/sem.ads ada/sem_ch6.ads ada/sem_ch8.ads \ + ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_type.adb \ + ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/casing.adb ada/checks.ads \ @@ -3432,25 +3476,26 @@ ada/sem_util.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/eval_fat.ads ada/exp_tss.ads ada/exp_util.ads ada/fname.ads \ ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ - ada/lib.adb ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb \ - ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \ - ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_eval.ads \ - ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \ - ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \ - ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \ - ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads ada/system.ads \ - ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \ - ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \ + ada/lib-sort.adb ada/lib-xref.ads ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/output.ads ada/restrict.ads ada/rident.ads ada/rtsfind.ads \ + ada/rtsfind.adb ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ + ada/sem.ads ada/sem_cat.ads ada/sem_ch7.ads ada/sem_ch8.ads \ + ada/sem_dist.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \ + ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \ + ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \ + ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \ ada/widechar.ads @@ -3462,12 +3507,12 @@ ada/sem_vfpt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/rident.ads ada/sem_vfpt.ads ada/sem_vfpt.adb ada/sinfo.ads \ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/targparm.ads ada/tree_io.ads ada/ttypef.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tree_io.ads \ + ada/ttypef.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/sem_warn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \ @@ -3475,10 +3520,10 @@ ada/sem_warn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/errout.ads ada/erroutc.ads ada/exp_tss.ads ada/exp_util.ads \ ada/fname.ads ada/freeze.ads ada/get_targ.ads ada/gnat.ads \ ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/lib.ads \ - ada/lib.adb ada/lib-list.adb ada/lib-sort.adb ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ + ada/g-utf_32.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-sort.adb \ + ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/opt.ads ada/output.ads ada/rident.ads \ ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ ada/sem.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \ @@ -3486,92 +3531,95 @@ ada/sem_warn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \ - ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sinfo-cn.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/nlists.ads ada/nlists.adb \ - ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo-cn.ads \ - ada/sinfo-cn.adb ada/sinput.ads ada/snames.ads ada/system.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/nlists.ads \ + ada/nlists.adb ada/opt.ads ada/output.ads ada/sinfo.ads \ + ada/sinfo-cn.ads ada/sinfo-cn.adb ada/sinput.ads ada/snames.ads \ + ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/sinfo.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ - ada/gnatvsn.ads ada/hostparm.ads ada/nlists.ads ada/nlists.adb \ - ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ - ada/snames.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/nlists.ads \ + ada/nlists.adb ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb \ + ada/sinput.ads ada/snames.ads ada/system.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/sinput-c.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/alloc.ads ada/casing.ads ada/debug.ads ada/gnat.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/namet.ads ada/opt.ads ada/output.ads ada/sinput.ads \ ada/sinput-c.ads ada/sinput-c.adb ada/system.ads ada/s-exctab.ads \ - ada/s-memory.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads + ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/sinput-d.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/debug.ads ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads ada/osint.ads \ ada/osint-c.ads ada/output.ads ada/sinput.ads ada/sinput-d.ads \ ada/sinput-d.adb ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/sinput-l.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ ada/gnat.ads ada/g-dyntab.ads ada/g-dyntab.adb ada/g-hesorg.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/interfac.ads ada/namet.ads ada/nlists.ads \ - ada/nlists.adb ada/opt.ads ada/osint.ads ada/output.ads ada/prep.ads \ - ada/prepcomp.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \ - ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput-l.ads \ - ada/sinput-l.adb ada/snames.ads ada/stringt.ads ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/styleg-c.ads ada/stylesw.ads \ - ada/system.ads ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads \ - ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/g-utf_32.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads ada/namet.ads \ + ada/namet.adb ada/nlists.ads ada/nlists.adb ada/opt.ads ada/osint.ads \ + ada/output.ads ada/prep.ads ada/prepcomp.ads ada/scans.ads ada/scn.ads \ + ada/scng.ads ada/scng.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/sinput-l.ads ada/sinput-l.adb ada/snames.ads ada/stringt.ads \ + ada/style.ads ada/styleg.ads ada/styleg.adb ada/styleg-c.ads \ + ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-crc32.adb \ + ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sinput.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/debug.ads ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/namet.adb \ ada/opt.ads ada/output.ads ada/sinput.ads ada/sinput.adb ada/system.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-secsta.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/widechar.ads ada/snames.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/opt.ads ada/output.ads \ ada/snames.ads ada/snames.adb ada/system.ads ada/s-exctab.ads \ - ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/sprint.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ @@ -3584,28 +3632,28 @@ ada/sprint.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sinput-d.ads ada/snames.ads ada/sprint.ads ada/sprint.adb \ ada/stand.ads ada/stringt.ads ada/stringt.adb ada/system.ads \ ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/stand.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/opt.ads ada/output.ads ada/stand.ads \ ada/stand.adb ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/stringt.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/opt.ads ada/output.ads \ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-carun8.ads \ - ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/types.adb ada/unchconv.ads \ - ada/unchdeal.ads + ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/types.adb \ + ada/unchconv.ads ada/unchdeal.ads ada/style.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ @@ -3617,11 +3665,11 @@ ada/style.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/snames.ads ada/stand.ads ada/style.ads ada/styleg.ads \ ada/styleg.adb ada/styleg-c.ads ada/styleg-c.adb ada/stylesw.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/styleg-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ @@ -3630,19 +3678,20 @@ ada/styleg-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/output.ads ada/sinfo.ads ada/sinput.ads ada/snames.ads \ ada/stand.ads ada/styleg.ads ada/styleg-c.ads ada/styleg-c.adb \ ada/stylesw.ads ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/styleg.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/casing.ads \ ada/csets.ads ada/debug.ads ada/err_vars.ads ada/gnat.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/opt.ads ada/output.ads ada/scans.ads ada/sinput.ads ada/styleg.ads \ ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-exctab.ads \ - ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ - ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/stylesw.o : ada/gnat.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/opt.ads ada/stylesw.ads ada/stylesw.adb \ @@ -3652,26 +3701,26 @@ ada/stylesw.o : ada/gnat.ads ada/g-string.ads ada/gnatvsn.ads \ ada/switch-b.o : ada/ada.ads ada/a-except.ads ada/debug.ads ada/gnat.ads \ ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads \ ada/opt.ads ada/osint.ads ada/switch.ads ada/switch-b.ads \ - ada/switch-b.adb ada/system.ads ada/s-exctab.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads + ada/switch-b.adb ada/system.ads ada/s-exctab.ads ada/s-parame.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/switch-c.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/lib.ads ada/opt.ads ada/osint.ads ada/output.ads \ ada/prepcomp.ads ada/stylesw.ads ada/switch.ads ada/switch-c.ads \ ada/switch-c.adb ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/validsw.ads + ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/validsw.ads ada/switch.o : ada/ada.ads ada/a-except.ads ada/switch.ads ada/switch.adb \ ada/system.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/types.ads \ - ada/unchconv.ads ada/unchdeal.ads + ada/s-parame.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ + ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ + ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/system.o : ada/system.ads @@ -3685,29 +3734,30 @@ ada/targparm.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/csets.ads \ ada/debug.ads ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/namet.ads ada/namet.adb \ ada/opt.ads ada/osint.ads ada/output.ads ada/rident.ads ada/system.ads \ - ada/s-exctab.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-rident.ads \ - ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \ - ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ - ada/targparm.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/widechar.ads + ada/s-exctab.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/targparm.ads ada/targparm.adb ada/tree_io.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/tbuild.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb \ - ada/elists.ads ada/fname.ads ada/gnat.ads ada/g-hesora.ads \ - ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ - ada/hostparm.ads ada/lib.ads ada/lib.adb ada/lib-list.adb \ - ada/lib-sort.adb ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ - ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/elists.ads ada/elists.adb ada/fname.ads ada/gnat.ads \ + ada/g-hesora.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ + ada/gnatvsn.ads ada/hostparm.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-sort.adb ada/namet.ads ada/namet.adb \ + ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads \ + ada/output.ads ada/restrict.ads ada/rident.ads ada/sinfo.ads \ + ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \ + ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \ + ada/s-htable.ads ada/s-imgenu.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ + ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/tree_gen.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/casing.ads ada/debug.ads ada/einfo.ads ada/elists.ads ada/fname.ads \ @@ -3716,17 +3766,17 @@ ada/tree_gen.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/osint.ads ada/osint-c.ads ada/output.ads ada/repinfo.ads \ ada/sinfo.ads ada/sinput.ads ada/snames.ads ada/stand.ads \ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-memory.ads \ - ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_gen.ads ada/tree_gen.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/urealp.ads + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_gen.ads \ + ada/tree_gen.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/tree_io.o : ada/ada.ads ada/a-except.ads ada/debug.ads ada/gnat.ads \ ada/g-os_lib.ads ada/g-string.ads ada/output.ads ada/system.ads \ - ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/tree_io.ads ada/tree_io.adb \ - ada/types.ads ada/unchconv.ads ada/unchdeal.ads + ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-parame.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/tree_io.ads \ + ada/tree_io.adb ada/types.ads ada/unchconv.ads ada/unchdeal.ads ada/treepr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads ada/einfo.ads \ @@ -3738,20 +3788,21 @@ ada/treepr.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/sem_mech.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/treepr.ads ada/treepr.adb ada/treeprs.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/treepr.ads ada/treepr.adb \ + ada/treeprs.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/treeprs.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/opt.ads ada/output.ads ada/sinfo.ads \ - ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/treeprs.ads ada/types.ads \ - ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/treeprs.ads \ + ada/types.ads ada/uintp.ads ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/ttypef.o : ada/system.ads ada/ttypef.ads @@ -3760,18 +3811,18 @@ ada/ttypes.o : ada/get_targ.ads ada/system.ads ada/s-exctab.ads \ ada/unchconv.ads ada/unchdeal.ads ada/types.o : ada/ada.ads ada/a-except.ads ada/system.ads ada/s-carun8.ads \ - ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/types.ads ada/types.adb \ - ada/unchconv.ads ada/unchdeal.ads + ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-parame.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/types.ads \ + ada/types.adb ada/unchconv.ads ada/unchdeal.ads ada/uintp.o : ada/ada.ads ada/a-except.ads ada/a-uncdea.ads ada/alloc.ads \ ada/debug.ads ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads \ ada/output.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ - ada/s-htable.adb ada/s-memory.ads ada/s-stalib.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/s-htable.adb ada/s-memory.ads ada/s-parame.ads ada/s-stalib.ads \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ ada/unchconv.ads ada/unchdeal.ads ada/uname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ @@ -3783,28 +3834,29 @@ ada/uname.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/atree.ads \ ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imgenu.ads \ - ada/s-memory.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ - ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/uname.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads + ada/s-memory.ads ada/s-parame.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ + ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ + ada/uname.ads ada/uname.adb ada/unchconv.ads ada/unchdeal.ads \ + ada/urealp.ads ada/widechar.ads ada/urealp.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-htable.ads ada/g-os_lib.ads ada/g-string.ads \ ada/gnatvsn.ads ada/hostparm.ads ada/opt.ads ada/output.ads \ ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-memory.ads \ - ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ - ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \ - ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/urealp.adb + ada/s-parame.ads ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/tree_io.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/usage.o : ada/ada.ads ada/a-except.ads ada/alloc.ads ada/debug.ads \ ada/gnat.ads ada/g-os_lib.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/namet.ads ada/opt.ads ada/osint.ads ada/output.ads \ - ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-stalib.ads \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \ - ada/table.adb ada/tree_io.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/usage.ads ada/usage.adb + ada/system.ads ada/s-exctab.ads ada/s-memory.ads ada/s-parame.ads \ + ada/s-stalib.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/usage.ads ada/usage.adb ada/validsw.o : ada/gnat.ads ada/g-string.ads ada/gnatvsn.ads \ ada/hostparm.ads ada/opt.ads ada/system.ads ada/s-exctab.ads \ @@ -3813,10 +3865,10 @@ ada/validsw.o : ada/gnat.ads ada/g-string.ads ada/gnatvsn.ads \ ada/widechar.o : ada/ada.ads ada/a-except.ads ada/gnat.ads \ ada/g-string.ads ada/gnatvsn.ads ada/hostparm.ads ada/interfac.ads \ - ada/opt.ads ada/system.ads ada/s-exctab.ads ada/s-soflin.ads \ - ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ - ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcnv.ads ada/s-wchcnv.adb \ - ada/s-wchcon.ads ada/s-wchjis.ads ada/types.ads ada/unchconv.ads \ - ada/unchdeal.ads ada/widechar.ads ada/widechar.adb + ada/opt.ads ada/system.ads ada/s-exctab.ads ada/s-parame.ads \ + ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ + ada/s-stoele.adb ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcnv.ads \ + ada/s-wchcnv.adb ada/s-wchcon.ads ada/s-wchjis.ads ada/types.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/widechar.ads ada/widechar.adb # end of regular dependencies diff --git a/gcc/ada/Makefile.in b/gcc/ada/Makefile.in index f13fed7fb76..2d7224056fe 100644 --- a/gcc/ada/Makefile.in +++ b/gcc/ada/Makefile.in @@ -348,6 +348,11 @@ s-osprim.adb rts/s.ads $(MV) rts/s.ads rts/system.ads $(MAKE) $(FLAGS_TO_PASS) \ @@ -1923,7 +1771,8 @@ gnatlib-sjlj: ../stamp-gnatlib1 THREAD_KIND="$(THREAD_KIND)" \ TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib -gnatlib-zcx: ../stamp-gnatlib1 +gnatlib-zcx: + $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="-gcc" ../stamp-gnatlib1 sed -e 's/ZCX_By_Default.*/ZCX_By_Default : constant Boolean := True;/' rts/system.ads > rts/s.ads $(MV) rts/s.ads rts/system.ads $(MAKE) $(FLAGS_TO_PASS) \ @@ -1998,16 +1847,18 @@ adadecode.o : adadecode.c adadecode.h aux-io.o : aux-io.c argv.o : argv.c cal.o : cal.c -deftarg.o : deftarg.c +deftarg.o : deftarg.c errno.o : errno.c -exit.o : raise.h exit.c +exit.o : adaint.h exit.c expect.o : expect.c -final.o : raise.h final.c +final.o : final.c gmem.o : gmem.c link.o : link.c mkdir.o : mkdir.c socket.o : socket.c gsocket.h sysdep.o : sysdep.c +raise-gcc.o : raise-gcc.c raise.h +raise.o : raise.c raise.h gen-soccon: gen-soccon.c gsocket.h $(CC) $(ALL_CFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ @@ -2032,10 +1883,6 @@ seh_init.o : seh_init.c raise.h $(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) -O0 \ $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) -raise.o : raise.c raise.h - $(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) \ - $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) - # Need to keep the frame pointer in this file to pop the stack properly on # some targets. tracebak.o : tracebak.c tb-alvms.c tb-alvxw.c diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl index aa92689fb11..d1d34ee958f 100644 --- a/gcc/ada/Makefile.rtl +++ b/gcc/ada/Makefile.rtl @@ -391,9 +391,14 @@ GNATRTL_NONTASKING_OBJS= \ s-fatsfl$(objext) \ s-ficobl$(objext) \ s-fileio$(objext) \ + s-filofl$(objext) \ + s-fishfl$(objext) \ s-finimp$(objext) \ s-finroo$(objext) \ s-fore$(objext) \ + s-fvadfl$(objext) \ + s-fvaffl$(objext) \ + s-fvagfl$(objext) \ s-geveop$(objext) \ s-htable$(objext) \ s-imgbiu$(objext) \ diff --git a/gcc/ada/a-astaco.adb b/gcc/ada/a-astaco.adb index 1df42f37121..b13f426c0e4 100644 --- a/gcc/ada/a-astaco.adb +++ b/gcc/ada/a-astaco.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-calend-mingw.adb b/gcc/ada/a-calend-mingw.adb index 71599bd419c..0ec1ca94a8c 100644 --- a/gcc/ada/a-calend-mingw.adb +++ b/gcc/ada/a-calend-mingw.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -33,6 +33,9 @@ -- This is the Windows NT/95 version +-- Why do we need separate version ??? +-- Do we need *this* much code duplication??? + with System.OS_Primitives; -- used for Clock @@ -173,7 +176,6 @@ package body Ada.Calendar is DM : Month_Number; DD : Day_Number; DS : Day_Duration; - begin Split (Date, DY, DM, DD, DS); return DD; @@ -203,7 +205,6 @@ package body Ada.Calendar is DM : Month_Number; DD : Day_Number; DS : Day_Duration; - begin Split (Date, DY, DM, DD, DS); return DS; @@ -366,7 +367,7 @@ package body Ada.Calendar is Sub_Sec : constant Duration := Seconds - Duration (Int_Secs); begin Date := Time ((Now - epoch_1970) * system_time_ns / Sec_Unit) + - Sub_Sec; + Sub_Sec; end; if Add_One_Day then diff --git a/gcc/ada/a-calend-vms.adb b/gcc/ada/a-calend-vms.adb index 391e9fb69a7..2a5c70f6bf8 100644 --- a/gcc/ada/a-calend-vms.adb +++ b/gcc/ada/a-calend-vms.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-calend-vms.ads b/gcc/ada/a-calend-vms.ads index 1242ef6d65b..ed3c9648458 100644 --- a/gcc/ada/a-calend-vms.ads +++ b/gcc/ada/a-calend-vms.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-calend.adb b/gcc/ada/a-calend.adb index c0180e4e995..581295818e1 100644 --- a/gcc/ada/a-calend.adb +++ b/gcc/ada/a-calend.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-calend.ads b/gcc/ada/a-calend.ads index 108d1a8883e..a394e2bbcaf 100644 --- a/gcc/ada/a-calend.ads +++ b/gcc/ada/a-calend.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-cdlili.adb b/gcc/ada/a-cdlili.adb index a0a6f3277f5..958a105a734 100644 --- a/gcc/ada/a-cdlili.adb +++ b/gcc/ada/a-cdlili.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -34,6 +34,7 @@ ------------------------------------------------------------------------------ with System; use type System.Address; + with Ada.Unchecked_Deallocation; package body Ada.Containers.Doubly_Linked_Lists is @@ -129,7 +130,8 @@ package body Ada.Containers.Doubly_Linked_Lists is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1) is + Count : Count_Type := 1) + is begin Insert (Container, No_Element, New_Item, Count); end Append; @@ -185,7 +187,8 @@ package body Ada.Containers.Doubly_Linked_Lists is function Contains (Container : List; - Item : Element_Type) return Boolean is + Item : Element_Type) return Boolean + is begin return Find (Container, Item) /= No_Element; end Contains; @@ -202,8 +205,6 @@ package body Ada.Containers.Doubly_Linked_Lists is X : Node_Access; begin - pragma Assert (Vet (Position), "bad cursor in Delete"); - if Position.Node = null then raise Constraint_Error; end if; @@ -212,13 +213,16 @@ package body Ada.Containers.Doubly_Linked_Lists is raise Program_Error; end if; + pragma Assert (Vet (Position), "bad cursor in Delete"); + if Position.Node = Container.First then Delete_First (Container, Count); - Position := First (Container); + Position := No_Element; -- Post-York behavior return; end if; if Count = 0 then + Position := No_Element; -- Post-York behavior return; end if; @@ -247,6 +251,8 @@ package body Ada.Containers.Doubly_Linked_Lists is Free (X); end loop; + + Position := No_Element; -- Post-York behavior end Delete; ------------------ @@ -329,12 +335,12 @@ package body Ada.Containers.Doubly_Linked_Lists is function Element (Position : Cursor) return Element_Type is begin - pragma Assert (Vet (Position), "bad cursor in Element"); - if Position.Node = null then raise Constraint_Error; end if; + pragma Assert (Vet (Position), "bad cursor in Element"); + return Position.Node.Element; end Element; @@ -354,11 +360,11 @@ package body Ada.Containers.Doubly_Linked_Lists is Node := Container.First; else - pragma Assert (Vet (Position), "bad cursor in Find"); - if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; + + pragma Assert (Vet (Position), "bad cursor in Find"); end if; while Node /= null loop @@ -604,12 +610,12 @@ package body Ada.Containers.Doubly_Linked_Lists is New_Node : Node_Access; begin - pragma Assert (Vet (Before), "bad cursor in Insert"); + if Before.Container /= null then + if Before.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Container'Unrestricted_Access - then - raise Program_Error; + pragma Assert (Vet (Before), "bad cursor in Insert"); end if; if Count = 0 then @@ -656,12 +662,12 @@ package body Ada.Containers.Doubly_Linked_Lists is New_Node : Node_Access; begin - pragma Assert (Vet (Before), "bad cursor in Insert"); + if Before.Container /= null then + if Before.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Container'Unrestricted_Access - then - raise Program_Error; + pragma Assert (Vet (Before), "bad cursor in Insert"); end if; if Count = 0 then @@ -937,12 +943,12 @@ package body Ada.Containers.Doubly_Linked_Lists is Process : not null access procedure (Element : in Element_Type)) is begin - pragma Assert (Vet (Position), "bad cursor in Query_Element"); - if Position.Node = null then raise Constraint_Error; end if; + pragma Assert (Vet (Position), "bad cursor in Query_Element"); + declare C : List renames Position.Container.all'Unrestricted_Access.all; B : Natural renames C.Busy; @@ -1018,97 +1024,46 @@ package body Ada.Containers.Doubly_Linked_Lists is end loop; end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------------- -- Replace_Element -- --------------------- procedure Replace_Element - (Position : Cursor; - By : Element_Type) + (Container : in out List; + Position : Cursor; + New_Item : Element_Type) is begin - pragma Assert (Vet (Position), "bad cursor in Replace_Element"); - if Position.Container = null then raise Constraint_Error; end if; - if Position.Container.Lock > 0 then + if Position.Container /= Container'Unchecked_Access then raise Program_Error; end if; - Position.Node.Element := By; - end Replace_Element; - - ------------------ - -- Reverse_Find -- - ------------------ - - function Reverse_Find - (Container : List; - Item : Element_Type; - Position : Cursor := No_Element) return Cursor - is - Node : Node_Access := Position.Node; - - begin - if Node = null then - Node := Container.Last; - - else - pragma Assert (Vet (Position), "bad cursor in Reverse_Find"); - - if Position.Container /= Container'Unrestricted_Access then - raise Program_Error; - end if; + if Container.Lock > 0 then + raise Program_Error; end if; - while Node /= null loop - if Node.Element = Item then - return Cursor'(Container'Unchecked_Access, Node); - end if; - - Node := Node.Prev; - end loop; - - return No_Element; - end Reverse_Find; - - --------------------- - -- Reverse_Iterate -- - --------------------- - - procedure Reverse_Iterate - (Container : List; - Process : not null access procedure (Position : Cursor)) - is - C : List renames Container'Unrestricted_Access.all; - B : Natural renames C.Busy; - - Node : Node_Access := Container.Last; - - begin - B := B + 1; - - begin - while Node /= null loop - Process (Cursor'(Container'Unchecked_Access, Node)); - Node := Node.Prev; - end loop; - exception - when others => - B := B - 1; - raise; - end; + pragma Assert (Vet (Position), "bad cursor in Replace_Element"); - B := B - 1; - end Reverse_Iterate; + Position.Node.Element := New_Item; + end Replace_Element; - ------------------ - -- Reverse_List -- - ------------------ + ---------------------- + -- Reverse_Elements -- + ---------------------- - procedure Reverse_List (Container : in out List) is + procedure Reverse_Elements (Container : in out List) is I : Node_Access := Container.First; J : Node_Access := Container.Last; @@ -1152,7 +1107,7 @@ package body Ada.Containers.Doubly_Linked_Lists is end if; end Swap; - -- Start of processing for Reverse_List + -- Start of processing for Reverse_Elements begin if Container.Length <= 1 then @@ -1188,7 +1143,72 @@ package body Ada.Containers.Doubly_Linked_Lists is pragma Assert (Container.First.Prev = null); pragma Assert (Container.Last.Next = null); - end Reverse_List; + end Reverse_Elements; + + ------------------ + -- Reverse_Find -- + ------------------ + + function Reverse_Find + (Container : List; + Item : Element_Type; + Position : Cursor := No_Element) return Cursor + is + Node : Node_Access := Position.Node; + + begin + if Node = null then + Node := Container.Last; + + else + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + + pragma Assert (Vet (Position), "bad cursor in Reverse_Find"); + end if; + + while Node /= null loop + if Node.Element = Item then + return Cursor'(Container'Unchecked_Access, Node); + end if; + + Node := Node.Prev; + end loop; + + return No_Element; + end Reverse_Find; + + --------------------- + -- Reverse_Iterate -- + --------------------- + + procedure Reverse_Iterate + (Container : List; + Process : not null access procedure (Position : Cursor)) + is + C : List renames Container'Unrestricted_Access.all; + B : Natural renames C.Busy; + + Node : Node_Access := Container.Last; + + begin + B := B + 1; + + begin + while Node /= null loop + Process (Cursor'(Container'Unchecked_Access, Node)); + Node := Node.Prev; + end loop; + + exception + when others => + B := B - 1; + raise; + end; + + B := B - 1; + end Reverse_Iterate; ------------ -- Splice -- @@ -1200,12 +1220,12 @@ package body Ada.Containers.Doubly_Linked_Lists is Source : in out List) is begin - pragma Assert (Vet (Before), "bad cursor in Splice"); + if Before.Container /= null then + if Before.Container /= Target'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Target'Unrestricted_Access - then - raise Program_Error; + pragma Assert (Vet (Before), "bad cursor in Splice"); end if; if Target'Address = Source'Address @@ -1274,13 +1294,12 @@ package body Ada.Containers.Doubly_Linked_Lists is Position : Cursor) is begin - pragma Assert (Vet (Before), "bad Before cursor in Splice"); - pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Before.Container /= null then + if Before.Container /= Target'Unchecked_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Target'Unchecked_Access - then - raise Program_Error; + pragma Assert (Vet (Before), "bad Before cursor in Splice"); end if; if Position.Node = null then @@ -1291,6 +1310,8 @@ package body Ada.Containers.Doubly_Linked_Lists is raise Program_Error; end if; + pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Position.Node = Before.Node or else Position.Node.Next = Before.Node then @@ -1378,13 +1399,12 @@ package body Ada.Containers.Doubly_Linked_Lists is return; end if; - pragma Assert (Vet (Before), "bad Before cursor in Splice"); - pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Before.Container /= null then + if Before.Container /= Target'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Target'Unrestricted_Access - then - raise Program_Error; + pragma Assert (Vet (Before), "bad Before cursor in Splice"); end if; if Position.Node = null then @@ -1395,6 +1415,8 @@ package body Ada.Containers.Doubly_Linked_Lists is raise Program_Error; end if; + pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Target.Length = Count_Type'Last then raise Constraint_Error; end if; @@ -1474,18 +1496,20 @@ package body Ada.Containers.Doubly_Linked_Lists is -- Swap -- ---------- - procedure Swap (I, J : Cursor) is + procedure Swap + (Container : in out List; + I, J : Cursor) + is begin - pragma Assert (Vet (I), "bad I cursor in Swap"); - pragma Assert (Vet (J), "bad J cursor in Swap"); - if I.Node = null or else J.Node = null then raise Constraint_Error; end if; - if I.Container /= J.Container then + if I.Container /= Container'Unchecked_Access + or else J.Container /= Container'Unchecked_Access + then raise Program_Error; end if; @@ -1493,15 +1517,19 @@ package body Ada.Containers.Doubly_Linked_Lists is return; end if; - if I.Container.Lock > 0 then + if Container.Lock > 0 then raise Program_Error; end if; + pragma Assert (Vet (I), "bad I cursor in Swap"); + pragma Assert (Vet (J), "bad J cursor in Swap"); + declare EI : Element_Type renames I.Node.Element; EJ : Element_Type renames J.Node.Element; EI_Copy : constant Element_Type := EI; + begin EI := EJ; EJ := EI_Copy; @@ -1514,11 +1542,9 @@ package body Ada.Containers.Doubly_Linked_Lists is procedure Swap_Links (Container : in out List; - I, J : Cursor) is + I, J : Cursor) + is begin - pragma Assert (Vet (I), "bad I cursor in Swap_Links"); - pragma Assert (Vet (J), "bad J cursor in Swap_Links"); - if I.Node = null or else J.Node = null then @@ -1539,6 +1565,9 @@ package body Ada.Containers.Doubly_Linked_Lists is raise Program_Error; end if; + pragma Assert (Vet (I), "bad I cursor in Swap_Links"); + pragma Assert (Vet (J), "bad J cursor in Swap_Links"); + declare I_Next : constant Cursor := Next (I); @@ -1570,20 +1599,24 @@ package body Ada.Containers.Doubly_Linked_Lists is -------------------- procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)) + (Container : in out List; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)) is begin - pragma Assert (Vet (Position), "bad cursor in Update_Element"); - if Position.Node = null then raise Constraint_Error; end if; + if Position.Container /= Container'Unchecked_Access then + raise Program_Error; + end if; + + pragma Assert (Vet (Position), "bad cursor in Update_Element"); + declare - C : List renames Position.Container.all'Unrestricted_Access.all; - B : Natural renames C.Busy; - L : Natural renames C.Lock; + B : Natural renames Container.Busy; + L : Natural renames Container.Lock; begin B := B + 1; @@ -1761,4 +1794,12 @@ package body Ada.Containers.Doubly_Linked_Lists is end loop; end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Doubly_Linked_Lists; diff --git a/gcc/ada/a-cdlili.ads b/gcc/ada/a-cdlili.ads index 70c0f806f5b..3682104cba9 100644 --- a/gcc/ada/a-cdlili.ads +++ b/gcc/ada/a-cdlili.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -63,49 +63,51 @@ package Ada.Containers.Doubly_Linked_Lists is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out List; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)); - - procedure Replace_Element - (Position : Cursor; - By : Element_Type); + (Container : in out List; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)); procedure Move (Target : in out List; Source : in out List); - procedure Prepend + procedure Insert (Container : in out List; + Before : Cursor; New_Item : Element_Type; Count : Count_Type := 1); - procedure Append + procedure Insert (Container : in out List; + Before : Cursor; New_Item : Element_Type; + Position : out Cursor; Count : Count_Type := 1); procedure Insert (Container : in out List; Before : Cursor; - New_Item : Element_Type; + Position : out Cursor; Count : Count_Type := 1); - procedure Insert + procedure Prepend (Container : in out List; - Before : Cursor; New_Item : Element_Type; - Position : out Cursor; Count : Count_Type := 1); - procedure Insert + procedure Append (Container : in out List; - Before : Cursor; - Position : out Cursor; + New_Item : Element_Type; Count : Count_Type := 1); procedure Delete @@ -121,21 +123,11 @@ package Ada.Containers.Doubly_Linked_Lists is (Container : in out List; Count : Count_Type := 1); - generic - with function "<" (Left, Right : Element_Type) return Boolean is <>; - package Generic_Sorting is - - function Is_Sorted (Container : List) return Boolean; - - procedure Sort (Container : in out List); + procedure Reverse_Elements (Container : in out List); - procedure Merge (Target, Source : in out List); - - end Generic_Sorting; - - procedure Reverse_List (Container : in out List); - - procedure Swap (I, J : Cursor); + procedure Swap + (Container : in out List; + I, J : Cursor); procedure Swap_Links (Container : in out List; @@ -149,13 +141,13 @@ package Ada.Containers.Doubly_Linked_Lists is procedure Splice (Target : in out List; Before : Cursor; - Position : Cursor); + Source : in out List; + Position : in out Cursor); procedure Splice (Target : in out List; Before : Cursor; - Source : in out List; - Position : in out Cursor); + Position : Cursor); function First (Container : List) return Cursor; @@ -165,9 +157,13 @@ package Ada.Containers.Doubly_Linked_Lists is function Last_Element (Container : List) return Element_Type; - function Contains - (Container : List; - Item : Element_Type) return Boolean; + function Next (Position : Cursor) return Cursor; + + procedure Next (Position : in out Cursor); + + function Previous (Position : Cursor) return Cursor; + + procedure Previous (Position : in out Cursor); function Find (Container : List; @@ -179,13 +175,9 @@ package Ada.Containers.Doubly_Linked_Lists is Item : Element_Type; Position : Cursor := No_Element) return Cursor; - function Next (Position : Cursor) return Cursor; - - function Previous (Position : Cursor) return Cursor; - - procedure Next (Position : in out Cursor); - - procedure Previous (Position : in out Cursor); + function Contains + (Container : List; + Item : Element_Type) return Boolean; function Has_Element (Position : Cursor) return Boolean; @@ -197,6 +189,18 @@ package Ada.Containers.Doubly_Linked_Lists is (Container : List; Process : not null access procedure (Position : Cursor)); + generic + with function "<" (Left, Right : Element_Type) return Boolean is <>; + package Generic_Sorting is + + function Is_Sorted (Container : List) return Boolean; + + procedure Sort (Container : in out List); + + procedure Merge (Target, Source : in out List); + + end Generic_Sorting; + private type Node_Type; type Node_Access is access Node_Type; @@ -248,6 +252,18 @@ private Node : Node_Access; end record; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); + + for Cursor'Write use Write; + No_Element : constant Cursor := Cursor'(null, null); end Ada.Containers.Doubly_Linked_Lists; diff --git a/gcc/ada/a-cgaaso.adb b/gcc/ada/a-cgaaso.adb index 6727c034d2e..cd4cfaba076 100644 --- a/gcc/ada/a-cgaaso.adb +++ b/gcc/ada/a-cgaaso.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-cgaaso.ads b/gcc/ada/a-cgaaso.ads index 6f8cb1d502e..e9d031990d7 100644 --- a/gcc/ada/a-cgaaso.ads +++ b/gcc/ada/a-cgaaso.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-cgarso.adb b/gcc/ada/a-cgarso.adb index 60eef4cae73..8d5a08b4f14 100644 --- a/gcc/ada/a-cgarso.adb +++ b/gcc/ada/a-cgarso.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-cgcaso.adb b/gcc/ada/a-cgcaso.adb index 73cfac69d4b..bef6fb0793a 100644 --- a/gcc/ada/a-cgcaso.adb +++ b/gcc/ada/a-cgcaso.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chacon.adb b/gcc/ada/a-chacon.adb index 4049b937580..9884337fea7 100755 --- a/gcc/ada/a-chacon.adb +++ b/gcc/ada/a-chacon.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chacon.ads b/gcc/ada/a-chacon.ads index 7c36c817784..9ce9337291e 100755 --- a/gcc/ada/a-chacon.ads +++ b/gcc/ada/a-chacon.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chahan.adb b/gcc/ada/a-chahan.adb index 3af220ef05d..61a23d858db 100644 --- a/gcc/ada/a-chahan.adb +++ b/gcc/ada/a-chahan.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,9 +31,9 @@ -- -- ------------------------------------------------------------------------------ -with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; -with Ada.Strings.Maps; use Ada.Strings.Maps; -with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants; +with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; +with Ada.Strings.Maps; use Ada.Strings.Maps; +with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants; package body Ada.Characters.Handling is diff --git a/gcc/ada/a-chahan.ads b/gcc/ada/a-chahan.ads index 7bc2ded790b..ccb5825b9bb 100644 --- a/gcc/ada/a-chahan.ads +++ b/gcc/ada/a-chahan.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chlat9.ads b/gcc/ada/a-chlat9.ads index 30f351af829..b183a477fad 100644 --- a/gcc/ada/a-chlat9.ads +++ b/gcc/ada/a-chlat9.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chtgke.adb b/gcc/ada/a-chtgke.adb index 2caddad7ce2..5203890a594 100644 --- a/gcc/ada/a-chtgke.adb +++ b/gcc/ada/a-chtgke.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chtgke.ads b/gcc/ada/a-chtgke.ads index e56c31b3f4e..de91de72c07 100644 --- a/gcc/ada/a-chtgke.ads +++ b/gcc/ada/a-chtgke.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-chtgop.adb b/gcc/ada/a-chtgop.adb index 9793f967e01..137b27c0061 100644 --- a/gcc/ada/a-chtgop.adb +++ b/gcc/ada/a-chtgop.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-chzla1.ads b/gcc/ada/a-chzla1.ads index 13496b66dc0..f6ffe5bd195 100644 --- a/gcc/ada/a-chzla1.ads +++ b/gcc/ada/a-chzla1.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-chzla9.ads b/gcc/ada/a-chzla9.ads index 67459241dc7..8e95cb6f4f3 100644 --- a/gcc/ada/a-chzla9.ads +++ b/gcc/ada/a-chzla9.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-cidlli.adb b/gcc/ada/a-cidlli.adb index becdae2ecb5..46d94449b03 100644 --- a/gcc/ada/a-cidlli.adb +++ b/gcc/ada/a-cidlli.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -211,7 +211,8 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is function Contains (Container : List; - Item : Element_Type) return Boolean is + Item : Element_Type) return Boolean + is begin return Find (Container, Item) /= No_Element; end Contains; @@ -228,23 +229,28 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is X : Node_Access; begin - pragma Assert (Vet (Position), "bad cursor in Delete"); - if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; + pragma Assert (Vet (Position), "bad cursor in Delete"); + if Position.Node = Container.First then Delete_First (Container, Count); - Position := First (Container); + Position := No_Element; -- Post-York behavior return; end if; if Count = 0 then + Position := No_Element; -- Post-York behavior return; end if; @@ -273,6 +279,8 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is Free (X); end loop; + + Position := No_Element; -- Post-York behavior end Delete; ------------------ @@ -355,12 +363,16 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is function Element (Position : Cursor) return Element_Type is begin - pragma Assert (Vet (Position), "bad cursor in Element"); - if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position), "bad cursor in Element"); + return Position.Node.Element.all; end Element; @@ -380,11 +392,15 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is Node := Container.First; else - pragma Assert (Vet (Position), "bad cursor in Find"); + if Node.Element = null then + raise Program_Error; + end if; if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; + + pragma Assert (Vet (Position), "bad cursor in Find"); end if; while Node /= null loop @@ -635,12 +651,18 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is New_Node : Node_Access; begin - pragma Assert (Vet (Before), "bad cursor in Insert"); + if Before.Container /= null then + if Before.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Container'Unrestricted_Access - then - raise Program_Error; + if Before.Node = null + or else Before.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Before), "bad cursor in Insert"); end if; if Count = 0 then @@ -942,12 +964,16 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is Process : not null access procedure (Element : in Element_Type)) is begin - pragma Assert (Vet (Position), "bad cursor in Query_Element"); - if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position), "bad cursor in Query_Element"); + declare C : List renames Position.Container.all'Unrestricted_Access.all; B : Natural renames C.Busy; @@ -1024,102 +1050,56 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is end loop; end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------------- -- Replace_Element -- --------------------- procedure Replace_Element - (Position : Cursor; - By : Element_Type) + (Container : in out List; + Position : Cursor; + New_Item : Element_Type) is begin - pragma Assert (Vet (Position), "bad cursor in Replace_Element"); - if Position.Container = null then raise Constraint_Error; end if; - if Position.Container.Lock > 0 then + if Position.Container /= Container'Unchecked_Access then raise Program_Error; end if; - declare - X : Element_Access := Position.Node.Element; - begin - Position.Node.Element := new Element_Type'(By); - Free (X); - end; - end Replace_Element; - - ------------------ - -- Reverse_Find -- - ------------------ - - function Reverse_Find - (Container : List; - Item : Element_Type; - Position : Cursor := No_Element) return Cursor - is - Node : Node_Access := Position.Node; - - begin - if Node = null then - Node := Container.Last; - - else - pragma Assert (Vet (Position), "bad cursor in Reverse_Find"); - - if Position.Container /= Container'Unrestricted_Access then - raise Program_Error; - end if; + if Position.Container.Lock > 0 then + raise Program_Error; end if; - while Node /= null loop - if Node.Element.all = Item then - return Cursor'(Container'Unchecked_Access, Node); - end if; - - Node := Node.Prev; - end loop; - - return No_Element; - end Reverse_Find; - - --------------------- - -- Reverse_Iterate -- - --------------------- - - procedure Reverse_Iterate - (Container : List; - Process : not null access procedure (Position : in Cursor)) - is - C : List renames Container'Unrestricted_Access.all; - B : Natural renames C.Busy; + if Position.Node.Element = null then + raise Program_Error; + end if; - Node : Node_Access := Container.Last; + pragma Assert (Vet (Position), "bad cursor in Replace_Element"); - begin - B := B + 1; + declare + X : Element_Access := Position.Node.Element; begin - while Node /= null loop - Process (Cursor'(Container'Unchecked_Access, Node)); - Node := Node.Prev; - end loop; - exception - when others => - B := B - 1; - raise; + Position.Node.Element := new Element_Type'(New_Item); + Free (X); end; + end Replace_Element; - B := B - 1; - end Reverse_Iterate; - - ------------------ - -- Reverse_List -- - ------------------ + ---------------------- + -- Reverse_Elements -- + ---------------------- - procedure Reverse_List (Container : in out List) is + procedure Reverse_Elements (Container : in out List) is I : Node_Access := Container.First; J : Node_Access := Container.Last; @@ -1163,7 +1143,7 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is end if; end Swap; - -- Start of processing for Reverse_List + -- Start of processing for Reverse_Elements begin if Container.Length <= 1 then @@ -1199,7 +1179,75 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is pragma Assert (Container.First.Prev = null); pragma Assert (Container.Last.Next = null); - end Reverse_List; + end Reverse_Elements; + + ------------------ + -- Reverse_Find -- + ------------------ + + function Reverse_Find + (Container : List; + Item : Element_Type; + Position : Cursor := No_Element) return Cursor + is + Node : Node_Access := Position.Node; + + begin + if Node = null then + Node := Container.Last; + + else + if Node.Element = null then + raise Program_Error; + end if; + + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + + pragma Assert (Vet (Position), "bad cursor in Reverse_Find"); + end if; + + while Node /= null loop + if Node.Element.all = Item then + return Cursor'(Container'Unchecked_Access, Node); + end if; + + Node := Node.Prev; + end loop; + + return No_Element; + end Reverse_Find; + + --------------------- + -- Reverse_Iterate -- + --------------------- + + procedure Reverse_Iterate + (Container : List; + Process : not null access procedure (Position : in Cursor)) + is + C : List renames Container'Unrestricted_Access.all; + B : Natural renames C.Busy; + + Node : Node_Access := Container.Last; + + begin + B := B + 1; + + begin + while Node /= null loop + Process (Cursor'(Container'Unchecked_Access, Node)); + Node := Node.Prev; + end loop; + exception + when others => + B := B - 1; + raise; + end; + + B := B - 1; + end Reverse_Iterate; ------------ -- Splice -- @@ -1211,12 +1259,18 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is Source : in out List) is begin - pragma Assert (Vet (Before), "bad cursor in Splice"); + if Before.Container /= null then + if Before.Container /= Target'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Target'Unrestricted_Access - then - raise Program_Error; + if Before.Node = null + or else Before.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Before), "bad cursor in Splice"); end if; if Target'Address = Source'Address @@ -1284,23 +1338,34 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is Position : Cursor) is begin - pragma Assert (Vet (Before), "bad Before cursor in Splice"); - pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Before.Container /= null then + if Before.Container /= Target'Unchecked_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Target'Unchecked_Access - then - raise Program_Error; + if Before.Node = null + or else Before.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Before), "bad Before cursor in Splice"); end if; if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Target'Unrestricted_Access then raise Program_Error; end if; + pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Position.Node = Before.Node or else Position.Node.Next = Before.Node then @@ -1388,23 +1453,34 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is return; end if; - pragma Assert (Vet (Before), "bad Before cursor in Splice"); - pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Before.Container /= null then + if Before.Container /= Target'Unrestricted_Access then + raise Program_Error; + end if; - if Before.Container /= null - and then Before.Container /= Target'Unrestricted_Access - then - raise Program_Error; + if Before.Node = null + or else Before.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Before), "bad Before cursor in Splice"); end if; if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Source'Unrestricted_Access then raise Program_Error; end if; + pragma Assert (Vet (Position), "bad Position cursor in Splice"); + if Target.Length = Count_Type'Last then raise Constraint_Error; end if; @@ -1484,18 +1560,20 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is -- Swap -- ---------- - procedure Swap (I, J : Cursor) is + procedure Swap + (Container : in out List; + I, J : Cursor) + is begin - pragma Assert (Vet (I), "bad I cursor in Swap"); - pragma Assert (Vet (J), "bad J cursor in Swap"); - if I.Node = null or else J.Node = null then raise Constraint_Error; end if; - if I.Container /= J.Container then + if I.Container /= Container'Unchecked_Access + or else J.Container /= Container'Unchecked_Access + then raise Program_Error; end if; @@ -1503,12 +1581,16 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is return; end if; - if I.Container.Lock > 0 then + if Container.Lock > 0 then raise Program_Error; end if; + pragma Assert (Vet (I), "bad I cursor in Swap"); + pragma Assert (Vet (J), "bad J cursor in Swap"); + declare EI_Copy : constant Element_Access := I.Node.Element; + begin I.Node.Element := J.Node.Element; J.Node.Element := EI_Copy; @@ -1524,9 +1606,6 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is I, J : Cursor) is begin - pragma Assert (Vet (I), "bad I cursor in Swap_Links"); - pragma Assert (Vet (J), "bad J cursor in Swap_Links"); - if I.Node = null or else J.Node = null then @@ -1547,6 +1626,9 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is raise Program_Error; end if; + pragma Assert (Vet (I), "bad I cursor in Swap_Links"); + pragma Assert (Vet (J), "bad J cursor in Swap_Links"); + declare I_Next : constant Cursor := Next (I); @@ -1580,20 +1662,28 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is -------------------- procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)) + (Container : in out List; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)) is begin - pragma Assert (Vet (Position), "bad cursor in Update_Element"); - if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + + if Position.Container /= Container'Unchecked_Access then + raise Program_Error; + end if; + + pragma Assert (Vet (Position), "bad cursor in Update_Element"); + declare - C : List renames Position.Container.all'Unrestricted_Access.all; - B : Natural renames C.Busy; - L : Natural renames C.Lock; + B : Natural renames Container.Busy; + L : Natural renames Container.Lock; begin B := B + 1; @@ -1775,4 +1865,12 @@ package body Ada.Containers.Indefinite_Doubly_Linked_Lists is end loop; end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Indefinite_Doubly_Linked_Lists; diff --git a/gcc/ada/a-cidlli.ads b/gcc/ada/a-cidlli.ads index eb8657fe4fd..9e2d2351268 100644 --- a/gcc/ada/a-cidlli.ads +++ b/gcc/ada/a-cidlli.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -62,46 +62,47 @@ package Ada.Containers.Indefinite_Doubly_Linked_Lists is procedure Clear (Container : in out List); - function Element (Position : Cursor) - return Element_Type; + function Element (Position : Cursor) return Element_Type; + + procedure Replace_Element + (Container : in out List; + Position : Cursor; + New_Item : Element_Type); procedure Query_Element (Position : Cursor; Process : not null access procedure (Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)); - - procedure Replace_Element - (Position : Cursor; - By : Element_Type); + (Container : in out List; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)); procedure Move (Target : in out List; Source : in out List); - procedure Prepend + procedure Insert (Container : in out List; + Before : Cursor; New_Item : Element_Type; Count : Count_Type := 1); - procedure Append + procedure Insert (Container : in out List; + Before : Cursor; New_Item : Element_Type; + Position : out Cursor; Count : Count_Type := 1); - procedure Insert + procedure Prepend (Container : in out List; - Before : Cursor; New_Item : Element_Type; Count : Count_Type := 1); - procedure Insert + procedure Append (Container : in out List; - Before : Cursor; New_Item : Element_Type; - Position : out Cursor; Count : Count_Type := 1); procedure Delete @@ -117,21 +118,9 @@ package Ada.Containers.Indefinite_Doubly_Linked_Lists is (Container : in out List; Count : Count_Type := 1); - generic - with function "<" (Left, Right : Element_Type) return Boolean is <>; - package Generic_Sorting is - - function Is_Sorted (Container : List) return Boolean; - - procedure Sort (Container : in out List); - - procedure Merge (Target, Source : in out List); - - end Generic_Sorting; + procedure Reverse_Elements (Container : in out List); - procedure Reverse_List (Container : in out List); - - procedure Swap (I, J : Cursor); + procedure Swap (Container : in out List; I, J : Cursor); procedure Swap_Links (Container : in out List; I, J : Cursor); @@ -143,13 +132,13 @@ package Ada.Containers.Indefinite_Doubly_Linked_Lists is procedure Splice (Target : in out List; Before : Cursor; - Position : Cursor); + Source : in out List; + Position : in out Cursor); procedure Splice (Target : in out List; Before : Cursor; - Source : in out List; - Position : in out Cursor); + Position : Cursor); function First (Container : List) return Cursor; @@ -159,9 +148,13 @@ package Ada.Containers.Indefinite_Doubly_Linked_Lists is function Last_Element (Container : List) return Element_Type; - function Contains - (Container : List; - Item : Element_Type) return Boolean; + function Next (Position : Cursor) return Cursor; + + procedure Next (Position : in out Cursor); + + function Previous (Position : Cursor) return Cursor; + + procedure Previous (Position : in out Cursor); function Find (Container : List; @@ -173,13 +166,9 @@ package Ada.Containers.Indefinite_Doubly_Linked_Lists is Item : Element_Type; Position : Cursor := No_Element) return Cursor; - function Next (Position : Cursor) return Cursor; - - function Previous (Position : Cursor) return Cursor; - - procedure Next (Position : in out Cursor); - - procedure Previous (Position : in out Cursor); + function Contains + (Container : List; + Item : Element_Type) return Boolean; function Has_Element (Position : Cursor) return Boolean; @@ -191,6 +180,18 @@ package Ada.Containers.Indefinite_Doubly_Linked_Lists is (Container : List; Process : not null access procedure (Position : Cursor)); + generic + with function "<" (Left, Right : Element_Type) return Boolean is <>; + package Generic_Sorting is + + function Is_Sorted (Container : List) return Boolean; + + procedure Sort (Container : in out List); + + procedure Merge (Target, Source : in out List); + + end Generic_Sorting; + private type Node_Type; type Node_Access is access Node_Type; @@ -244,6 +245,18 @@ private Node : Node_Access; end record; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); + + for Cursor'Write use Write; + No_Element : constant Cursor := Cursor'(null, null); end Ada.Containers.Indefinite_Doubly_Linked_Lists; diff --git a/gcc/ada/a-cihama.adb b/gcc/ada/a-cihama.adb index dc5fa0f82cb..3836f7eb035 100644 --- a/gcc/ada/a-cihama.adb +++ b/gcc/ada/a-cihama.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -713,6 +713,14 @@ package body Ada.Containers.Indefinite_Hashed_Maps is Read_Nodes (Stream, Container.HT); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------- -- Read_Node -- --------------- @@ -787,7 +795,11 @@ package body Ada.Containers.Indefinite_Hashed_Maps is -- Replace_Element -- --------------------- - procedure Replace_Element (Position : Cursor; By : Element_Type) is + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type) + is begin pragma Assert (Vet (Position), "bad cursor in Replace_Element"); @@ -795,6 +807,10 @@ package body Ada.Containers.Indefinite_Hashed_Maps is raise Constraint_Error; end if; + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + if Position.Container.HT.Lock > 0 then raise Program_Error; end if; @@ -803,7 +819,7 @@ package body Ada.Containers.Indefinite_Hashed_Maps is X : Element_Access := Position.Node.Element; begin - Position.Node.Element := new Element_Type'(By); + Position.Node.Element := new Element_Type'(New_Item); Free_Element (X); end; end Replace_Element; @@ -834,9 +850,10 @@ package body Ada.Containers.Indefinite_Hashed_Maps is -------------------- procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Key : Key_Type; - Element : in out Element_Type)) + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; + Element : in out Element_Type)) is begin pragma Assert (Vet (Position), "bad cursor in Update_Element"); @@ -845,9 +862,12 @@ package body Ada.Containers.Indefinite_Hashed_Maps is raise Constraint_Error; end if; + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + declare - M : Map renames Position.Container.all; - HT : Hash_Table_Type renames M.HT'Unrestricted_Access.all; + HT : Hash_Table_Type renames Container.HT; B : Natural renames HT.Busy; L : Natural renames HT.Lock; @@ -859,7 +879,6 @@ package body Ada.Containers.Indefinite_Hashed_Maps is declare K : Key_Type renames Position.Node.Key.all; E : Element_Type renames Position.Node.Element.all; - begin Process (K, E); exception @@ -951,6 +970,14 @@ package body Ada.Containers.Indefinite_Hashed_Maps is Write_Nodes (Stream, Container.HT); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + ---------------- -- Write_Node -- ---------------- diff --git a/gcc/ada/a-cihama.ads b/gcc/ada/a-cihama.ads index 93bdd81e8a2..18963d5048c 100644 --- a/gcc/ada/a-cihama.ads +++ b/gcc/ada/a-cihama.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -57,6 +57,12 @@ package Ada.Containers.Indefinite_Hashed_Maps is function "=" (Left, Right : Map) return Boolean; + function Capacity (Container : Map) return Count_Type; + + procedure Reserve_Capacity + (Container : in out Map; + Capacity : Count_Type); + function Length (Container : Map) return Count_Type; function Is_Empty (Container : Map) return Boolean; @@ -67,20 +73,22 @@ package Ada.Containers.Indefinite_Hashed_Maps is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Key : Key_Type; Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Key : Key_Type; + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; Element : in out Element_Type)); - procedure Replace_Element - (Position : Cursor; - By : Element_Type); - procedure Move (Target : in out Map; Source : in out Map); procedure Insert @@ -105,29 +113,11 @@ package Ada.Containers.Indefinite_Hashed_Maps is Key : Key_Type; New_Item : Element_Type); - procedure Delete - (Container : in out Map; - Key : Key_Type); + procedure Exclude (Container : in out Map; Key : Key_Type); - procedure Delete - (Container : in out Map; - Position : in out Cursor); + procedure Delete (Container : in out Map; Key : Key_Type); - procedure Exclude - (Container : in out Map; - Key : Key_Type); - - function Contains - (Container : Map; - Key : Key_Type) return Boolean; - - function Find - (Container : Map; - Key : Key_Type) return Cursor; - - function Element - (Container : Map; - Key : Key_Type) return Element_Type; + procedure Delete (Container : in out Map; Position : in out Cursor); function First (Container : Map) return Cursor; @@ -135,29 +125,24 @@ package Ada.Containers.Indefinite_Hashed_Maps is procedure Next (Position : in out Cursor); + function Find (Container : Map; Key : Key_Type) return Cursor; + + function Contains (Container : Map; Key : Key_Type) return Boolean; + + function Element (Container : Map; Key : Key_Type) return Element_Type; + function Has_Element (Position : Cursor) return Boolean; - function Equivalent_Keys (Left, Right : Cursor) - return Boolean; + function Equivalent_Keys (Left, Right : Cursor) return Boolean; - function Equivalent_Keys - (Left : Cursor; - Right : Key_Type) return Boolean; + function Equivalent_Keys (Left : Cursor; Right : Key_Type) return Boolean; - function Equivalent_Keys - (Left : Key_Type; - Right : Cursor) return Boolean; + function Equivalent_Keys (Left : Key_Type; Right : Cursor) return Boolean; procedure Iterate (Container : Map; Process : not null access procedure (Position : Cursor)); - function Capacity (Container : Map) return Count_Type; - - procedure Reserve_Capacity - (Container : in out Map; - Capacity : Count_Type); - private pragma Inline ("="); pragma Inline (Length); @@ -194,6 +179,7 @@ private use HT_Types; use Ada.Finalization; + use Ada.Streams; procedure Adjust (Container : in out Map); @@ -208,12 +194,22 @@ private Node : Node_Access; end record; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); + + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + No_Element : constant Cursor := (Container => null, Node => null); - use Ada.Streams; - procedure Write (Stream : access Root_Stream_Type'Class; Container : Map); diff --git a/gcc/ada/a-cihase.adb b/gcc/ada/a-cihase.adb index 8e747eadf08..9503e8859a2 100644 --- a/gcc/ada/a-cihase.adb +++ b/gcc/ada/a-cihase.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -73,6 +73,12 @@ package body Ada.Containers.Indefinite_Hashed_Sets is function Hash_Node (Node : Node_Access) return Hash_Type; pragma Inline (Hash_Node); + procedure Insert + (HT : in out Hash_Table_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean); + function Is_In (HT : Hash_Table_Type; Key : Node_Access) return Boolean; pragma Inline (Is_In); @@ -326,13 +332,16 @@ package body Ada.Containers.Indefinite_Hashed_Sets is begin if not Is_In (Right.HT, L_Node) then declare - Indx : constant Hash_Type := - Hash (L_Node.Element.all) mod Buckets'Length; - + Src : Element_Type renames L_Node.Element.all; + Indx : constant Hash_Type := Hash (Src) mod Buckets'Length; Bucket : Node_Access renames Buckets (Indx); - + Tgt : Element_Access := new Element_Type'(Src); begin - Bucket := new Node_Type'(L_Node.Element, Bucket); + Bucket := new Node_Type'(Tgt, Bucket); + exception + when others => + Free_Element (Tgt); + raise; end; Length := Length + 1; @@ -644,6 +653,32 @@ package body Ada.Containers.Indefinite_Hashed_Sets is Position : out Cursor; Inserted : out Boolean) is + begin + Insert (Container.HT, New_Item, Position.Node, Inserted); + Position.Container := Container'Unchecked_Access; + end Insert; + + procedure Insert + (Container : in out Set; + New_Item : Element_Type) + is + Position : Cursor; + Inserted : Boolean; + + begin + Insert (Container, New_Item, Position, Inserted); + + if not Inserted then + raise Constraint_Error; + end if; + end Insert; + + procedure Insert + (HT : in out Hash_Table_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean) + is function New_Node (Next : Node_Access) return Node_Access; pragma Inline (New_Node); @@ -665,8 +700,6 @@ package body Ada.Containers.Indefinite_Hashed_Sets is raise; end New_Node; - HT : Hash_Table_Type renames Container.HT; - -- Start of processing for Insert begin @@ -674,30 +707,13 @@ package body Ada.Containers.Indefinite_Hashed_Sets is HT_Ops.Reserve_Capacity (HT, 1); end if; - Local_Insert (HT, New_Item, Position.Node, Inserted); + Local_Insert (HT, New_Item, Node, Inserted); if Inserted and then HT.Length > HT_Ops.Capacity (HT) then HT_Ops.Reserve_Capacity (HT, HT.Length); end if; - - Position.Container := Container'Unchecked_Access; - end Insert; - - procedure Insert - (Container : in out Set; - New_Item : Element_Type) - is - Position : Cursor; - Inserted : Boolean; - - begin - Insert (Container, New_Item, Position, Inserted); - - if not Inserted then - raise Constraint_Error; - end if; end Insert; ------------------ @@ -787,13 +803,20 @@ package body Ada.Containers.Indefinite_Hashed_Sets is begin if Is_In (Right.HT, L_Node) then declare - Indx : constant Hash_Type := - Hash (L_Node.Element.all) mod Buckets'Length; + Src : Element_Type renames L_Node.Element.all; + + Indx : constant Hash_Type := Hash (Src) mod Buckets'Length; Bucket : Node_Access renames Buckets (Indx); + Tgt : Element_Access := new Element_Type'(Src); + begin - Bucket := new Node_Type'(L_Node.Element, Bucket); + Bucket := new Node_Type'(Tgt, Bucket); + exception + when others => + Free_Element (Tgt); + raise; end; Length := Length + 1; @@ -1040,6 +1063,14 @@ package body Ada.Containers.Indefinite_Hashed_Sets is Read_Nodes (Stream, Container.HT); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------- -- Read_Node -- --------------- @@ -1502,6 +1533,20 @@ package body Ada.Containers.Indefinite_Hashed_Sets is return (Controlled with HT => (Buckets, Length, 0, 0)); end Symmetric_Difference; + ------------ + -- To_Set -- + ------------ + + function To_Set (New_Item : Element_Type) return Set is + HT : Hash_Table_Type; + Node : Node_Access; + Inserted : Boolean; + + begin + Insert (HT, New_Item, Node, Inserted); + return Set'(Controlled with HT); + end To_Set; + ----------- -- Union -- ----------- @@ -1609,13 +1654,20 @@ package body Ada.Containers.Indefinite_Hashed_Sets is ------------- procedure Process (L_Node : Node_Access) is - J : constant Hash_Type := - Hash (L_Node.Element.all) mod Buckets'Length; + Src : Element_Type renames L_Node.Element.all; + + J : constant Hash_Type := Hash (Src) mod Buckets'Length; Bucket : Node_Access renames Buckets (J); + Tgt : Element_Access := new Element_Type'(Src); + begin - Bucket := new Node_Type'(L_Node.Element, Bucket); + Bucket := new Node_Type'(Tgt, Bucket); + exception + when others => + Free_Element (Tgt); + raise; end Process; -- Start of processing for Process @@ -1751,6 +1803,14 @@ package body Ada.Containers.Indefinite_Hashed_Sets is Write_Nodes (Stream, Container.HT); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + ---------------- -- Write_Node -- ---------------- diff --git a/gcc/ada/a-cihase.ads b/gcc/ada/a-cihase.ads index 4ecca1ca0bf..bde7917ff37 100644 --- a/gcc/ada/a-cihase.ads +++ b/gcc/ada/a-cihase.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -63,6 +63,8 @@ package Ada.Containers.Indefinite_Hashed_Sets is function Equivalent_Sets (Left, Right : Set) return Boolean; + function To_Set (New_Item : Element_Type) return Set; + function Capacity (Container : Set) return Count_Type; procedure Reserve_Capacity @@ -225,6 +227,7 @@ private use HT_Types; use Ada.Finalization; + use Ada.Streams; type Set_Access is access all Set; for Set_Access'Storage_Size use 0; @@ -235,12 +238,22 @@ private Node : Node_Access; end record; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); + + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + No_Element : constant Cursor := (Container => null, Node => null); - use Ada.Streams; - procedure Write (Stream : access Root_Stream_Type'Class; Container : Set); diff --git a/gcc/ada/a-ciorma.adb b/gcc/ada/a-ciorma.adb index 9847aaad7a8..256304281a8 100644 --- a/gcc/ada/a-ciorma.adb +++ b/gcc/ada/a-ciorma.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -135,16 +135,56 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function "<" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + if Left.Node.Key = null + or else Right.Node.Key = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left.Node.Key.all < Right.Node.Key.all; end "<"; function "<" (Left : Cursor; Right : Key_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + if Left.Node.Key = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + return Left.Node.Key.all < Right; end "<"; function "<" (Left : Key_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + if Right.Node.Key = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left < Right.Node.Key.all; end "<"; @@ -163,16 +203,56 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function ">" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + if Left.Node.Key = null + or else Right.Node.Key = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Key.all < Left.Node.Key.all; end ">"; function ">" (Left : Cursor; Right : Key_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + if Left.Node.Key = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + return Right < Left.Node.Key.all; end ">"; function ">" (Left : Key_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + if Right.Node.Key = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Key.all < Left; end ">"; @@ -194,12 +274,13 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function Ceiling (Container : Map; Key : Key_Type) return Cursor is Node : constant Node_Access := Key_Ops.Ceiling (Container.Tree, Key); + begin if Node = null then return No_Element; - else - return Cursor'(Container'Unrestricted_Access, Node); end if; + + return Cursor'(Container'Unrestricted_Access, Node); end Ceiling; ----------- @@ -268,11 +349,20 @@ package body Ada.Containers.Indefinite_Ordered_Maps is raise Constraint_Error; end if; - if Position.Container /= Map_Access'(Container'Unrestricted_Access) then + if Position.Node.Key = null + or else Position.Node.Element = null + then + raise Program_Error; + end if; + + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; - Delete_Node_Sans_Free (Container.Tree, Position.Node); + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Delete"); + + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, Position.Node); Free (Position.Node); Position.Container := null; @@ -280,13 +370,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is procedure Delete (Container : in out Map; Key : Key_Type) is X : Node_Access := Key_Ops.Find (Container.Tree, Key); + begin if X = null then raise Constraint_Error; - else - Delete_Node_Sans_Free (Container.Tree, X); - Free (X); end if; + + Delete_Node_Sans_Free (Container.Tree, X); + Free (X); end Delete; ------------------ @@ -295,6 +386,7 @@ package body Ada.Containers.Indefinite_Ordered_Maps is procedure Delete_First (Container : in out Map) is X : Node_Access := Container.Tree.First; + begin if X /= null then Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); @@ -308,6 +400,7 @@ package body Ada.Containers.Indefinite_Ordered_Maps is procedure Delete_Last (Container : in out Map) is X : Node_Access := Container.Tree.Last; + begin if X /= null then Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); @@ -321,15 +414,46 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function Element (Position : Cursor) return Element_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Element"); + return Position.Node.Element.all; end Element; function Element (Container : Map; Key : Key_Type) return Element_Type is Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key); + begin + if Node = null then + raise Constraint_Error; + end if; + return Node.Element.all; end Element; + --------------------- + -- Equivalent_Keys -- + --------------------- + + function Equivalent_Keys (Left, Right : Key_Type) return Boolean is + begin + if Left < Right + or else Right < Left + then + return False; + else + return True; + end if; + end Equivalent_Keys; + ------------- -- Exclude -- ------------- @@ -339,7 +463,7 @@ package body Ada.Containers.Indefinite_Ordered_Maps is begin if X /= null then - Delete_Node_Sans_Free (Container.Tree, X); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); Free (X); end if; end Exclude; @@ -350,12 +474,13 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function Find (Container : Map; Key : Key_Type) return Cursor is Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key); + begin if Node = null then return No_Element; - else - return Cursor'(Container'Unrestricted_Access, Node); end if; + + return Cursor'(Container'Unrestricted_Access, Node); end Find; ----------- @@ -363,12 +488,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is ----------- function First (Container : Map) return Cursor is + T : Tree_Type renames Container.Tree; + begin - if Container.Tree.First = null then + if T.First = null then return No_Element; - else - return Cursor'(Container'Unrestricted_Access, Container.Tree.First); end if; + + return Cursor'(Container'Unrestricted_Access, T.First); end First; ------------------- @@ -376,8 +503,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is ------------------- function First_Element (Container : Map) return Element_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.First.Element.all; + if T.First = null then + raise Constraint_Error; + end if; + + return T.First.Element.all; end First_Element; --------------- @@ -385,8 +518,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is --------------- function First_Key (Container : Map) return Key_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.First.Key.all; + if T.First = null then + raise Constraint_Error; + end if; + + return T.First.Key.all; end First_Key; ----------- @@ -395,12 +534,13 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function Floor (Container : Map; Key : Key_Type) return Cursor is Node : constant Node_Access := Key_Ops.Floor (Container.Tree, Key); + begin if Node = null then return No_Element; - else - return Cursor'(Container'Unrestricted_Access, Node); end if; + + return Cursor'(Container'Unrestricted_Access, Node); end Floor; ---------- @@ -410,11 +550,16 @@ package body Ada.Containers.Indefinite_Ordered_Maps is procedure Free (X : in out Node_Access) is procedure Deallocate is new Ada.Unchecked_Deallocation (Node_Type, Node_Access); + begin if X = null then return; end if; + X.Parent := X; + X.Left := X; + X.Right := X; + begin Free_Key (X.Key); exception @@ -664,6 +809,17 @@ package body Ada.Containers.Indefinite_Ordered_Maps is function Key (Position : Cursor) return Key_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Key = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Key"); + return Position.Node.Key.all; end Key; @@ -672,12 +828,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is ---------- function Last (Container : Map) return Cursor is + T : Tree_Type renames Container.Tree; + begin - if Container.Tree.Last = null then + if T.Last = null then return No_Element; - else - return Cursor'(Container'Unrestricted_Access, Container.Tree.Last); end if; + + return Cursor'(Container'Unrestricted_Access, T.Last); end Last; ------------------ @@ -685,8 +843,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is ------------------ function Last_Element (Container : Map) return Element_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.Last.Element.all; + if T.Last = null then + raise Constraint_Error; + end if; + + return T.Last.Element.all; end Last_Element; -------------- @@ -694,8 +858,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is -------------- function Last_Key (Container : Map) return Key_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.Last.Key.all; + if T.Last = null then + raise Constraint_Error; + end if; + + return T.Last.Key.all; end Last_Key; ---------- @@ -738,8 +908,16 @@ package body Ada.Containers.Indefinite_Ordered_Maps is return No_Element; end if; + pragma Assert (Position.Node /= null); + pragma Assert (Position.Node.Key /= null); + pragma Assert (Position.Node.Element /= null); + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Next"); + declare - Node : constant Node_Access := Tree_Operations.Next (Position.Node); + Node : constant Node_Access := + Tree_Operations.Next (Position.Node); + begin if Node = null then return No_Element; @@ -773,9 +951,16 @@ package body Ada.Containers.Indefinite_Ordered_Maps is return No_Element; end if; + pragma Assert (Position.Node /= null); + pragma Assert (Position.Node.Key /= null); + pragma Assert (Position.Node.Element /= null); + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Previous"); + declare Node : constant Node_Access := - Tree_Operations.Previous (Position.Node); + Tree_Operations.Previous (Position.Node); + begin if Node = null then return No_Element; @@ -799,29 +984,46 @@ package body Ada.Containers.Indefinite_Ordered_Maps is Process : not null access procedure (Key : Key_Type; Element : Element_Type)) is - K : Key_Type renames Position.Node.Key.all; - E : Element_Type renames Position.Node.Element.all; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - T : Tree_Type renames Position.Container.Tree; + if Position.Node.Key = null + or else Position.Node.Element = null + then + raise Program_Error; + end if; - B : Natural renames T.Busy; - L : Natural renames T.Lock; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Query_Element"); - begin - B := B + 1; - L := L + 1; + declare + T : Tree_Type renames Position.Container.Tree; + + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (K, E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + declare + K : Key_Type renames Position.Node.Key.all; + E : Element_Type renames Position.Node.Element.all; + + begin + Process (K, E); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Query_Element; ---------- @@ -863,6 +1065,14 @@ package body Ada.Containers.Indefinite_Ordered_Maps is Read (Stream, Container.Tree); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + ------------- -- Replace -- ------------- @@ -908,15 +1118,40 @@ package body Ada.Containers.Indefinite_Ordered_Maps is -- Replace_Element -- --------------------- - procedure Replace_Element (Position : Cursor; By : Element_Type) is - X : Element_Access := Position.Node.Element; + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type) + is begin - if Position.Container.Tree.Lock > 0 then + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Key = null + or else Position.Node.Element = null + then + raise Program_Error; + end if; + + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; - Position.Node.Element := new Element_Type'(By); - Free_Element (X); + if Container.Tree.Lock > 0 then + raise Program_Error; + end if; + + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Replace_Element"); + + declare + X : Element_Access := Position.Node.Element; + + begin + Position.Node.Element := new Element_Type'(New_Item); + Free_Element (X); + end; end Replace_Element; --------------------- @@ -1010,33 +1245,55 @@ package body Ada.Containers.Indefinite_Ordered_Maps is -------------------- procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Key : Key_Type; - Element : in out Element_Type)) + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; + Element : in out Element_Type)) is - K : Key_Type renames Position.Node.Key.all; - E : Element_Type renames Position.Node.Element.all; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - T : Tree_Type renames Position.Container.Tree; + if Position.Node.Key = null + or else Position.Node.Element = null + then + raise Program_Error; + end if; - B : Natural renames T.Busy; - L : Natural renames T.Lock; + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; - begin - B := B + 1; - L := L + 1; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Update_Element"); + + declare + T : Tree_Type renames Position.Container.Tree; + + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (K, E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + declare + K : Key_Type renames Position.Node.Key.all; + E : Element_Type renames Position.Node.Element.all; + + begin + Process (K, E); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Update_Element; ----------- @@ -1074,4 +1331,12 @@ package body Ada.Containers.Indefinite_Ordered_Maps is Write (Stream, Container.Tree); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Indefinite_Ordered_Maps; diff --git a/gcc/ada/a-ciorma.ads b/gcc/ada/a-ciorma.ads index 4815ebd2e35..8837e048e00 100644 --- a/gcc/ada/a-ciorma.ads +++ b/gcc/ada/a-ciorma.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -40,16 +40,16 @@ with Ada.Streams; generic type Key_Type (<>) is private; - type Element_Type (<>) is private; with function "<" (Left, Right : Key_Type) return Boolean is <>; - with function "=" (Left, Right : Element_Type) return Boolean is <>; package Ada.Containers.Indefinite_Ordered_Maps is pragma Preelaborate; + function Equivalent_Keys (Left, Right : Key_Type) return Boolean; + type Map is tagged private; type Cursor is private; @@ -70,17 +70,21 @@ package Ada.Containers.Indefinite_Ordered_Maps is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Key : Key_Type; Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Key : Key_Type; - Element : in out Element_Type)); - - procedure Replace_Element (Position : Cursor; By : Element_Type); + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; + Element : in out Element_Type)); procedure Move (Target : in out Map; Source : in out Map); @@ -106,54 +110,28 @@ package Ada.Containers.Indefinite_Ordered_Maps is Key : Key_Type; New_Item : Element_Type); - procedure Delete - (Container : in out Map; - Key : Key_Type); + procedure Exclude (Container : in out Map; Key : Key_Type); - procedure Delete - (Container : in out Map; - Position : in out Cursor); + procedure Delete (Container : in out Map; Key : Key_Type); + + procedure Delete (Container : in out Map; Position : in out Cursor); procedure Delete_First (Container : in out Map); procedure Delete_Last (Container : in out Map); - procedure Exclude - (Container : in out Map; - Key : Key_Type); - - function Contains - (Container : Map; - Key : Key_Type) return Boolean; - - function Find - (Container : Map; - Key : Key_Type) return Cursor; - - function Element - (Container : Map; - Key : Key_Type) return Element_Type; - - function Floor - (Container : Map; - Key : Key_Type) return Cursor; - - function Ceiling - (Container : Map; - Key : Key_Type) return Cursor; - function First (Container : Map) return Cursor; - function First_Key (Container : Map) return Key_Type; - function First_Element (Container : Map) return Element_Type; - function Last (Container : Map) return Cursor; + function First_Key (Container : Map) return Key_Type; - function Last_Key (Container : Map) return Key_Type; + function Last (Container : Map) return Cursor; function Last_Element (Container : Map) return Element_Type; + function Last_Key (Container : Map) return Key_Type; + function Next (Position : Cursor) return Cursor; procedure Next (Position : in out Cursor); @@ -162,6 +140,16 @@ package Ada.Containers.Indefinite_Ordered_Maps is procedure Previous (Position : in out Cursor); + function Find (Container : Map; Key : Key_Type) return Cursor; + + function Element (Container : Map; Key : Key_Type) return Element_Type; + + function Floor (Container : Map; Key : Key_Type) return Cursor; + + function Ceiling (Container : Map; Key : Key_Type) return Cursor; + + function Contains (Container : Map; Key : Key_Type) return Boolean; + function Has_Element (Position : Cursor) return Boolean; function "<" (Left, Right : Cursor) return Boolean; @@ -216,8 +204,9 @@ private use Red_Black_Trees; use Tree_Types; use Ada.Finalization; + use Ada.Streams; - type Map_Access is access Map; + type Map_Access is access all Map; for Map_Access'Storage_Size use 0; type Cursor is record @@ -225,9 +214,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := Cursor'(null, null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := Cursor'(null, null); procedure Write (Stream : access Root_Stream_Type'Class; diff --git a/gcc/ada/a-ciormu.adb b/gcc/ada/a-ciormu.adb index 9e24d3e7973..458e42e4225 100644 --- a/gcc/ada/a-ciormu.adb +++ b/gcc/ada/a-ciormu.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -87,6 +87,11 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is procedure Free (X : in out Node_Access); + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access); + procedure Insert_With_Hint (Dst_Tree : in out Tree_Type; Dst_Hint : Node_Access; @@ -157,16 +162,56 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function "<" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + if Left.Node.Element = null + or else Right.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left.Node.Element.all < Right.Node.Element.all; end "<"; function "<" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + if Left.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + return Left.Node.Element.all < Right; end "<"; function "<" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + if Right.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left < Right.Node.Element.all; end "<"; @@ -183,20 +228,60 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is -- ">" -- --------- - function ">" (Left : Cursor; Right : Element_Type) return Boolean is - begin - return Right < Left.Node.Element.all; - end ">"; - function ">" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + if Left.Node.Element = null + or else Right.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + -- L > R same as R < L return Right.Node.Element.all < Left.Node.Element.all; end ">"; + function ">" (Left : Cursor; Right : Element_Type) return Boolean is + begin + if Left.Node = null then + raise Constraint_Error; + end if; + + if Left.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + return Right < Left.Node.Element.all; + end ">"; + function ">" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + if Right.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Element.all < Left; end ">"; @@ -313,6 +398,9 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Delete"); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, Position.Node); Free (Position.Node); @@ -375,9 +463,35 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function Element (Position : Cursor) return Element_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Element"); + return Position.Node.Element.all; end Element; + ------------------------- + -- Equivalent_Elements -- + ------------------------- + + function Equivalent_Elements (Left, Right : Element_Type) return Boolean is + begin + if Left < Right + or else Right < Left + then + return False; + else + return True; + end if; + end Equivalent_Elements; + --------------------- -- Equivalent_Sets -- --------------------- @@ -420,6 +534,7 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is Node : Node_Access := Element_Keys.Ceiling (Tree, Item); Done : constant Node_Access := Element_Keys.Upper_Bound (Tree, Item); X : Node_Access; + begin while Node /= Done loop X := Node; @@ -464,6 +579,14 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function First_Element (Container : Set) return Element_Type is begin + if Container.Tree.First = null then + raise Constraint_Error; + end if; + + if Container.Tree.First.Element = null then + raise Program_Error; + end if; + return Container.Tree.First.Element.all; end First_Element; @@ -490,11 +613,16 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is procedure Free (X : in out Node_Access) is procedure Deallocate is new Ada.Unchecked_Deallocation (Node_Type, Node_Access); + begin if X = null then return; end if; + X.Parent := X; + X.Left := X; + X.Right := X; + begin Free_Element (X.Element); exception @@ -538,34 +666,6 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is Is_Less_Key_Node => Is_Less_Key_Node, Is_Greater_Key_Node => Is_Greater_Key_Node); - --------- - -- "<" -- - --------- - - function "<" (Left : Key_Type; Right : Cursor) return Boolean is - begin - return Left < Right.Node.Element.all; - end "<"; - - function "<" (Left : Cursor; Right : Key_Type) return Boolean is - begin - return Right > Left.Node.Element.all; - end "<"; - - --------- - -- ">" -- - --------- - - function ">" (Left : Key_Type; Right : Cursor) return Boolean is - begin - return Left > Right.Node.Element.all; - end ">"; - - function ">" (Left : Cursor; Right : Key_Type) return Boolean is - begin - return Right < Left.Node.Element.all; - end ">"; - ------------- -- Ceiling -- ------------- @@ -621,11 +721,32 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is ------------- function Element (Container : Set; Key : Key_Type) return Element_Type is - Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); + Node : constant Node_Access := + Key_Keys.Find (Container.Tree, Key); + begin + if Node = null then + raise Constraint_Error; + end if; + return Node.Element.all; end Element; + --------------------- + -- Equivalent_Keys -- + --------------------- + + function Equivalent_Keys (Left, Right : Key_Type) return Boolean is + begin + if Left < Right + or else Right < Left + then + return False; + else + return True; + end if; + end Equivalent_Keys; + ------------- -- Exclude -- ------------- @@ -681,9 +802,10 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function Is_Greater_Key_Node (Left : Key_Type; - Right : Node_Access) return Boolean is + Right : Node_Access) return Boolean + is begin - return Left > Right.Element.all; + return Key (Right.Element.all) < Left; end Is_Greater_Key_Node; ---------------------- @@ -692,9 +814,10 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function Is_Less_Key_Node (Left : Key_Type; - Right : Node_Access) return Boolean is + Right : Node_Access) return Boolean + is begin - return Left < Right.Element.all; + return Left < Key (Right.Element.all); end Is_Less_Key_Node; ------------- @@ -746,6 +869,17 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function Key (Position : Cursor) return Key_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Key"); + return Key (Position.Node.Element.all); end Key; @@ -812,13 +946,20 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Update_Element_Preserving_Key"); + declare E : Element_Type renames Position.Node.Element.all; - K : Key_Type renames Key (E); + K : constant Key_Type := Key (E); B : Natural renames Tree.Busy; L : Natural renames Tree.Lock; @@ -839,11 +980,7 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is L := L - 1; B := B - 1; - if K < E - or else K > E - then - null; - else + if Equivalent_Keys (Left => K, Right => Key (E)) then return; end if; end; @@ -884,6 +1021,24 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is New_Item : Element_Type; Position : out Cursor) is + begin + Insert_Sans_Hint + (Container.Tree, + New_Item, + Position.Node); + + Position.Container := Container'Unrestricted_Access; + end Insert; + + ---------------------- + -- Insert_Sans_Hint -- + ---------------------- + + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access) + is function New_Node return Node_Access; pragma Inline (New_Node); @@ -904,7 +1059,7 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is return new Node_Type'(Parent => null, Left => null, Right => null, - Color => Red, + Color => Red_Black_Trees.Red, Element => X); exception @@ -913,16 +1068,14 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is raise; end New_Node; - -- Start of processing for Insert + -- Start of processing for Insert_Sans_Hint begin Unconditional_Insert_Sans_Hint - (Container.Tree, + (Tree, New_Item, - Position.Node); - - Position.Container := Container'Unrestricted_Access; - end Insert; + Node); + end Insert_Sans_Hint; ---------------------- -- Insert_With_Hint -- @@ -1156,6 +1309,10 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function Last_Element (Container : Set) return Element_Type is begin + if Container.Tree.Last = null then + raise Constraint_Error; + end if; + return Container.Tree.Last.Element.all; end Last_Element; @@ -1199,6 +1356,9 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Next"); + declare Node : constant Node_Access := Tree_Operations.Next (Position.Node); @@ -1245,6 +1405,9 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Previous"); + declare Node : constant Node_Access := Tree_Operations.Previous (Position.Node); @@ -1271,29 +1434,40 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is (Position : Cursor; Process : not null access procedure (Element : Element_Type)) is - E : Element_Type renames Position.Node.Element.all; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - S : Set renames Position.Container.all; - T : Tree_Type renames S.Tree'Unrestricted_Access.all; + if Position.Node.Element = null then + raise Program_Error; + end if; - B : Natural renames T.Busy; - L : Natural renames T.Lock; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Query_Element"); - begin - B := B + 1; - L := L + 1; + declare + T : Tree_Type renames Position.Container.Tree; + + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + begin + Process (Position.Node.Element.all); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Query_Element; ---------- @@ -1334,6 +1508,14 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is Read (Stream, Container.Tree); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------------- -- Replace_Element -- --------------------- @@ -1382,6 +1564,11 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is function New_Node return Node_Access is begin Node.Element := new Element_Type'(Item); -- OK if fails + Node.Color := Red_Black_Trees.Red; + Node.Parent := null; + Node.Left := null; + Node.Right := null; + return Node; end New_Node; @@ -1403,22 +1590,27 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is end Replace_Element; procedure Replace_Element - (Container : Set; + (Container : in out Set; Position : Cursor; - By : Element_Type) + New_Item : Element_Type) is - Tree : Tree_Type renames Position.Container.Tree'Unrestricted_Access.all; - begin if Position.Node = null then raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; - Replace_Element (Tree, Position.Node, By); + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Replace_Element"); + + Replace_Element (Container.Tree, Position.Node, New_Item); end Replace_Element; --------------------- @@ -1563,6 +1755,19 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is return Set'(Controlled with Tree); end Symmetric_Difference; + ------------ + -- To_Set -- + ------------ + + function To_Set (New_Item : Element_Type) return Set is + Tree : Tree_Type; + Node : Node_Access; + + begin + Insert_Sans_Hint (Tree, New_Item, Node); + return Set'(Controlled with Tree); + end To_Set; + ----------- -- Union -- ----------- @@ -1613,4 +1818,12 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is Write (Stream, Container.Tree); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Indefinite_Ordered_Multisets; diff --git a/gcc/ada/a-ciormu.ads b/gcc/ada/a-ciormu.ads index d2bf68dfd68..1240aca4d66 100644 --- a/gcc/ada/a-ciormu.ads +++ b/gcc/ada/a-ciormu.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -47,6 +47,8 @@ generic package Ada.Containers.Indefinite_Ordered_Multisets is pragma Preelaborate; + function Equivalent_Elements (Left, Right : Element_Type) return Boolean; + type Set is tagged private; type Cursor is private; @@ -59,6 +61,8 @@ package Ada.Containers.Indefinite_Ordered_Multisets is function Equivalent_Sets (Left, Right : Set) return Boolean; + function To_Set (New_Item : Element_Type) return Set; + function Length (Container : Set) return Count_Type; function Is_Empty (Container : Set) return Boolean; @@ -67,15 +71,15 @@ package Ada.Containers.Indefinite_Ordered_Multisets is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Set; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Element : Element_Type)); - procedure Replace_Element - (Container : Set; - Position : Cursor; - By : Element_Type); - procedure Move (Target : in out Set; Source : in out Set); procedure Insert @@ -85,6 +89,14 @@ package Ada.Containers.Indefinite_Ordered_Multisets is procedure Insert (Container : in out Set; New_Item : Element_Type); +-- TODO: include Replace too??? +-- +-- procedure Replace +-- (Container : in out Set; +-- New_Item : Element_Type); + + procedure Exclude (Container : in out Set; Item : Element_Type); + procedure Delete (Container : in out Set; Item : Element_Type); procedure Delete (Container : in out Set; Position : in out Cursor); @@ -93,10 +105,7 @@ package Ada.Containers.Indefinite_Ordered_Multisets is procedure Delete_Last (Container : in out Set); - procedure Exclude (Container : in out Set; Item : Element_Type); - - procedure Union (Target : in out Set; - Source : Set); + procedure Union (Target : in out Set; Source : Set); function Union (Left, Right : Set) return Set; @@ -124,14 +133,6 @@ package Ada.Containers.Indefinite_Ordered_Multisets is function Is_Subset (Subset : Set; Of_Set : Set) return Boolean; - function Contains (Container : Set; Item : Element_Type) return Boolean; - - function Find (Container : Set; Item : Element_Type) return Cursor; - - function Floor (Container : Set; Item : Element_Type) return Cursor; - - function Ceiling (Container : Set; Item : Element_Type) return Cursor; - function First (Container : Set) return Cursor; function First_Element (Container : Set) return Element_Type; @@ -148,6 +149,14 @@ package Ada.Containers.Indefinite_Ordered_Multisets is procedure Previous (Position : in out Cursor); + function Find (Container : Set; Item : Element_Type) return Cursor; + + function Floor (Container : Set; Item : Element_Type) return Cursor; + + function Ceiling (Container : Set; Item : Element_Type) return Cursor; + + function Contains (Container : Set; Item : Element_Type) return Boolean; + function Has_Element (Position : Cursor) return Boolean; function "<" (Left, Right : Cursor) return Boolean; @@ -181,42 +190,31 @@ package Ada.Containers.Indefinite_Ordered_Multisets is Process : not null access procedure (Position : Cursor)); generic - - type Key_Type (<>) is limited private; + type Key_Type (<>) is private; with function Key (Element : Element_Type) return Key_Type; - with function "<" (Left : Key_Type; Right : Element_Type) - return Boolean is <>; - - with function ">" (Left : Key_Type; Right : Element_Type) - return Boolean is <>; + with function "<" (Left, Right : Key_Type) return Boolean is <>; package Generic_Keys is - function Contains (Container : Set; Key : Key_Type) return Boolean; - - function Find (Container : Set; Key : Key_Type) return Cursor; - - function Floor (Container : Set; Key : Key_Type) return Cursor; - - function Ceiling (Container : Set; Key : Key_Type) return Cursor; + function Equivalent_Keys (Left, Right : Key_Type) return Boolean; function Key (Position : Cursor) return Key_Type; function Element (Container : Set; Key : Key_Type) return Element_Type; - procedure Delete (Container : in out Set; Key : Key_Type); - procedure Exclude (Container : in out Set; Key : Key_Type); - function "<" (Left : Cursor; Right : Key_Type) return Boolean; + procedure Delete (Container : in out Set; Key : Key_Type); - function ">" (Left : Cursor; Right : Key_Type) return Boolean; + function Find (Container : Set; Key : Key_Type) return Cursor; - function "<" (Left : Key_Type; Right : Cursor) return Boolean; + function Floor (Container : Set; Key : Key_Type) return Cursor; - function ">" (Left : Key_Type; Right : Cursor) return Boolean; + function Ceiling (Container : Set; Key : Key_Type) return Cursor; + + function Contains (Container : Set; Key : Key_Type) return Boolean; procedure Update_Element_Preserving_Key (Container : in out Set; @@ -266,6 +264,7 @@ private use Red_Black_Trees; use Tree_Types; use Ada.Finalization; + use Ada.Streams; type Set_Access is access all Set; for Set_Access'Storage_Size use 0; @@ -275,9 +274,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := Cursor'(null, null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := Cursor'(null, null); procedure Write (Stream : access Root_Stream_Type'Class; Container : Set); diff --git a/gcc/ada/a-ciorse.adb b/gcc/ada/a-ciorse.adb index 2de8cda37e3..bb441a3201c 100644 --- a/gcc/ada/a-ciorse.adb +++ b/gcc/ada/a-ciorse.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -59,6 +59,12 @@ package body Ada.Containers.Indefinite_Ordered_Sets is procedure Free (X : in out Node_Access); + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean); + procedure Insert_With_Hint (Dst_Tree : in out Tree_Type; Dst_Hint : Node_Access; @@ -144,16 +150,56 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function "<" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + if Left.Node.Element = null + or else Right.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left.Node.Element.all < Right.Node.Element.all; end "<"; function "<" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + if Left.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + return Left.Node.Element.all < Right; end "<"; function "<" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + if Right.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left < Right.Node.Element.all; end "<"; @@ -190,6 +236,24 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function ">" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + if Left.Node.Element = null + or else Right.Node.Element = null + then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + -- L > R same as R < L return Right.Node.Element.all < Left.Node.Element.all; @@ -197,11 +261,33 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function ">" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + if Left.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + return Right < Left.Node.Element.all; end ">"; function ">" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + if Right.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Element.all < Left; end ">"; @@ -296,6 +382,9 @@ package body Ada.Containers.Indefinite_Ordered_Sets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Delete"); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, Position.Node); Free (Position.Node); Position.Container := null; @@ -310,7 +399,7 @@ package body Ada.Containers.Indefinite_Ordered_Sets is raise Constraint_Error; end if; - Delete_Node_Sans_Free (Container.Tree, X); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); Free (X); end Delete; @@ -366,6 +455,17 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function Element (Position : Cursor) return Element_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Element"); + return Position.Node.Element.all; end Element; @@ -467,6 +567,10 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function First_Element (Container : Set) return Element_Type is begin + if Container.Tree.First = null then + raise Constraint_Error; + end if; + return Container.Tree.First.Element.all; end First_Element; @@ -491,7 +595,6 @@ package body Ada.Containers.Indefinite_Ordered_Sets is ---------- procedure Free (X : in out Node_Access) is - procedure Deallocate is new Ada.Unchecked_Deallocation (Node_Type, Node_Access); @@ -500,6 +603,10 @@ package body Ada.Containers.Indefinite_Ordered_Sets is return; end if; + X.Parent := X; + X.Left := X; + X.Right := X; + begin Free_Element (X.Element); exception @@ -593,6 +700,10 @@ package body Ada.Containers.Indefinite_Ordered_Sets is Key_Keys.Find (Container.Tree, Key); begin + if Node = null then + raise Constraint_Error; + end if; + return Node.Element.all; end Element; @@ -685,6 +796,17 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function Key (Position : Cursor) return Key_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Node.Element = null then + raise Program_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Key"); + return Key (Position.Node.Element.all); end Key; @@ -724,10 +846,17 @@ package body Ada.Containers.Indefinite_Ordered_Sets is raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Update_Element_Preserving_Key"); + declare E : Element_Type renames Position.Node.Element.all; K : constant Key_Type := Key (E); @@ -811,13 +940,44 @@ package body Ada.Containers.Indefinite_Ordered_Sets is Position : out Cursor; Inserted : out Boolean) is + begin + Insert_Sans_Hint + (Container.Tree, + New_Item, + Position.Node, + Inserted); + + Position.Container := Container'Unrestricted_Access; + end Insert; + + procedure Insert (Container : in out Set; New_Item : Element_Type) is + Position : Cursor; + Inserted : Boolean; + begin + Insert (Container, New_Item, Position, Inserted); + + if not Inserted then + raise Constraint_Error; + end if; + end Insert; + + ---------------------- + -- Insert_Sans_Hint -- + ---------------------- + + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean) + is function New_Node return Node_Access; pragma Inline (New_Node); procedure Insert_Post is new Element_Keys.Generic_Insert_Post (New_Node); - procedure Insert_Sans_Hint is + procedure Conditional_Insert_Sans_Hint is new Element_Keys.Generic_Conditional_Insert (Insert_Post); -------------- @@ -826,11 +986,12 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function New_Node return Node_Access is Element : Element_Access := new Element_Type'(New_Item); + begin return new Node_Type'(Parent => null, Left => null, Right => null, - Color => Red, + Color => Red_Black_Trees.Red, Element => Element); exception when others => @@ -838,28 +999,15 @@ package body Ada.Containers.Indefinite_Ordered_Sets is raise; end New_Node; - -- Start of processing for Insert + -- Start of processing for Insert_Sans_Hint begin - Insert_Sans_Hint - (Container.Tree, + Conditional_Insert_Sans_Hint + (Tree, New_Item, - Position.Node, + Node, Inserted); - - Position.Container := Container'Unrestricted_Access; - end Insert; - - procedure Insert (Container : in out Set; New_Item : Element_Type) is - Position : Cursor; - Inserted : Boolean; - begin - Insert (Container, New_Item, Position, Inserted); - - if not Inserted then - raise Constraint_Error; - end if; - end Insert; + end Insert_Sans_Hint; ---------------------- -- Insert_With_Hint -- @@ -1047,6 +1195,10 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function Last_Element (Container : Set) return Element_Type is begin + if Container.Tree.Last = null then + raise Constraint_Error; + end if; + return Container.Tree.Last.Element.all; end Last_Element; @@ -1095,6 +1247,9 @@ package body Ada.Containers.Indefinite_Ordered_Sets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Next"); + declare Node : constant Node_Access := Tree_Operations.Next (Position.Node); @@ -1141,6 +1296,9 @@ package body Ada.Containers.Indefinite_Ordered_Sets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Previous"); + declare Node : constant Node_Access := Tree_Operations.Previous (Position.Node); @@ -1162,29 +1320,40 @@ package body Ada.Containers.Indefinite_Ordered_Sets is (Position : Cursor; Process : not null access procedure (Element : Element_Type)) is - E : Element_Type renames Position.Node.Element.all; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - S : Set renames Position.Container.all; - T : Tree_Type renames S.Tree'Unrestricted_Access.all; + if Position.Node.Element = null then + raise Program_Error; + end if; - B : Natural renames T.Busy; - L : Natural renames T.Lock; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Query_Element"); - begin - B := B + 1; - L := L + 1; + declare + T : Tree_Type renames Position.Container.Tree; + + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + begin + Process (Position.Node.Element.all); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Query_Element; ---------- @@ -1227,6 +1396,14 @@ package body Ada.Containers.Indefinite_Ordered_Sets is Read (Stream, Container.Tree); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + ------------- -- Replace -- ------------- @@ -1242,6 +1419,10 @@ package body Ada.Containers.Indefinite_Ordered_Sets is raise Constraint_Error; end if; + if Container.Tree.Lock > 0 then + raise Program_Error; + end if; + X := Node.Element; Node.Element := new Element_Type'(New_Item); Free_Element (X); @@ -1295,6 +1476,11 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function New_Node return Node_Access is begin Node.Element := new Element_Type'(Item); -- OK if fails + Node.Color := Red; + Node.Parent := null; + Node.Right := null; + Node.Left := null; + return Node; end New_Node; @@ -1340,6 +1526,11 @@ package body Ada.Containers.Indefinite_Ordered_Sets is function New_Node return Node_Access is begin + Node.Color := Red; + Node.Parent := null; + Node.Right := null; + Node.Left := null; + return Node; end New_Node; @@ -1372,10 +1563,17 @@ package body Ada.Containers.Indefinite_Ordered_Sets is raise Constraint_Error; end if; + if Position.Node.Element = null then + raise Program_Error; + end if; + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Replace_Element"); + Replace_Element (Container.Tree, Position.Node, New_Item); end Replace_Element; @@ -1482,6 +1680,20 @@ package body Ada.Containers.Indefinite_Ordered_Sets is return Set'(Controlled with Tree); end Symmetric_Difference; + ------------ + -- To_Set -- + ------------ + + function To_Set (New_Item : Element_Type) return Set is + Tree : Tree_Type; + Node : Node_Access; + Inserted : Boolean; + + begin + Insert_Sans_Hint (Tree, New_Item, Node, Inserted); + return Set'(Controlled with Tree); + end To_Set; + ----------- -- Union -- ----------- @@ -1532,4 +1744,12 @@ package body Ada.Containers.Indefinite_Ordered_Sets is Write (Stream, Container.Tree); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Indefinite_Ordered_Sets; diff --git a/gcc/ada/a-ciorse.ads b/gcc/ada/a-ciorse.ads index 76349600060..1c1c7860332 100644 --- a/gcc/ada/a-ciorse.ads +++ b/gcc/ada/a-ciorse.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -61,6 +61,8 @@ package Ada.Containers.Indefinite_Ordered_Sets is function Equivalent_Sets (Left, Right : Set) return Boolean; + function To_Set (New_Item : Element_Type) return Set; + function Length (Container : Set) return Count_Type; function Is_Empty (Container : Set) return Boolean; @@ -266,6 +268,7 @@ private use Red_Black_Trees; use Tree_Types; use Ada.Finalization; + use Ada.Streams; type Set_Access is access all Set; for Set_Access'Storage_Size use 0; @@ -275,9 +278,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := Cursor'(null, null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := Cursor'(null, null); procedure Write (Stream : access Root_Stream_Type'Class; diff --git a/gcc/ada/a-cohama.adb b/gcc/ada/a-cohama.adb index 1a165499f90..d235d0b0c79 100644 --- a/gcc/ada/a-cohama.adb +++ b/gcc/ada/a-cohama.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -624,6 +624,7 @@ package body Ada.Containers.Hashed_Maps is declare HT : Hash_Table_Type renames Position.Container.HT; Node : constant Node_Access := HT_Ops.Next (HT, Position.Node); + begin if Node = null then return No_Element; @@ -695,6 +696,14 @@ package body Ada.Containers.Hashed_Maps is Read_Nodes (Stream, Container.HT); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------- -- Read_Node -- --------------- @@ -743,7 +752,11 @@ package body Ada.Containers.Hashed_Maps is -- Replace_Element -- --------------------- - procedure Replace_Element (Position : Cursor; By : Element_Type) is + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type) + is begin pragma Assert (Vet (Position), "bad cursor in Replace_Element"); @@ -751,11 +764,15 @@ package body Ada.Containers.Hashed_Maps is raise Constraint_Error; end if; + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + if Position.Container.HT.Lock > 0 then raise Program_Error; end if; - Position.Node.Element := By; + Position.Node.Element := New_Item; end Replace_Element; ---------------------- @@ -784,9 +801,10 @@ package body Ada.Containers.Hashed_Maps is -------------------- procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Key : Key_Type; - Element : in out Element_Type)) + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; + Element : in out Element_Type)) is begin pragma Assert (Vet (Position), "bad cursor in Update_Element"); @@ -795,12 +813,14 @@ package body Ada.Containers.Hashed_Maps is raise Constraint_Error; end if; - declare - M : Map renames Position.Container.all; - HT : Hash_Table_Type renames M.HT'Unrestricted_Access.all; + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; - B : Natural renames HT.Busy; - L : Natural renames HT.Lock; + declare + HT : Hash_Table_Type renames Container.HT; + B : Natural renames HT.Busy; + L : Natural renames HT.Lock; begin B := B + 1; @@ -809,7 +829,6 @@ package body Ada.Containers.Hashed_Maps is declare K : Key_Type renames Position.Node.Key; E : Element_Type renames Position.Node.Element; - begin Process (K, E); exception @@ -891,6 +910,14 @@ package body Ada.Containers.Hashed_Maps is Write_Nodes (Stream, Container.HT); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + ---------------- -- Write_Node -- ---------------- diff --git a/gcc/ada/a-cohama.ads b/gcc/ada/a-cohama.ads index 0c74943506e..42b1cada502 100644 --- a/gcc/ada/a-cohama.ads +++ b/gcc/ada/a-cohama.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -39,13 +39,10 @@ with Ada.Finalization; generic type Key_Type is private; - type Element_Type is private; with function Hash (Key : Key_Type) return Hash_Type; - with function Equivalent_Keys (Left, Right : Key_Type) return Boolean; - with function "=" (Left, Right : Element_Type) return Boolean is <>; package Ada.Containers.Hashed_Maps is @@ -61,6 +58,11 @@ package Ada.Containers.Hashed_Maps is function "=" (Left, Right : Map) return Boolean; + function Capacity (Container : Map) return Count_Type; + + procedure Reserve_Capacity (Container : in out Map; + Capacity : Count_Type); + function Length (Container : Map) return Count_Type; function Is_Empty (Container : Map) return Boolean; @@ -71,18 +73,22 @@ package Ada.Containers.Hashed_Maps is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Key : Key_Type; Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; Element : in out Element_Type)); - procedure Replace_Element (Position : Cursor; By : Element_Type); - procedure Move (Target : in out Map; Source : in out Map); procedure Insert @@ -113,17 +119,11 @@ package Ada.Containers.Hashed_Maps is Key : Key_Type; New_Item : Element_Type); - procedure Delete (Container : in out Map; Key : Key_Type); - - procedure Delete (Container : in out Map; Position : in out Cursor); - procedure Exclude (Container : in out Map; Key : Key_Type); - function Contains (Container : Map; Key : Key_Type) return Boolean; - - function Find (Container : Map; Key : Key_Type) return Cursor; + procedure Delete (Container : in out Map; Key : Key_Type); - function Element (Container : Map; Key : Key_Type) return Element_Type; + procedure Delete (Container : in out Map; Position : in out Cursor); function First (Container : Map) return Cursor; @@ -131,6 +131,12 @@ package Ada.Containers.Hashed_Maps is procedure Next (Position : in out Cursor); + function Find (Container : Map; Key : Key_Type) return Cursor; + + function Contains (Container : Map; Key : Key_Type) return Boolean; + + function Element (Container : Map; Key : Key_Type) return Element_Type; + function Has_Element (Position : Cursor) return Boolean; function Equivalent_Keys (Left, Right : Cursor) return Boolean; @@ -143,11 +149,6 @@ package Ada.Containers.Hashed_Maps is (Container : Map; Process : not null access procedure (Position : Cursor)); - function Capacity (Container : Map) return Count_Type; - - procedure Reserve_Capacity (Container : in out Map; - Capacity : Count_Type); - private pragma Inline ("="); pragma Inline (Length); @@ -211,6 +212,18 @@ private Node : Node_Access; end record; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); + + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + No_Element : constant Cursor := (Container => null, Node => null); end Ada.Containers.Hashed_Maps; diff --git a/gcc/ada/a-cohase.adb b/gcc/ada/a-cohase.adb index 05a2416c7b5..afb219055d5 100644 --- a/gcc/ada/a-cohase.adb +++ b/gcc/ada/a-cohase.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -72,6 +72,12 @@ package body Ada.Containers.Hashed_Sets is function Hash_Node (Node : Node_Access) return Hash_Type; pragma Inline (Hash_Node); + procedure Insert + (HT : in out Hash_Table_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean); + function Is_In (HT : Hash_Table_Type; Key : Node_Access) return Boolean; @@ -595,6 +601,32 @@ package body Ada.Containers.Hashed_Sets is Position : out Cursor; Inserted : out Boolean) is + begin + Insert (Container.HT, New_Item, Position.Node, Inserted); + Position.Container := Container'Unchecked_Access; + end Insert; + + procedure Insert + (Container : in out Set; + New_Item : Element_Type) + is + Position : Cursor; + Inserted : Boolean; + + begin + Insert (Container, New_Item, Position, Inserted); + + if not Inserted then + raise Constraint_Error; + end if; + end Insert; + + procedure Insert + (HT : in out Hash_Table_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean) + is function New_Node (Next : Node_Access) return Node_Access; pragma Inline (New_Node); @@ -606,13 +638,10 @@ package body Ada.Containers.Hashed_Sets is -------------- function New_Node (Next : Node_Access) return Node_Access is - Node : constant Node_Access := new Node_Type'(New_Item, Next); begin - return Node; + return new Node_Type'(New_Item, Next); end New_Node; - HT : Hash_Table_Type renames Container.HT; - -- Start of processing for Insert begin @@ -620,30 +649,13 @@ package body Ada.Containers.Hashed_Sets is HT_Ops.Reserve_Capacity (HT, 1); end if; - Local_Insert (HT, New_Item, Position.Node, Inserted); + Local_Insert (HT, New_Item, Node, Inserted); if Inserted and then HT.Length > HT_Ops.Capacity (HT) then HT_Ops.Reserve_Capacity (HT, HT.Length); end if; - - Position.Container := Container'Unchecked_Access; - end Insert; - - procedure Insert - (Container : in out Set; - New_Item : Element_Type) - is - Position : Cursor; - Inserted : Boolean; - - begin - Insert (Container, New_Item, Position, Inserted); - - if not Inserted then - raise Constraint_Error; - end if; end Insert; ------------------ @@ -970,6 +982,14 @@ package body Ada.Containers.Hashed_Sets is Read_Nodes (Stream, Container.HT); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------- -- Read_Node -- --------------- @@ -1366,6 +1386,20 @@ package body Ada.Containers.Hashed_Sets is return (Controlled with HT => (Buckets, Length, 0, 0)); end Symmetric_Difference; + ------------ + -- To_Set -- + ------------ + + function To_Set (New_Item : Element_Type) return Set is + HT : Hash_Table_Type; + Node : Node_Access; + Inserted : Boolean; + + begin + Insert (HT, New_Item, Node, Inserted); + return Set'(Controlled with HT); + end To_Set; + ----------- -- Union -- ----------- @@ -1595,6 +1629,14 @@ package body Ada.Containers.Hashed_Sets is Write_Nodes (Stream, Container.HT); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + ---------------- -- Write_Node -- ---------------- diff --git a/gcc/ada/a-cohase.ads b/gcc/ada/a-cohase.ads index e4734c885cc..19aad2911fa 100644 --- a/gcc/ada/a-cohase.ads +++ b/gcc/ada/a-cohase.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -62,6 +62,8 @@ package Ada.Containers.Hashed_Sets is function Equivalent_Sets (Left, Right : Set) return Boolean; + function To_Set (New_Item : Element_Type) return Set; + function Capacity (Container : Set) return Count_Type; procedure Reserve_Capacity @@ -222,6 +224,7 @@ private use HT_Types; use Ada.Finalization; + use Ada.Streams; type Set_Access is access all Set; for Set_Access'Storage_Size use 0; @@ -232,9 +235,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := (Container => null, Node => null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := (Container => null, Node => null); procedure Write (Stream : access Root_Stream_Type'Class; diff --git a/gcc/ada/a-cohata.ads b/gcc/ada/a-cohata.ads index d453da2a347..d9b07535b75 100644 --- a/gcc/ada/a-cohata.ads +++ b/gcc/ada/a-cohata.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-coinve.adb b/gcc/ada/a-coinve.adb index 8af2f4c7302..b3c7cd8e910 100644 --- a/gcc/ada/a-coinve.adb +++ b/gcc/ada/a-coinve.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -475,44 +475,6 @@ package body Ada.Containers.Indefinite_Vectors is Count); end Append; - ------------ - -- Assign -- - ------------ - - procedure Assign - (Target : in out Vector; - Source : Vector) - is - N : constant Count_Type := Length (Source); - - begin - if Target'Address = Source'Address then - return; - end if; - - Clear (Target); - - if N = 0 then - return; - end if; - - if N > Capacity (Target) then - Reserve_Capacity (Target, Capacity => N); - end if; - - for J in Index_Type'First .. Source.Last loop - declare - EA : constant Element_Access := Source.Elements (J); - begin - if EA /= null then - Target.Elements (J) := new Element_Type'(EA.all); - end if; - end; - - Target.Last := J; - end loop; - end Assign; - -------------- -- Capacity -- -------------- @@ -553,7 +515,8 @@ package body Ada.Containers.Indefinite_Vectors is function Contains (Container : Vector; - Item : Element_Type) return Boolean is + Item : Element_Type) return Boolean + is begin return Find_Index (Container, Item) /= No_Index; end Contains; @@ -649,8 +612,7 @@ package body Ada.Containers.Indefinite_Vectors is raise Constraint_Error; end if; - if Position.Container /= - Vector_Access'(Container'Unchecked_Access) + if Position.Container /= Container'Unchecked_Access or else Position.Index > Container.Last then raise Program_Error; @@ -658,11 +620,7 @@ package body Ada.Containers.Indefinite_Vectors is Delete (Container, Position.Index, Count); - if Position.Index <= Container.Last then - Position := (Container'Unchecked_Access, Position.Index); - else - Position := No_Element; - end if; + Position := No_Element; -- See comment in a-convec.adb end Delete; ------------------ @@ -738,7 +696,16 @@ package body Ada.Containers.Indefinite_Vectors is raise Constraint_Error; end if; - return Container.Elements (Index).all; + declare + EA : constant Element_Access := Container.Elements (Index); + + begin + if EA = null then + raise Constraint_Error; + end if; + + return EA.all; + end; end Element; function Element (Position : Cursor) return Element_Type is @@ -773,13 +740,12 @@ package body Ada.Containers.Indefinite_Vectors is function Find (Container : Vector; Item : Element_Type; - Position : Cursor := No_Element) return Cursor is - + Position : Cursor := No_Element) return Cursor + is begin if Position.Container /= null - and then (Position.Container /= - Vector_Access'(Container'Unchecked_Access) - or else Position.Index > Container.Last) + and then (Position.Container /= Container'Unchecked_Access + or else Position.Index > Container.Last) then raise Program_Error; end if; @@ -802,7 +768,8 @@ package body Ada.Containers.Indefinite_Vectors is function Find_Index (Container : Vector; Item : Element_Type; - Index : Index_Type := Index_Type'First) return Extended_Index is + Index : Index_Type := Index_Type'First) return Extended_Index + is begin for Indx in Index .. Container.Last loop if Container.Elements (Indx) /= null @@ -1287,7 +1254,7 @@ package body Ada.Containers.Indefinite_Vectors is begin if Before.Container /= null - and then Before.Container /= Vector_Access'(Container'Unchecked_Access) + and then Before.Container /= Container'Unchecked_Access then raise Program_Error; end if; @@ -1843,6 +1810,10 @@ package body Ada.Containers.Indefinite_Vectors is raise Constraint_Error; end if; + if V.Elements (Index) = null then + raise Constraint_Error; + end if; + B := B + 1; L := L + 1; @@ -1907,14 +1878,22 @@ package body Ada.Containers.Indefinite_Vectors is end loop; end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Position : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------------- -- Replace_Element -- --------------------- procedure Replace_Element - (Container : Vector; + (Container : in out Vector; Index : Index_Type; - By : Element_Type) + New_Item : Element_Type) is begin if Index > Container.Last then @@ -1928,18 +1907,26 @@ package body Ada.Containers.Indefinite_Vectors is declare X : Element_Access := Container.Elements (Index); begin - Container.Elements (Index) := new Element_Type'(By); + Container.Elements (Index) := new Element_Type'(New_Item); Free (X); end; end Replace_Element; - procedure Replace_Element (Position : Cursor; By : Element_Type) is + procedure Replace_Element + (Container : in out Vector; + Position : Cursor; + New_Item : Element_Type) + is begin if Position.Container = null then raise Constraint_Error; end if; - Replace_Element (Position.Container.all, Position.Index, By); + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + + Replace_Element (Container, Position.Index, New_Item); end Replace_Element; ---------------------- @@ -2083,6 +2070,41 @@ package body Ada.Containers.Indefinite_Vectors is end; end Reserve_Capacity; + ---------------------- + -- Reverse_Elements -- + ---------------------- + + procedure Reverse_Elements (Container : in out Vector) is + begin + if Container.Length <= 1 then + return; + end if; + + if Container.Lock > 0 then + raise Program_Error; + end if; + + declare + I : Index_Type := Index_Type'First; + J : Index_Type := Container.Last; + E : Elements_Type renames Container.Elements.all; + + begin + while I < J loop + declare + EI : constant Element_Access := E (I); + + begin + E (I) := E (J); + E (J) := EI; + end; + + I := I + 1; + J := J - 1; + end loop; + end; + end Reverse_Elements; + ------------------ -- Reverse_Find -- ------------------ @@ -2096,8 +2118,7 @@ package body Ada.Containers.Indefinite_Vectors is begin if Position.Container /= null - and then Position.Container /= - Vector_Access'(Container'Unchecked_Access) + and then Position.Container /= Container'Unchecked_Access then raise Program_Error; end if; @@ -2230,7 +2251,7 @@ package body Ada.Containers.Indefinite_Vectors is ---------- procedure Swap - (Container : Vector; + (Container : in out Vector; I, J : Index_Type) is begin @@ -2260,7 +2281,9 @@ package body Ada.Containers.Indefinite_Vectors is end; end Swap; - procedure Swap (I, J : Cursor) + procedure Swap + (Container : in out Vector; + I, J : Cursor) is begin if I.Container = null @@ -2269,11 +2292,13 @@ package body Ada.Containers.Indefinite_Vectors is raise Constraint_Error; end if; - if I.Container /= J.Container then + if I.Container /= Container'Unrestricted_Access + or else J.Container /= Container'Unrestricted_Access + then raise Program_Error; end if; - Swap (I.Container.all, I.Index, J.Index); + Swap (Container, I.Index, J.Index); end Swap; --------------- @@ -2387,24 +2412,27 @@ package body Ada.Containers.Indefinite_Vectors is -------------------- procedure Update_Element - (Container : Vector; + (Container : in out Vector; Index : Index_Type; Process : not null access procedure (Element : in out Element_Type)) is - V : Vector renames Container'Unrestricted_Access.all; - B : Natural renames V.Busy; - L : Natural renames V.Lock; + B : Natural renames Container.Busy; + L : Natural renames Container.Lock; begin if Index > Container.Last then raise Constraint_Error; end if; + if Container.Elements (Index) = null then + raise Constraint_Error; + end if; + B := B + 1; L := L + 1; begin - Process (V.Elements (Index).all); + Process (Container.Elements (Index).all); exception when others => L := L - 1; @@ -2417,15 +2445,20 @@ package body Ada.Containers.Indefinite_Vectors is end Update_Element; procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)) + (Container : in out Vector; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)) is begin if Position.Container = null then raise Constraint_Error; end if; - Update_Element (Position.Container.all, Position.Index, Process); + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + + Update_Element (Container, Position.Index, Process); end Update_Element; ----------- @@ -2466,4 +2499,12 @@ package body Ada.Containers.Indefinite_Vectors is end; end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Position : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Indefinite_Vectors; diff --git a/gcc/ada/a-coinve.ads b/gcc/ada/a-coinve.ads index 6ccfda5f7fa..822e797f04a 100644 --- a/gcc/ada/a-coinve.ads +++ b/gcc/ada/a-coinve.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -38,7 +38,6 @@ with Ada.Streams; generic type Index_Type is range <>; - type Element_Type (<>) is private; with function "=" (Left, Right : Element_Type) return Boolean is <>; @@ -52,8 +51,6 @@ package Ada.Containers.Indefinite_Vectors is No_Index : constant Extended_Index := Extended_Index'First; - subtype Index_Subtype is Index_Type; - type Vector is tagged private; type Cursor is private; @@ -62,6 +59,8 @@ package Ada.Containers.Indefinite_Vectors is No_Element : constant Cursor; + function "=" (Left, Right : Vector) return Boolean; + function To_Vector (Length : Count_Type) return Vector; function To_Vector @@ -76,8 +75,6 @@ package Ada.Containers.Indefinite_Vectors is function "&" (Left, Right : Element_Type) return Vector; - function "=" (Left, Right : Vector) return Boolean; - function Capacity (Container : Vector) return Count_Type; procedure Reserve_Capacity @@ -86,6 +83,10 @@ package Ada.Containers.Indefinite_Vectors is function Length (Container : Vector) return Count_Type; + procedure Set_Length + (Container : in out Vector; + Length : Count_Type); + function Is_Empty (Container : Vector) return Boolean; procedure Clear (Container : in out Vector); @@ -102,6 +103,16 @@ package Ada.Containers.Indefinite_Vectors is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Vector; + Index : Index_Type; + New_Item : Element_Type); + + procedure Replace_Element + (Container : in out Vector; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Container : Vector; Index : Index_Type; @@ -112,24 +123,14 @@ package Ada.Containers.Indefinite_Vectors is Process : not null access procedure (Element : Element_Type)); procedure Update_Element - (Container : Vector; + (Container : in out Vector; Index : Index_Type; Process : not null access procedure (Element : in out Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)); - - procedure Replace_Element - (Container : Vector; - Index : Index_Type; - By : Element_Type); - - procedure Replace_Element - (Position : Cursor; - By : Element_Type); - - procedure Assign (Target : in out Vector; Source : Vector); + (Container : in out Vector; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)); procedure Move (Target : in out Vector; Source : in out Vector); @@ -197,10 +198,6 @@ package Ada.Containers.Indefinite_Vectors is Position : out Cursor; Count : Count_Type := 1); - procedure Set_Length - (Container : in out Vector; - Length : Count_Type); - procedure Delete (Container : in out Vector; Index : Extended_Index; @@ -219,6 +216,12 @@ package Ada.Containers.Indefinite_Vectors is (Container : in out Vector; Count : Count_Type := 1); + procedure Reverse_Elements (Container : in out Vector); + + procedure Swap (Container : in out Vector; I, J : Index_Type); + + procedure Swap (Container : in out Vector; I, J : Cursor); + function First_Index (Container : Vector) return Index_Type; function First (Container : Vector) return Cursor; @@ -231,21 +234,13 @@ package Ada.Containers.Indefinite_Vectors is function Last_Element (Container : Vector) return Element_Type; - procedure Swap (Container : Vector; I, J : Index_Type); - - procedure Swap (I, J : Cursor); - - generic - with function "<" (Left, Right : Element_Type) return Boolean is <>; - package Generic_Sorting is - - function Is_Sorted (Container : Vector) return Boolean; + function Next (Position : Cursor) return Cursor; - procedure Sort (Container : in out Vector); + procedure Next (Position : in out Cursor); - procedure Merge (Target, Source : in out Vector); + function Previous (Position : Cursor) return Cursor; - end Generic_Sorting; + procedure Previous (Position : in out Cursor); function Find_Index (Container : Vector; @@ -255,30 +250,22 @@ package Ada.Containers.Indefinite_Vectors is function Find (Container : Vector; Item : Element_Type; - Position : Cursor := No_Element) return Cursor; + Position : Cursor := No_Element) return Cursor; function Reverse_Find_Index (Container : Vector; Item : Element_Type; Index : Index_Type := Index_Type'Last) return Extended_Index; - function Reverse_Find (Container : Vector; - Item : Element_Type; - Position : Cursor := No_Element) - return Cursor; + function Reverse_Find + (Container : Vector; + Item : Element_Type; + Position : Cursor := No_Element) return Cursor; function Contains (Container : Vector; Item : Element_Type) return Boolean; - function Next (Position : Cursor) return Cursor; - - function Previous (Position : Cursor) return Cursor; - - procedure Next (Position : in out Cursor); - - procedure Previous (Position : in out Cursor); - function Has_Element (Position : Cursor) return Boolean; procedure Iterate @@ -289,6 +276,18 @@ package Ada.Containers.Indefinite_Vectors is (Container : Vector; Process : not null access procedure (Position : Cursor)); + generic + with function "<" (Left, Right : Element_Type) return Boolean is <>; + package Generic_Sorting is + + function Is_Sorted (Container : Vector) return Boolean; + + procedure Sort (Container : in out Vector); + + procedure Merge (Target : in out Vector; Source : in out Vector); + + end Generic_Sorting; + private pragma Inline (First_Index); @@ -346,6 +345,18 @@ private Index : Index_Type := Index_Type'First; end record; + procedure Write + (Stream : access Root_Stream_Type'Class; + Position : Cursor); + + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Position : out Cursor); + + for Cursor'Read use Read; + No_Element : constant Cursor := Cursor'(null, Index_Type'First); end Ada.Containers.Indefinite_Vectors; diff --git a/gcc/ada/a-colien.adb b/gcc/ada/a-colien.adb index 0f76ad1a960..881fb0c32f4 100644 --- a/gcc/ada/a-colien.adb +++ b/gcc/ada/a-colien.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ ------------------------------------------------------------------------------ with System; + package body Ada.Command_Line.Environment is ----------------------- diff --git a/gcc/ada/a-colien.ads b/gcc/ada/a-colien.ads index 7a683c88c96..404845bcc09 100644 --- a/gcc/ada/a-colien.ads +++ b/gcc/ada/a-colien.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-colire.adb b/gcc/ada/a-colire.adb index de273b50f1a..096c166b8dd 100644 --- a/gcc/ada/a-colire.adb +++ b/gcc/ada/a-colire.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-colire.ads b/gcc/ada/a-colire.ads index 8c5a518575e..e0c038806f7 100644 --- a/gcc/ada/a-colire.ads +++ b/gcc/ada/a-colire.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-comlin.adb b/gcc/ada/a-comlin.adb index 36d88fa1266..ab438788d45 100644 --- a/gcc/ada/a-comlin.adb +++ b/gcc/ada/a-comlin.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-comlin.ads b/gcc/ada/a-comlin.ads index 1ddc3e1da6e..da9e583ae31 100644 --- a/gcc/ada/a-comlin.ads +++ b/gcc/ada/a-comlin.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-convec.adb b/gcc/ada/a-convec.adb index fb3a88bb873..b298fd6a736 100644 --- a/gcc/ada/a-convec.adb +++ b/gcc/ada/a-convec.adb @@ -303,37 +303,6 @@ package body Ada.Containers.Vectors is Count); end Append; - ------------ - -- Assign -- - ------------ - - procedure Assign - (Target : in out Vector; - Source : Vector) - is - N : constant Count_Type := Length (Source); - - begin - if Target'Address = Source'Address then - return; - end if; - - Clear (Target); - - if N = 0 then - return; - end if; - - if N > Capacity (Target) then - Reserve_Capacity (Target, Capacity => N); - end if; - - Target.Elements (Index_Type'First .. Source.Last) := - Source.Elements (Index_Type'First .. Source.Last); - - Target.Last := Source.Last; - end Assign; - -------------- -- Capacity -- -------------- @@ -443,8 +412,7 @@ package body Ada.Containers.Vectors is raise Constraint_Error; end if; - if Position.Container /= - Vector_Access'(Container'Unchecked_Access) + if Position.Container /= Container'Unrestricted_Access or else Position.Index > Container.Last then raise Program_Error; @@ -452,11 +420,17 @@ package body Ada.Containers.Vectors is Delete (Container, Position.Index, Count); - if Position.Index <= Container.Last then - Position := (Container'Unchecked_Access, Position.Index); - else - Position := No_Element; - end if; + -- This is the old behavior, prior to the York API (2005/06): + + -- if Position.Index <= Container.Last then + -- Position := (Container'Unchecked_Access, Position.Index); + -- else + -- Position := No_Element; + -- end if; + + -- This is the behavior specified by the York API: + + Position := No_Element; end Delete; ------------------ @@ -539,6 +513,7 @@ package body Ada.Containers.Vectors is procedure Finalize (Container : in out Vector) is X : Elements_Access := Container.Elements; + begin if Container.Busy > 0 then raise Program_Error; @@ -556,13 +531,12 @@ package body Ada.Containers.Vectors is function Find (Container : Vector; Item : Element_Type; - Position : Cursor := No_Element) return Cursor is - + Position : Cursor := No_Element) return Cursor + is begin if Position.Container /= null - and then (Position.Container /= - Vector_Access'(Container'Unchecked_Access) - or else Position.Index > Container.Last) + and then (Position.Container /= Container'Unrestricted_Access + or else Position.Index > Container.Last) then raise Program_Error; end if; @@ -583,7 +557,8 @@ package body Ada.Containers.Vectors is function Find_Index (Container : Vector; Item : Element_Type; - Index : Index_Type := Index_Type'First) return Extended_Index is + Index : Index_Type := Index_Type'First) return Extended_Index + is begin for Indx in Index .. Container.Last loop if Container.Elements (Indx) = Item then @@ -1152,6 +1127,31 @@ package body Ada.Containers.Vectors is Position := Cursor'(Container'Unchecked_Access, Index); end Insert; + procedure Insert + (Container : in out Vector; + Before : Extended_Index; + Count : Count_Type := 1) + is + New_Item : Element_Type; -- Default-initialized value + pragma Warnings (Off, New_Item); + + begin + Insert (Container, Before, New_Item, Count); + end Insert; + + procedure Insert + (Container : in out Vector; + Before : Cursor; + Position : out Cursor; + Count : Count_Type := 1) + is + New_Item : Element_Type; -- Default-initialized value + pragma Warnings (Off, New_Item); + + begin + Insert (Container, Before, New_Item, Position, Count); + end Insert; + ------------------ -- Insert_Space -- ------------------ @@ -1339,7 +1339,7 @@ package body Ada.Containers.Vectors is Index := Before.Index; end if; - Insert_Space (Container, Index, Count); + Insert_Space (Container, Index, Count => Count); Position := Cursor'(Container'Unchecked_Access, Index); end Insert_Space; @@ -1365,7 +1365,6 @@ package body Ada.Containers.Vectors is B : Natural renames V.Busy; begin - B := B + 1; begin @@ -1379,7 +1378,6 @@ package body Ada.Containers.Vectors is end; B := B - 1; - end Iterate; ---------- @@ -1620,14 +1618,22 @@ package body Ada.Containers.Vectors is end loop; end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Position : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------------- -- Replace_Element -- --------------------- procedure Replace_Element - (Container : Vector; + (Container : in out Vector; Index : Index_Type; - By : Element_Type) + New_Item : Element_Type) is begin if Index > Container.Last then @@ -1638,16 +1644,24 @@ package body Ada.Containers.Vectors is raise Program_Error; end if; - Container.Elements (Index) := By; + Container.Elements (Index) := New_Item; end Replace_Element; - procedure Replace_Element (Position : Cursor; By : Element_Type) is + procedure Replace_Element + (Container : in out Vector; + Position : Cursor; + New_Item : Element_Type) + is begin if Position.Container = null then raise Constraint_Error; end if; - Replace_Element (Position.Container.all, Position.Index, By); + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + + Replace_Element (Container, Position.Index, New_Item); end Replace_Element; ---------------------- @@ -1799,6 +1813,41 @@ package body Ada.Containers.Vectors is end; end Reserve_Capacity; + ---------------------- + -- Reverse_Elements -- + ---------------------- + + procedure Reverse_Elements (Container : in out Vector) is + begin + if Container.Length <= 1 then + return; + end if; + + if Container.Lock > 0 then + raise Program_Error; + end if; + + declare + I : Index_Type := Index_Type'First; + J : Index_Type := Container.Last; + E : Elements_Type renames Container.Elements.all; + + begin + while I < J loop + declare + EI : constant Element_Type := E (I); + + begin + E (I) := E (J); + E (J) := EI; + end; + + I := I + 1; + J := J - 1; + end loop; + end; + end Reverse_Elements; + ------------------ -- Reverse_Find -- ------------------ @@ -1921,7 +1970,7 @@ package body Ada.Containers.Vectors is -- Swap -- ---------- - procedure Swap (Container : Vector; I, J : Index_Type) is + procedure Swap (Container : in out Vector; I, J : Index_Type) is begin if I > Container.Last or else J > Container.Last @@ -1949,7 +1998,7 @@ package body Ada.Containers.Vectors is end; end Swap; - procedure Swap (I, J : Cursor) is + procedure Swap (Container : in out Vector; I, J : Cursor) is begin if I.Container = null or else J.Container = null @@ -1957,11 +2006,13 @@ package body Ada.Containers.Vectors is raise Constraint_Error; end if; - if I.Container /= J.Container then + if I.Container /= Container'Unrestricted_Access + or else J.Container /= Container'Unrestricted_Access + then raise Program_Error; end if; - Swap (I.Container.all, I.Index, J.Index); + Swap (Container, I.Index, J.Index); end Swap; --------------- @@ -2057,13 +2108,12 @@ package body Ada.Containers.Vectors is -------------------- procedure Update_Element - (Container : Vector; + (Container : in out Vector; Index : Index_Type; Process : not null access procedure (Element : in out Element_Type)) is - V : Vector renames Container'Unrestricted_Access.all; - B : Natural renames V.Busy; - L : Natural renames V.Lock; + B : Natural renames Container.Busy; + L : Natural renames Container.Lock; begin if Index > Container.Last then @@ -2074,7 +2124,7 @@ package body Ada.Containers.Vectors is L := L + 1; begin - Process (V.Elements (Index)); + Process (Container.Elements (Index)); exception when others => L := L - 1; @@ -2087,15 +2137,20 @@ package body Ada.Containers.Vectors is end Update_Element; procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)) + (Container : in out Vector; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)) is begin if Position.Container = null then raise Constraint_Error; end if; - Update_Element (Position.Container.all, Position.Index, Process); + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; + + Update_Element (Container, Position.Index, Process); end Update_Element; ----------- @@ -2114,4 +2169,12 @@ package body Ada.Containers.Vectors is end loop; end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Position : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Vectors; diff --git a/gcc/ada/a-convec.ads b/gcc/ada/a-convec.ads index 9b5c9bb82cf..5b268b5e3f0 100644 --- a/gcc/ada/a-convec.ads +++ b/gcc/ada/a-convec.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -50,8 +50,6 @@ package Ada.Containers.Vectors is No_Index : constant Extended_Index := Extended_Index'First; - subtype Index_Subtype is Index_Type; - type Vector is tagged private; type Cursor is private; @@ -60,6 +58,8 @@ package Ada.Containers.Vectors is No_Element : constant Cursor; + function "=" (Left, Right : Vector) return Boolean; + function To_Vector (Length : Count_Type) return Vector; function To_Vector @@ -74,8 +74,6 @@ package Ada.Containers.Vectors is function "&" (Left, Right : Element_Type) return Vector; - function "=" (Left, Right : Vector) return Boolean; - function Capacity (Container : Vector) return Count_Type; procedure Reserve_Capacity @@ -84,6 +82,10 @@ package Ada.Containers.Vectors is function Length (Container : Vector) return Count_Type; + procedure Set_Length + (Container : in out Vector; + Length : Count_Type); + function Is_Empty (Container : Vector) return Boolean; procedure Clear (Container : in out Vector); @@ -100,6 +102,16 @@ package Ada.Containers.Vectors is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Vector; + Index : Index_Type; + New_Item : Element_Type); + + procedure Replace_Element + (Container : in out Vector; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Container : Vector; Index : Index_Type; @@ -110,22 +122,14 @@ package Ada.Containers.Vectors is Process : not null access procedure (Element : Element_Type)); procedure Update_Element - (Container : Vector; + (Container : in out Vector; Index : Index_Type; Process : not null access procedure (Element : in out Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Element : in out Element_Type)); - - procedure Replace_Element - (Container : Vector; - Index : Index_Type; - By : Element_Type); - - procedure Replace_Element (Position : Cursor; By : Element_Type); - - procedure Assign (Target : in out Vector; Source : Vector); + (Container : in out Vector; + Position : Cursor; + Process : not null access procedure (Element : in out Element_Type)); procedure Move (Target : in out Vector; Source : in out Vector); @@ -164,6 +168,17 @@ package Ada.Containers.Vectors is Position : out Cursor; Count : Count_Type := 1); + procedure Insert + (Container : in out Vector; + Before : Extended_Index; + Count : Count_Type := 1); + + procedure Insert + (Container : in out Vector; + Before : Cursor; + Position : out Cursor; + Count : Count_Type := 1); + procedure Prepend (Container : in out Vector; New_Item : Vector); @@ -193,10 +208,6 @@ package Ada.Containers.Vectors is Position : out Cursor; Count : Count_Type := 1); - procedure Set_Length - (Container : in out Vector; - Length : Count_Type); - procedure Delete (Container : in out Vector; Index : Extended_Index; @@ -215,6 +226,12 @@ package Ada.Containers.Vectors is (Container : in out Vector; Count : Count_Type := 1); + procedure Reverse_Elements (Container : in out Vector); + + procedure Swap (Container : in out Vector; I, J : Index_Type); + + procedure Swap (Container : in out Vector; I, J : Cursor); + function First_Index (Container : Vector) return Index_Type; function First (Container : Vector) return Cursor; @@ -227,21 +244,13 @@ package Ada.Containers.Vectors is function Last_Element (Container : Vector) return Element_Type; - procedure Swap (Container : Vector; I, J : Index_Type); - - procedure Swap (I, J : Cursor); - - generic - with function "<" (Left, Right : Element_Type) return Boolean is <>; - package Generic_Sorting is - - function Is_Sorted (Container : Vector) return Boolean; + function Next (Position : Cursor) return Cursor; - procedure Sort (Container : in out Vector); + procedure Next (Position : in out Cursor); - procedure Merge (Target, Source : in out Vector); + function Previous (Position : Cursor) return Cursor; - end Generic_Sorting; + procedure Previous (Position : in out Cursor); function Find_Index (Container : Vector; @@ -267,14 +276,6 @@ package Ada.Containers.Vectors is (Container : Vector; Item : Element_Type) return Boolean; - function Next (Position : Cursor) return Cursor; - - function Previous (Position : Cursor) return Cursor; - - procedure Next (Position : in out Cursor); - - procedure Previous (Position : in out Cursor); - function Has_Element (Position : Cursor) return Boolean; procedure Iterate @@ -285,6 +286,18 @@ package Ada.Containers.Vectors is (Container : Vector; Process : not null access procedure (Position : Cursor)); + generic + with function "<" (Left, Right : Element_Type) return Boolean is <>; + package Generic_Sorting is + + function Is_Sorted (Container : Vector) return Boolean; + + procedure Sort (Container : in out Vector); + + procedure Merge (Target : in out Vector; Source : in out Vector); + + end Generic_Sorting; + private pragma Inline (First_Index); @@ -340,6 +353,18 @@ private Index : Index_Type := Index_Type'First; end record; + procedure Write + (Stream : access Root_Stream_Type'Class; + Position : Cursor); + + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Position : out Cursor); + + for Cursor'Read use Read; + No_Element : constant Cursor := Cursor'(null, Index_Type'First); end Ada.Containers.Vectors; diff --git a/gcc/ada/a-coorma.adb b/gcc/ada/a-coorma.adb index ba363b72436..fad63d4e498 100644 --- a/gcc/ada/a-coorma.adb +++ b/gcc/ada/a-coorma.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -81,6 +81,8 @@ package body Ada.Containers.Ordered_Maps is function Copy_Node (Source : Node_Access) return Node_Access; pragma Inline (Copy_Node); + procedure Free (X : in out Node_Access); + function Is_Equal_Node_Node (L, R : Node_Access) return Boolean; pragma Inline (Is_Equal_Node_Node); @@ -98,8 +100,6 @@ package body Ada.Containers.Ordered_Maps is -- Local Instantiations -- -------------------------- - procedure Free is new Ada.Unchecked_Deallocation (Node_Type, Node_Access); - package Tree_Operations is new Red_Black_Trees.Generic_Operations (Tree_Types); @@ -127,16 +127,42 @@ package body Ada.Containers.Ordered_Maps is function "<" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left.Node.Key < Right.Node.Key; end "<"; function "<" (Left : Cursor; Right : Key_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + return Left.Node.Key < Right; end "<"; function "<" (Left : Key_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left < Right.Node.Key; end "<"; @@ -155,16 +181,42 @@ package body Ada.Containers.Ordered_Maps is function ">" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Key < Left.Node.Key; end ">"; function ">" (Left : Cursor; Right : Key_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + return Right < Left.Node.Key; end ">"; function ">" (Left : Key_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Key < Left; end ">"; @@ -231,12 +283,12 @@ package body Ada.Containers.Ordered_Maps is function Copy_Node (Source : Node_Access) return Node_Access is Target : constant Node_Access := - new Node_Type'(Parent => null, - Left => null, - Right => null, - Color => Source.Color, + new Node_Type'(Color => Source.Color, Key => Source.Key, - Element => Source.Element); + Element => Source.Element, + Parent => null, + Left => null, + Right => null); begin return Target; end Copy_Node; @@ -246,16 +298,20 @@ package body Ada.Containers.Ordered_Maps is ------------ procedure Delete (Container : in out Map; Position : in out Cursor) is + Tree : Tree_Type renames Container.Tree; + begin if Position.Node = null then raise Constraint_Error; end if; - if Position.Container /= Map_Access'(Container'Unrestricted_Access) then + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; - Tree_Operations.Delete_Node_Sans_Free (Container.Tree, Position.Node); + pragma Assert (Vet (Tree, Position.Node), "bad cursor in Delete"); + + Tree_Operations.Delete_Node_Sans_Free (Tree, Position.Node); Free (Position.Node); Position.Container := null; @@ -269,7 +325,7 @@ package body Ada.Containers.Ordered_Maps is raise Constraint_Error; end if; - Delete_Node_Sans_Free (Container.Tree, X); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); Free (X); end Delete; @@ -279,6 +335,7 @@ package body Ada.Containers.Ordered_Maps is procedure Delete_First (Container : in out Map) is X : Node_Access := Container.Tree.First; + begin if X /= null then Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); @@ -292,6 +349,7 @@ package body Ada.Containers.Ordered_Maps is procedure Delete_Last (Container : in out Map) is X : Node_Access := Container.Tree.Last; + begin if X /= null then Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); @@ -305,15 +363,42 @@ package body Ada.Containers.Ordered_Maps is function Element (Position : Cursor) return Element_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Element"); + return Position.Node.Element; end Element; function Element (Container : Map; Key : Key_Type) return Element_Type is Node : constant Node_Access := Key_Ops.Find (Container.Tree, Key); + begin + if Node = null then + raise Constraint_Error; + end if; + return Node.Element; end Element; + --------------------- + -- Equivalent_Keys -- + --------------------- + + function Equivalent_Keys (Left, Right : Key_Type) return Boolean is + begin + if Left < Right + or else Right < Left + then + return False; + else + return True; + end if; + end Equivalent_Keys; + ------------- -- Exclude -- ------------- @@ -323,7 +408,7 @@ package body Ada.Containers.Ordered_Maps is begin if X /= null then - Delete_Node_Sans_Free (Container.Tree, X); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, X); Free (X); end if; end Exclude; @@ -348,12 +433,14 @@ package body Ada.Containers.Ordered_Maps is ----------- function First (Container : Map) return Cursor is + T : Tree_Type renames Container.Tree; + begin - if Container.Tree.First = null then + if T.First = null then return No_Element; end if; - return Cursor'(Container'Unrestricted_Access, Container.Tree.First); + return Cursor'(Container'Unrestricted_Access, T.First); end First; ------------------- @@ -361,8 +448,14 @@ package body Ada.Containers.Ordered_Maps is ------------------- function First_Element (Container : Map) return Element_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.First.Element; + if T.First = null then + raise Constraint_Error; + end if; + + return T.First.Element; end First_Element; --------------- @@ -370,8 +463,14 @@ package body Ada.Containers.Ordered_Maps is --------------- function First_Key (Container : Map) return Key_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.First.Key; + if T.First = null then + raise Constraint_Error; + end if; + + return T.First.Key; end First_Key; ----------- @@ -389,6 +488,26 @@ package body Ada.Containers.Ordered_Maps is return Cursor'(Container'Unrestricted_Access, Node); end Floor; + ---------- + -- Free -- + ---------- + + procedure Free (X : in out Node_Access) is + procedure Deallocate is + new Ada.Unchecked_Deallocation (Node_Type, Node_Access); + + begin + if X = null then + return; + end if; + + X.Parent := X; + X.Left := X; + X.Right := X; + + Deallocate (X); + end Free; + ----------------- -- Has_Element -- ----------------- @@ -444,15 +563,13 @@ package body Ada.Containers.Ordered_Maps is -------------- function New_Node return Node_Access is - Node : constant Node_Access := - new Node_Type'(Parent => null, - Left => null, - Right => null, - Color => Red, - Key => Key, - Element => New_Item); begin - return Node; + return new Node_Type'(Key => Key, + Element => New_Item, + Color => Red_Black_Trees.Red, + Parent => null, + Left => null, + Right => null); end New_Node; -- Start of processing for Insert @@ -507,18 +624,13 @@ package body Ada.Containers.Ordered_Maps is -------------- function New_Node return Node_Access is - Node : Node_Access := new Node_Type; - begin - begin - Node.Key := Key; - exception - when others => - Free (Node); - raise; - end; - - return Node; + return new Node_Type'(Key => Key, + Element => <>, + Color => Red_Black_Trees.Red, + Parent => null, + Left => null, + Right => null); end New_Node; -- Start of processing for Insert @@ -633,6 +745,13 @@ package body Ada.Containers.Ordered_Maps is function Key (Position : Cursor) return Key_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Key"); + return Position.Node.Key; end Key; @@ -641,12 +760,14 @@ package body Ada.Containers.Ordered_Maps is ---------- function Last (Container : Map) return Cursor is + T : Tree_Type renames Container.Tree; + begin - if Container.Tree.Last = null then + if T.Last = null then return No_Element; end if; - return Cursor'(Container'Unrestricted_Access, Container.Tree.Last); + return Cursor'(Container'Unrestricted_Access, T.Last); end Last; ------------------ @@ -654,8 +775,14 @@ package body Ada.Containers.Ordered_Maps is ------------------ function Last_Element (Container : Map) return Element_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.Last.Element; + if T.Last = null then + raise Constraint_Error; + end if; + + return T.Last.Element; end Last_Element; -------------- @@ -663,8 +790,14 @@ package body Ada.Containers.Ordered_Maps is -------------- function Last_Key (Container : Map) return Key_Type is + T : Tree_Type renames Container.Tree; + begin - return Container.Tree.Last.Key; + if T.Last = null then + raise Constraint_Error; + end if; + + return T.Last.Key; end Last_Key; ---------- @@ -712,6 +845,9 @@ package body Ada.Containers.Ordered_Maps is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Next"); + declare Node : constant Node_Access := Tree_Operations.Next (Position.Node); @@ -749,6 +885,9 @@ package body Ada.Containers.Ordered_Maps is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Previous"); + declare Node : constant Node_Access := Tree_Operations.Previous (Position.Node); @@ -771,29 +910,40 @@ package body Ada.Containers.Ordered_Maps is Process : not null access procedure (Key : Key_Type; Element : Element_Type)) is - K : Key_Type renames Position.Node.Key; - E : Element_Type renames Position.Node.Element; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - T : Tree_Type renames Position.Container.Tree; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Query_Element"); - B : Natural renames T.Busy; - L : Natural renames T.Lock; + declare + T : Tree_Type renames Position.Container.Tree; - begin - B := B + 1; - L := L + 1; + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (K, E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + declare + K : Key_Type renames Position.Node.Key; + E : Element_Type renames Position.Node.Element; + + begin + Process (K, E); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Query_Element; ---------- @@ -835,6 +985,14 @@ package body Ada.Containers.Ordered_Maps is Read (Stream, Container.Tree); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + ------------- -- Replace -- ------------- @@ -863,15 +1021,28 @@ package body Ada.Containers.Ordered_Maps is -- Replace_Element -- --------------------- - procedure Replace_Element (Position : Cursor; By : Element_Type) is - E : Element_Type renames Position.Node.Element; - + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type) + is begin - if Position.Container.Tree.Lock > 0 then + if Position.Node = null then + raise Constraint_Error; + end if; + + if Position.Container /= Container'Unrestricted_Access then raise Program_Error; end if; - E := By; + if Container.Tree.Lock > 0 then + raise Program_Error; + end if; + + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Replace_Element"); + + Position.Node.Element := New_Item; end Replace_Element; --------------------- @@ -968,33 +1139,49 @@ package body Ada.Containers.Ordered_Maps is -------------------- procedure Update_Element - (Position : Cursor; - Process : not null access procedure (Key : Key_Type; - Element : in out Element_Type)) + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; + Element : in out Element_Type)) is - K : Key_Type renames Position.Node.Key; - E : Element_Type renames Position.Node.Element; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - T : Tree_Type renames Position.Container.Tree; + if Position.Container /= Container'Unrestricted_Access then + raise Program_Error; + end if; - B : Natural renames T.Busy; - L : Natural renames T.Lock; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Update_Element"); - begin - B := B + 1; - L := L + 1; + declare + T : Tree_Type renames Container.Tree; + + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (K, E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + declare + K : Key_Type renames Position.Node.Key; + E : Element_Type renames Position.Node.Element; + + begin + Process (K, E); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Update_Element; ----------- @@ -1032,4 +1219,12 @@ package body Ada.Containers.Ordered_Maps is Write (Stream, Container.Tree); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Ordered_Maps; diff --git a/gcc/ada/a-coorma.ads b/gcc/ada/a-coorma.ads index 0efa16fbbb0..7f8386b4b13 100644 --- a/gcc/ada/a-coorma.ads +++ b/gcc/ada/a-coorma.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -38,9 +38,7 @@ with Ada.Finalization; with Ada.Streams; generic - type Key_Type is private; - type Element_Type is private; with function "<" (Left, Right : Key_Type) return Boolean is <>; @@ -49,6 +47,8 @@ generic package Ada.Containers.Ordered_Maps is pragma Preelaborate; + function Equivalent_Keys (Left, Right : Key_Type) return Boolean; + type Map is tagged private; type Cursor is private; @@ -69,18 +69,22 @@ package Ada.Containers.Ordered_Maps is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Map; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Key : Key_Type; Element : Element_Type)); procedure Update_Element - (Position : Cursor; - Process : not null access + (Container : in out Map; + Position : Cursor; + Process : not null access procedure (Key : Key_Type; Element : in out Element_Type)); - procedure Replace_Element (Position : Cursor; By : in Element_Type); - procedure Move (Target : in out Map; Source : in out Map); procedure Insert @@ -111,6 +115,8 @@ package Ada.Containers.Ordered_Maps is Key : Key_Type; New_Item : Element_Type); + procedure Exclude (Container : in out Map; Key : Key_Type); + procedure Delete (Container : in out Map; Key : Key_Type); procedure Delete (Container : in out Map; Position : in out Cursor); @@ -119,30 +125,18 @@ package Ada.Containers.Ordered_Maps is procedure Delete_Last (Container : in out Map); - procedure Exclude (Container : in out Map; Key : Key_Type); - - function Contains (Container : Map; Key : Key_Type) return Boolean; - - function Find (Container : Map; Key : Key_Type) return Cursor; - - function Element (Container : Map; Key : Key_Type) return Element_Type; - - function Floor (Container : Map; Key : Key_Type) return Cursor; - - function Ceiling (Container : Map; Key : Key_Type) return Cursor; - function First (Container : Map) return Cursor; - function First_Key (Container : Map) return Key_Type; - function First_Element (Container : Map) return Element_Type; - function Last (Container : Map) return Cursor; + function First_Key (Container : Map) return Key_Type; - function Last_Key (Container : Map) return Key_Type; + function Last (Container : Map) return Cursor; function Last_Element (Container : Map) return Element_Type; + function Last_Key (Container : Map) return Key_Type; + function Next (Position : Cursor) return Cursor; procedure Next (Position : in out Cursor); @@ -151,6 +145,16 @@ package Ada.Containers.Ordered_Maps is procedure Previous (Position : in out Cursor); + function Find (Container : Map; Key : Key_Type) return Cursor; + + function Element (Container : Map; Key : Key_Type) return Element_Type; + + function Floor (Container : Map; Key : Key_Type) return Cursor; + + function Ceiling (Container : Map; Key : Key_Type) return Cursor; + + function Contains (Container : Map; Key : Key_Type) return Boolean; + function Has_Element (Position : Cursor) return Boolean; function "<" (Left, Right : Cursor) return Boolean; @@ -202,8 +206,9 @@ private use Red_Black_Trees; use Tree_Types; use Ada.Finalization; + use Ada.Streams; - type Map_Access is access Map; + type Map_Access is access all Map; for Map_Access'Storage_Size use 0; type Cursor is record @@ -211,9 +216,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := Cursor'(null, null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := Cursor'(null, null); procedure Write (Stream : access Root_Stream_Type'Class; diff --git a/gcc/ada/a-coormu.adb b/gcc/ada/a-coormu.adb index caa44144d0f..eb1e3656229 100644 --- a/gcc/ada/a-coormu.adb +++ b/gcc/ada/a-coormu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -84,6 +84,13 @@ package body Ada.Containers.Ordered_Multisets is function Copy_Node (Source : Node_Access) return Node_Access; pragma Inline (Copy_Node); + procedure Free (X : in out Node_Access); + + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access); + procedure Insert_With_Hint (Dst_Tree : in out Tree_Type; Dst_Hint : Node_Access; @@ -115,9 +122,6 @@ package body Ada.Containers.Ordered_Multisets is -- Local Instantiations -- -------------------------- - procedure Free is - new Ada.Unchecked_Deallocation (Node_Type, Node_Access); - package Tree_Operations is new Red_Black_Trees.Generic_Operations (Tree_Types); @@ -154,18 +158,44 @@ package body Ada.Containers.Ordered_Multisets is function "<" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left.Node.Element < Right.Node.Element; end "<"; function "<" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + return Left.Node.Element < Right; end "<"; function "<" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left < Right.Node.Element; end "<"; @@ -184,6 +214,18 @@ package body Ada.Containers.Ordered_Multisets is function ">" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + -- L > R same as R < L return Right.Node.Element < Left.Node.Element; @@ -192,12 +234,26 @@ package body Ada.Containers.Ordered_Multisets is function ">" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + return Right < Left.Node.Element; end ">"; function ">" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Element < Left; end ">"; @@ -299,7 +355,7 @@ package body Ada.Containers.Ordered_Multisets is end loop; end Delete; - procedure Delete (Container : in out Set; Position : in out Cursor) is + procedure Delete (Container : in out Set; Position : in out Cursor) is begin if Position.Node = null then raise Constraint_Error; @@ -309,6 +365,9 @@ package body Ada.Containers.Ordered_Multisets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Delete"); + Delete_Node_Sans_Free (Container.Tree, Position.Node); Free (Position.Node); @@ -371,9 +430,31 @@ package body Ada.Containers.Ordered_Multisets is function Element (Position : Cursor) return Element_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Element"); + return Position.Node.Element; end Element; + ------------------------- + -- Equivalent_Elements -- + ------------------------- + + function Equivalent_Elements (Left, Right : Element_Type) return Boolean is + begin + if Left < Right + or else Right < Left + then + return False; + else + return True; + end if; + end Equivalent_Elements; + --------------------- -- Equivalent_Sets -- --------------------- @@ -460,6 +541,10 @@ package body Ada.Containers.Ordered_Multisets is function First_Element (Container : Set) return Element_Type is begin + if Container.Tree.First = null then + raise Constraint_Error; + end if; + return Container.Tree.First.Element; end First_Element; @@ -479,6 +564,24 @@ package body Ada.Containers.Ordered_Multisets is return Cursor'(Container'Unrestricted_Access, Node); end Floor; + ---------- + -- Free -- + ---------- + + procedure Free (X : in out Node_Access) is + procedure Deallocate is + new Ada.Unchecked_Deallocation (Node_Type, Node_Access); + + begin + if X /= null then + X.Parent := X; + X.Left := X; + X.Right := X; + + Deallocate (X); + end if; + end Free; + ------------------ -- Generic_Keys -- ------------------ @@ -510,34 +613,6 @@ package body Ada.Containers.Ordered_Multisets is Is_Less_Key_Node => Is_Less_Key_Node, Is_Greater_Key_Node => Is_Greater_Key_Node); - --------- - -- "<" -- - --------- - - function "<" (Left : Key_Type; Right : Cursor) return Boolean is - begin - return Left < Right.Node.Element; - end "<"; - - function "<" (Left : Cursor; Right : Key_Type) return Boolean is - begin - return Right > Left.Node.Element; - end "<"; - - --------- - -- ">" -- - --------- - - function ">" (Left : Cursor; Right : Key_Type) return Boolean is - begin - return Right < Left.Node.Element; - end ">"; - - function ">" (Left : Key_Type; Right : Cursor) return Boolean is - begin - return Left > Right.Node.Element; - end ">"; - ------------- -- Ceiling -- ------------- @@ -596,9 +671,28 @@ package body Ada.Containers.Ordered_Multisets is Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); begin + if Node = null then + raise Constraint_Error; + end if; + return Node.Element; end Element; + --------------------- + -- Equivalent_Keys -- + --------------------- + + function Equivalent_Keys (Left, Right : Key_Type) return Boolean is + begin + if Left < Right + or else Right < Left + then + return False; + else + return True; + end if; + end Equivalent_Keys; + ------------- -- Exclude -- ------------- @@ -608,6 +702,7 @@ package body Ada.Containers.Ordered_Multisets is Node : Node_Access := Key_Keys.Ceiling (Tree, Key); Done : constant Node_Access := Key_Keys.Upper_Bound (Tree, Key); X : Node_Access; + begin while Node /= Done loop X := Node; @@ -657,7 +752,7 @@ package body Ada.Containers.Ordered_Multisets is (Left : Key_Type; Right : Node_Access) return Boolean is begin - return Left > Right.Element; + return Key (Right.Element) < Left; end Is_Greater_Key_Node; ---------------------- @@ -668,7 +763,7 @@ package body Ada.Containers.Ordered_Multisets is (Left : Key_Type; Right : Node_Access) return Boolean is begin - return Left < Right.Element; + return Left < Key (Right.Element); end Is_Less_Key_Node; ------------- @@ -720,6 +815,13 @@ package body Ada.Containers.Ordered_Multisets is function Key (Position : Cursor) return Key_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Key"); + return Key (Position.Node.Element); end Key; @@ -786,9 +888,12 @@ package body Ada.Containers.Ordered_Multisets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Update_Element_Preserving_Key"); + declare E : Element_Type renames Position.Node.Element; - K : Key_Type renames Key (E); + K : constant Key_Type := Key (E); B : Natural renames Tree.Busy; L : Natural renames Tree.Lock; @@ -809,11 +914,7 @@ package body Ada.Containers.Ordered_Multisets is L := L - 1; B := B - 1; - if K < E - or else K > E - then - null; - else + if Equivalent_Keys (Left => K, Right => Key (E)) then return; end if; end; @@ -854,6 +955,24 @@ package body Ada.Containers.Ordered_Multisets is New_Item : Element_Type; Position : out Cursor) is + begin + Insert_Sans_Hint + (Container.Tree, + New_Item, + Position.Node); + + Position.Container := Container'Unrestricted_Access; + end Insert; + + ---------------------- + -- Insert_Sans_Hint -- + ---------------------- + + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access) + is function New_Node return Node_Access; pragma Inline (New_Node); @@ -869,25 +988,23 @@ package body Ada.Containers.Ordered_Multisets is function New_Node return Node_Access is Node : constant Node_Access := - new Node_Type'(Parent => null, - Left => null, - Right => null, - Color => Red, + new Node_Type'(Parent => null, + Left => null, + Right => null, + Color => Red_Black_Trees.Red, Element => New_Item); begin return Node; end New_Node; - -- Start of processing for Insert + -- Start of processing for Insert_Sans_Hint begin Unconditional_Insert_Sans_Hint - (Container.Tree, + (Tree, New_Item, - Position.Node); - - Position.Container := Container'Unrestricted_Access; - end Insert; + Node); + end Insert_Sans_Hint; ---------------------- -- Insert_With_Hint -- @@ -1116,6 +1233,10 @@ package body Ada.Containers.Ordered_Multisets is function Last_Element (Container : Set) return Element_Type is begin + if Container.Tree.Last = null then + raise Constraint_Error; + end if; + return Container.Tree.Last.Element; end Last_Element; @@ -1165,6 +1286,9 @@ package body Ada.Containers.Ordered_Multisets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Next"); + declare Node : constant Node_Access := Tree_Operations.Next (Position.Node); @@ -1211,6 +1335,9 @@ package body Ada.Containers.Ordered_Multisets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Previous"); + declare Node : constant Node_Access := Tree_Operations.Previous (Position.Node); @@ -1231,29 +1358,36 @@ package body Ada.Containers.Ordered_Multisets is (Position : Cursor; Process : not null access procedure (Element : Element_Type)) is - E : Element_Type renames Position.Node.Element; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - S : Set renames Position.Container.all; - T : Tree_Type renames S.Tree'Unrestricted_Access.all; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Query_Element"); - B : Natural renames T.Busy; - L : Natural renames T.Lock; + declare + T : Tree_Type renames Position.Container.Tree; - begin - B := B + 1; - L := L + 1; + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + begin + Process (Position.Node.Element); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Query_Element; ---------- @@ -1294,6 +1428,14 @@ package body Ada.Containers.Ordered_Multisets is Read (Stream, Container.Tree); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + --------------------- -- Replace_Element -- --------------------- @@ -1336,6 +1478,11 @@ package body Ada.Containers.Ordered_Multisets is function New_Node return Node_Access is begin Node.Element := Item; + Node.Color := Red_Black_Trees.Red; + Node.Parent := null; + Node.Left := null; + Node.Right := null; + return Node; end New_Node; @@ -1354,12 +1501,10 @@ package body Ada.Containers.Ordered_Multisets is end Replace_Element; procedure Replace_Element - (Container : Set; + (Container : in out Set; Position : Cursor; - By : Element_Type) + New_Item : Element_Type) is - Tree : Tree_Type renames Container.Tree'Unrestricted_Access.all; - begin if Position.Node = null then raise Constraint_Error; @@ -1369,7 +1514,10 @@ package body Ada.Containers.Ordered_Multisets is raise Program_Error; end if; - Replace_Element (Tree, Position.Node, By); + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Replace_Element"); + + Replace_Element (Container.Tree, Position.Node, New_Item); end Replace_Element; --------------------- @@ -1514,6 +1662,19 @@ package body Ada.Containers.Ordered_Multisets is return Set'(Controlled with Tree); end Symmetric_Difference; + ------------ + -- To_Set -- + ------------ + + function To_Set (New_Item : Element_Type) return Set is + Tree : Tree_Type; + Node : Node_Access; + + begin + Insert_Sans_Hint (Tree, New_Item, Node); + return Set'(Controlled with Tree); + end To_Set; + ----------- -- Union -- ----------- @@ -1564,4 +1725,12 @@ package body Ada.Containers.Ordered_Multisets is Write (Stream, Container.Tree); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Ordered_Multisets; diff --git a/gcc/ada/a-coormu.ads b/gcc/ada/a-coormu.ads index cb42f07d349..ab3d4d4d01e 100644 --- a/gcc/ada/a-coormu.ads +++ b/gcc/ada/a-coormu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -46,6 +46,8 @@ generic package Ada.Containers.Ordered_Multisets is pragma Preelaborate; + function Equivalent_Elements (Left, Right : Element_Type) return Boolean; + type Set is tagged private; type Cursor is private; @@ -58,6 +60,8 @@ package Ada.Containers.Ordered_Multisets is function Equivalent_Sets (Left, Right : Set) return Boolean; + function To_Set (New_Item : Element_Type) return Set; + function Length (Container : Set) return Count_Type; function Is_Empty (Container : Set) return Boolean; @@ -66,18 +70,16 @@ package Ada.Containers.Ordered_Multisets is function Element (Position : Cursor) return Element_Type; + procedure Replace_Element + (Container : in out Set; + Position : Cursor; + New_Item : Element_Type); + procedure Query_Element (Position : Cursor; Process : not null access procedure (Element : Element_Type)); - procedure Replace_Element - (Container : Set; - Position : Cursor; - By : Element_Type); - - procedure Move - (Target : in out Set; - Source : in out Set); + procedure Move (Target : in out Set; Source : in out Set); procedure Insert (Container : in out Set; @@ -88,6 +90,16 @@ package Ada.Containers.Ordered_Multisets is (Container : in out Set; New_Item : Element_Type); +-- TODO: include Replace too??? +-- +-- procedure Replace +-- (Container : in out Set; +-- New_Item : Element_Type); + + procedure Exclude + (Container : in out Set; + Item : Element_Type); + procedure Delete (Container : in out Set; Item : Element_Type); @@ -100,10 +112,6 @@ package Ada.Containers.Ordered_Multisets is procedure Delete_Last (Container : in out Set); - procedure Exclude - (Container : in out Set; - Item : Element_Type); - procedure Union (Target : in out Set; Source : Set); function Union (Left, Right : Set) return Set; @@ -132,14 +140,6 @@ package Ada.Containers.Ordered_Multisets is function Is_Subset (Subset : Set; Of_Set : Set) return Boolean; - function Contains (Container : Set; Item : Element_Type) return Boolean; - - function Find (Container : Set; Item : Element_Type) return Cursor; - - function Floor (Container : Set; Item : Element_Type) return Cursor; - - function Ceiling (Container : Set; Item : Element_Type) return Cursor; - function First (Container : Set) return Cursor; function First_Element (Container : Set) return Element_Type; @@ -156,6 +156,14 @@ package Ada.Containers.Ordered_Multisets is procedure Previous (Position : in out Cursor); + function Find (Container : Set; Item : Element_Type) return Cursor; + + function Floor (Container : Set; Item : Element_Type) return Cursor; + + function Ceiling (Container : Set; Item : Element_Type) return Cursor; + + function Contains (Container : Set; Item : Element_Type) return Boolean; + function Has_Element (Position : Cursor) return Boolean; function "<" (Left, Right : Cursor) return Boolean; @@ -189,47 +197,37 @@ package Ada.Containers.Ordered_Multisets is Process : not null access procedure (Position : Cursor)); generic - type Key_Type (<>) is limited private; + type Key_Type (<>) is private; with function Key (Element : Element_Type) return Key_Type; - with function "<" (Left : Key_Type; Right : Element_Type) - return Boolean is <>; - - with function ">" (Left : Key_Type; Right : Element_Type) - return Boolean is <>; + with function "<" (Left, Right : Key_Type) return Boolean is <>; package Generic_Keys is - function Contains (Container : Set; Key : Key_Type) return Boolean; - - function Find (Container : Set; Key : Key_Type) return Cursor; - - function Floor (Container : Set; Key : Key_Type) return Cursor; - - function Ceiling (Container : Set; Key : Key_Type) return Cursor; + function Equivalent_Keys (Left, Right : Key_Type) return Boolean; function Key (Position : Cursor) return Key_Type; function Element (Container : Set; Key : Key_Type) return Element_Type; - procedure Delete (Container : in out Set; Key : Key_Type); - procedure Exclude (Container : in out Set; Key : Key_Type); - function "<" (Left : Cursor; Right : Key_Type) return Boolean; + procedure Delete (Container : in out Set; Key : Key_Type); + + function Find (Container : Set; Key : Key_Type) return Cursor; - function ">" (Left : Cursor; Right : Key_Type) return Boolean; + function Floor (Container : Set; Key : Key_Type) return Cursor; - function "<" (Left : Key_Type; Right : Cursor) return Boolean; + function Ceiling (Container : Set; Key : Key_Type) return Cursor; - function ">" (Left : Key_Type; Right : Cursor) return Boolean; + function Contains (Container : Set; Key : Key_Type) return Boolean; procedure Update_Element_Preserving_Key (Container : in out Set; Position : Cursor; Process : not null access - procedure (Element : in out Element_Type)); + procedure (Element : in out Element_Type)); procedure Iterate (Container : Set; @@ -271,6 +269,7 @@ private use Red_Black_Trees; use Tree_Types; use Ada.Finalization; + use Ada.Streams; type Set_Access is access all Set; for Set_Access'Storage_Size use 0; @@ -280,9 +279,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := Cursor'(null, null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := Cursor'(null, null); procedure Write (Stream : access Root_Stream_Type'Class; diff --git a/gcc/ada/a-coorse.adb b/gcc/ada/a-coorse.adb index 04652f80444..9060552302b 100644 --- a/gcc/ada/a-coorse.adb +++ b/gcc/ada/a-coorse.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -84,6 +84,14 @@ package body Ada.Containers.Ordered_Sets is function Copy_Node (Source : Node_Access) return Node_Access; pragma Inline (Copy_Node); + procedure Free (X : in out Node_Access); + + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean); + procedure Insert_With_Hint (Dst_Tree : in out Tree_Type; Dst_Hint : Node_Access; @@ -115,9 +123,6 @@ package body Ada.Containers.Ordered_Sets is -- Local Instantiations -- -------------------------- - procedure Free is - new Ada.Unchecked_Deallocation (Node_Type, Node_Access); - package Tree_Operations is new Red_Black_Trees.Generic_Operations (Tree_Types); @@ -154,16 +159,42 @@ package body Ada.Containers.Ordered_Sets is function "<" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left.Node.Element < Right.Node.Element; end "<"; function "<" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in ""<"""); + return Left.Node.Element < Right; end "<"; function "<" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in ""<"""); + return Left < Right.Node.Element; end "<"; @@ -182,6 +213,18 @@ package body Ada.Containers.Ordered_Sets is function ">" (Left, Right : Cursor) return Boolean is begin + if Left.Node = null + or else Right.Node = null + then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + -- L > R same as R < L return Right.Node.Element < Left.Node.Element; @@ -189,11 +232,25 @@ package body Ada.Containers.Ordered_Sets is function ">" (Left : Element_Type; Right : Cursor) return Boolean is begin + if Right.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Right.Container.Tree, Right.Node), + "bad Right cursor in "">"""); + return Right.Node.Element < Left; end ">"; function ">" (Left : Cursor; Right : Element_Type) return Boolean is begin + if Left.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Left.Container.Tree, Left.Node), + "bad Left cursor in "">"""); + return Right < Left.Node.Element; end ">"; @@ -287,6 +344,9 @@ package body Ada.Containers.Ordered_Sets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Delete"); + Tree_Operations.Delete_Node_Sans_Free (Container.Tree, Position.Node); Free (Position.Node); Position.Container := null; @@ -356,6 +416,13 @@ package body Ada.Containers.Ordered_Sets is function Element (Position : Cursor) return Element_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Element"); + return Position.Node.Element; end Element; @@ -455,6 +522,10 @@ package body Ada.Containers.Ordered_Sets is function First_Element (Container : Set) return Element_Type is begin + if Container.Tree.First = null then + raise Constraint_Error; + end if; + return Container.Tree.First.Element; end First_Element; @@ -474,6 +545,24 @@ package body Ada.Containers.Ordered_Sets is return Cursor'(Container'Unrestricted_Access, Node); end Floor; + ---------- + -- Free -- + ---------- + + procedure Free (X : in out Node_Access) is + procedure Deallocate is + new Ada.Unchecked_Deallocation (Node_Type, Node_Access); + + begin + if X /= null then + X.Parent := X; + X.Left := X; + X.Right := X; + + Deallocate (X); + end if; + end Free; + ------------------ -- Generic_Keys -- ------------------ @@ -550,13 +639,15 @@ package body Ada.Containers.Ordered_Sets is -- Element -- ------------- - function Element - (Container : Set; - Key : Key_Type) return Element_Type - is - Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); + function Element (Container : Set; Key : Key_Type) return Element_Type is + Node : constant Node_Access := + Key_Keys.Find (Container.Tree, Key); begin + if Node = null then + raise Constraint_Error; + end if; + return Node.Element; end Element; @@ -649,6 +740,13 @@ package body Ada.Containers.Ordered_Sets is function Key (Position : Cursor) return Key_Type is begin + if Position.Node = null then + raise Constraint_Error; + end if; + + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Key"); + return Key (Position.Node.Element); end Key; @@ -691,6 +789,9 @@ package body Ada.Containers.Ordered_Sets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Update_Element_Preserving_Key"); + declare E : Element_Type renames Position.Node.Element; K : constant Key_Type := Key (E); @@ -770,32 +871,6 @@ package body Ada.Containers.Ordered_Sets is Position : out Cursor; Inserted : out Boolean) is - function New_Node return Node_Access; - pragma Inline (New_Node); - - procedure Insert_Post is - new Element_Keys.Generic_Insert_Post (New_Node); - - procedure Insert_Sans_Hint is - new Element_Keys.Generic_Conditional_Insert (Insert_Post); - - -------------- - -- New_Node -- - -------------- - - function New_Node return Node_Access is - Node : constant Node_Access := - new Node_Type'(Parent => null, - Left => null, - Right => null, - Color => Red, - Element => New_Item); - begin - return Node; - end New_Node; - - -- Start of processing for Insert - begin Insert_Sans_Hint (Container.Tree, @@ -822,6 +897,48 @@ package body Ada.Containers.Ordered_Sets is end Insert; ---------------------- + -- Insert_Sans_Hint -- + ---------------------- + + procedure Insert_Sans_Hint + (Tree : in out Tree_Type; + New_Item : Element_Type; + Node : out Node_Access; + Inserted : out Boolean) + is + function New_Node return Node_Access; + pragma Inline (New_Node); + + procedure Insert_Post is + new Element_Keys.Generic_Insert_Post (New_Node); + + procedure Conditional_Insert_Sans_Hint is + new Element_Keys.Generic_Conditional_Insert (Insert_Post); + + -------------- + -- New_Node -- + -------------- + + function New_Node return Node_Access is + begin + return new Node_Type'(Parent => null, + Left => null, + Right => null, + Color => Red_Black_Trees.Red, + Element => New_Item); + end New_Node; + + -- Start of processing for Insert_Sans_Hint + + begin + Conditional_Insert_Sans_Hint + (Tree, + New_Item, + Node, + Inserted); + end Insert_Sans_Hint; + + ---------------------- -- Insert_With_Hint -- ---------------------- @@ -1012,6 +1129,10 @@ package body Ada.Containers.Ordered_Sets is function Last_Element (Container : Set) return Element_Type is begin + if Container.Tree.Last = null then + raise Constraint_Error; + end if; + return Container.Tree.Last.Element; end Last_Element; @@ -1055,6 +1176,9 @@ package body Ada.Containers.Ordered_Sets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Next"); + declare Node : constant Node_Access := Tree_Operations.Next (Position.Node); @@ -1101,6 +1225,9 @@ package body Ada.Containers.Ordered_Sets is return No_Element; end if; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Previous"); + declare Node : constant Node_Access := Tree_Operations.Previous (Position.Node); @@ -1127,29 +1254,36 @@ package body Ada.Containers.Ordered_Sets is (Position : Cursor; Process : not null access procedure (Element : Element_Type)) is - E : Element_Type renames Position.Node.Element; + begin + if Position.Node = null then + raise Constraint_Error; + end if; - S : Set renames Position.Container.all; - T : Tree_Type renames S.Tree'Unrestricted_Access.all; + pragma Assert (Vet (Position.Container.Tree, Position.Node), + "bad cursor in Query_Element"); - B : Natural renames T.Busy; - L : Natural renames T.Lock; + declare + T : Tree_Type renames Position.Container.Tree; - begin - B := B + 1; - L := L + 1; + B : Natural renames T.Busy; + L : Natural renames T.Lock; begin - Process (E); - exception - when others => - L := L - 1; - B := B - 1; - raise; - end; + B := B + 1; + L := L + 1; - L := L - 1; - B := B - 1; + begin + Process (Position.Node.Element); + exception + when others => + L := L - 1; + B := B - 1; + raise; + end; + + L := L - 1; + B := B - 1; + end; end Query_Element; ---------- @@ -1192,6 +1326,14 @@ package body Ada.Containers.Ordered_Sets is Read (Stream, Container.Tree); end Read; + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor) + is + begin + raise Program_Error; + end Read; + ------------- -- Replace -- ------------- @@ -1254,6 +1396,11 @@ package body Ada.Containers.Ordered_Sets is function New_Node return Node_Access is begin Node.Element := Item; + Node.Color := Red; + Node.Parent := null; + Node.Right := null; + Node.Left := null; + return Node; end New_Node; @@ -1294,6 +1441,11 @@ package body Ada.Containers.Ordered_Sets is function New_Node return Node_Access is begin + Node.Color := Red; + Node.Parent := null; + Node.Right := null; + Node.Left := null; + return Node; end New_Node; @@ -1330,6 +1482,9 @@ package body Ada.Containers.Ordered_Sets is raise Program_Error; end if; + pragma Assert (Vet (Container.Tree, Position.Node), + "bad cursor in Replace_Element"); + Replace_Element (Container.Tree, Position.Node, New_Item); end Replace_Element; @@ -1436,6 +1591,20 @@ package body Ada.Containers.Ordered_Sets is return Set'(Controlled with Tree); end Symmetric_Difference; + ------------ + -- To_Set -- + ------------ + + function To_Set (New_Item : Element_Type) return Set is + Tree : Tree_Type; + Node : Node_Access; + Inserted : Boolean; + + begin + Insert_Sans_Hint (Tree, New_Item, Node, Inserted); + return Set'(Controlled with Tree); + end To_Set; + ----------- -- Union -- ----------- @@ -1486,4 +1655,12 @@ package body Ada.Containers.Ordered_Sets is Write (Stream, Container.Tree); end Write; + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor) + is + begin + raise Program_Error; + end Write; + end Ada.Containers.Ordered_Sets; diff --git a/gcc/ada/a-coorse.ads b/gcc/ada/a-coorse.ads index db5cfe5eae6..8afbd01e96f 100644 --- a/gcc/ada/a-coorse.ads +++ b/gcc/ada/a-coorse.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -60,6 +60,8 @@ package Ada.Containers.Ordered_Sets is function Equivalent_Sets (Left, Right : Set) return Boolean; + function To_Set (New_Item : Element_Type) return Set; + function Length (Container : Set) return Count_Type; function Is_Empty (Container : Set) return Boolean; @@ -255,6 +257,7 @@ private use Red_Black_Trees; use Tree_Types; use Ada.Finalization; + use Ada.Streams; type Set_Access is access all Set; for Set_Access'Storage_Size use 0; @@ -264,9 +267,19 @@ private Node : Node_Access; end record; - No_Element : constant Cursor := Cursor'(null, null); + procedure Write + (Stream : access Root_Stream_Type'Class; + Item : Cursor); - use Ada.Streams; + for Cursor'Write use Write; + + procedure Read + (Stream : access Root_Stream_Type'Class; + Item : out Cursor); + + for Cursor'Read use Read; + + No_Element : constant Cursor := Cursor'(null, null); procedure Write (Stream : access Root_Stream_Type'Class; diff --git a/gcc/ada/a-coprnu.adb b/gcc/ada/a-coprnu.adb index af3d1648348..fd7f34580a8 100644 --- a/gcc/ada/a-coprnu.adb +++ b/gcc/ada/a-coprnu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-crbltr.ads b/gcc/ada/a-crbltr.ads index 9df13623d43..391892920f8 100644 --- a/gcc/ada/a-crbltr.ads +++ b/gcc/ada/a-crbltr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-crbtgk.adb b/gcc/ada/a-crbtgk.adb index aeed115edff..6d748a30ec3 100644 --- a/gcc/ada/a-crbtgk.adb +++ b/gcc/ada/a-crbtgk.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-crbtgo.adb b/gcc/ada/a-crbtgo.adb index 8dd62a5ce44..4720f8cbb48 100644 --- a/gcc/ada/a-crbtgo.adb +++ b/gcc/ada/a-crbtgo.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -49,91 +49,91 @@ package body Ada.Containers.Red_Black_Trees.Generic_Operations is procedure Left_Rotate (Tree : in out Tree_Type; X : Node_Access); procedure Right_Rotate (Tree : in out Tree_Type; Y : Node_Access); - --------------------- - -- Check_Invariant -- - --------------------- - - procedure Check_Invariant (Tree : Tree_Type) is - Root : constant Node_Access := Tree.Root; - - function Check (Node : Node_Access) return Natural; - - ----------- - -- Check -- - ----------- - - function Check (Node : Node_Access) return Natural is - begin - if Node = null then - return 0; - end if; - - if Color (Node) = Red then - declare - L : constant Node_Access := Left (Node); - begin - pragma Assert (L = null or else Color (L) = Black); - null; - end; - - declare - R : constant Node_Access := Right (Node); - begin - pragma Assert (R = null or else Color (R) = Black); - null; - end; - - declare - NL : constant Natural := Check (Left (Node)); - NR : constant Natural := Check (Right (Node)); - begin - pragma Assert (NL = NR); - return NL; - end; - end if; - - declare - NL : constant Natural := Check (Left (Node)); - NR : constant Natural := Check (Right (Node)); - begin - pragma Assert (NL = NR); - return NL + 1; - end; - end Check; - - -- Start of processing for Check_Invariant - - begin - if Root = null then - pragma Assert (Tree.First = null); - pragma Assert (Tree.Last = null); - pragma Assert (Tree.Length = 0); - null; - - else - pragma Assert (Color (Root) = Black); - pragma Assert (Tree.Length > 0); - pragma Assert (Tree.Root /= null); - pragma Assert (Tree.First /= null); - pragma Assert (Tree.Last /= null); - pragma Assert (Parent (Tree.Root) = null); - pragma Assert ((Tree.Length > 1) - or else (Tree.First = Tree.Last - and Tree.First = Tree.Root)); - pragma Assert (Left (Tree.First) = null); - pragma Assert (Right (Tree.Last) = null); - - declare - L : constant Node_Access := Left (Root); - R : constant Node_Access := Right (Root); - NL : constant Natural := Check (L); - NR : constant Natural := Check (R); - begin - pragma Assert (NL = NR); - null; - end; - end if; - end Check_Invariant; +-- --------------------- +-- -- Check_Invariant -- +-- --------------------- + +-- procedure Check_Invariant (Tree : Tree_Type) is +-- Root : constant Node_Access := Tree.Root; +-- +-- function Check (Node : Node_Access) return Natural; +-- +-- ----------- +-- -- Check -- +-- ----------- +-- +-- function Check (Node : Node_Access) return Natural is +-- begin +-- if Node = null then +-- return 0; +-- end if; +-- +-- if Color (Node) = Red then +-- declare +-- L : constant Node_Access := Left (Node); +-- begin +-- pragma Assert (L = null or else Color (L) = Black); +-- null; +-- end; +-- +-- declare +-- R : constant Node_Access := Right (Node); +-- begin +-- pragma Assert (R = null or else Color (R) = Black); +-- null; +-- end; +-- +-- declare +-- NL : constant Natural := Check (Left (Node)); +-- NR : constant Natural := Check (Right (Node)); +-- begin +-- pragma Assert (NL = NR); +-- return NL; +-- end; +-- end if; +-- +-- declare +-- NL : constant Natural := Check (Left (Node)); +-- NR : constant Natural := Check (Right (Node)); +-- begin +-- pragma Assert (NL = NR); +-- return NL + 1; +-- end; +-- end Check; +-- +-- -- Start of processing for Check_Invariant +-- +-- begin +-- if Root = null then +-- pragma Assert (Tree.First = null); +-- pragma Assert (Tree.Last = null); +-- pragma Assert (Tree.Length = 0); +-- null; +-- +-- else +-- pragma Assert (Color (Root) = Black); +-- pragma Assert (Tree.Length > 0); +-- pragma Assert (Tree.Root /= null); +-- pragma Assert (Tree.First /= null); +-- pragma Assert (Tree.Last /= null); +-- pragma Assert (Parent (Tree.Root) = null); +-- pragma Assert ((Tree.Length > 1) +-- or else (Tree.First = Tree.Last +-- and Tree.First = Tree.Root)); +-- pragma Assert (Left (Tree.First) = null); +-- pragma Assert (Right (Tree.Last) = null); +-- +-- declare +-- L : constant Node_Access := Left (Root); +-- R : constant Node_Access := Right (Root); +-- NL : constant Natural := Check (L); +-- NR : constant Natural := Check (R); +-- begin +-- pragma Assert (NL = NR); +-- null; +-- end; +-- end if; +-- end Check_Invariant; ------------------ -- Delete_Fixup -- @@ -249,22 +249,22 @@ package body Ada.Containers.Red_Black_Trees.Generic_Operations is raise Program_Error; end if; - pragma Assert (Tree.Length > 0); - pragma Assert (Tree.Root /= null); - pragma Assert (Tree.First /= null); - pragma Assert (Tree.Last /= null); - pragma Assert (Parent (Tree.Root) = null); - pragma Assert ((Tree.Length > 1) - or else (Tree.First = Tree.Last - and then Tree.First = Tree.Root)); - pragma Assert ((Left (Node) = null) - or else (Parent (Left (Node)) = Node)); - pragma Assert ((Right (Node) = null) - or else (Parent (Right (Node)) = Node)); - pragma Assert (((Parent (Node) = null) and then (Tree.Root = Node)) - or else ((Parent (Node) /= null) and then - ((Left (Parent (Node)) = Node) - or else (Right (Parent (Node)) = Node)))); +-- pragma Assert (Tree.Length > 0); +-- pragma Assert (Tree.Root /= null); +-- pragma Assert (Tree.First /= null); +-- pragma Assert (Tree.Last /= null); +-- pragma Assert (Parent (Tree.Root) = null); +-- pragma Assert ((Tree.Length > 1) +-- or else (Tree.First = Tree.Last +-- and then Tree.First = Tree.Root)); +-- pragma Assert ((Left (Node) = null) +-- or else (Parent (Left (Node)) = Node)); +-- pragma Assert ((Right (Node) = null) +-- or else (Parent (Right (Node)) = Node)); +-- pragma Assert (((Parent (Node) = null) and then (Tree.Root = Node)) +-- or else ((Parent (Node) /= null) and then +-- ((Left (Parent (Node)) = Node) +-- or else (Right (Parent (Node)) = Node)))); if Left (Z) = null then if Right (Z) = null then @@ -545,7 +545,6 @@ package body Ada.Containers.Red_Black_Trees.Generic_Operations is P, X : Node_Access; begin - if Right (Source_Root) /= null then Set_Right (Node => Target_Root, @@ -586,7 +585,6 @@ package body Ada.Containers.Red_Black_Trees.Generic_Operations is when others => Delete_Tree (Target_Root); raise; - end Generic_Copy_Tree; ------------------------- @@ -1049,4 +1047,106 @@ package body Ada.Containers.Red_Black_Trees.Generic_Operations is Set_Parent (Y, X); end Right_Rotate; + --------- + -- Vet -- + --------- + + function Vet (Tree : Tree_Type; Node : Node_Access) return Boolean is + begin + if Node = null then + return True; + end if; + + if Parent (Node) = Node + or else Left (Node) = Node + or else Right (Node) = Node + then + return False; + end if; + + if Tree.Length = 0 + or else Tree.Root = null + or else Tree.First = null + or else Tree.Last = null + then + return False; + end if; + + if Parent (Tree.Root) /= null then + return False; + end if; + + if Left (Tree.First) /= null then + return False; + end if; + + if Right (Tree.Last) /= null then + return False; + end if; + + if Tree.Length = 1 then + if Tree.First /= Tree.Last + or else Tree.First /= Tree.Root + then + return False; + end if; + + if Node /= Tree.First then + return False; + end if; + + if Parent (Node) /= null + or else Left (Node) /= null + or else Right (Node) /= null + then + return False; + end if; + + return True; + end if; + + if Tree.First = Tree.Last then + return False; + end if; + + if Tree.Length = 2 then + if Tree.First /= Tree.Root + and then Tree.Last /= Tree.Root + then + return False; + end if; + + if Tree.First /= Node + and then Tree.Last /= Node + then + return False; + end if; + end if; + + if Left (Node) /= null + and then Parent (Left (Node)) /= Node + then + return False; + end if; + + if Right (Node) /= null + and then Parent (Right (Node)) /= Node + then + return False; + end if; + + if Parent (Node) = null then + if Tree.Root /= Node then + return False; + end if; + + elsif Left (Parent (Node)) /= Node + and then Right (Parent (Node)) /= Node + then + return False; + end if; + + return True; + end Vet; + end Ada.Containers.Red_Black_Trees.Generic_Operations; diff --git a/gcc/ada/a-crbtgo.ads b/gcc/ada/a-crbtgo.ads index 8b3ab50f7f8..a213a283010 100644 --- a/gcc/ada/a-crbtgo.ads +++ b/gcc/ada/a-crbtgo.ads @@ -7,7 +7,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -56,7 +56,14 @@ package Ada.Containers.Red_Black_Trees.Generic_Operations is function Max (Node : Node_Access) return Node_Access; - procedure Check_Invariant (Tree : Tree_Type); + -- NOTE: The Check_Invariant operation was used during early + -- development of the red-black tree. Now that the tree type + -- implementation has matured, we don't really need Check_Invariant + -- anymore. + + -- procedure Check_Invariant (Tree : Tree_Type); + + function Vet (Tree : Tree_Type; Node : Node_Access) return Boolean; function Next (Node : Node_Access) return Node_Access; diff --git a/gcc/ada/a-cwila1.ads b/gcc/ada/a-cwila1.ads index 0237237bd19..b75ecf671d6 100644 --- a/gcc/ada/a-cwila1.ads +++ b/gcc/ada/a-cwila1.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-cwila9.ads b/gcc/ada/a-cwila9.ads index 94fcad9f27a..ff1d22480b7 100644 --- a/gcc/ada/a-cwila9.ads +++ b/gcc/ada/a-cwila9.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-decima.adb b/gcc/ada/a-decima.adb index c255efa20d8..80be38f920d 100644 --- a/gcc/ada/a-decima.adb +++ b/gcc/ada/a-decima.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-decima.ads b/gcc/ada/a-decima.ads index 960c9c04e7c..9fdbaa292ea 100644 --- a/gcc/ada/a-decima.ads +++ b/gcc/ada/a-decima.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-diocst.ads b/gcc/ada/a-diocst.ads index 947e19739fe..3681646ede0 100644 --- a/gcc/ada/a-diocst.ads +++ b/gcc/ada/a-diocst.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-direct.adb b/gcc/ada/a-direct.adb index 3d0216672b9..318d1044502 100644 --- a/gcc/ada/a-direct.adb +++ b/gcc/ada/a-direct.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-direct.ads b/gcc/ada/a-direct.ads index 5f381ef3aa7..3e2a2b239c4 100644 --- a/gcc/ada/a-direct.ads +++ b/gcc/ada/a-direct.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived for use with GNAT from AI-00248, which is -- -- expected to be a part of a future expected revised Ada Reference Manual. -- diff --git a/gcc/ada/a-direio.adb b/gcc/ada/a-direio.adb index b5f79391a71..a5351f54b55 100644 --- a/gcc/ada/a-direio.adb +++ b/gcc/ada/a-direio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-direio.ads b/gcc/ada/a-direio.ads index 97fcf85deae..a98e93f5fba 100644 --- a/gcc/ada/a-direio.ads +++ b/gcc/ada/a-direio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-dirval-mingw.adb b/gcc/ada/a-dirval-mingw.adb index 55aba243b3f..760102c9e10 100644 --- a/gcc/ada/a-dirval-mingw.adb +++ b/gcc/ada/a-dirval-mingw.adb @@ -7,7 +7,7 @@ -- B o d y -- -- (Windows Version) -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-dirval.adb b/gcc/ada/a-dirval.adb index 31dd70b5dc9..206af7fc665 100644 --- a/gcc/ada/a-dirval.adb +++ b/gcc/ada/a-dirval.adb @@ -7,7 +7,7 @@ -- B o d y -- -- (POSIX Version) -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-dirval.ads b/gcc/ada/a-dirval.ads index 12a03f60e15..9785f30f7c4 100644 --- a/gcc/ada/a-dirval.ads +++ b/gcc/ada/a-dirval.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-elchha.adb b/gcc/ada/a-elchha.adb index 34530edea41..c2b38e4e9f2 100644 --- a/gcc/ada/a-elchha.adb +++ b/gcc/ada/a-elchha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-excach.adb b/gcc/ada/a-excach.adb index f4113150904..e10352d0764 100644 --- a/gcc/ada/a-excach.adb +++ b/gcc/ada/a-excach.adb @@ -2,11 +2,11 @@ -- -- -- GNAT COMPILER COMPONENTS -- -- -- --- ADA.EXCEPTIONS.CALL_CHAIN -- +-- A D A . E X C E P T I O N S . C A L L _ C H A I N -- -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-except.adb b/gcc/ada/a-except.adb index a676b91c2ed..fb14eda5b08 100644 --- a/gcc/ada/a-except.adb +++ b/gcc/ada/a-except.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,23 +41,11 @@ with System.Soft_Links; use System.Soft_Links; package body Ada.Exceptions is - procedure builtin_longjmp (buffer : Address; Flag : Integer); - pragma No_Return (builtin_longjmp); - pragma Import (C, builtin_longjmp, "_gnat_builtin_longjmp"); - pragma Suppress (All_Checks); -- We definitely do not want exceptions occurring within this unit, or -- we are in big trouble. If an exceptional situation does occur, better -- that it not be raised, since raising it can cause confusing chaos. - Zero_Cost_Exceptions : Integer; - pragma Import (C, Zero_Cost_Exceptions, "__gl_zero_cost_exceptions"); - -- Boolean indicating if we are handling exceptions using a zero cost - -- mechanism. - -- - -- Note that although we currently do not support it, the GCC3 back-end - -- tables are also potentially useable for setjmp/longjmp processing. - ----------------------- -- Local Subprograms -- ----------------------- @@ -409,12 +397,6 @@ package body Ada.Exceptions is -- The following procedures provide an internal interface to help making -- this explicit. - procedure Save_Occurrence_And_Private - (Target : out Exception_Occurrence; - Source : Exception_Occurrence); - -- Copy all the components of Source to Target as well as the - -- Private_Data pointer. - procedure Save_Occurrence_No_Private (Target : out Exception_Occurrence; Source : Exception_Occurrence); @@ -783,81 +765,15 @@ package body Ada.Exceptions is is pragma Inspection_Point (E); -- This is so the debugger can reliably inspect the parameter - - Jumpbuf_Ptr : constant Address := Get_Jmpbuf_Address.all; - Excep : constant EOA := Get_Current_Excep.all; - begin - -- WARNING : There should be no exception handler for this body + -- WARNING: There should be no exception handler for this body -- because this would cause gigi to prepend a setup for a new - -- jmpbuf to the sequence of statements. We would then always get - -- this new buf in Jumpbuf_Ptr instead of the one for the exception - -- we are handling, which would completely break the whole design - -- of this procedure. - - -- Processing varies between zero cost and setjmp/lonjmp processing - - if Zero_Cost_Exceptions /= 0 then - - -- Use the GCC back-end to propagate the exception. Backtrace - -- computation is performed, if required, by the underlying routine. - -- Notifications for the debugger are also not performed here, - -- because we do not yet know if the exception is handled. - - Exception_Propagation.Propagate_Exception (From_Signal_Handler); - - else - -- Compute the backtrace for this occurrence if corresponding binder - -- option has been set. Call_Chain takes care of the reraise case. - - Call_Chain (Excep); - - -- Note on above call to Call_Chain: - - -- We used to only do this if From_Signal_Handler was not set, - -- based on the assumption that backtracing from a signal handler - -- would not work due to stack layout oddities. However, since - - -- 1. The flag is never set in tasking programs (Notify_Exception - -- performs regular raise statements), and - - -- 2. No problem has shown up in tasking programs around here so - -- far, this turned out to be too strong an assumption. - - -- As, in addition, the test was - - -- 1. preventing the production of backtraces in non-tasking - -- programs, and - - -- 2. introducing a behavior inconsistency between - -- the tasking and non-tasking cases, + -- jmpbuf to the sequence of statements in case of built-in sjljl. + -- We would then always get this new buf in Jumpbuf_Ptr instead of the + -- one for the exception we are handling, which would completely break + -- the whole design of this procedure. - -- we have simply removed it - - -- If the jump buffer pointer is non-null, transfer control using - -- it. Otherwise announce an unhandled exception (note that this - -- means that we have no finalizations to do other than at the outer - -- level). Perform the necessary notification tasks in both cases. - - if Jumpbuf_Ptr /= Null_Address then - - if not Excep.Exception_Raised then - Excep.Exception_Raised := True; - Exception_Traces.Notify_Handled_Exception; - end if; - - builtin_longjmp (Jumpbuf_Ptr, 1); - - else - -- The pragma Inspection point here ensures that the debugger - -- can inspect the parameter. - - pragma Inspection_Point (E); - - Exception_Traces.Notify_Unhandled_Exception; - Exception_Traces.Unhandled_Exception_Terminate; - end if; - end if; + Exception_Propagation.Propagate_Exception (From_Signal_Handler); end Process_Raise_Exception; ---------------------------- @@ -892,8 +808,23 @@ package body Ada.Exceptions is ------------------------- procedure Raise_Current_Excep (E : Exception_Id) is + pragma Inspection_Point (E); - -- This is so the debugger can reliably inspect the parameter + -- This is so the debugger can reliably inspect the parameter when + -- inserting a breakpoint at the start of this procedure. + + Id : Exception_Id := E; + pragma Volatile (Id); + pragma Warnings (Off, Id); + -- In order to provide support for breakpoints on unhandled exceptions, + -- the debugger will also need to be able to inspect the value of E from + -- another (inner) frame. So we need to make sure that if E is passed in + -- a register, its value is also spilled on stack. For this, we store + -- the parameter value in a local variable, and add a pragma Volatile to + -- make sure it is spilled. The pragma Warnings (Off) is needed because + -- the compiler knows that Id is not referenced and that this use of + -- pragma Volatile is peculiar! + begin Process_Raise_Exception (E => E, From_Signal_Handler => False); end Raise_Current_Excep; @@ -1263,19 +1194,6 @@ package body Ada.Exceptions is end Save_Occurrence; -------------------------------- - -- Save_Occurrence_And_Private -- - -------------------------------- - - procedure Save_Occurrence_And_Private - (Target : out Exception_Occurrence; - Source : Exception_Occurrence) - is - begin - Save_Occurrence_No_Private (Target, Source); - Target.Private_Data := Source.Private_Data; - end Save_Occurrence_And_Private; - - -------------------------------- -- Save_Occurrence_No_Private -- -------------------------------- diff --git a/gcc/ada/a-except.ads b/gcc/ada/a-except.ads index a93f056544e..fae4d4a4386 100644 --- a/gcc/ada/a-except.ads +++ b/gcc/ada/a-except.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-exctra.ads b/gcc/ada/a-exctra.ads index bc31fd08760..07ffb0b9c64 100644 --- a/gcc/ada/a-exctra.ads +++ b/gcc/ada/a-exctra.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-exexda.adb b/gcc/ada/a-exexda.adb index 6049ccd3285..6b3b802d117 100644 --- a/gcc/ada/a-exexda.adb +++ b/gcc/ada/a-exexda.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -386,7 +386,7 @@ package body Exception_Data is Ptr : in out Natural) is begin - if X.Num_Tracebacks <= 0 then + if X.Num_Tracebacks = 0 then return; end if; diff --git a/gcc/ada/a-exexpr-gcc.adb b/gcc/ada/a-exexpr-gcc.adb new file mode 100644 index 00000000000..22f057d18a4 --- /dev/null +++ b/gcc/ada/a-exexpr-gcc.adb @@ -0,0 +1,726 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- A D A . E X C E P T I O N S . E X C E P T I O N _ P R O P A G A T I O N -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This is the version using the GCC EH mechanism + +with Ada.Unchecked_Conversion; +with Ada.Unchecked_Deallocation; + +with System.Storage_Elements; use System.Storage_Elements; + +separate (Ada.Exceptions) +package body Exception_Propagation is + + ------------------------------------------------ + -- Entities to interface with the GCC runtime -- + ------------------------------------------------ + + -- These come from "C++ ABI for Itanium: Exception handling", which is + -- the reference for GCC. They are used only when we are relying on + -- back-end tables for exception propagation, which in turn is currenly + -- only the case for Zero_Cost_Exceptions in GNAT5. + + -- Return codes from the GCC runtime functions used to propagate + -- an exception. + + type Unwind_Reason_Code is + (URC_NO_REASON, + URC_FOREIGN_EXCEPTION_CAUGHT, + URC_PHASE2_ERROR, + URC_PHASE1_ERROR, + URC_NORMAL_STOP, + URC_END_OF_STACK, + URC_HANDLER_FOUND, + URC_INSTALL_CONTEXT, + URC_CONTINUE_UNWIND); + + pragma Unreferenced + (URC_FOREIGN_EXCEPTION_CAUGHT, + URC_PHASE2_ERROR, + URC_PHASE1_ERROR, + URC_NORMAL_STOP, + URC_END_OF_STACK, + URC_HANDLER_FOUND, + URC_INSTALL_CONTEXT, + URC_CONTINUE_UNWIND); + + pragma Convention (C, Unwind_Reason_Code); + + -- Phase identifiers + + type Unwind_Action is + (UA_SEARCH_PHASE, + UA_CLEANUP_PHASE, + UA_HANDLER_FRAME, + UA_FORCE_UNWIND); + + for Unwind_Action use + (UA_SEARCH_PHASE => 1, + UA_CLEANUP_PHASE => 2, + UA_HANDLER_FRAME => 4, + UA_FORCE_UNWIND => 8); + + pragma Convention (C, Unwind_Action); + + -- Mandatory common header for any exception object handled by the + -- GCC unwinding runtime. + + type Exception_Class is mod 2 ** 64; + + GNAT_Exception_Class : constant Exception_Class := 16#474e552d41646100#; + -- "GNU-Ada\0" + + type Unwind_Word is mod 2 ** System.Word_Size; + for Unwind_Word'Size use System.Word_Size; + -- Map the corresponding C type used in Unwind_Exception below + + type Unwind_Exception is record + Class : Exception_Class := GNAT_Exception_Class; + Cleanup : System.Address := System.Null_Address; + Private1 : Unwind_Word; + Private2 : Unwind_Word; + end record; + -- Map the GCC struct used for exception handling + + for Unwind_Exception'Alignment use Standard'Maximum_Alignment; + -- The C++ ABI mandates the common exception header to be at least + -- doubleword aligned, and the libGCC implementation actually makes it + -- maximally aligned (see unwind.h). See additional comments on the + -- alignment below. + + -------------------------------------------------------------- + -- GNAT Specific Entities To Deal With The GCC EH Circuitry -- + -------------------------------------------------------------- + + -- A GNAT exception object to be dealt with by the personality routine + -- called by the GCC unwinding runtime. + + type GNAT_GCC_Exception is record + Header : Unwind_Exception; + -- ABI Exception header first + + Id : Exception_Id; + -- GNAT Exception identifier. This is filled by Propagate_Exception + -- and then used by the personality routine to determine if the context + -- it examines contains a handler for the exception beeing propagated. + + N_Cleanups_To_Trigger : Integer; + -- Number of cleanup only frames encountered in SEARCH phase. This is + -- initialized to 0 by Propagate_Exception and maintained by the + -- personality routine to control a forced unwinding phase triggering + -- all the cleanups before calling Unhandled_Exception_Terminate when + -- an exception is not handled. + + Next_Exception : EOA; + -- Used to create a linked list of exception occurrences + end record; + + pragma Convention (C, GNAT_GCC_Exception); + + -- There is a subtle issue with the common header alignment, since the C + -- version is aligned on BIGGEST_ALIGNMENT, the Ada version is aligned on + -- Standard'Maximum_Alignment, and those two values don't quite represent + -- the same concepts and so may be decoupled someday. One typical reason + -- is that BIGGEST_ALIGNMENT may be larger than what the underlying system + -- allocator guarantees, and there are extra costs involved in allocating + -- objects aligned to such factors. + + -- To deal with the potential alignment differences between the C and Ada + -- representations, the Ada part of the whole structure is only accessed + -- by the personality routine through the accessors declared below. Ada + -- specific fields are thus always accessed through consistent layout, and + -- we expect the actual alignment to always be large enough to avoid traps + -- from the C accesses to the common header. Besides, accessors aleviate + -- the need for a C struct whole conterpart, both painful and errorprone + -- to maintain anyway. + + type GNAT_GCC_Exception_Access is access all GNAT_GCC_Exception; + + function To_GNAT_GCC_Exception is new + Unchecked_Conversion (System.Address, GNAT_GCC_Exception_Access); + + procedure Free is new Unchecked_Deallocation + (GNAT_GCC_Exception, GNAT_GCC_Exception_Access); + + procedure Free is new Unchecked_Deallocation + (Exception_Occurrence, EOA); + + function CleanupUnwind_Handler + (UW_Version : Integer; + UW_Phases : Unwind_Action; + UW_Eclass : Exception_Class; + UW_Exception : access GNAT_GCC_Exception; + UW_Context : System.Address; + UW_Argument : System.Address) return Unwind_Reason_Code; + -- Hook called at each step of the forced unwinding we perform to + -- trigger cleanups found during the propagation of an unhandled + -- exception. + + -- GCC runtime functions used. These are C non-void functions, actually, + -- but we ignore the return values. See raise.c as to why we are using + -- __gnat stubs for these. + + procedure Unwind_RaiseException + (UW_Exception : access GNAT_GCC_Exception); + pragma Import (C, Unwind_RaiseException, "__gnat_Unwind_RaiseException"); + + procedure Unwind_ForcedUnwind + (UW_Exception : access GNAT_GCC_Exception; + UW_Handler : System.Address; + UW_Argument : System.Address); + pragma Import (C, Unwind_ForcedUnwind, "__gnat_Unwind_ForcedUnwind"); + + ------------------------------------------------------------------ + -- Occurrence Stack Management Facilities for the GCC-EH Scheme -- + ------------------------------------------------------------------ + + function Remove + (Top : EOA; + Excep : GNAT_GCC_Exception_Access) return Boolean; + -- Remove Excep from the stack starting at Top. + -- Return True if Excep was found and removed, false otherwise. + + -- Hooks called when entering/leaving an exception handler for a given + -- occurrence, aimed at handling the stack of active occurrences. The + -- calls are generated by gigi in tree_transform/N_Exception_Handler. + + procedure Begin_Handler (GCC_Exception : GNAT_GCC_Exception_Access); + pragma Export (C, Begin_Handler, "__gnat_begin_handler"); + + procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access); + pragma Export (C, End_Handler, "__gnat_end_handler"); + + Setup_Key : constant := 16#DEAD#; + -- To handle the case of a task "transferring" an exception occurrence to + -- another task, for instance via Exceptional_Complete_Rendezvous, we need + -- to be able to identify occurrences which have been Setup and not yet + -- Propagated. We hijack one of the common header fields for that purpose, + -- setting it to a special key value during the setup process, clearing it + -- at the very beginning of the propagation phase, and expecting it never + -- to be reset to the special value later on. A 16-bit value is used rather + -- than a 32-bit value for static compatibility with 16-bit targets such as + -- AAMP (where type Unwind_Word will be 16 bits). + + function Is_Setup_And_Not_Propagated (E : EOA) return Boolean; + + procedure Set_Setup_And_Not_Propagated (E : EOA); + procedure Clear_Setup_And_Not_Propagated (E : EOA); + + procedure Save_Occurrence_And_Private + (Target : out Exception_Occurrence; + Source : Exception_Occurrence); + -- Copy all the components of Source to Target as well as the + -- Private_Data pointer. + + ------------------------------------------------------------ + -- Accessors to basic components of a GNAT exception data -- + ------------------------------------------------------------ + + -- As of today, these are only used by the C implementation of the + -- GCC propagation personality routine to avoid having to rely on a C + -- counterpart of the whole exception_data structure, which is both + -- painful and error prone. These subprograms could be moved to a + -- more widely visible location if need be. + + function Is_Handled_By_Others (E : Exception_Data_Ptr) return Boolean; + pragma Export (C, Is_Handled_By_Others, "__gnat_is_handled_by_others"); + + function Language_For (E : Exception_Data_Ptr) return Character; + pragma Export (C, Language_For, "__gnat_language_for"); + + function Import_Code_For (E : Exception_Data_Ptr) return Exception_Code; + pragma Export (C, Import_Code_For, "__gnat_import_code_for"); + + function EID_For (GNAT_Exception : GNAT_GCC_Exception_Access) + return Exception_Id; + pragma Export (C, EID_For, "__gnat_eid_for"); + + procedure Adjust_N_Cleanups_For + (GNAT_Exception : GNAT_GCC_Exception_Access; + Adjustment : Integer); + pragma Export (C, Adjust_N_Cleanups_For, "__gnat_adjust_n_cleanups_for"); + + --------------------------------------------------------------------------- + -- Objects to materialize "others" and "all others" in the GCC EH tables -- + --------------------------------------------------------------------------- + + -- Currently, these only have their address taken and compared so there is + -- no real point having whole exception data blocks allocated. In any case + -- the types should match what gigi and the personality routine expect. + -- The initial value is an arbitrary value that will not exceed the range + -- of Integer on 16-bit targets (such as AAMP). + + Others_Value : constant Integer := 16#7FFF#; + pragma Export (C, Others_Value, "__gnat_others_value"); + + All_Others_Value : constant Integer := 16#7FFF#; + pragma Export (C, All_Others_Value, "__gnat_all_others_value"); + + ------------ + -- Remove -- + ------------ + + function Remove + (Top : EOA; + Excep : GNAT_GCC_Exception_Access) return Boolean + is + Prev : GNAT_GCC_Exception_Access := null; + Iter : EOA := Top; + GCC_Exception : GNAT_GCC_Exception_Access; + + begin + -- Pop stack + + loop + pragma Assert (Iter.Private_Data /= System.Null_Address); + + GCC_Exception := To_GNAT_GCC_Exception (Iter.Private_Data); + + if GCC_Exception = Excep then + if Prev = null then + + -- Special case for the top of the stack: shift the contents + -- of the next item to the top, since top is at a fixed + -- location and can't be changed. + + Iter := GCC_Exception.Next_Exception; + + if Iter = null then + + -- Stack is now empty + + Top.Private_Data := System.Null_Address; + + else + Save_Occurrence_And_Private (Top.all, Iter.all); + Free (Iter); + end if; + + else + Prev.Next_Exception := GCC_Exception.Next_Exception; + Free (Iter); + end if; + + Free (GCC_Exception); + + return True; + end if; + + exit when GCC_Exception.Next_Exception = null; + + Prev := GCC_Exception; + Iter := GCC_Exception.Next_Exception; + end loop; + + return False; + end Remove; + + --------------------------- + -- CleanupUnwind_Handler -- + --------------------------- + + function CleanupUnwind_Handler + (UW_Version : Integer; + UW_Phases : Unwind_Action; + UW_Eclass : Exception_Class; + UW_Exception : access GNAT_GCC_Exception; + UW_Context : System.Address; + UW_Argument : System.Address) return Unwind_Reason_Code + is + pragma Unreferenced + (UW_Version, UW_Phases, UW_Eclass, UW_Context, UW_Argument); + + begin + -- Terminate as soon as we know there is nothing more to run. The + -- count is maintained by the personality routine. + + if UW_Exception.N_Cleanups_To_Trigger = 0 then + Unhandled_Exception_Terminate; + end if; + + -- We know there is at least one cleanup further up. Return so that it + -- is searched and entered, after which Unwind_Resume will be called + -- and this hook will gain control (with an updated count) again. + + return URC_NO_REASON; + end CleanupUnwind_Handler; + + --------------------------------- + -- Is_Setup_And_Not_Propagated -- + --------------------------------- + + function Is_Setup_And_Not_Propagated (E : EOA) return Boolean is + GCC_E : constant GNAT_GCC_Exception_Access := + To_GNAT_GCC_Exception (E.Private_Data); + begin + return GCC_E /= null and then GCC_E.Header.Private1 = Setup_Key; + end Is_Setup_And_Not_Propagated; + + ------------------------------------ + -- Clear_Setup_And_Not_Propagated -- + ------------------------------------ + + procedure Clear_Setup_And_Not_Propagated (E : EOA) is + GCC_E : constant GNAT_GCC_Exception_Access := + To_GNAT_GCC_Exception (E.Private_Data); + begin + pragma Assert (GCC_E /= null); + GCC_E.Header.Private1 := 0; + end Clear_Setup_And_Not_Propagated; + + ---------------------------------- + -- Set_Setup_And_Not_Propagated -- + ---------------------------------- + + procedure Set_Setup_And_Not_Propagated (E : EOA) is + GCC_E : constant GNAT_GCC_Exception_Access := + To_GNAT_GCC_Exception (E.Private_Data); + begin + pragma Assert (GCC_E /= null); + GCC_E.Header.Private1 := Setup_Key; + end Set_Setup_And_Not_Propagated; + + -------------------------------- + -- Save_Occurrence_And_Private -- + -------------------------------- + + procedure Save_Occurrence_And_Private + (Target : out Exception_Occurrence; + Source : Exception_Occurrence) + is + begin + Save_Occurrence_No_Private (Target, Source); + Target.Private_Data := Source.Private_Data; + end Save_Occurrence_And_Private; + + --------------------- + -- Setup_Exception -- + --------------------- + + -- In the GCC-EH implementation of the propagation scheme, this + -- subprogram should be understood as: Setup the exception occurrence + -- stack headed at Current for a forthcoming raise of Excep. + + procedure Setup_Exception + (Excep : EOA; + Current : EOA; + Reraised : Boolean := False) + is + Top : constant EOA := Current; + Next : EOA; + GCC_Exception : GNAT_GCC_Exception_Access; + + begin + -- The exception Excep is soon to be propagated, and the + -- storage used for that will be the occurrence statically allocated + -- for the current thread. This storage might currently be used for a + -- still active occurrence, so we need to push it on the thread's + -- occurrence stack (headed at that static occurrence) before it gets + -- clobbered. + + -- What we do here is to trigger this push when need be, and allocate a + -- Private_Data block for the forthcoming Propagation. + + -- Some tasking rendez-vous attempts lead to an occurrence transfer + -- from the server to the client (see Exceptional_Complete_Rendezvous). + -- In those cases Setup is called twice for the very same occurrence + -- before it gets propagated: once from the server, because this is + -- where the occurrence contents is elaborated and known, and then + -- once from the client when it detects the case and actually raises + -- the exception in its own context. + + -- The Is_Setup_And_Not_Propagated predicate tells us when we are in + -- the second call to Setup for a Transferred occurrence, and there is + -- nothing to be done here in this situation. This predicate cannot be + -- True if we are dealing with a Reraise, and we may even be called + -- with a raw uninitialized Excep occurrence in this case so we should + -- not check anyway. Observe the front-end expansion for a "raise;" to + -- see that happening. We get a local occurrence and a direct call to + -- Save_Occurrence without the intermediate init-proc call. + + if not Reraised and then Is_Setup_And_Not_Propagated (Excep) then + return; + end if; + + -- Allocate what will be the Private_Data block for the exception + -- to be propagated. + + GCC_Exception := new GNAT_GCC_Exception; + + -- If the Top of the occurrence stack is not currently used for an + -- active exception (the stack is empty) we just need to setup the + -- Private_Data pointer. + + -- Otherwise, we also need to shift the contents of the Top of the + -- stack in a freshly allocated entry and link everything together. + + if Top.Private_Data /= System.Null_Address then + Next := new Exception_Occurrence; + Save_Occurrence_And_Private (Next.all, Top.all); + + GCC_Exception.Next_Exception := Next; + Top.Private_Data := GCC_Exception.all'Address; + end if; + + Top.Private_Data := GCC_Exception.all'Address; + + Set_Setup_And_Not_Propagated (Top); + end Setup_Exception; + + ------------------- + -- Begin_Handler -- + ------------------- + + procedure Begin_Handler (GCC_Exception : GNAT_GCC_Exception_Access) is + pragma Unreferenced (GCC_Exception); + + begin + -- Every necessary operation related to the occurrence stack has + -- already been performed by Propagate_Exception. This hook remains for + -- potential future necessity in optimizing the overall scheme, as well + -- a useful debugging tool. + + null; + end Begin_Handler; + + ----------------- + -- End_Handler -- + ----------------- + + procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access) is + Removed : Boolean; + begin + Removed := Remove (Get_Current_Excep.all, GCC_Exception); + pragma Assert (Removed); + end End_Handler; + + ------------------------- + -- Propagate_Exception -- + ------------------------- + + -- Build an object suitable for the libgcc processing and call + -- Unwind_RaiseException to actually throw, taking care of handling + -- the two phase scheme it implements. + + procedure Propagate_Exception (From_Signal_Handler : Boolean) is + pragma Unreferenced (From_Signal_Handler); + + Excep : constant EOA := Get_Current_Excep.all; + GCC_Exception : GNAT_GCC_Exception_Access; + + begin + pragma Assert (Excep.Private_Data /= System.Null_Address); + + -- Retrieve the Private_Data for this occurrence and set the useful + -- flags for the personality routine, which will be called for each + -- frame via Unwind_RaiseException below. + + GCC_Exception := To_GNAT_GCC_Exception (Excep.Private_Data); + + Clear_Setup_And_Not_Propagated (Excep); + + GCC_Exception.Id := Excep.Id; + GCC_Exception.N_Cleanups_To_Trigger := 0; + + -- Compute the backtrace for this occurrence if the corresponding + -- binder option has been set. Call_Chain takes care of the reraise + -- case. + + -- ??? Using Call_Chain here means we are going to walk up the stack + -- once only for backtracing purposes before doing it again for the + -- propagation per se. + + -- The first inspection is much lighter, though, as it only requires + -- partial unwinding of each frame. Additionally, although we could use + -- the personality routine to record the addresses while propagating, + -- this method has two drawbacks: + + -- 1) the trace is incomplete if the exception is handled since we + -- don't walk past the frame with the handler, + + -- and + + -- 2) we would miss the frames for which our personality routine is not + -- called, e.g. if C or C++ calls are on the way. + + Call_Chain (Excep); + + -- Perform a standard raise first. If a regular handler is found, it + -- will be entered after all the intermediate cleanups have run. If + -- there is no regular handler, control will get back to after the + -- call, with N_Cleanups_To_Trigger set to the number of frames with + -- cleanups found on the way up, and none of these already run. + + Unwind_RaiseException (GCC_Exception); + + -- If we get here we know the exception is not handled, as otherwise + -- Unwind_RaiseException arranges for the handler to be entered. Take + -- the necessary steps to enable the debugger to gain control while the + -- stack is still intact. + + Notify_Unhandled_Exception; + + -- Now, if cleanups have been found, run a forced unwind to trigger + -- them. Control should not resume there, as the unwinding hook calls + -- Unhandled_Exception_Terminate as soon as the last cleanup has been + -- triggered. + + if GCC_Exception.N_Cleanups_To_Trigger /= 0 then + Unwind_ForcedUnwind (GCC_Exception, + CleanupUnwind_Handler'Address, + System.Null_Address); + end if; + + -- We get here when there is no handler or cleanup to be run at all. + -- The debugger has been notified before the second step above. + + Unhandled_Exception_Terminate; + end Propagate_Exception; + + --------------------------- + -- Adjust_N_Cleanups_For -- + --------------------------- + + procedure Adjust_N_Cleanups_For + (GNAT_Exception : GNAT_GCC_Exception_Access; + Adjustment : Integer) + is + begin + GNAT_Exception.N_Cleanups_To_Trigger := + GNAT_Exception.N_Cleanups_To_Trigger + Adjustment; + end Adjust_N_Cleanups_For; + + ------------- + -- EID_For -- + ------------- + + function EID_For + (GNAT_Exception : GNAT_GCC_Exception_Access) return Exception_Id + is + begin + return GNAT_Exception.Id; + end EID_For; + + --------------------- + -- Import_Code_For -- + --------------------- + + function Import_Code_For + (E : SSL.Exception_Data_Ptr) return Exception_Code + is + begin + return E.all.Import_Code; + end Import_Code_For; + + -------------------------- + -- Is_Handled_By_Others -- + -------------------------- + + function Is_Handled_By_Others (E : SSL.Exception_Data_Ptr) return Boolean is + begin + return not E.all.Not_Handled_By_Others; + end Is_Handled_By_Others; + + ------------------ + -- Language_For -- + ------------------ + + function Language_For (E : SSL.Exception_Data_Ptr) return Character is + begin + return E.all.Lang; + end Language_For; + + ----------- + -- Notes -- + ----------- + + -- The current model implemented for the stack of occurrences is a + -- simplification of previous attempts, which all prooved to be flawed or + -- would have needed significant additional circuitry to be made to work + -- correctly. + + -- We now represent every propagation by a new entry on the stack, which + -- means that an exception occurrence may appear more than once (e.g. when + -- it is reraised during the course of its own handler). + + -- This may seem overcostly compared to the C++ model as implemented in + -- the g++ v3 libstd. This is actually understandable when one considers + -- the extra variations of possible run-time configurations induced by the + -- freedom offered by the Save_Occurrence/Reraise_Occurrence public + -- interface. + + -- The basic point is that arranging for an occurrence to always appear at + -- most once on the stack requires a way to determine if a given occurence + -- is already there, which is not as easy as it might seem. + + -- An attempt was made to use the Private_Data pointer for this purpose. + -- It did not work because: + + -- 1) The Private_Data has to be saved by Save_Occurrence to be usable + -- as a key in case of a later reraise, + + -- 2) There is no easy way to synchronize End_Handler for an occurrence + -- and the data attached to potential copies, so these copies may end + -- up pointing to stale data. Moreover ... + + -- 3) The same address may be reused for different occurrences, which + -- defeats the idea of using it as a key. + + -- The example below illustrates: + + -- Saved_CE : Exception_Occurrence; + + -- begin + -- raise Constraint_Error; + -- exception + -- when CE: others => + -- Save_Occurrence (Saved_CE, CE); <= Saved_CE.PDA = CE.PDA + -- end; + + -- <= Saved_CE.PDA is stale (!) + + -- begin + -- raise Program_Error; <= Saved_CE.PDA = PE.PDA (!!) + -- exception + -- when others => + -- Reraise_Occurrence (Saved_CE); + -- end; + + -- Not releasing the Private_Data via End_Handler could be an option, + -- but making this to work while still avoiding memory leaks is far + -- from trivial. + + -- The current scheme has the advantage of beeing simple, and induces + -- extra costs only in reraise cases which is acceptable. + +end Exception_Propagation; diff --git a/gcc/ada/a-exexpr.adb b/gcc/ada/a-exexpr.adb dissimilarity index 88% index 8cccf1699e9..165b5cef3d8 100644 --- a/gcc/ada/a-exexpr.adb +++ b/gcc/ada/a-exexpr.adb @@ -1,725 +1,122 @@ ------------------------------------------------------------------------------- --- -- --- GNAT COMPILER COMPONENTS -- --- -- --- A D A . E X C E P T I O N S . E X C E P T I O N _ P R O P A G A T I O N -- --- -- --- B o d y -- --- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- --- -- --- GNAT is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 2, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT 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 distributed with GNAT; see file COPYING. If not, write -- --- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- --- Boston, MA 02110-1301, USA. -- --- -- --- As a special exception, if other files instantiate generics from this -- --- unit, or you link this unit with other files to produce an executable, -- --- this unit does not by itself cause the resulting executable to be -- --- covered by the GNU General Public License. This exception does not -- --- however invalidate any other reasons why the executable file might be -- --- covered by the GNU Public License. -- --- -- --- GNAT was originally developed by the GNAT team at New York University. -- --- Extensive contributions were provided by Ada Core Technologies Inc. -- --- -- ------------------------------------------------------------------------------- - -with Interfaces; - -with Ada.Unchecked_Conversion; -with Ada.Unchecked_Deallocation; - -with System.Storage_Elements; use System.Storage_Elements; - -pragma Warnings (Off); --- Since several constructs give warnings in 3.14a1, including unreferenced --- variables and pragma Unreferenced itself. - -separate (Ada.Exceptions) -package body Exception_Propagation is - - ------------------------------------------------ - -- Entities to interface with the GCC runtime -- - ------------------------------------------------ - - -- These come from "C++ ABI for Itanium: Exception handling", which is - -- the reference for GCC. They are used only when we are relying on - -- back-end tables for exception propagation, which in turn is currenly - -- only the case for Zero_Cost_Exceptions in GNAT5. - - -- Return codes from the GCC runtime functions used to propagate - -- an exception. - - type Unwind_Reason_Code is - (URC_NO_REASON, - URC_FOREIGN_EXCEPTION_CAUGHT, - URC_PHASE2_ERROR, - URC_PHASE1_ERROR, - URC_NORMAL_STOP, - URC_END_OF_STACK, - URC_HANDLER_FOUND, - URC_INSTALL_CONTEXT, - URC_CONTINUE_UNWIND); - - pragma Unreferenced - (URC_FOREIGN_EXCEPTION_CAUGHT, - URC_PHASE2_ERROR, - URC_PHASE1_ERROR, - URC_NORMAL_STOP, - URC_END_OF_STACK, - URC_HANDLER_FOUND, - URC_INSTALL_CONTEXT, - URC_CONTINUE_UNWIND); - - pragma Convention (C, Unwind_Reason_Code); - - -- Phase identifiers - - type Unwind_Action is - (UA_SEARCH_PHASE, - UA_CLEANUP_PHASE, - UA_HANDLER_FRAME, - UA_FORCE_UNWIND); - - for Unwind_Action use - (UA_SEARCH_PHASE => 1, - UA_CLEANUP_PHASE => 2, - UA_HANDLER_FRAME => 4, - UA_FORCE_UNWIND => 8); - - pragma Convention (C, Unwind_Action); - - -- Mandatory common header for any exception object handled by the - -- GCC unwinding runtime. - - subtype Exception_Class is Interfaces.Unsigned_64; - - GNAT_Exception_Class : constant Exception_Class := 16#474e552d41646100#; - -- "GNU-Ada\0" - - type Unwind_Word is mod 2 ** System.Word_Size; - for Unwind_Word'Size use System.Word_Size; - -- Map the corresponding C type used in Unwind_Exception below - - type Unwind_Exception is record - Class : Exception_Class := GNAT_Exception_Class; - Cleanup : System.Address := System.Null_Address; - Private1 : Unwind_Word; - Private2 : Unwind_Word; - end record; - -- Map the GCC struct used for exception handling - - for Unwind_Exception'Alignment use Standard'Maximum_Alignment; - -- The C++ ABI mandates the common exception header to be at least - -- doubleword aligned, and the libGCC implementation actually makes it - -- maximally aligned (see unwind.h). See additional comments on the - -- alignment below. - - -------------------------------------------------------------- - -- GNAT Specific Entities To Deal With The GCC EH Circuitry -- - -------------------------------------------------------------- - - -- A GNAT exception object to be dealt with by the personality routine - -- called by the GCC unwinding runtime. - - type GNAT_GCC_Exception is record - Header : Unwind_Exception; - -- ABI Exception header first - - Id : Exception_Id; - -- GNAT Exception identifier. This is filled by Propagate_Exception - -- and then used by the personality routine to determine if the context - -- it examines contains a handler for the exception beeing propagated. - - N_Cleanups_To_Trigger : Integer; - -- Number of cleanup only frames encountered in SEARCH phase. This is - -- initialized to 0 by Propagate_Exception and maintained by the - -- personality routine to control a forced unwinding phase triggering - -- all the cleanups before calling Unhandled_Exception_Terminate when - -- an exception is not handled. - - Next_Exception : EOA; - -- Used to create a linked list of exception occurrences - end record; - - pragma Convention (C, GNAT_GCC_Exception); - - -- There is a subtle issue with the common header alignment, since the C - -- version is aligned on BIGGEST_ALIGNMENT, the Ada version is aligned on - -- Standard'Maximum_Alignment, and those two values don't quite represent - -- the same concepts and so may be decoupled someday. One typical reason - -- is that BIGGEST_ALIGNMENT may be larger than what the underlying system - -- allocator guarantees, and there are extra costs involved in allocating - -- objects aligned to such factors. - - -- To deal with the potential alignment differences between the C and Ada - -- representations, the Ada part of the whole structure is only accessed - -- by the personality routine through the accessors declared below. Ada - -- specific fields are thus always accessed through consistent layout, and - -- we expect the actual alignment to always be large enough to avoid traps - -- from the C accesses to the common header. Besides, accessors aleviate - -- the need for a C struct whole conterpart, both painful and errorprone - -- to maintain anyway. - - type GNAT_GCC_Exception_Access is access all GNAT_GCC_Exception; - - function To_GNAT_GCC_Exception is new - Unchecked_Conversion (System.Address, GNAT_GCC_Exception_Access); - - procedure Free is new Unchecked_Deallocation - (GNAT_GCC_Exception, GNAT_GCC_Exception_Access); - - procedure Free is new Unchecked_Deallocation - (Exception_Occurrence, EOA); - - function CleanupUnwind_Handler - (UW_Version : Integer; - UW_Phases : Unwind_Action; - UW_Eclass : Exception_Class; - UW_Exception : access GNAT_GCC_Exception; - UW_Context : System.Address; - UW_Argument : System.Address) return Unwind_Reason_Code; - -- Hook called at each step of the forced unwinding we perform to - -- trigger cleanups found during the propagation of an unhandled - -- exception. - - -- GCC runtime functions used. These are C non-void functions, actually, - -- but we ignore the return values. See raise.c as to why we are using - -- __gnat stubs for these. - - procedure Unwind_RaiseException - (UW_Exception : access GNAT_GCC_Exception); - pragma Import (C, Unwind_RaiseException, "__gnat_Unwind_RaiseException"); - - procedure Unwind_ForcedUnwind - (UW_Exception : access GNAT_GCC_Exception; - UW_Handler : System.Address; - UW_Argument : System.Address); - pragma Import (C, Unwind_ForcedUnwind, "__gnat_Unwind_ForcedUnwind"); - - ------------------------------------------------------------------ - -- Occurrence Stack Management Facilities for the GCC-EH Scheme -- - ------------------------------------------------------------------ - - function Remove - (Top : EOA; - Excep : GNAT_GCC_Exception_Access) return Boolean; - -- Remove Excep from the stack starting at Top. - -- Return True if Excep was found and removed, false otherwise. - - -- Hooks called when entering/leaving an exception handler for a given - -- occurrence, aimed at handling the stack of active occurrences. The - -- calls are generated by gigi in tree_transform/N_Exception_Handler. - - procedure Begin_Handler (GCC_Exception : GNAT_GCC_Exception_Access); - pragma Export (C, Begin_Handler, "__gnat_begin_handler"); - - procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access); - pragma Export (C, End_Handler, "__gnat_end_handler"); - - Setup_Key : constant := 16#DEAD#; - -- To handle the case of a task "transferring" an exception occurrence to - -- another task, for instance via Exceptional_Complete_Rendezvous, we need - -- to be able to identify occurrences which have been Setup and not yet - -- Propagated. We hijack one of the common header fields for that purpose, - -- setting it to a special key value during the setup process, clearing it - -- at the very beginning of the propagation phase, and expecting it never - -- to be reset to the special value later on. A 16-bit value is used rather - -- than a 32-bit value for static compatibility with 16-bit targets such as - -- AAMP (where type Unwind_Word will be 16 bits). - - function Is_Setup_And_Not_Propagated (E : EOA) return Boolean; - - procedure Set_Setup_And_Not_Propagated (E : EOA); - procedure Clear_Setup_And_Not_Propagated (E : EOA); - - ------------------------------------------------------------ - -- Accessors to basic components of a GNAT exception data -- - ------------------------------------------------------------ - - -- As of today, these are only used by the C implementation of the - -- GCC propagation personality routine to avoid having to rely on a C - -- counterpart of the whole exception_data structure, which is both - -- painful and error prone. These subprograms could be moved to a - -- more widely visible location if need be. - - function Is_Handled_By_Others (E : Exception_Data_Ptr) return Boolean; - pragma Export (C, Is_Handled_By_Others, "__gnat_is_handled_by_others"); - - function Language_For (E : Exception_Data_Ptr) return Character; - pragma Export (C, Language_For, "__gnat_language_for"); - - function Import_Code_For (E : Exception_Data_Ptr) return Exception_Code; - pragma Export (C, Import_Code_For, "__gnat_import_code_for"); - - function EID_For (GNAT_Exception : GNAT_GCC_Exception_Access) - return Exception_Id; - pragma Export (C, EID_For, "__gnat_eid_for"); - - procedure Adjust_N_Cleanups_For - (GNAT_Exception : GNAT_GCC_Exception_Access; - Adjustment : Integer); - pragma Export (C, Adjust_N_Cleanups_For, "__gnat_adjust_n_cleanups_for"); - - --------------------------------------------------------------------------- - -- Objects to materialize "others" and "all others" in the GCC EH tables -- - --------------------------------------------------------------------------- - - -- Currently, these only have their address taken and compared so there is - -- no real point having whole exception data blocks allocated. In any case - -- the types should match what gigi and the personality routine expect. - -- The initial value is an arbitrary value that will not exceed the range - -- of Integer on 16-bit targets (such as AAMP). - - Others_Value : constant Integer := 16#7FFF#; - pragma Export (C, Others_Value, "__gnat_others_value"); - - All_Others_Value : constant Integer := 16#7FFF#; - pragma Export (C, All_Others_Value, "__gnat_all_others_value"); - - ------------ - -- Remove -- - ------------ - - function Remove - (Top : EOA; - Excep : GNAT_GCC_Exception_Access) return Boolean - is - Prev : GNAT_GCC_Exception_Access := null; - Iter : EOA := Top; - GCC_Exception : GNAT_GCC_Exception_Access; - - begin - -- Pop stack - - loop - pragma Assert (Iter.Private_Data /= System.Null_Address); - - GCC_Exception := To_GNAT_GCC_Exception (Iter.Private_Data); - - if GCC_Exception = Excep then - if Prev = null then - - -- Special case for the top of the stack: shift the contents - -- of the next item to the top, since top is at a fixed - -- location and can't be changed. - - Iter := GCC_Exception.Next_Exception; - - if Iter = null then - - -- Stack is now empty - - Top.Private_Data := System.Null_Address; - - else - Save_Occurrence_And_Private (Top.all, Iter.all); - Free (Iter); - end if; - - else - Prev.Next_Exception := GCC_Exception.Next_Exception; - Free (Iter); - end if; - - Free (GCC_Exception); - - return True; - end if; - - exit when GCC_Exception.Next_Exception = null; - - Prev := GCC_Exception; - Iter := GCC_Exception.Next_Exception; - end loop; - - return False; - end Remove; - - --------------------------- - -- CleanupUnwind_Handler -- - --------------------------- - - function CleanupUnwind_Handler - (UW_Version : Integer; - UW_Phases : Unwind_Action; - UW_Eclass : Exception_Class; - UW_Exception : access GNAT_GCC_Exception; - UW_Context : System.Address; - UW_Argument : System.Address) return Unwind_Reason_Code - is - begin - -- Terminate as soon as we know there is nothing more to run. The - -- count is maintained by the personality routine. - - if UW_Exception.N_Cleanups_To_Trigger = 0 then - Unhandled_Exception_Terminate; - end if; - - -- We know there is at least one cleanup further up. Return so that it - -- is searched and entered, after which Unwind_Resume will be called - -- and this hook will gain control (with an updated count) again. - - return URC_NO_REASON; - end CleanupUnwind_Handler; - - --------------------------------- - -- Is_Setup_And_Not_Propagated -- - --------------------------------- - - function Is_Setup_And_Not_Propagated (E : EOA) return Boolean is - GCC_E : GNAT_GCC_Exception_Access := - To_GNAT_GCC_Exception (E.Private_Data); - begin - return GCC_E /= null and then GCC_E.Header.Private1 = Setup_Key; - end Is_Setup_And_Not_Propagated; - - ------------------------------------ - -- Clear_Setup_And_Not_Propagated -- - ------------------------------------ - - procedure Clear_Setup_And_Not_Propagated (E : EOA) is - GCC_E : GNAT_GCC_Exception_Access := - To_GNAT_GCC_Exception (E.Private_Data); - begin - pragma Assert (GCC_E /= null); - GCC_E.Header.Private1 := 0; - end Clear_Setup_And_Not_Propagated; - - ---------------------------------- - -- Set_Setup_And_Not_Propagated -- - ---------------------------------- - - procedure Set_Setup_And_Not_Propagated (E : EOA) is - GCC_E : GNAT_GCC_Exception_Access := - To_GNAT_GCC_Exception (E.Private_Data); - begin - pragma Assert (GCC_E /= null); - GCC_E.Header.Private1 := Setup_Key; - end Set_Setup_And_Not_Propagated; - - --------------------- - -- Setup_Exception -- - --------------------- - - -- In the GCC-EH implementation of the propagation scheme, this - -- subprogram should be understood as : Setup the exception occurrence - -- stack headed at Current for a forthcoming raise of Excep. - - -- In the GNAT-SJLJ case this "stack" only exists implicitely, by way of - -- local occurrence declarations together with save/restore operations - -- generated by the front-end, and this routine has nothing to do. - - -- The differenciation is done here and not in the callers to avoid having - -- to spread out the test in numerous places. - - procedure Setup_Exception - (Excep : EOA; - Current : EOA; - Reraised : Boolean := False) - is - Top : constant EOA := Current; - Next : EOA; - GCC_Exception : GNAT_GCC_Exception_Access; - - begin - -- Just return if we're not in the GCC-EH case. What is otherwise - -- performed is useless and even harmful since it potentially involves - -- dynamic allocations that would never be released, and participates - -- in the Setup_And_Not_Propagated predicate management, only properly - -- handled by the rest of the GCC-EH scheme. - - if Zero_Cost_Exceptions = 0 then - return; - end if; - - -- Otherwise, the exception Excep is soon to be propagated, and the - -- storage used for that will be the occurrence statically allocated - -- for the current thread. This storage might currently be used for a - -- still active occurrence, so we need to push it on the thread's - -- occurrence stack (headed at that static occurrence) before it gets - -- clobbered. - - -- What we do here is to trigger this push when need be, and allocate a - -- Private_Data block for the forthcoming Propagation. - - -- Some tasking rendez-vous attempts lead to an occurrence transfer - -- from the server to the client (see Exceptional_Complete_Rendezvous). - -- In those cases Setup is called twice for the very same occurrence - -- before it gets propagated: once from the server, because this is - -- where the occurrence contents is elaborated and known, and then - -- once from the client when it detects the case and actually raises - -- the exception in its own context. - - -- The Is_Setup_And_Not_Propagated predicate tells us when we are in - -- the second call to Setup for a Transferred occurrence, and there is - -- nothing to be done here in this situation. This predicate cannot be - -- True if we are dealing with a Reraise, and we may even be called - -- with a raw uninitialized Excep occurrence in this case so we should - -- not check anyway. Observe the front-end expansion for a "raise;" to - -- see that happening. We get a local occurrence and a direct call to - -- Save_Occurrence without the intermediate init-proc call. - - if not Reraised and then Is_Setup_And_Not_Propagated (Excep) then - return; - end if; - - -- Allocate what will be the Private_Data block for the exception - -- to be propagated. - - GCC_Exception := new GNAT_GCC_Exception; - - -- If the Top of the occurrence stack is not currently used for an - -- active exception (the stack is empty) we just need to setup the - -- Private_Data pointer. - - -- Otherwise, we also need to shift the contents of the Top of the - -- stack in a freshly allocated entry and link everything together. - - if Top.Private_Data /= System.Null_Address then - Next := new Exception_Occurrence; - Save_Occurrence_And_Private (Next.all, Top.all); - - GCC_Exception.Next_Exception := Next; - Top.Private_Data := GCC_Exception.all'Address; - end if; - - Top.Private_Data := GCC_Exception.all'Address; - - Set_Setup_And_Not_Propagated (Top); - end Setup_Exception; - - ------------------- - -- Begin_Handler -- - ------------------- - - procedure Begin_Handler (GCC_Exception : GNAT_GCC_Exception_Access) is - begin - -- Every necessary operation related to the occurrence stack has - -- already been performed by Propagate_Exception. This hook remains for - -- potential future necessity in optimizing the overall scheme, as well - -- a useful debugging tool. - - null; - end Begin_Handler; - - ----------------- - -- End_Handler -- - ----------------- - - procedure End_Handler (GCC_Exception : GNAT_GCC_Exception_Access) is - Removed : Boolean; - begin - Removed := Remove (Get_Current_Excep.all, GCC_Exception); - pragma Assert (Removed); - end End_Handler; - - ------------------------- - -- Propagate_Exception -- - ------------------------- - - -- Build an object suitable for the libgcc processing and call - -- Unwind_RaiseException to actually throw, taking care of handling - -- the two phase scheme it implements. - - procedure Propagate_Exception (From_Signal_Handler : Boolean) is - Excep : EOA := Get_Current_Excep.all; - GCC_Exception : GNAT_GCC_Exception_Access; - - begin - pragma Assert (Excep.Private_Data /= System.Null_Address); - - -- Retrieve the Private_Data for this occurrence and set the useful - -- flags for the personality routine, which will be called for each - -- frame via Unwind_RaiseException below. - - GCC_Exception := To_GNAT_GCC_Exception (Excep.Private_Data); - - Clear_Setup_And_Not_Propagated (Excep); - - GCC_Exception.Id := Excep.Id; - GCC_Exception.N_Cleanups_To_Trigger := 0; - - -- Compute the backtrace for this occurrence if the corresponding - -- binder option has been set. Call_Chain takes care of the reraise - -- case. - - -- ??? Using Call_Chain here means we are going to walk up the stack - -- once only for backtracing purposes before doing it again for the - -- propagation per se. - - -- The first inspection is much lighter, though, as it only requires - -- partial unwinding of each frame. Additionally, although we could use - -- the personality routine to record the addresses while propagating, - -- this method has two drawbacks: - - -- 1) the trace is incomplete if the exception is handled since we - -- don't walk past the frame with the handler, - - -- and - - -- 2) we would miss the frames for which our personality routine is not - -- called, e.g. if C or C++ calls are on the way. - - Call_Chain (Excep); - - -- Perform a standard raise first. If a regular handler is found, it - -- will be entered after all the intermediate cleanups have run. If - -- there is no regular handler, control will get back to after the - -- call, with N_Cleanups_To_Trigger set to the number of frames with - -- cleanups found on the way up, and none of these already run. - - Unwind_RaiseException (GCC_Exception); - - -- If we get here we know the exception is not handled, as otherwise - -- Unwind_RaiseException arranges for the handler to be entered. Take - -- the necessary steps to enable the debugger to gain control while the - -- stack is still intact. - - Notify_Unhandled_Exception; - - -- Now, if cleanups have been found, run a forced unwind to trigger - -- them. Control should not resume there, as the unwinding hook calls - -- Unhandled_Exception_Terminate as soon as the last cleanup has been - -- triggered. - - if GCC_Exception.N_Cleanups_To_Trigger /= 0 then - Unwind_ForcedUnwind (GCC_Exception, - CleanupUnwind_Handler'Address, - System.Null_Address); - end if; - - -- We get here when there is no handler or cleanup to be run at - -- all. The debugger has been notified before the second step above. - - Unhandled_Exception_Terminate; - end Propagate_Exception; - - --------------------------- - -- Adjust_N_Cleanups_For -- - --------------------------- - - procedure Adjust_N_Cleanups_For - (GNAT_Exception : GNAT_GCC_Exception_Access; - Adjustment : Integer) - is - begin - GNAT_Exception.N_Cleanups_To_Trigger := - GNAT_Exception.N_Cleanups_To_Trigger + Adjustment; - end Adjust_N_Cleanups_For; - - ------------- - -- EID_For -- - ------------- - - function EID_For - (GNAT_Exception : GNAT_GCC_Exception_Access) return Exception_Id - is - begin - return GNAT_Exception.Id; - end EID_For; - - --------------------- - -- Import_Code_For -- - --------------------- - - function Import_Code_For - (E : SSL.Exception_Data_Ptr) return Exception_Code - is - begin - return E.all.Import_Code; - end Import_Code_For; - - -------------------------- - -- Is_Handled_By_Others -- - -------------------------- - - function Is_Handled_By_Others - (E : SSL.Exception_Data_Ptr) return Boolean - is - begin - return not E.all.Not_Handled_By_Others; - end Is_Handled_By_Others; - - ------------------ - -- Language_For -- - ------------------ - - function Language_For - (E : SSL.Exception_Data_Ptr) return Character - is - begin - return E.all.Lang; - end Language_For; - - ----------- - -- Notes -- - ----------- - - -- The current model implemented for the stack of occurrences is a - -- simplification of previous attempts, which all prooved to be flawed or - -- would have needed significant additional circuitry to be made to work - -- correctly. - - -- We now represent every propagation by a new entry on the stack, which - -- means that an exception occurrence may appear more than once (e.g. when - -- it is reraised during the course of its own handler). - - -- This may seem overcostly compared to the C++ model as implemented in - -- the g++ v3 libstd. This is actually understandable when one considers - -- the extra variations of possible run-time configurations induced by the - -- freedom offered by the Save_Occurrence/Reraise_Occurrence public - -- interface. - - -- The basic point is that arranging for an occurrence to always appear at - -- most once on the stack requires a way to determine if a given occurence - -- is already there, which is not as easy as it might seem. - - -- An attempt was made to use the Private_Data pointer for this purpose. - -- It did not work because: - - -- 1) The Private_Data has to be saved by Save_Occurrence to be usable - -- as a key in case of a later reraise, - - -- 2) There is no easy way to synchronize End_Handler for an occurrence - -- and the data attached to potential copies, so these copies may end - -- up pointing to stale data. Moreover ... - - -- 3) The same address may be reused for different occurrences, which - -- defeats the idea of using it as a key. - - -- The example below illustrates: - - -- Saved_CE : Exception_Occurrence; - - -- begin - -- raise Constraint_Error; - -- exception - -- when CE: others => - -- Save_Occurrence (Saved_CE, CE); <= Saved_CE.PDA = CE.PDA - -- end; - - -- <= Saved_CE.PDA is stale (!) - - -- begin - -- raise Program_Error; <= Saved_CE.PDA = PE.PDA (!!) - -- exception - -- when others => - -- Reraise_Occurrence (Saved_CE); - -- end; - - -- Not releasing the Private_Data via End_Handler could be an option, - -- but making this to work while still avoiding memory leaks is far - -- from trivial. - - -- The current scheme has the advantage of beeing simple, and induces - -- extra costs only in reraise cases which is acceptable. - -end Exception_Propagation; +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- A D A . E X C E P T I O N S . E X C E P T I O N _ P R O P A G A T I O N -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This is the default version, using the __builtin_setjmp/longjmp EH +-- mechanism. + +with System.Storage_Elements; use System.Storage_Elements; + +pragma Warnings (Off); +-- Since several constructs give warnings in 3.14a1, including unreferenced +-- variables and pragma Unreferenced itself. + +separate (Ada.Exceptions) +package body Exception_Propagation is + + procedure builtin_longjmp (buffer : Address; Flag : Integer); + pragma No_Return (builtin_longjmp); + pragma Import (C, builtin_longjmp, "_gnat_builtin_longjmp"); + + --------------------- + -- Setup_Exception -- + --------------------- + + procedure Setup_Exception + (Excep : EOA; + Current : EOA; + Reraised : Boolean := False) + is + pragma Unreferenced (Excep, Current, Reraised); + begin + -- In the GNAT-SJLJ case this "stack" only exists implicitely, by way of + -- local occurrence declarations together with save/restore operations + -- generated by the front-end, and this routine has nothing to do. + + null; + end Setup_Exception; + + ------------------------- + -- Propagate_Exception -- + ------------------------- + + procedure Propagate_Exception (From_Signal_Handler : Boolean) is + Jumpbuf_Ptr : constant Address := Get_Jmpbuf_Address.all; + Excep : constant EOA := Get_Current_Excep.all; + begin + -- Compute the backtrace for this occurrence if corresponding binder + -- option has been set. Call_Chain takes care of the reraise case. + + Call_Chain (Excep); + + -- Note on above call to Call_Chain: + + -- We used to only do this if From_Signal_Handler was not set, + -- based on the assumption that backtracing from a signal handler + -- would not work due to stack layout oddities. However, since + + -- 1. The flag is never set in tasking programs (Notify_Exception + -- performs regular raise statements), and + + -- 2. No problem has shown up in tasking programs around here so + -- far, this turned out to be too strong an assumption. + + -- As, in addition, the test was + + -- 1. preventing the production of backtraces in non-tasking + -- programs, and + + -- 2. introducing a behavior inconsistency between + -- the tasking and non-tasking cases, + + -- we have simply removed it + + -- If the jump buffer pointer is non-null, transfer control using + -- it. Otherwise announce an unhandled exception (note that this + -- means that we have no finalizations to do other than at the outer + -- level). Perform the necessary notification tasks in both cases. + + if Jumpbuf_Ptr /= Null_Address then + if not Excep.Exception_Raised then + Excep.Exception_Raised := True; + Exception_Traces.Notify_Handled_Exception; + end if; + + builtin_longjmp (Jumpbuf_Ptr, 1); + + else + Exception_Traces.Notify_Unhandled_Exception; + Exception_Traces.Unhandled_Exception_Terminate; + end if; + end Propagate_Exception; + +end Exception_Propagation; diff --git a/gcc/ada/a-exextr.adb b/gcc/ada/a-exextr.adb index caeb23c321d..b50dbc9b492 100644 --- a/gcc/ada/a-exextr.adb +++ b/gcc/ada/a-exextr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-exstat.adb b/gcc/ada/a-exstat.adb index d227c45c623..142065f3719 100644 --- a/gcc/ada/a-exstat.adb +++ b/gcc/ada/a-exstat.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-filico.ads b/gcc/ada/a-filico.ads index 624ba5fa7ef..5295a06be79 100644 --- a/gcc/ada/a-filico.ads +++ b/gcc/ada/a-filico.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-finali.ads b/gcc/ada/a-finali.ads index c2ae4210ca6..598c2926018 100644 --- a/gcc/ada/a-finali.ads +++ b/gcc/ada/a-finali.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-interr.ads b/gcc/ada/a-interr.ads index 941af5894fa..8c9c7212b6d 100644 --- a/gcc/ada/a-interr.ads +++ b/gcc/ada/a-interr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-intnam-aix.ads b/gcc/ada/a-intnam-aix.ads index e45c029b5ef..279db9db339 100644 --- a/gcc/ada/a-intnam-aix.ads +++ b/gcc/ada/a-intnam-aix.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,20 +31,20 @@ -- -- ------------------------------------------------------------------------------ --- This is a AIX version of this package. --- +-- This is a AIX version of this package + -- The following signals are reserved by the run time (native threads): --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGTERM, -- SIGSTOP, SIGKILL --- + -- The following signals are reserved by the run time (FSU threads): --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGALRM, -- SIGWAITING, SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handler -- This target-dependent package spec contains names of interrupts @@ -55,10 +55,9 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. Also, for all - -- signal names that are not supported on the current system - -- the value of the corresponding constant will be zero. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on the + -- current system the value of the corresponding constant will be zero. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-darwin.ads b/gcc/ada/a-intnam-darwin.ads index 1ac9b82b32e..23d12f1de50 100644 --- a/gcc/ada/a-intnam-darwin.ads +++ b/gcc/ada/a-intnam-darwin.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,14 +31,14 @@ -- -- ------------------------------------------------------------------------------ --- This is the Darwin version of this package. --- +-- This is the Darwin version of this package + -- The following signals are reserved by the run time: --- + -- SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handler -- This target-dependent package spec contains names of interrupts @@ -49,10 +49,9 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. Also, for all - -- signal names that are not supported on the current system - -- the value of the corresponding constant will be zero. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on the + -- current system the value of the corresponding constant will be zero. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-dummy.ads b/gcc/ada/a-intnam-dummy.ads index 76210c03198..f2b418795fe 100644 --- a/gcc/ada/a-intnam-dummy.ads +++ b/gcc/ada/a-intnam-dummy.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (No Tasking Version) -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-intnam-freebsd.ads b/gcc/ada/a-intnam-freebsd.ads index 3b72036904d..329b0f6508f 100644 --- a/gcc/ada/a-intnam-freebsd.ads +++ b/gcc/ada/a-intnam-freebsd.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-intnam-interix.ads b/gcc/ada/a-intnam-interix.ads index f56f5dd33a4..a6fa5cb6860 100644 --- a/gcc/ada/a-intnam-interix.ads +++ b/gcc/ada/a-intnam-interix.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-intnam-linux.ads b/gcc/ada/a-intnam-linux.ads index 4246765cfd8..70fb471b084 100644 --- a/gcc/ada/a-intnam-linux.ads +++ b/gcc/ada/a-intnam-linux.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,20 +31,20 @@ -- -- ------------------------------------------------------------------------------ --- This is a GNU/Linux version of this package. --- +-- This is a GNU/Linux version of this package + -- The following signals are reserved by the run time (FSU threads): --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT, -- SIGALRM, SIGVTALRM, SIGUNUSED, SIGSTOP, SIGKILL --- + -- The following signals are reserved by the run time (LinuxThreads): --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT, -- SIGUSR1, SIGUSR2, SIGVTALRM, SIGUNUSED, SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handler -- This target-dependent package spec contains names of interrupts @@ -55,10 +55,9 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. Also, for all - -- signal names that are not supported on the current system - -- the value of the corresponding constant will be zero. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on the + -- current system the value of the corresponding constant will be zero. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-lynxos.ads b/gcc/ada/a-intnam-lynxos.ads index 7e484d57367..850eb2af033 100644 --- a/gcc/ada/a-intnam-lynxos.ads +++ b/gcc/ada/a-intnam-lynxos.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,15 +31,15 @@ -- -- ------------------------------------------------------------------------------ --- This is a LynxOS version of this package. --- +-- This is a LynxOS version of this package + -- The following signals are reserved by the run time: --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT, -- SIGWAITING, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handler with System.OS_Interface; @@ -47,8 +47,8 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-mingw.ads b/gcc/ada/a-intnam-mingw.ads index 13038fe2410..a8c5e4ee11a 100644 --- a/gcc/ada/a-intnam-mingw.ads +++ b/gcc/ada/a-intnam-mingw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,10 +41,9 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. Also, for all - -- signal names that are not supported on the current system - -- the value of the corresponding constant will be zero. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on the + -- current system the value of the corresponding constant will be zero. SIGINT : constant Interrupt_ID := System.OS_Interface.SIGINT; -- interrupt (rubout) diff --git a/gcc/ada/a-intnam-solaris.ads b/gcc/ada/a-intnam-solaris.ads index f65b861786e..4b4adcf109c 100644 --- a/gcc/ada/a-intnam-solaris.ads +++ b/gcc/ada/a-intnam-solaris.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,20 +31,20 @@ -- -- ------------------------------------------------------------------------------ --- This is a Solaris version of this package. --- +-- This is a Solaris version of this package + -- The following signals are reserved by the run time (native threads): --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT, -- SIGLWP, SIGWAITING, SIGCANCEL, SIGSTOP, SIGKILL --- + -- The following signals are reserved by the run time (FSU threads): --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGTERM, SIGABRT, SIGINT, -- SIGLWP, SIGALRM, SIGVTALRM, SIGAITING, SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handlers with System.OS_Interface; @@ -52,10 +52,9 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. Also, for all - -- signal names that are not supported on the current system - -- the value of the corresponding constant will be zero. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on the + -- current system the value of the corresponding constant will be zero. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-tru64.ads b/gcc/ada/a-intnam-tru64.ads index 579be22556e..8b6a838c101 100644 --- a/gcc/ada/a-intnam-tru64.ads +++ b/gcc/ada/a-intnam-tru64.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,15 +31,15 @@ -- -- ------------------------------------------------------------------------------ --- This is the DEC Unix 4.0 version of this package. --- +-- This is the DEC Unix 4.0 version of this package + -- The following signals are reserved by the run time: --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGTRAP, SIGINT, SIGALRM, -- SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handler with System.OS_Interface; @@ -47,10 +47,9 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. Also, for all - -- signal names that are not supported on the current system - -- the value of the corresponding constant will be zero. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on the + -- current system the value of the corresponding constant will be zero. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-unixware.ads b/gcc/ada/a-intnam-unixware.ads index 956470cc40a..ff8a6c801c4 100644 --- a/gcc/ada/a-intnam-unixware.ads +++ b/gcc/ada/a-intnam-unixware.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,15 +31,15 @@ -- -- ------------------------------------------------------------------------------ --- This is a SCO UnixWare version of this package. --- +-- This is a SCO UnixWare version of this package + -- The following signals are reserved by the run time: --- + -- SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT, -- SIGWAITING, SIGLWP, SIGTTIN, SIGTTOU, SIGTSTP, SIGPROF, SIGSTOP, SIGKILL --- + -- The pragma Unreserve_All_Interrupts affects the following signal(s): --- + -- SIGINT: made available for Ada handler with System.OS_Interface; @@ -47,8 +47,8 @@ with System.OS_Interface; package Ada.Interrupts.Names is - -- Beware that the mapping of names to signals may be - -- many-to-one. There may be aliases. + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. SIGHUP : constant Interrupt_ID := System.OS_Interface.SIGHUP; -- hangup diff --git a/gcc/ada/a-intnam-vms.ads b/gcc/ada/a-intnam-vms.ads index e079f0274a7..3b745d17ccb 100644 --- a/gcc/ada/a-intnam-vms.ads +++ b/gcc/ada/a-intnam-vms.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,8 +31,8 @@ -- -- ------------------------------------------------------------------------------ --- This is a OpenVMS/Alpha version of this package. --- +-- This is a OpenVMS/Alpha version of this package + -- This target-dependent package spec contains names of interrupts -- supported by the local system. diff --git a/gcc/ada/a-intnam-vxworks.ads b/gcc/ada/a-intnam-vxworks.ads index beb915be0b0..7a2427a7725 100644 --- a/gcc/ada/a-intnam-vxworks.ads +++ b/gcc/ada/a-intnam-vxworks.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1998-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-intsig.adb b/gcc/ada/a-intsig.adb index 80a9441e434..2099cd8b6ff 100644 --- a/gcc/ada/a-intsig.adb +++ b/gcc/ada/a-intsig.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ ------------------------------------------------------------------------------ with System.Interrupt_Management.Operations; + package body Ada.Interrupts.Signal is ------------------------ @@ -43,4 +44,5 @@ package body Ada.Interrupts.Signal is System.Interrupt_Management.Operations.Interrupt_Self_Process (System.Interrupt_Management.Interrupt_ID (Interrupt)); end Generate_Interrupt; + end Ada.Interrupts.Signal; diff --git a/gcc/ada/a-intsig.ads b/gcc/ada/a-intsig.ads index 0150622c1f5..5160123539a 100644 --- a/gcc/ada/a-intsig.ads +++ b/gcc/ada/a-intsig.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,10 +35,10 @@ -- by user programs and avoids importing low level children of System -- (e.g. System.Interrupt_Management.Operations), or defining an interface -- to complex system calls. --- + package Ada.Interrupts.Signal is procedure Generate_Interrupt (Interrupt : Interrupt_ID); - -- Generate Interrupt at the process level + -- Generate interrupt at the process level end Ada.Interrupts.Signal; diff --git a/gcc/ada/a-ngcefu.adb b/gcc/ada/a-ngcefu.adb index 44216466cb4..d0e203d2780 100644 --- a/gcc/ada/a-ngcefu.adb +++ b/gcc/ada/a-ngcefu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ngcoty.adb b/gcc/ada/a-ngcoty.adb index aa8c9955d0f..f0abc80ec37 100644 --- a/gcc/ada/a-ngcoty.adb +++ b/gcc/ada/a-ngcoty.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ ------------------------------------------------------------------------------ with Ada.Numerics.Aux; use Ada.Numerics.Aux; + package body Ada.Numerics.Generic_Complex_Types is subtype R is Real'Base; diff --git a/gcc/ada/a-ngcoty.ads b/gcc/ada/a-ngcoty.ads index fd6c9071b4a..0e006d24cb9 100644 --- a/gcc/ada/a-ngcoty.ads +++ b/gcc/ada/a-ngcoty.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-nudira.adb b/gcc/ada/a-nudira.adb index 9cdd8a149e1..dd8408f2d81 100644 --- a/gcc/ada/a-nudira.adb +++ b/gcc/ada/a-nudira.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ ------------------------------------------------------------------------------ with Ada.Calendar; + with Interfaces; use Interfaces; package body Ada.Numerics.Discrete_Random is @@ -201,7 +202,6 @@ package body Ada.Numerics.Discrete_Random is procedure Reset (Gen : Generator; From_State : State) is Genp : constant Pointer := Gen.Gen_State'Unrestricted_Access; - begin Genp.all := From_State; end Reset; diff --git a/gcc/ada/a-nudira.ads b/gcc/ada/a-nudira.ads index 275e89825fd..c6b2b3e9f30 100644 --- a/gcc/ada/a-nudira.ads +++ b/gcc/ada/a-nudira.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-nuflra.adb b/gcc/ada/a-nuflra.adb index 5f43c97df6b..379d58fe7b4 100644 --- a/gcc/ada/a-nuflra.adb +++ b/gcc/ada/a-nuflra.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-numaux-darwin.adb b/gcc/ada/a-numaux-darwin.adb index d9235a10649..af0f1d5bd0f 100644 --- a/gcc/ada/a-numaux-darwin.adb +++ b/gcc/ada/a-numaux-darwin.adb @@ -7,7 +7,7 @@ -- B o d y -- -- (Apple OS X Version) -- -- -- --- Copyright (C) 1998-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,7 +32,7 @@ -- -- ------------------------------------------------------------------------------ --- File a-numaux.adb <- a-numaux-darwin.adb +-- File a-numaux.adb <- a-numaux-d arwin.adb package body Ada.Numerics.Aux is @@ -95,7 +95,8 @@ package body Ada.Numerics.Aux is P5 : constant Double := Double'Leading_Part (Half_Pi - P1 - P2 - P3 - P4, HM); P6 : constant Double := Double'Model (Half_Pi - P1 - P2 - P3 - P4 - P5); - K : Double := X * Two_Over_Pi; + K : Double; + begin -- For X < 2.0**HM, all products below are computed exactly. -- Due to cancellation effects all subtractions are exact as well. @@ -103,17 +104,17 @@ package body Ada.Numerics.Aux is -- zeros after the binary point, the result will be the correctly -- rounded result of X - K * (Pi / 2.0). - while abs K >= 2.0**HM loop + K := X * Two_Over_Pi; + while abs K >= 2.0 ** HM loop K := K * M - (K * M - K); - X := (((((X - K * P1) - K * P2) - K * P3) - - K * P4) - K * P5) - K * P6; + X := + (((((X - K * P1) - K * P2) - K * P3) - K * P4) - K * P5) - K * P6; K := X * Two_Over_Pi; end loop; - if K /= K then - - -- K is not a number, because X was not finite + -- If K is not a number (because X was not finite) raise exception + if K /= K then raise Constraint_Error; end if; diff --git a/gcc/ada/a-numaux-darwin.ads b/gcc/ada/a-numaux-darwin.ads index 67faa0f9982..77f5badf937 100644 --- a/gcc/ada/a-numaux-darwin.ads +++ b/gcc/ada/a-numaux-darwin.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (Apple OS X Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-numaux-libc-x86.ads b/gcc/ada/a-numaux-libc-x86.ads index 8e94fa0176d..ac2df18d310 100644 --- a/gcc/ada/a-numaux-libc-x86.ads +++ b/gcc/ada/a-numaux-libc-x86.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (C Library Version for x86) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-numaux-vxworks.ads b/gcc/ada/a-numaux-vxworks.ads index db71c046444..70f07ca3582 100644 --- a/gcc/ada/a-numaux-vxworks.ads +++ b/gcc/ada/a-numaux-vxworks.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (C Library Version, VxWorks) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-numaux-x86.ads b/gcc/ada/a-numaux-x86.ads index 97cf691b127..7cfb612f37b 100644 --- a/gcc/ada/a-numaux-x86.ads +++ b/gcc/ada/a-numaux-x86.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (Machine Version for x86) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-numaux.ads b/gcc/ada/a-numaux.ads index fb09ad1009b..694ca8069f2 100644 --- a/gcc/ada/a-numaux.ads +++ b/gcc/ada/a-numaux.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (C Library Version, non-x86) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-rbtgso.adb b/gcc/ada/a-rbtgso.adb index 4a46be1181c..6742e285291 100644 --- a/gcc/ada/a-rbtgso.adb +++ b/gcc/ada/a-rbtgso.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-reatim.ads b/gcc/ada/a-reatim.ads index c761354d51f..ae87c0a322a 100644 --- a/gcc/ada/a-reatim.ads +++ b/gcc/ada/a-reatim.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-secain.adb b/gcc/ada/a-secain.adb index 777af4e27e3..74d222d6a59 100644 --- a/gcc/ada/a-secain.adb +++ b/gcc/ada/a-secain.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-sequio.adb b/gcc/ada/a-sequio.adb index 1a5966b7a91..6d4d84f9d2f 100644 --- a/gcc/ada/a-sequio.adb +++ b/gcc/ada/a-sequio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-sequio.ads b/gcc/ada/a-sequio.ads index 3a01364c3a3..2aba80abfc5 100644 --- a/gcc/ada/a-sequio.ads +++ b/gcc/ada/a-sequio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -36,6 +36,7 @@ ------------------------------------------------------------------------------ with Ada.IO_Exceptions; + with System.Sequential_IO; generic diff --git a/gcc/ada/a-shcain.adb b/gcc/ada/a-shcain.adb index c41c2e6cdfb..4b6000c26be 100644 --- a/gcc/ada/a-shcain.adb +++ b/gcc/ada/a-shcain.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -33,7 +33,7 @@ -- This unit was originally developed by Matthew J Heaney. -- ------------------------------------------------------------------------------ -with Ada.Characters.Handling; use Ada.Characters.Handling; +with Ada.Characters.Handling; use Ada.Characters.Handling; -- Note: source of this algorithm: GNAT.HTable.Hash (g-htable.adb) diff --git a/gcc/ada/a-siocst.ads b/gcc/ada/a-siocst.ads index 949e398b5c6..26a9af94eab 100644 --- a/gcc/ada/a-siocst.ads +++ b/gcc/ada/a-siocst.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-slcain.adb b/gcc/ada/a-slcain.adb index 5ce584e2710..5a5b8928c43 100644 --- a/gcc/ada/a-slcain.adb +++ b/gcc/ada/a-slcain.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -33,7 +33,7 @@ -- This unit was originally developed by Matthew J Heaney. -- ------------------------------------------------------------------------------ -with Ada.Characters.Handling; use Ada.Characters.Handling; +with Ada.Characters.Handling; use Ada.Characters.Handling; function Ada.Strings.Less_Case_Insensitive (Left, Right : String) return Boolean diff --git a/gcc/ada/a-ssicst.ads b/gcc/ada/a-ssicst.ads index 1d56f0f07ed..d5f2d6a4ea9 100644 --- a/gcc/ada/a-ssicst.ads +++ b/gcc/ada/a-ssicst.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stmaco.ads b/gcc/ada/a-stmaco.ads index 660f557a266..86e1bb948eb 100644 --- a/gcc/ada/a-stmaco.ads +++ b/gcc/ada/a-stmaco.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- ACopyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-storio.adb b/gcc/ada/a-storio.adb index 3f50e730ad1..ebf6168cdfb 100644 --- a/gcc/ada/a-storio.adb +++ b/gcc/ada/a-storio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strbou.adb b/gcc/ada/a-strbou.adb index 6bcf0b4755a..015123a8faf 100644 --- a/gcc/ada/a-strbou.adb +++ b/gcc/ada/a-strbou.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strbou.ads b/gcc/ada/a-strbou.ads index 74bb8f697a1..d0dbe8c9ce0 100644 --- a/gcc/ada/a-strbou.ads +++ b/gcc/ada/a-strbou.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stream.ads b/gcc/ada/a-stream.ads index 0b68692857a..5bca4a2cc5b 100644 --- a/gcc/ada/a-stream.ads +++ b/gcc/ada/a-stream.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-strfix.adb b/gcc/ada/a-strfix.adb index 5eee9348f27..3385baac868 100644 --- a/gcc/ada/a-strfix.adb +++ b/gcc/ada/a-strfix.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,14 +31,14 @@ -- -- ------------------------------------------------------------------------------ --- Note: This code is derived from the ADAR.CSH public domain Ada 83 --- versions of the Appendix C string handling packages. One change is --- to avoid the use of Is_In, so that we are not dependent on inlining. --- Note that the search function implementations are to be found in the --- auxiliary package Ada.Strings.Search. Also the Move procedure is --- directly incorporated (ADAR used a subunit for this procedure). A --- number of errors having to do with bounds of function return results --- were also fixed, and use of & removed for efficiency reasons. +-- Note: This code is derived from the ADAR.CSH public domain Ada 83 versions +-- of the Appendix C string handling packages. One change is to avoid the use +-- of Is_In, so that we are not dependent on inlining. Note that the search +-- function implementations are to be found in the auxiliary package +-- Ada.Strings.Search. Also the Move procedure is directly incorporated (ADAR +-- used a subunit for this procedure). number of errors having to do with +-- bounds of function return results were also fixed, and use of & removed for +-- efficiency reasons. with Ada.Strings.Maps; use Ada.Strings.Maps; with Ada.Strings.Search; diff --git a/gcc/ada/a-strhas.adb b/gcc/ada/a-strhas.adb index a22c27c66ee..ba02a75c68c 100644 --- a/gcc/ada/a-strhas.adb +++ b/gcc/ada/a-strhas.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-strmap.adb b/gcc/ada/a-strmap.adb index f5e324914da..ee0179ef8a8 100644 --- a/gcc/ada/a-strmap.adb +++ b/gcc/ada/a-strmap.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strmap.ads b/gcc/ada/a-strmap.ads index 3331a2f1666..bd1b98f00cc 100644 --- a/gcc/ada/a-strmap.ads +++ b/gcc/ada/a-strmap.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-strsea.adb b/gcc/ada/a-strsea.adb index f98617cde74..322aeaa7fb1 100644 --- a/gcc/ada/a-strsea.adb +++ b/gcc/ada/a-strsea.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strsea.ads b/gcc/ada/a-strsea.ads index f9d81c74c70..6c7a5c297da 100644 --- a/gcc/ada/a-strsea.ads +++ b/gcc/ada/a-strsea.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strsup.adb b/gcc/ada/a-strsup.adb index 28654129357..1b1c9090c92 100644 --- a/gcc/ada/a-strsup.adb +++ b/gcc/ada/a-strsup.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strsup.ads b/gcc/ada/a-strsup.ads index cf27f4a7495..e00b09011c6 100644 --- a/gcc/ada/a-strsup.ads +++ b/gcc/ada/a-strsup.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strunb.adb b/gcc/ada/a-strunb.adb index cf5cde63cc6..34720704a36 100644 --- a/gcc/ada/a-strunb.adb +++ b/gcc/ada/a-strunb.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-strunb.ads b/gcc/ada/a-strunb.ads index 0869995a167..5755ed202aa 100644 --- a/gcc/ada/a-strunb.ads +++ b/gcc/ada/a-strunb.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stunha.adb b/gcc/ada/a-stunha.adb index 8052bdcf77f..34db5634116 100644 --- a/gcc/ada/a-stunha.adb +++ b/gcc/ada/a-stunha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stunha.ads b/gcc/ada/a-stunha.ads index 81716555389..acf04716762 100644 --- a/gcc/ada/a-stunha.ads +++ b/gcc/ada/a-stunha.ads @@ -6,8 +6,6 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- --- -- -- This specification is adapted from the Ada Reference Manual for use with -- -- GNAT. In accordance with the copyright of that document, you can freely -- -- copy and modify this specification, provided that if you redistribute a -- diff --git a/gcc/ada/a-stwibo.adb b/gcc/ada/a-stwibo.adb index 136b439205d..36ec17d1baa 100644 --- a/gcc/ada/a-stwibo.adb +++ b/gcc/ada/a-stwibo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwibo.ads b/gcc/ada/a-stwibo.ads index 4c056650fc9..4033543e866 100644 --- a/gcc/ada/a-stwibo.ads +++ b/gcc/ada/a-stwibo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stwifi.adb b/gcc/ada/a-stwifi.adb index 13fe4ffe0ff..9f721bfb0f1 100644 --- a/gcc/ada/a-stwifi.adb +++ b/gcc/ada/a-stwifi.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,7 +31,7 @@ -- -- ------------------------------------------------------------------------------ -with Ada.Strings.Wide_Maps; use Ada.Strings.Wide_Maps; +with Ada.Strings.Wide_Maps; use Ada.Strings.Wide_Maps; with Ada.Strings.Wide_Search; package body Ada.Strings.Wide_Fixed is @@ -296,7 +296,11 @@ package body Ada.Strings.Wide_Fixed is Tlength : constant Integer := Target'Length; function Is_Padding (Item : Wide_String) return Boolean; - -- Determinbe if all characters in Item are pad characters + -- Determine if all characters in Item are pad characters + + ---------------- + -- Is_Padding -- + ---------------- function Is_Padding (Item : Wide_String) return Boolean is begin diff --git a/gcc/ada/a-stwiha.adb b/gcc/ada/a-stwiha.adb index c9068717a37..dd38568440d 100644 --- a/gcc/ada/a-stwiha.adb +++ b/gcc/ada/a-stwiha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stwima.adb b/gcc/ada/a-stwima.adb index 3ec637321f3..d56fb11ca8b 100644 --- a/gcc/ada/a-stwima.adb +++ b/gcc/ada/a-stwima.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwima.ads b/gcc/ada/a-stwima.ads index 001f5da201e..e63ac3169df 100644 --- a/gcc/ada/a-stwima.ads +++ b/gcc/ada/a-stwima.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stwise.adb b/gcc/ada/a-stwise.adb index 3121a16c6c1..f2be824df0f 100644 --- a/gcc/ada/a-stwise.adb +++ b/gcc/ada/a-stwise.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwise.ads b/gcc/ada/a-stwise.ads index 35241fc25e5..da4d3e1a4a7 100644 --- a/gcc/ada/a-stwise.ads +++ b/gcc/ada/a-stwise.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwisu.adb b/gcc/ada/a-stwisu.adb index 10529684de2..5984e5e117f 100644 --- a/gcc/ada/a-stwisu.adb +++ b/gcc/ada/a-stwisu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwisu.ads b/gcc/ada/a-stwisu.ads index 721e2a80481..f5e688332f9 100644 --- a/gcc/ada/a-stwisu.ads +++ b/gcc/ada/a-stwisu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwiun.adb b/gcc/ada/a-stwiun.adb index 05b3fa734be..45ab546a3c2 100644 --- a/gcc/ada/a-stwiun.adb +++ b/gcc/ada/a-stwiun.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stwiun.ads b/gcc/ada/a-stwiun.ads index e2cb3644566..4ac93acc84c 100644 --- a/gcc/ada/a-stwiun.ads +++ b/gcc/ada/a-stwiun.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stzbou.adb b/gcc/ada/a-stzbou.adb index 53089bff5c0..fee2026a61f 100644 --- a/gcc/ada/a-stzbou.adb +++ b/gcc/ada/a-stzbou.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzbou.ads b/gcc/ada/a-stzbou.ads index e4ad260871b..7650ef58aa9 100644 --- a/gcc/ada/a-stzbou.ads +++ b/gcc/ada/a-stzbou.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stzfix.adb b/gcc/ada/a-stzfix.adb index 5517404c42e..c01e2a7141a 100644 --- a/gcc/ada/a-stzfix.adb +++ b/gcc/ada/a-stzfix.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzhas.adb b/gcc/ada/a-stzhas.adb index 7881ea6d11b..ec5e928edc1 100644 --- a/gcc/ada/a-stzhas.adb +++ b/gcc/ada/a-stzhas.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stzmap.adb b/gcc/ada/a-stzmap.adb index 4f5880f8525..35a03853fde 100644 --- a/gcc/ada/a-stzmap.adb +++ b/gcc/ada/a-stzmap.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzmap.ads b/gcc/ada/a-stzmap.ads index f71e3dde106..b69357af4c0 100644 --- a/gcc/ada/a-stzmap.ads +++ b/gcc/ada/a-stzmap.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-stzsea.adb b/gcc/ada/a-stzsea.adb index 5b0b326c1ac..2e29415e0c1 100644 --- a/gcc/ada/a-stzsea.adb +++ b/gcc/ada/a-stzsea.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzsea.ads b/gcc/ada/a-stzsea.ads index eef55151bfd..f598db656f7 100644 --- a/gcc/ada/a-stzsea.ads +++ b/gcc/ada/a-stzsea.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzsup.adb b/gcc/ada/a-stzsup.adb index b6a96fd2ca4..9e4fbcd20f1 100644 --- a/gcc/ada/a-stzsup.adb +++ b/gcc/ada/a-stzsup.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzsup.ads b/gcc/ada/a-stzsup.ads index 33b9ecb03f7..ab84ad46f8b 100644 --- a/gcc/ada/a-stzsup.ads +++ b/gcc/ada/a-stzsup.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzunb.adb b/gcc/ada/a-stzunb.adb index 5f5302dc817..7f4c54a94c3 100644 --- a/gcc/ada/a-stzunb.adb +++ b/gcc/ada/a-stzunb.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-stzunb.ads b/gcc/ada/a-stzunb.ads index b069e934dd2..95b8eb17269 100644 --- a/gcc/ada/a-stzunb.ads +++ b/gcc/ada/a-stzunb.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-suteio.adb b/gcc/ada/a-suteio.adb index c5f586b2877..98034e2b110 100644 --- a/gcc/ada/a-suteio.adb +++ b/gcc/ada/a-suteio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-suteio.ads b/gcc/ada/a-suteio.ads index 7bcf5edac58..4369a452cf0 100644 --- a/gcc/ada/a-suteio.ads +++ b/gcc/ada/a-suteio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-swmwco.ads b/gcc/ada/a-swmwco.ads index 269b3f8d5b4..76b5976b620 100644 --- a/gcc/ada/a-swmwco.ads +++ b/gcc/ada/a-swmwco.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-swuwha.ads b/gcc/ada/a-swuwha.ads index 078094a8025..1fcb41007f8 100644 --- a/gcc/ada/a-swuwha.ads +++ b/gcc/ada/a-swuwha.ads @@ -6,8 +6,6 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- --- -- -- This specification is adapted from the Ada Reference Manual for use with -- -- GNAT. In accordance with the copyright of that document, you can freely -- -- copy and modify this specification, provided that if you redistribute a -- diff --git a/gcc/ada/a-swuwti.adb b/gcc/ada/a-swuwti.adb index 1436aed2e7f..1e6bb2e7eab 100644 --- a/gcc/ada/a-swuwti.adb +++ b/gcc/ada/a-swuwti.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-swuwti.ads b/gcc/ada/a-swuwti.ads index b5a4defb009..219a360a394 100644 --- a/gcc/ada/a-swuwti.ads +++ b/gcc/ada/a-swuwti.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-sytaco.adb b/gcc/ada/a-sytaco.adb index 98fcfaa5f98..3d0aaaa8c3b 100644 --- a/gcc/ada/a-sytaco.adb +++ b/gcc/ada/a-sytaco.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-sytaco.ads b/gcc/ada/a-sytaco.ads index 5e6315cdba5..96480cf26e8 100644 --- a/gcc/ada/a-sytaco.ads +++ b/gcc/ada/a-sytaco.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-szuzha.adb b/gcc/ada/a-szuzha.adb index 97c97905d96..fff8114e656 100644 --- a/gcc/ada/a-szuzha.adb +++ b/gcc/ada/a-szuzha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-szuzha.ads b/gcc/ada/a-szuzha.ads index 2aaf66bd485..1e07fbdbd2b 100644 --- a/gcc/ada/a-szuzha.ads +++ b/gcc/ada/a-szuzha.ads @@ -6,8 +6,6 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- --- -- -- This specification is adapted from the Ada Reference Manual for use with -- -- GNAT. In accordance with the copyright of that document, you can freely -- -- copy and modify this specification, provided that if you redistribute a -- diff --git a/gcc/ada/a-szuzti.adb b/gcc/ada/a-szuzti.adb index d543bc4f18f..850ae78cca2 100644 --- a/gcc/ada/a-szuzti.adb +++ b/gcc/ada/a-szuzti.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-szuzti.ads b/gcc/ada/a-szuzti.ads index c48d404d406..01111695e23 100644 --- a/gcc/ada/a-szuzti.ads +++ b/gcc/ada/a-szuzti.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tags.adb b/gcc/ada/a-tags.adb index 4a21e15c693..8c9312e205c 100644 --- a/gcc/ada/a-tags.adb +++ b/gcc/ada/a-tags.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -39,43 +39,64 @@ pragma Elaborate_All (System.HTable); package body Ada.Tags is --- Structure of the GNAT Dispatch Table +-- Structure of the GNAT Primary Dispatch Table -- +-----------------------+ +-- | Signature | +-- +-----------------------+ -- | Offset_To_Top | -- +-----------------------+ --- | Typeinfo_Ptr/TSD_Ptr |----> Type Specific Data +-- | Typeinfo_Ptr/TSD_Ptr | ---> Type Specific Data -- Tag ---> +-----------------------+ +-------------------+ -- | table of | | inheritance depth | -- : primitive ops : +-------------------+ --- | pointers | | expanded name | +-- | pointers | | access level | -- +-----------------------+ +-------------------+ --- | external tag | --- +-------------------+ --- | Hash table link | +-- | expanded name | -- +-------------------+ --- | Remotely Callable | --- +-------------------+ --- | Rec Ctrler offset | +-- | external tag | -- +-------------------+ --- | Num_Interfaces | +-- | hash table link | -- +-------------------+ --- | table of | --- : ancestor : --- | tags | +-- | remotely callable | -- +-------------------+ --- | table of | --- : interface : --- | tags | +-- | rec ctrler offset | -- +-------------------+ --- | table of | --- : primitive op : --- | kinds | +-- | num prim ops | -- +-------------------+ --- | table of | --- : entry : --- | indices | +-- | num interfaces | -- +-------------------+ +-- Select Specific Data <--- | SSD_Ptr | +-- +-----------------------+ +-------------------+ +-- | table of primitive | | table of | +-- : operation : : ancestor : +-- | kinds | | tags | +-- +-----------------------+ +-------------------+ +-- | table of | | table of | +-- : entry : : interface : +-- | indices | | tags | +-- +-----------------------+ +-------------------+ + +-- Structure of the GNAT Secondary Dispatch Table + +-- +-----------------------+ +-- | Signature | +-- +-----------------------+ +-- | Offset_To_Top | +-- +-----------------------+ +-- | OSD_Ptr |---> Object Specific Data +-- Tag ---> +-----------------------+ +---------------+ +-- | table of | | num prim ops | +-- : primitive op : +---------------+ +-- | thunk pointers | | table of | +-- +-----------------------+ + primitive | +-- | op offsets | +-- +---------------+ + + Offset_To_Signature : constant SSE.Storage_Count := + DT_Typeinfo_Ptr_Size + + DT_Offset_To_Top_Size + + DT_Signature_Size; subtype Cstring is String (Positive); type Cstring_Ptr is access all Cstring; @@ -87,13 +108,39 @@ package body Ada.Tags is pragma Suppress_Initialization (Tag_Table); pragma Suppress (Index_Check, On => Tag_Table); - type Prim_Op_Kind_Table is array (Natural range <>) of Prim_Op_Kind; - pragma Suppress_Initialization (Prim_Op_Kind_Table); - pragma Suppress (Index_Check, On => Prim_Op_Kind_Table); + -- Object specific data types + + type Object_Specific_Data_Array is array (Positive range <>) of Positive; + + type Object_Specific_Data (Nb_Prim : Positive) is record + Num_Prim_Ops : Natural; + -- Number of primitive operations of the dispatch table. This field is + -- used by the run-time check routines that are activated when the + -- run-time is compiled with assertions enabled. + + OSD_Table : Object_Specific_Data_Array (1 .. Nb_Prim); + -- Table used in secondary DT to reference their counterpart in the + -- select specific data (in the TSD of the primary DT). This construct + -- is used in the handling of dispatching triggers in select statements. + -- Nb_Prim is the number of non-predefined primitive operations. + end record; + + -- Select specific data types + + type Select_Specific_Data_Element is record + Index : Positive; + Kind : Prim_Op_Kind; + end record; + + type Select_Specific_Data_Array is + array (Positive range <>) of Select_Specific_Data_Element; + + type Select_Specific_Data (Nb_Prim : Positive) is record + SSD_Table : Select_Specific_Data_Array (1 .. Nb_Prim); + -- NOTE: Nb_Prim is the number of non-predefined primitive operations + end record; - type Entry_Index_Table is array (Natural range <>) of Positive; - pragma Suppress_Initialization (Entry_Index_Table); - pragma Suppress (Index_Check, On => Entry_Index_Table); + -- Type specific data types type Type_Specific_Data is record Idepth : Natural; @@ -124,11 +171,22 @@ package body Ada.Tags is -- Controller Offset: Used to give support to tagged controlled objects -- (see Get_Deep_Controller at s-finimp) + Num_Prim_Ops : Natural; + -- Number of primitive operations of the dispatch table. This field is + -- used for additional run-time checks when the run-time is compiled + -- with assertions enabled. + Num_Interfaces : Natural; -- Number of abstract interface types implemented by the tagged type. -- The value Idepth+Num_Interfaces indicates the end of the second table -- stored in the Tags_Table component. It is used to implement the - -- membership test associated with interfaces (Ada 2005:AI-251) + -- membership test associated with interfaces (Ada 2005:AI-251). + + SSD_Ptr : System.Address; + -- Pointer to a table of records used in dispatching selects. This + -- field has a meaningful value for all tagged types that implement + -- a limited, protected, synchronized or task interfaces and have + -- non-predefined primitive operations. Tags_Table : Tag_Table (0 .. 1); -- The size of the Tags_Table array actually depends on the tagged type @@ -138,21 +196,9 @@ package body Ada.Tags is -- purpose we are using the same mechanism as for the Prims_Ptr array in -- the Dispatch_Table record. See comments below on Prims_Ptr for -- further details. - - POK_Table : Prim_Op_Kind_Table (1 .. 1); - Ent_Index_Table : Entry_Index_Table (1 .. 1); - -- Two auxiliary tables used for dispatching in asynchronous, - -- conditional and timed selects. Their size depends on the number - -- of primitive operations. Indexing in these two tables is performed - -- by subtracting the number of predefined primitive operations from - -- the given index value. POK_Table contains the callable entity kinds - -- of all non-predefined primitive operations. Ent_Index_Table contains - -- the entry index of primitive entry wrappers. end record; type Dispatch_Table is record - -- Offset_To_Top : Natural; - -- Typeinfo_Ptr : System.Address; -- According to the C++ ABI the components Offset_To_Top and -- Typeinfo_Ptr are stored just "before" the dispatch table (that is, @@ -164,6 +210,9 @@ package body Ada.Tags is -- enough space for these additional components, and generates code that -- displaces the _Tag to point after these components. + -- Offset_To_Top : Natural; + -- Typeinfo_Ptr : System.Address; + Prims_Ptr : Address_Array (1 .. 1); -- The size of the Prims_Ptr array actually depends on the tagged type -- to which it applies. For each tagged type, the expander computes the @@ -185,6 +234,20 @@ package body Ada.Tags is -- only to declare the corresponding access type. end record; + -- Run-time check types and subprograms: These subprograms are used only + -- when the run-time is compiled with assertions enabled. + + type Signature_Type is + (Must_Be_Primary_DT, + Must_Be_Secondary_DT, + Must_Be_Primary_Or_Secondary_DT, + Must_Be_Interface, + Must_Be_Primary_Or_Interface); + -- Type of signature accepted by primitives in this package that are called + -- during the elaboration of tagged types. This type is used by the routine + -- Check_Signature that is called only when the run-time is compiled with + -- assertions enabled. + --------------------------------------------- -- Unchecked Conversions for String Fields -- --------------------------------------------- @@ -199,6 +262,12 @@ package body Ada.Tags is -- Unchecked Conversions for other components -- ------------------------------------------------ + type Acc_Size + is access function (A : System.Address) return Long_Long_Integer; + + function To_Acc_Size is new Unchecked_Conversion (System.Address, Acc_Size); + -- The profile of the implicitly defined _size primitive + type Storage_Offset_Ptr is access System.Storage_Elements.Storage_Offset; function To_Storage_Offset_Ptr is @@ -208,6 +277,30 @@ package body Ada.Tags is -- Local Subprograms -- ----------------------- + function Check_Index + (T : Tag; + Index : Natural) return Boolean; + -- Check that Index references a valid entry of the dispatch table of T + + function Check_Signature (T : Tag; Kind : Signature_Type) return Boolean; + -- Check that the signature of T is valid and corresponds with the subset + -- specified by the signature Kind. + + function Check_Size + (Old_T : Tag; + New_T : Tag; + Entry_Count : Natural) return Boolean; + -- Verify that Old_T and New_T have at least Entry_Count entries + + function Get_Num_Prim_Ops (T : Tag) return Natural; + -- Retrieve the number of primitive operations in the dispatch table of T + + function Is_Primary_DT (T : Tag) return Boolean; + pragma Inline_Always (Is_Primary_DT); + -- Given a tag returns True if it has the signature of a primary dispatch + -- table. This is Inline_Always since it is called from other Inline_ + -- Always subprograms where we want no out of line code to be generated. + function Length (Str : Cstring_Ptr) return Natural; -- Length of string represented by the given pointer (treating the string -- as a C-style string, which is Nul terminated). @@ -261,9 +354,9 @@ package body Ada.Tags is package body HTable_Subprograms is - ----------- - -- Equal -- - ----------- + ----------- + -- Equal -- + ----------- function Equal (A, B : System.Address) return Boolean is Str1 : constant Cstring_Ptr := To_Cstring_Ptr (A); @@ -313,6 +406,93 @@ package body Ada.Tags is end HTable_Subprograms; + ----------------- + -- Check_Index -- + ----------------- + + function Check_Index + (T : Tag; + Index : Natural) return Boolean + is + Max_Entries : constant Natural := Get_Num_Prim_Ops (T); + + begin + return Index /= 0 and then Index <= Max_Entries; + end Check_Index; + + --------------------- + -- Check_Signature -- + --------------------- + + function Check_Signature (T : Tag; Kind : Signature_Type) return Boolean is + Offset_To_Top_Ptr : constant Storage_Offset_Ptr := + To_Storage_Offset_Ptr (To_Address (T) + - Offset_To_Signature); + + Signature : constant Signature_Values := + To_Signature_Values (Offset_To_Top_Ptr.all); + + Signature_Id : Signature_Kind; + + begin + if Signature (1) /= Valid_Signature then + Signature_Id := Unknown; + + elsif Signature (2) in Primary_DT .. Abstract_Interface then + Signature_Id := Signature (2); + + else + Signature_Id := Unknown; + end if; + + case Signature_Id is + when Primary_DT => + if Kind = Must_Be_Secondary_DT + or else Kind = Must_Be_Interface + then + return False; + end if; + + when Secondary_DT => + if Kind = Must_Be_Primary_DT + or else Kind = Must_Be_Interface + then + return False; + end if; + + when Abstract_Interface => + if Kind = Must_Be_Primary_DT + or else Kind = Must_Be_Secondary_DT + or else Kind = Must_Be_Primary_Or_Secondary_DT + then + return False; + end if; + + when others => + return False; + + end case; + + return True; + end Check_Signature; + + ---------------- + -- Check_Size -- + ---------------- + + function Check_Size + (Old_T : Tag; + New_T : Tag; + Entry_Count : Natural) return Boolean + is + Max_Entries_Old : constant Natural := Get_Num_Prim_Ops (Old_T); + Max_Entries_New : constant Natural := Get_Num_Prim_Ops (New_T); + + begin + return Entry_Count <= Max_Entries_Old + and then Entry_Count <= Max_Entries_New; + end Check_Size; + ------------------- -- CW_Membership -- ------------------- @@ -334,8 +514,11 @@ package body Ada.Tags is -- = Typ'tag function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is - Pos : constant Integer := TSD (Obj_Tag).Idepth - TSD (Typ_Tag).Idepth; + Pos : Integer; begin + pragma Assert (Check_Signature (Obj_Tag, Must_Be_Primary_DT)); + pragma Assert (Check_Signature (Typ_Tag, Must_Be_Primary_DT)); + Pos := TSD (Obj_Tag).Idepth - TSD (Typ_Tag).Idepth; return Pos >= 0 and then TSD (Obj_Tag).Tags_Table (Pos) = Typ_Tag; end CW_Membership; @@ -353,23 +536,34 @@ package body Ada.Tags is -- Obj is in Iface'Class if Iface'Tag is found in the table of interfaces -- that are contained in the dispatch table referenced by Obj'Tag. - function IW_Membership - (This : System.Address; - T : Tag) return Boolean - is + function IW_Membership (This : System.Address; T : Tag) return Boolean is Curr_DT : constant Tag := To_Tag_Ptr (This).all; - Obj_Base : constant System.Address := This - Offset_To_Top (Curr_DT); - Obj_DT : constant Tag := To_Tag_Ptr (Obj_Base).all; - - Obj_TSD : constant Type_Specific_Data_Ptr := TSD (Obj_DT); - Last_Id : constant Natural := Obj_TSD.Idepth + Obj_TSD.Num_Interfaces; - Id : Natural; + Id : Natural; + Last_Id : Natural; + Obj_Base : System.Address; + Obj_DT : Tag; + Obj_TSD : Type_Specific_Data_Ptr; begin + pragma Assert + (Check_Signature (Curr_DT, Must_Be_Primary_Or_Secondary_DT)); + pragma Assert + (Check_Signature (T, Must_Be_Primary_Or_Interface)); + + Obj_Base := This - Offset_To_Top (Curr_DT); + Obj_DT := To_Tag_Ptr (Obj_Base).all; + + pragma Assert + (Check_Signature (Curr_DT, Must_Be_Primary_DT)); + + Obj_TSD := TSD (Obj_DT); + Last_Id := Obj_TSD.Idepth + Obj_TSD.Num_Interfaces; + if Obj_TSD.Num_Interfaces > 0 then -- Traverse the ancestor tags table plus the interface tags table. - -- The former part is required to give support to: + -- The former part is required for: + -- Iface_CW in Typ'Class Id := 0; @@ -391,9 +585,13 @@ package body Ada.Tags is -------------------- function Descendant_Tag (External : String; Ancestor : Tag) return Tag is - Int_Tag : constant Tag := Internal_Tag (External); + Int_Tag : Tag; begin + pragma Assert (Check_Signature (Ancestor, Must_Be_Primary_DT)); + Int_Tag := Internal_Tag (External); + pragma Assert (Check_Signature (Int_Tag, Must_Be_Primary_DT)); + if not Is_Descendant_At_Same_Level (Int_Tag, Ancestor) then raise Tag_Error; end if; @@ -413,6 +611,7 @@ package body Ada.Tags is raise Tag_Error; end if; + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Interface)); Result := TSD (T).Expanded_Name; return Result (1 .. Length (Result)); end Expanded_Name; @@ -423,11 +622,13 @@ package body Ada.Tags is function External_Tag (T : Tag) return String is Result : Cstring_Ptr; + begin if T = No_Tag then raise Tag_Error; end if; + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Interface)); Result := TSD (T).External_Tag; return Result (1 .. Length (Result)); @@ -439,6 +640,7 @@ package body Ada.Tags is function Get_Access_Level (T : Tag) return Natural is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); return TSD (T).Access_Level; end Get_Access_Level; @@ -446,11 +648,12 @@ package body Ada.Tags is -- Get_Entry_Index -- --------------------- - function Get_Entry_Index - (T : Tag; - Position : Positive) return Positive is + function Get_Entry_Index (T : Tag; Position : Positive) return Positive is + Index : constant Integer := Position - Default_Prim_Op_Count; begin - return TSD (T).Ent_Index_Table (Position - Default_Prim_Op_Count); + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + pragma Assert (Index > 0); + return SSD (T).SSD_Table (Index).Index; end Get_Entry_Index; ---------------------- @@ -459,17 +662,36 @@ package body Ada.Tags is function Get_External_Tag (T : Tag) return System.Address is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); return To_Address (TSD (T).External_Tag); end Get_External_Tag; + ---------------------- + -- Get_Num_Prim_Ops -- + ---------------------- + + function Get_Num_Prim_Ops (T : Tag) return Natural is + begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Secondary_DT)); + + if Is_Primary_DT (T) then + return TSD (T).Num_Prim_Ops; + else + return OSD (Interface_Tag (T)).Num_Prim_Ops; + end if; + end Get_Num_Prim_Ops; + ------------------------- -- Get_Prim_Op_Address -- ------------------------- function Get_Prim_Op_Address (T : Tag; - Position : Positive) return System.Address is + Position : Positive) return System.Address + is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Secondary_DT)); + pragma Assert (Check_Index (T, Position)); return T.Prims_Ptr (Position); end Get_Prim_Op_Address; @@ -479,17 +701,37 @@ package body Ada.Tags is function Get_Prim_Op_Kind (T : Tag; - Position : Positive) return Prim_Op_Kind is + Position : Positive) return Prim_Op_Kind + is + Index : constant Integer := Position - Default_Prim_Op_Count; begin - return TSD (T).POK_Table (Position - Default_Prim_Op_Count); + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + pragma Assert (Index > 0); + return SSD (T).SSD_Table (Index).Kind; end Get_Prim_Op_Kind; + ---------------------- + -- Get_Offset_Index -- + ---------------------- + + function Get_Offset_Index + (T : Interface_Tag; + Position : Positive) return Positive + is + Index : constant Integer := Position - Default_Prim_Op_Count; + begin + pragma Assert (Check_Signature (Tag (T), Must_Be_Secondary_DT)); + pragma Assert (Index > 0); + return OSD (T).OSD_Table (Index); + end Get_Offset_Index; + ------------------- -- Get_RC_Offset -- ------------------- function Get_RC_Offset (T : Tag) return SSE.Storage_Offset is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); return TSD (T).RC_Offset; end Get_RC_Offset; @@ -499,6 +741,7 @@ package body Ada.Tags is function Get_Remotely_Callable (T : Tag) return Boolean is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); return TSD (T).Remotely_Callable; end Get_Remotely_Callable; @@ -506,12 +749,12 @@ package body Ada.Tags is -- Inherit_DT -- ---------------- - procedure Inherit_DT - (Old_T : Tag; - New_T : Tag; - Entry_Count : Natural) - is + procedure Inherit_DT (Old_T : Tag; New_T : Tag; Entry_Count : Natural) is begin + pragma Assert (Check_Signature (Old_T, Must_Be_Primary_Or_Secondary_DT)); + pragma Assert (Check_Signature (New_T, Must_Be_Primary_Or_Secondary_DT)); + pragma Assert (Check_Size (Old_T, New_T, Entry_Count)); + if Old_T /= null then New_T.Prims_Ptr (1 .. Entry_Count) := Old_T.Prims_Ptr (1 .. Entry_Count); @@ -523,17 +766,22 @@ package body Ada.Tags is ----------------- procedure Inherit_TSD (Old_Tag : Tag; New_Tag : Tag) is - New_TSD_Ptr : constant Type_Specific_Data_Ptr := TSD (New_Tag); + New_TSD_Ptr : Type_Specific_Data_Ptr; Old_TSD_Ptr : Type_Specific_Data_Ptr; begin + pragma Assert (Check_Signature (New_Tag, Must_Be_Primary_Or_Interface)); + New_TSD_Ptr := TSD (New_Tag); + if Old_Tag /= null then + pragma Assert + (Check_Signature (Old_Tag, Must_Be_Primary_Or_Interface)); Old_TSD_Ptr := TSD (Old_Tag); New_TSD_Ptr.Idepth := Old_TSD_Ptr.Idepth + 1; New_TSD_Ptr.Num_Interfaces := Old_TSD_Ptr.Num_Interfaces; -- Copy the "table of ancestor tags" plus the "table of interfaces" - -- of the parent + -- of the parent. New_TSD_Ptr.Tags_Table (1 .. New_TSD_Ptr.Idepth + New_TSD_Ptr.Num_Interfaces) := @@ -557,7 +805,7 @@ package body Ada.Tags is begin -- Make a copy of the string representing the external tag with - -- a null at the end + -- a null at the end. Ext_Copy (External'Range) := External; Ext_Copy (Ext_Copy'Last) := ASCII.NUL; @@ -567,6 +815,7 @@ package body Ada.Tags is declare Msg1 : constant String := "unknown tagged type: "; Msg2 : String (1 .. Msg1'Length + External'Length); + begin Msg2 (1 .. Msg1'Length) := Msg1; Msg2 (Msg1'Length + 1 .. Msg1'Length + External'Length) := @@ -591,6 +840,20 @@ package body Ada.Tags is and then TSD (Descendant).Access_Level = TSD (Ancestor).Access_Level; end Is_Descendant_At_Same_Level; + ------------------- + -- Is_Primary_DT -- + ------------------- + + function Is_Primary_DT (T : Tag) return Boolean is + Offset_To_Top_Ptr : constant Storage_Offset_Ptr := + To_Storage_Offset_Ptr (To_Address (T) + - Offset_To_Signature); + Signature : constant Signature_Values := + To_Signature_Values (Offset_To_Top_Ptr.all); + begin + return Signature (2) = Primary_DT; + end Is_Primary_DT; + ------------ -- Length -- ------------ @@ -617,32 +880,45 @@ package body Ada.Tags is To_Storage_Offset_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size - DT_Offset_To_Top_Size); + begin return Offset_To_Top_Ptr.all; end Offset_To_Top; + --------- + -- OSD -- + --------- + + function OSD + (T : Interface_Tag) return Object_Specific_Data_Ptr + is + OSD_Ptr : Addr_Ptr; + + begin + OSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); + return To_Object_Specific_Data_Ptr (OSD_Ptr.all); + end OSD; + ----------------- -- Parent_Size -- ----------------- - type Acc_Size - is access function (A : System.Address) return Long_Long_Integer; - - function To_Acc_Size is new Unchecked_Conversion (System.Address, Acc_Size); - -- The profile of the implicitly defined _size primitive - function Parent_Size (Obj : System.Address; T : Tag) return SSE.Storage_Count is - Parent_Tag : constant Tag := TSD (T).Tags_Table (1); + Parent_Tag : Tag; -- The tag of the parent type through the dispatch table - F : constant Acc_Size := To_Acc_Size (Parent_Tag.Prims_Ptr (1)); + F : Acc_Size; -- Access to the _size primitive of the parent. We assume that it is - -- always in the first slot of the dispatch table + -- always in the first slot of the dispatch table. begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + Parent_Tag := TSD (T).Tags_Table (1); + F := To_Acc_Size (Parent_Tag.Prims_Ptr (1)); + -- Here we compute the size of the _parent field of the object return SSE.Storage_Count (F.all (Obj)); @@ -658,6 +934,8 @@ package body Ada.Tags is raise Tag_Error; end if; + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + -- The Parent_Tag of a root-level tagged type is defined to be No_Tag. -- The first entry in the Ancestors_Tags array will be null for such -- a type, but it's better to be explicit about returning No_Tag in @@ -674,20 +952,24 @@ package body Ada.Tags is -- Register_Interface_Tag -- ---------------------------- - procedure Register_Interface_Tag - (T : Tag; - Interface_T : Tag) - is - New_T_TSD : constant Type_Specific_Data_Ptr := TSD (T); + procedure Register_Interface_Tag (T : Tag; Interface_T : Tag) is + New_T_TSD : Type_Specific_Data_Ptr; Index : Natural; + begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + pragma Assert (Check_Signature (Interface_T, Must_Be_Interface)); + + New_T_TSD := TSD (T); + -- Check if the interface is already registered if New_T_TSD.Num_Interfaces > 0 then declare - Id : Natural := New_T_TSD.Idepth + 1; - Last_Id : constant Natural := New_T_TSD.Idepth + Id : Natural := New_T_TSD.Idepth + 1; + Last_Id : constant Natural := New_T_TSD.Idepth + New_T_TSD.Num_Interfaces; + begin loop if New_T_TSD.Tags_Table (Id) = Interface_T then @@ -720,6 +1002,7 @@ package body Ada.Tags is procedure Set_Access_Level (T : Tag; Value : Natural) is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); TSD (T).Access_Level := Value; end Set_Access_Level; @@ -730,9 +1013,14 @@ package body Ada.Tags is procedure Set_Entry_Index (T : Tag; Position : Positive; - Value : Positive) is + Value : Positive) + is + Index : constant Integer := Position - Default_Prim_Op_Count; + begin - TSD (T).Ent_Index_Table (Position - Default_Prim_Op_Count) := Value; + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + pragma Assert (Index > 0); + SSD (T).SSD_Table (Index).Index := Value; end Set_Entry_Index; ----------------------- @@ -741,6 +1029,8 @@ package body Ada.Tags is procedure Set_Expanded_Name (T : Tag; Value : System.Address) is begin + pragma Assert + (Check_Signature (T, Must_Be_Primary_Or_Interface)); TSD (T).Expanded_Name := To_Cstring_Ptr (Value); end Set_Expanded_Name; @@ -750,9 +1040,41 @@ package body Ada.Tags is procedure Set_External_Tag (T : Tag; Value : System.Address) is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Interface)); TSD (T).External_Tag := To_Cstring_Ptr (Value); end Set_External_Tag; + ---------------------- + -- Set_Num_Prim_Ops -- + ---------------------- + + procedure Set_Num_Prim_Ops (T : Tag; Value : Natural) is + begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Secondary_DT)); + + if Is_Primary_DT (T) then + TSD (T).Num_Prim_Ops := Value; + else + OSD (Interface_Tag (T)).Num_Prim_Ops := Value; + end if; + end Set_Num_Prim_Ops; + + ---------------------- + -- Set_Offset_Index -- + ---------------------- + + procedure Set_Offset_Index + (T : Interface_Tag; + Position : Positive; + Value : Positive) + is + Index : constant Integer := Position - Default_Prim_Op_Count; + begin + pragma Assert (Check_Signature (Tag (T), Must_Be_Secondary_DT)); + pragma Assert (Index > 0); + OSD (T).OSD_Table (Index) := Value; + end Set_Offset_Index; + ----------------------- -- Set_Offset_To_Top -- ----------------------- @@ -766,9 +1088,22 @@ package body Ada.Tags is - DT_Typeinfo_Ptr_Size - DT_Offset_To_Top_Size); begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Secondary_DT)); Offset_To_Top_Ptr.all := Value; end Set_Offset_To_Top; + ------------- + -- Set_OSD -- + ------------- + + procedure Set_OSD (T : Interface_Tag; Value : System.Address) is + OSD_Ptr : Addr_Ptr; + begin + pragma Assert (Check_Signature (Tag (T), Must_Be_Secondary_DT)); + OSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); + OSD_Ptr.all := Value; + end Set_OSD; + ------------------------- -- Set_Prim_Op_Address -- ------------------------- @@ -776,8 +1111,11 @@ package body Ada.Tags is procedure Set_Prim_Op_Address (T : Tag; Position : Positive; - Value : System.Address) is + Value : System.Address) + is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Secondary_DT)); + pragma Assert (Check_Index (T, Position)); T.Prims_Ptr (Position) := Value; end Set_Prim_Op_Address; @@ -788,9 +1126,13 @@ package body Ada.Tags is procedure Set_Prim_Op_Kind (T : Tag; Position : Positive; - Value : Prim_Op_Kind) is + Value : Prim_Op_Kind) + is + Index : constant Integer := Position - Default_Prim_Op_Count; begin - TSD (T).POK_Table (Position - Default_Prim_Op_Count) := Value; + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + pragma Assert (Index > 0); + SSD (T).SSD_Table (Index).Kind := Value; end Set_Prim_Op_Kind; ------------------- @@ -799,6 +1141,7 @@ package body Ada.Tags is procedure Set_RC_Offset (T : Tag; Value : SSE.Storage_Offset) is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); TSD (T).RC_Offset := Value; end Set_RC_Offset; @@ -808,20 +1151,41 @@ package body Ada.Tags is procedure Set_Remotely_Callable (T : Tag; Value : Boolean) is begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); TSD (T).Remotely_Callable := Value; end Set_Remotely_Callable; ------------- + -- Set_SSD -- + ------------- + + procedure Set_SSD (T : Tag; Value : System.Address) is + begin + pragma Assert (Check_Signature (T, Must_Be_Primary_DT)); + TSD (T).SSD_Ptr := Value; + end Set_SSD; + + ------------- -- Set_TSD -- ------------- procedure Set_TSD (T : Tag; Value : System.Address) is - TSD_Ptr : constant Addr_Ptr := - To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); + TSD_Ptr : Addr_Ptr; begin + pragma Assert (Check_Signature (T, Must_Be_Primary_Or_Interface)); + TSD_Ptr := To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size); TSD_Ptr.all := Value; end Set_TSD; + --------- + -- SSD -- + --------- + + function SSD (T : Tag) return Select_Specific_Data_Ptr is + begin + return To_Select_Specific_Data_Ptr (TSD (T).SSD_Ptr); + end SSD; + ------------------ -- Typeinfo_Ptr -- ------------------ diff --git a/gcc/ada/a-tags.ads b/gcc/ada/a-tags.ads index 34d7d63b097..46e6c204167 100644 --- a/gcc/ada/a-tags.ads +++ b/gcc/ada/a-tags.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -53,31 +53,38 @@ package Ada.Tags is function Internal_Tag (External : String) return Tag; - function Descendant_Tag (External : String; Ancestor : Tag) return Tag; + function Descendant_Tag + (External : String; + Ancestor : Tag) return Tag; + pragma Ada_05 (Descendant_Tag); function Is_Descendant_At_Same_Level (Descendant : Tag; Ancestor : Tag) return Boolean; + pragma Ada_05 (Is_Descendant_At_Same_Level); function Parent_Tag (T : Tag) return Tag; + pragma Ada_05 (Parent_Tag); Tag_Error : exception; private + -- The following subprogram specifications are placed here instead of + -- the package body to see them from the frontend through rtsfind. --------------------------------------------------------------- -- Abstract Procedural Interface For The GNAT Dispatch Table -- --------------------------------------------------------------- -- GNAT's Dispatch Table format is customizable in order to match the - -- format used in another language. GNAT supports programs that use - -- two different dispatch table formats at the same time: the native - -- format that supports Ada 95 tagged types and which is described in - -- Ada.Tags, and a foreign format for types that are imported from some - -- other language (typically C++) which is described in Interfaces.CPP. - -- The runtime information kept for each tagged type is separated into - -- two objects: the Dispatch Table and the Type Specific Data record. - -- These two objects are allocated statically using the constants: + -- format used in another language. GNAT supports programs that use two + -- different dispatch table formats at the same time: the native format + -- that supports Ada 95 tagged types and which is described in Ada.Tags, + -- and a foreign format for types that are imported from some other + -- language (typically C++) which is described in Interfaces.CPP. The + -- runtime information kept for each tagged type is separated into two + -- objects: the Dispatch Table and the Type Specific Data record. These + -- two objects are allocated statically using the constants: -- DT Size = DT_Prologue_Size + Nb_Prim * DT_Entry_Size -- TSD Size = TSD_Prologue_Size + (1 + Idepth) * TSD_Entry_Size @@ -85,9 +92,9 @@ private -- where Nb_prim is the number of primitive operations of the given -- type and Idepth its inheritance depth. - -- The compiler generates calls to the following SET routines to - -- initialize those structures and uses the GET functions to - -- retreive the information when needed + -- In order to set or retrieve information from the Dispatch Table or + -- the Type Specific Data record, GNAT generates calls to Set_XXX or + -- Get_XXX routines, where XXX is the name of the field of interest. type Dispatch_Table; type Tag is access all Dispatch_Table; @@ -95,6 +102,19 @@ private No_Tag : constant Tag := null; + type Object_Specific_Data (Nb_Prim : Positive); + type Object_Specific_Data_Ptr is access all Object_Specific_Data; + -- Information associated with the secondary dispatch table of tagged-type + -- objects implementing abstract interfaces. + + type Select_Specific_Data (Nb_Prim : Positive); + type Select_Specific_Data_Ptr is access all Select_Specific_Data; + -- A table used to store the primitive operation kind and entry index of + -- primitive subprograms of a type that implements a limited interface. + -- The Select Specific Data table resides in the Type Specific Data of a + -- type. This construct is used in the handling of dispatching triggers + -- in select statements. + type Type_Specific_Data; type Type_Specific_Data_Ptr is access all Type_Specific_Data; @@ -109,17 +129,16 @@ private POK_Protected_Function, POK_Protected_Procedure, POK_Task_Entry, + POK_Task_Function, POK_Task_Procedure); - -- Number of predefined primitive operations added by the Expander - -- for a tagged type. It is utilized for indexing in the two auxiliary - -- tables used for dispatching asynchronous, conditional and timed - -- selects. In order to be space efficien, indexing is performed by - -- subtracting this constant value from the provided position in the - -- auxiliary tables. - -- This value is mirrored from Exp_Disp.ads. - - Default_Prim_Op_Count : constant Positive := 14; + Default_Prim_Op_Count : constant Positive := 15; + -- Number of predefined primitive operations added by the Expander for a + -- tagged type. It is utilized for indexing in the two auxiliary tables + -- used for dispatching asynchronous, conditional and timed selects. In + -- order to be space efficient, indexing is performed by subtracting this + -- constant value from the provided position in the auxiliary tables (must + -- match Exp_Disp.Default_Prim_Op_Count). package SSE renames System.Storage_Elements; @@ -127,9 +146,7 @@ private -- Given the tag of an object and the tag associated to a type, return -- true if Obj is in Typ'Class. - function IW_Membership - (This : System.Address; - T : Tag) return Boolean; + function IW_Membership (This : System.Address; T : Tag) return Boolean; -- Ada 2005 (AI-251): General routine that checks if a given object -- implements a tagged type. Its common usage is to check if Obj is in -- Iface'Class, but it is also used to check if a class-wide interface @@ -147,22 +164,27 @@ private -- Given the tag associated with a type, returns the accessibility level -- of the type. - function Get_Entry_Index - (T : Tag; - Position : Positive) return Positive; + function Get_Entry_Index (T : Tag; Position : Positive) return Positive; -- Return a primitive operation's entry index (if entry) given a dispatch -- table T and a position of a primitive operation in T. function Get_External_Tag (T : Tag) return System.Address; -- Retrieve the address of a null terminated string containing - -- the external name + -- the external name. + + function Get_Offset_Index + (T : Interface_Tag; + Position : Positive) return Positive; + -- Given a pointer to a secondary dispatch table (T) and a position of an + -- operation in the DT, retrieve the corresponding operation's position in + -- the primary dispatch table from the Offset Specific Data table of T. function Get_Prim_Op_Address (T : Tag; Position : Positive) return System.Address; -- Given a pointer to a dispatch table (T) and a position in the DT -- this function returns the address of the virtual function stored - -- in it (used for dispatching calls) + -- in it (used for dispatching calls). function Get_Prim_Op_Kind (T : Tag; @@ -182,10 +204,7 @@ private function Get_Remotely_Callable (T : Tag) return Boolean; -- Return the value previously set by Set_Remotely_Callable - procedure Inherit_DT - (Old_T : Tag; - New_T : Tag; - Entry_Count : Natural); + procedure Inherit_DT (Old_T : Tag; New_T : Tag; Entry_Count : Natural); -- Entry point used to initialize the DT of a type knowing the tag -- of the direct ancestor and the number of primitive ops that are -- inherited (Entry_Count). @@ -193,21 +212,23 @@ private procedure Inherit_TSD (Old_Tag : Tag; New_Tag : Tag); -- Initialize the TSD of a type knowing the tag of the direct ancestor + function OSD (T : Interface_Tag) return Object_Specific_Data_Ptr; + -- Ada 2005 (AI-251): Given a pointer T to a secondary dispatch table, + -- retrieve the address of the record containing the Objet Specific + -- Data table. + function Parent_Size (Obj : System.Address; T : Tag) return SSE.Storage_Count; - -- Computes the size the ancestor part of a tagged extension object - -- whose address is 'obj' by calling the indirectly _size function of - -- the ancestor. The ancestor is the parent of the type represented by - -- tag T. This function assumes that _size is always in slot 1 of - -- the dispatch table. + -- Computes the size the ancestor part of a tagged extension object whose + -- address is 'obj' by calling indirectly the ancestor _size function. The + -- ancestor is the parent of the type represented by tag T. This function + -- assumes that _size is always in slot one of the dispatch table. pragma Export (Ada, Parent_Size, "ada__tags__parent_size"); -- This procedure is used in s-finimp and is thus exported manually - procedure Register_Interface_Tag - (T : Tag; - Interface_T : Tag); + procedure Register_Interface_Tag (T : Tag; Interface_T : Tag); -- Ada 2005 (AI-251): Used to initialize the table of interfaces -- implemented by a type. Required to give support to IW_Membership. @@ -215,13 +236,21 @@ private -- Insert the Tag and its associated external_tag in a table for the -- sake of Internal_Tag - procedure Set_Entry_Index - (T : Tag; - Position : Positive; - Value : Positive); + procedure Set_Entry_Index (T : Tag; Position : Positive; Value : Positive); -- Set the entry index of a primitive operation in T's TSD table indexed -- by Position. + procedure Set_Num_Prim_Ops (T : Tag; Value : Natural); + -- Set the number of primitive operations in the dispatch table of T. This + -- is used for debugging purposes. + + procedure Set_Offset_Index + (T : Interface_Tag; + Position : Positive; + Value : Positive); + -- Set the offset value of a primitive operation in a secondary dispatch + -- table denoted by T, indexed by Position. + procedure Set_Offset_To_Top (T : Tag; Value : System.Storage_Elements.Storage_Offset); @@ -230,6 +259,10 @@ private -- is always 0; in secondary dispatch tables this is the offset to the base -- of the enclosing type. + procedure Set_OSD (T : Interface_Tag; Value : System.Address); + -- Given a pointer T to a secondary dispatch table, store the pointer to + -- the record containing the Object Specific Data generated by GNAT. + procedure Set_Prim_Op_Address (T : Tag; Position : Positive; @@ -245,6 +278,10 @@ private -- Set the kind of a primitive operation in T's TSD table indexed by -- Position. + procedure Set_SSD (T : Tag; Value : System.Address); + -- Given a pointer T to a dispatch Table, stores the pointer to the record + -- containing the Select Specific Data generated by GNAT. + procedure Set_TSD (T : Tag; Value : System.Address); -- Given a pointer T to a dispatch Table, stores the address of the record -- containing the Type Specific Data generated by GNAT. @@ -269,15 +306,24 @@ private -- Set to true if the type has been declared in a context described -- in E.4 (18). + function SSD (T : Tag) return Select_Specific_Data_Ptr; + -- Given a pointer T to a dispatch Table, retrieves the address of the + -- record containing the Select Specific Data in T's TSD. + function TSD (T : Tag) return Type_Specific_Data_Ptr; - -- Given a pointer T to a dispatch Table, retreives the address of the - -- record containing the Type Specific Data generated by GNAT + -- Given a pointer T to a dispatch Table, retrieves the address of the + -- record containing the Type Specific Data generated by GNAT. DT_Prologue_Size : constant SSE.Storage_Count := SSE.Storage_Count - (2 * (Standard'Address_Size / System.Storage_Unit)); + (3 * (Standard'Address_Size / System.Storage_Unit)); -- Size of the first part of the dispatch table + DT_Signature_Size : constant SSE.Storage_Count := + SSE.Storage_Count + (Standard'Address_Size / System.Storage_Unit); + -- Size of the Signature field of the dispatch table + DT_Offset_To_Top_Size : constant SSE.Storage_Count := SSE.Storage_Count (Standard'Address_Size / System.Storage_Unit); @@ -295,7 +341,7 @@ private TSD_Prologue_Size : constant SSE.Storage_Count := SSE.Storage_Count - (8 * (Standard'Address_Size / System.Storage_Unit)); + (10 * (Standard'Address_Size / System.Storage_Unit)); -- Size of the first part of the type specific data TSD_Entry_Size : constant SSE.Storage_Count := @@ -308,22 +354,57 @@ private -- of this type are declared with a dummy size of 1, the actual size -- depending on the number of primitive operations. - -- Unchecked Conversions for Tag and TSD + type Signature_Kind is + (Unknown, + Valid_Signature, + Primary_DT, + Secondary_DT, + Abstract_Interface); + for Signature_Kind'Size use 8; + -- Kind of signature found in the header of the dispatch table. These + -- signatures are generated by the frontend and are used by the Check_XXX + -- routines to ensure that the kind of dispatch table managed by each of + -- the routines in this package is correct. This additional check is only + -- performed with this run-time package is compiled with assertions enabled + + -- The signature is a sequence of two bytes. The first byte must have the + -- value Valid_Signature, and the second byte must have a value in the + -- range Primary_DT .. Abstract_Interface. The Unknown value is used by + -- the Check_XXX routines to indicate that the signature is wrong. + + -- Unchecked Conversions + + type Addr_Ptr is access System.Address; + type Tag_Ptr is access Tag; + + type Signature_Values is + array (1 .. DT_Signature_Size) of Signature_Kind; + -- Type used to see the signature as a sequence of Signature_Kind values + + function To_Addr_Ptr is + new Unchecked_Conversion (System.Address, Addr_Ptr); function To_Type_Specific_Data_Ptr is new Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr); function To_Address is - new Unchecked_Conversion (Type_Specific_Data_Ptr, System.Address); + new Unchecked_Conversion (Interface_Tag, System.Address); function To_Address is new Unchecked_Conversion (Tag, System.Address); - type Addr_Ptr is access System.Address; - type Tag_Ptr is access Tag; + function To_Address is + new Unchecked_Conversion (Type_Specific_Data_Ptr, System.Address); - function To_Addr_Ptr is - new Unchecked_Conversion (System.Address, Addr_Ptr); + function To_Object_Specific_Data_Ptr is + new Unchecked_Conversion (System.Address, Object_Specific_Data_Ptr); + + function To_Select_Specific_Data_Ptr is + new Unchecked_Conversion (System.Address, Select_Specific_Data_Ptr); + + function To_Signature_Values is + new Unchecked_Conversion (System.Storage_Elements.Storage_Offset, + Signature_Values); function To_Tag_Ptr is new Unchecked_Conversion (System.Address, Tag_Ptr); @@ -334,21 +415,32 @@ private pragma Inline_Always (CW_Membership); pragma Inline_Always (IW_Membership); pragma Inline_Always (Get_Access_Level); + pragma Inline_Always (Get_Entry_Index); + pragma Inline_Always (Get_Offset_Index); pragma Inline_Always (Get_Prim_Op_Address); + pragma Inline_Always (Get_Prim_Op_Kind); pragma Inline_Always (Get_RC_Offset); pragma Inline_Always (Get_Remotely_Callable); pragma Inline_Always (Inherit_DT); pragma Inline_Always (Inherit_TSD); + pragma Inline_Always (OSD); pragma Inline_Always (Register_Interface_Tag); pragma Inline_Always (Register_Tag); pragma Inline_Always (Set_Access_Level); + pragma Inline_Always (Set_Entry_Index); pragma Inline_Always (Set_Expanded_Name); pragma Inline_Always (Set_External_Tag); + pragma Inline_Always (Set_Num_Prim_Ops); + pragma Inline_Always (Set_Offset_Index); pragma Inline_Always (Set_Offset_To_Top); pragma Inline_Always (Set_Prim_Op_Address); + pragma Inline_Always (Set_Prim_Op_Kind); pragma Inline_Always (Set_RC_Offset); pragma Inline_Always (Set_Remotely_Callable); + pragma Inline_Always (Set_OSD); + pragma Inline_Always (Set_SSD); pragma Inline_Always (Set_TSD); + pragma Inline_Always (SSD); pragma Inline_Always (TSD); end Ada.Tags; diff --git a/gcc/ada/a-tasatt.adb b/gcc/ada/a-tasatt.adb index 5afab9eca4c..21c1e471367 100644 --- a/gcc/ada/a-tasatt.adb +++ b/gcc/ada/a-tasatt.adb @@ -7,7 +7,7 @@ -- B o d y -- -- -- -- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2005, Ada Core Technologies -- +-- Copyright (C) 1995-2005, AdaCore -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -56,10 +56,9 @@ -- attribute is a potential source of dangling references. -- When a task goes away, we want to be able to recover all the storage --- associated with its attributes. The Ada mechanism for this is --- finalization, via controlled attribute types. For this reason, the ARM --- requires finalization of attribute values when the associated task --- terminates. +-- associated with its attributes. The Ada mechanism for this is finalization, +-- via controlled attribute types. For this reason, the ARM requires +-- finalization of attribute values when the associated task terminates. -- This finalization must be triggered by the tasking runtime system, during -- termination of the task. Given the active set of instantiations of @@ -376,7 +375,6 @@ package body Ada.Task_Attributes is procedure Deallocate (P : in out Access_Node) is T : Access_Wrapper := To_Access_Wrapper (P.Wrapper); - begin Free (T); end Deallocate; diff --git a/gcc/ada/a-taside.adb b/gcc/ada/a-taside.adb index a63719d5cbe..88722ac9603 100644 --- a/gcc/ada/a-taside.adb +++ b/gcc/ada/a-taside.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-taside.ads b/gcc/ada/a-taside.ads index fcceff5de57..acef0f1375d 100644 --- a/gcc/ada/a-taside.ads +++ b/gcc/ada/a-taside.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-teioed.adb b/gcc/ada/a-teioed.adb index 86a3b7c12cd..b4280c370ad 100644 --- a/gcc/ada/a-teioed.adb +++ b/gcc/ada/a-teioed.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-textio.adb b/gcc/ada/a-textio.adb index dfd65574159..145eaf5563e 100644 --- a/gcc/ada/a-textio.adb +++ b/gcc/ada/a-textio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-textio.ads b/gcc/ada/a-textio.ads index dbb9a1ad519..50ba549285a 100644 --- a/gcc/ada/a-textio.ads +++ b/gcc/ada/a-textio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ticoau.adb b/gcc/ada/a-ticoau.adb index 4f6b1fbfdc3..9d543202377 100644 --- a/gcc/ada/a-ticoau.adb +++ b/gcc/ada/a-ticoau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ticoau.ads b/gcc/ada/a-ticoau.ads index 89dab7a40b7..c91804a0644 100644 --- a/gcc/ada/a-ticoau.ads +++ b/gcc/ada/a-ticoau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ticoio.adb b/gcc/ada/a-ticoio.adb index 858e6f2ae2c..f620945775a 100644 --- a/gcc/ada/a-ticoio.adb +++ b/gcc/ada/a-ticoio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tideau.adb b/gcc/ada/a-tideau.adb index 4bdb53c4157..82ed8492763 100644 --- a/gcc/ada/a-tideau.adb +++ b/gcc/ada/a-tideau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tideio.adb b/gcc/ada/a-tideio.adb index 8c5a1ceef6e..3f945025042 100644 --- a/gcc/ada/a-tideio.adb +++ b/gcc/ada/a-tideio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tienau.adb b/gcc/ada/a-tienau.adb index d7fdc3025ae..3e6506cfac7 100644 --- a/gcc/ada/a-tienau.adb +++ b/gcc/ada/a-tienau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tienio.adb b/gcc/ada/a-tienio.adb index 769dda424c3..4d1bdedd44c 100644 --- a/gcc/ada/a-tienio.adb +++ b/gcc/ada/a-tienio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tifiio.adb b/gcc/ada/a-tifiio.adb index 6a06f8be7dc..6b612a42f90 100644 --- a/gcc/ada/a-tifiio.adb +++ b/gcc/ada/a-tifiio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tiflio.adb b/gcc/ada/a-tiflio.adb index 29f8a9182d4..3961a65f1c8 100644 --- a/gcc/ada/a-tiflio.adb +++ b/gcc/ada/a-tiflio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tigeau.adb b/gcc/ada/a-tigeau.adb index d9474b40e0a..425011c764c 100644 --- a/gcc/ada/a-tigeau.adb +++ b/gcc/ada/a-tigeau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tigeau.ads b/gcc/ada/a-tigeau.ads index 7e0b35cc806..3803e9a2385 100644 --- a/gcc/ada/a-tigeau.ads +++ b/gcc/ada/a-tigeau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tiinau.adb b/gcc/ada/a-tiinau.adb index 75c006ab1fd..e5f24e32d12 100644 --- a/gcc/ada/a-tiinau.adb +++ b/gcc/ada/a-tiinau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-tiinio.adb b/gcc/ada/a-tiinio.adb index c172cbbad27..ea8b397b47f 100644 --- a/gcc/ada/a-tiinio.adb +++ b/gcc/ada/a-tiinio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-timoau.adb b/gcc/ada/a-timoau.adb index a0fad033887..e23ea309601 100644 --- a/gcc/ada/a-timoau.adb +++ b/gcc/ada/a-timoau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-timoio.adb b/gcc/ada/a-timoio.adb index e4ca508ed47..afb9b5db85d 100644 --- a/gcc/ada/a-timoio.adb +++ b/gcc/ada/a-timoio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-timoio.ads b/gcc/ada/a-timoio.ads index c553c88a026..bdfa77d393a 100644 --- a/gcc/ada/a-timoio.ads +++ b/gcc/ada/a-timoio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1993-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1993-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-tiocst.ads b/gcc/ada/a-tiocst.ads index 670670baed8..8c5bafddb99 100644 --- a/gcc/ada/a-tiocst.ads +++ b/gcc/ada/a-tiocst.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-titest.adb b/gcc/ada/a-titest.adb index aec11a1c6a4..98f9c0b00df 100644 --- a/gcc/ada/a-titest.adb +++ b/gcc/ada/a-titest.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wichun.adb b/gcc/ada/a-wichun.adb index 0c3cf519dd4..f0ca9e093fe 100755 --- a/gcc/ada/a-wichun.adb +++ b/gcc/ada/a-wichun.adb @@ -4,9 +4,9 @@ -- -- -- A D A . W I D E _ C H A R A C T E R T S . U N I C O D E -- -- -- --- B o d y -- +-- B o d y -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wichun.ads b/gcc/ada/a-wichun.ads index 26da25e8f7e..b112a61b3ba 100755 --- a/gcc/ada/a-wichun.ads +++ b/gcc/ada/a-wichun.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-witeio.adb b/gcc/ada/a-witeio.adb index 073319239cf..7071df138c2 100644 --- a/gcc/ada/a-witeio.adb +++ b/gcc/ada/a-witeio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-witeio.ads b/gcc/ada/a-witeio.ads index bb024f46945..9430187ca98 100644 --- a/gcc/ada/a-witeio.ads +++ b/gcc/ada/a-witeio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-wtcoau.adb b/gcc/ada/a-wtcoau.adb index 655948ec58d..c567b04c880 100644 --- a/gcc/ada/a-wtcoau.adb +++ b/gcc/ada/a-wtcoau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtcoau.ads b/gcc/ada/a-wtcoau.ads index f169a4514c3..de9bb7f6281 100644 --- a/gcc/ada/a-wtcoau.ads +++ b/gcc/ada/a-wtcoau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtcoio.adb b/gcc/ada/a-wtcoio.adb index 510b09d3a3d..eedbfc0ee25 100644 --- a/gcc/ada/a-wtcoio.adb +++ b/gcc/ada/a-wtcoio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtcstr.ads b/gcc/ada/a-wtcstr.ads index 7f89f53b525..f2b80a41d9d 100644 --- a/gcc/ada/a-wtcstr.ads +++ b/gcc/ada/a-wtcstr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtdeau.adb b/gcc/ada/a-wtdeau.adb index 9dfca970ce2..bffe3c53f32 100644 --- a/gcc/ada/a-wtdeau.adb +++ b/gcc/ada/a-wtdeau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtdeio.adb b/gcc/ada/a-wtdeio.adb index 3d611ee479b..376e7f72440 100644 --- a/gcc/ada/a-wtdeio.adb +++ b/gcc/ada/a-wtdeio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtedit.adb b/gcc/ada/a-wtedit.adb index 7f10a6e1f3b..b4736232310 100644 --- a/gcc/ada/a-wtedit.adb +++ b/gcc/ada/a-wtedit.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtedit.ads b/gcc/ada/a-wtedit.ads index eff8fbd942c..f275f8052de 100644 --- a/gcc/ada/a-wtedit.ads +++ b/gcc/ada/a-wtedit.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-wtenau.adb b/gcc/ada/a-wtenau.adb index 9f60e29ac15..4a231e52595 100644 --- a/gcc/ada/a-wtenau.adb +++ b/gcc/ada/a-wtenau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtenio.adb b/gcc/ada/a-wtenio.adb index d44f394c371..fd40df538e6 100644 --- a/gcc/ada/a-wtenio.adb +++ b/gcc/ada/a-wtenio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtfiio.adb b/gcc/ada/a-wtfiio.adb index 00130d92bff..405f17d15ad 100644 --- a/gcc/ada/a-wtfiio.adb +++ b/gcc/ada/a-wtfiio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtflio.adb b/gcc/ada/a-wtflio.adb index 71108d256ef..1d331d41f37 100644 --- a/gcc/ada/a-wtflio.adb +++ b/gcc/ada/a-wtflio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtgeau.adb b/gcc/ada/a-wtgeau.adb index 03dc7b0df56..c020589ee8c 100644 --- a/gcc/ada/a-wtgeau.adb +++ b/gcc/ada/a-wtgeau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtinau.adb b/gcc/ada/a-wtinau.adb index 7ffe9ea1cae..1d51e0f0e88 100644 --- a/gcc/ada/a-wtinau.adb +++ b/gcc/ada/a-wtinau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtinio.adb b/gcc/ada/a-wtinio.adb index e187bb4e3d8..deb3a519040 100644 --- a/gcc/ada/a-wtinio.adb +++ b/gcc/ada/a-wtinio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtmoau.adb b/gcc/ada/a-wtmoau.adb index 1ae6a5ec06f..0a9dca44c7a 100644 --- a/gcc/ada/a-wtmoau.adb +++ b/gcc/ada/a-wtmoau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wtmoio.adb b/gcc/ada/a-wtmoio.adb index 10225152104..e9bf8775367 100644 --- a/gcc/ada/a-wtmoio.adb +++ b/gcc/ada/a-wtmoio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-wttest.adb b/gcc/ada/a-wttest.adb index 5c3d1c8f3dc..536395d18d9 100644 --- a/gcc/ada/a-wttest.adb +++ b/gcc/ada/a-wttest.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-zchuni.adb b/gcc/ada/a-zchuni.adb index c3c05288c83..bfeeedfd8e4 100755 --- a/gcc/ada/a-zchuni.adb +++ b/gcc/ada/a-zchuni.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-zchuni.ads b/gcc/ada/a-zchuni.ads index c93ec754ac1..ddd3a390a91 100755 --- a/gcc/ada/a-zchuni.ads +++ b/gcc/ada/a-zchuni.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztcoau.adb b/gcc/ada/a-ztcoau.adb index e899a821593..8d7b1310f33 100644 --- a/gcc/ada/a-ztcoau.adb +++ b/gcc/ada/a-ztcoau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztcoau.ads b/gcc/ada/a-ztcoau.ads index 7e175dfe9cc..d7ee61281a9 100644 --- a/gcc/ada/a-ztcoau.ads +++ b/gcc/ada/a-ztcoau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztcoio.adb b/gcc/ada/a-ztcoio.adb index 8661f35eed4..97e58a18a92 100644 --- a/gcc/ada/a-ztcoio.adb +++ b/gcc/ada/a-ztcoio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztcstr.adb b/gcc/ada/a-ztcstr.adb index 9f0f0a5d967..f6b23d7b8a2 100644 --- a/gcc/ada/a-ztcstr.adb +++ b/gcc/ada/a-ztcstr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztcstr.ads b/gcc/ada/a-ztcstr.ads index 92be2015eb8..6d6ed73f2fd 100644 --- a/gcc/ada/a-ztcstr.ads +++ b/gcc/ada/a-ztcstr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztdeau.adb b/gcc/ada/a-ztdeau.adb index a5be8471d6d..b6b9b94c440 100644 --- a/gcc/ada/a-ztdeau.adb +++ b/gcc/ada/a-ztdeau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztdeau.ads b/gcc/ada/a-ztdeau.ads index 3769bd24c6a..ba9ffcb42d3 100644 --- a/gcc/ada/a-ztdeau.ads +++ b/gcc/ada/a-ztdeau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztdeio.adb b/gcc/ada/a-ztdeio.adb index af2240ab861..796dfc80456 100644 --- a/gcc/ada/a-ztdeio.adb +++ b/gcc/ada/a-ztdeio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ ------------------------------------------------------------------------------ with Ada.Wide_Wide_Text_IO.Decimal_Aux; + with System.WCh_Con; use System.WCh_Con; with System.WCh_WtS; use System.WCh_WtS; diff --git a/gcc/ada/a-ztdeio.ads b/gcc/ada/a-ztdeio.ads index 3b435edb34a..73d6c23baa5 100644 --- a/gcc/ada/a-ztdeio.ads +++ b/gcc/ada/a-ztdeio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ztedit.adb b/gcc/ada/a-ztedit.adb index 57478426e8b..f763bdc3920 100644 --- a/gcc/ada/a-ztedit.adb +++ b/gcc/ada/a-ztedit.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztedit.ads b/gcc/ada/a-ztedit.ads index 028265339b0..3a2f49a4d71 100644 --- a/gcc/ada/a-ztedit.ads +++ b/gcc/ada/a-ztedit.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ztenau.ads b/gcc/ada/a-ztenau.ads index 9555076320a..6683be974df 100644 --- a/gcc/ada/a-ztenau.ads +++ b/gcc/ada/a-ztenau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztenio.adb b/gcc/ada/a-ztenio.adb index 24bc6d6b6a3..4b95295c563 100644 --- a/gcc/ada/a-ztenio.adb +++ b/gcc/ada/a-ztenio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztenio.ads b/gcc/ada/a-ztenio.ads index 05ceacef735..5de801f5413 100644 --- a/gcc/ada/a-ztenio.ads +++ b/gcc/ada/a-ztenio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ztexio.adb b/gcc/ada/a-ztexio.adb index 8530e5a9a85..2742255b9ff 100644 --- a/gcc/ada/a-ztexio.adb +++ b/gcc/ada/a-ztexio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztexio.ads b/gcc/ada/a-ztexio.ads index 7c465ab249d..000d104e16b 100644 --- a/gcc/ada/a-ztexio.ads +++ b/gcc/ada/a-ztexio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ztfiio.adb b/gcc/ada/a-ztfiio.adb index 1670e5b3653..db12fc82fbb 100644 --- a/gcc/ada/a-ztfiio.adb +++ b/gcc/ada/a-ztfiio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztfiio.ads b/gcc/ada/a-ztfiio.ads index 0e606daab86..2fc4fabfddf 100644 --- a/gcc/ada/a-ztfiio.ads +++ b/gcc/ada/a-ztfiio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ztflau.adb b/gcc/ada/a-ztflau.adb index 9d550c93d74..11ca1a6b433 100644 --- a/gcc/ada/a-ztflau.adb +++ b/gcc/ada/a-ztflau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztflau.ads b/gcc/ada/a-ztflau.ads index fd6da730117..57c7fcdcefa 100644 --- a/gcc/ada/a-ztflau.ads +++ b/gcc/ada/a-ztflau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztflio.adb b/gcc/ada/a-ztflio.adb index 97368413b4f..bd8e535fcbd 100644 --- a/gcc/ada/a-ztflio.adb +++ b/gcc/ada/a-ztflio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztflio.ads b/gcc/ada/a-ztflio.ads index 1c9d80be7e1..32dafd198a1 100644 --- a/gcc/ada/a-ztflio.ads +++ b/gcc/ada/a-ztflio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-ztgeau.adb b/gcc/ada/a-ztgeau.adb index 3f2bf9ce52a..21b9608db80 100644 --- a/gcc/ada/a-ztgeau.adb +++ b/gcc/ada/a-ztgeau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztgeau.ads b/gcc/ada/a-ztgeau.ads index 4446bf53202..38a17cf70b0 100644 --- a/gcc/ada/a-ztgeau.ads +++ b/gcc/ada/a-ztgeau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztinau.adb b/gcc/ada/a-ztinau.adb index 8c8bf0a5ffe..74f84a02f73 100644 --- a/gcc/ada/a-ztinau.adb +++ b/gcc/ada/a-ztinau.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztinau.ads b/gcc/ada/a-ztinau.ads index 1a213d0e806..b37a9d1a7a8 100644 --- a/gcc/ada/a-ztinau.ads +++ b/gcc/ada/a-ztinau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztinio.adb b/gcc/ada/a-ztinio.adb index 98c42eb3958..8369edce3dd 100644 --- a/gcc/ada/a-ztinio.adb +++ b/gcc/ada/a-ztinio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztmoau.ads b/gcc/ada/a-ztmoau.ads index 2bce97573e8..057162993fc 100644 --- a/gcc/ada/a-ztmoau.ads +++ b/gcc/ada/a-ztmoau.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztmoio.adb b/gcc/ada/a-ztmoio.adb index 169b202c74b..8d97e8cdd92 100644 --- a/gcc/ada/a-ztmoio.adb +++ b/gcc/ada/a-ztmoio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/a-ztmoio.ads b/gcc/ada/a-ztmoio.ads index 91d1a536bc0..aeef4ceb50d 100644 --- a/gcc/ada/a-ztmoio.ads +++ b/gcc/ada/a-ztmoio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/a-zttest.adb b/gcc/ada/a-zttest.adb index 49c480c1c8f..fda7b924394 100644 --- a/gcc/ada/a-zttest.adb +++ b/gcc/ada/a-zttest.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 65fa75bb8c6..d73665be1da 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -195,6 +195,13 @@ struct vstring #define DIR_SEPARATOR '/' #endif +/* Check for cross-compilation */ +#ifdef CROSS_COMPILE +int __gnat_is_cross_compiler = 1; +#else +int __gnat_is_cross_compiler = 0; +#endif + char __gnat_dir_separator = DIR_SEPARATOR; char __gnat_path_separator = PATH_SEPARATOR; @@ -2535,8 +2542,10 @@ _flush_cache() #endif #if defined (CROSS_COMPILE) \ - || (! (defined (sparc) && defined (sun) && defined (__SVR4)) \ + || (! ((defined (sparc) || defined (i386)) && defined (sun) \ + && defined (__SVR4)) \ && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \ + && ! (defined (linux) && defined (__ia64__)) \ && ! defined (__FreeBSD__) \ && ! defined (__hpux__) \ && ! defined (__APPLE__) \ @@ -2545,9 +2554,9 @@ _flush_cache() && ! defined (__MINGW32__) \ && ! (defined (__mips) && defined (__sgi))) -/* Dummy function to satisfy g-trasym.o. Currently Solaris sparc, HP/UX, - GNU/Linux x86{_64}, Tru64 & Windows provide a non-dummy version of this - procedure in libaddr2line.a. */ +/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional + just above for a list of native platforms that provide a non-dummy + version of this procedure in libaddr2line.a. */ void convert_addresses (void *addrs ATTRIBUTE_UNUSED, @@ -2629,27 +2638,6 @@ __gnat_copy_attribs (char *from, char *to, int mode) #endif } -/* This function is installed in libgcc.a. */ -extern void __gnat_install_locks (void (*) (void), void (*) (void)); - -/* This function offers a hook for libgnarl to set the - locking subprograms for libgcc_eh. - This is only needed on OpenVMS, since other platforms use standard - --enable-threads=posix option, or similar. */ - -void -__gnatlib_install_locks (void (*lock) (void) ATTRIBUTE_UNUSED, - void (*unlock) (void) ATTRIBUTE_UNUSED) -{ -#if defined (IN_RTS) && defined (VMS) - __gnat_install_locks (lock, unlock); - /* There is a bootstrap path issue if adaint is build with this - symbol unresolved for the stage1 compiler. Since the compiler - does not use tasking, we simply make __gnatlib_install_locks - a no-op in this case. */ -#endif -} - int __gnat_lseek (int fd, long offset, int whence) { diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h index af83407e011..70ee1d0a594 100644 --- a/gcc/ada/adaint.h +++ b/gcc/ada/adaint.h @@ -6,7 +6,7 @@ * * * C Header File * * * - * Copyright (C) 1992-2005 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -164,10 +164,5 @@ extern void __gnat_plist_init (void); /* This function returns the version of GCC being used. Here it's GCC 3. */ extern int get_gcc_version (void); -/* This function offers a hook for libgnarl to set the - locking subprograms for libgcc_eh. */ -extern void __gnatlib_install_locks (void (*) (void), - void (*) (void)); - extern int __gnat_binder_supports_auto_init (void); extern int __gnat_sals_init_using_constructors (void); diff --git a/gcc/ada/ali-util.adb b/gcc/ada/ali-util.adb index b3e88cb5881..28819c743f3 100644 --- a/gcc/ada/ali-util.adb +++ b/gcc/ada/ali-util.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/ali.adb b/gcc/ada/ali.adb index c1ea6c46930..2bafec0295d 100644 --- a/gcc/ada/ali.adb +++ b/gcc/ada/ali.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1556,6 +1556,7 @@ package body ALI is Withs.Table (Withs.Last).Uname := Get_Name; Withs.Table (Withs.Last).Elaborate := False; Withs.Table (Withs.Last).Elaborate_All := False; + Withs.Table (Withs.Last).Elab_Desirable := False; Withs.Table (Withs.Last).Elab_All_Desirable := False; Withs.Table (Withs.Last).SAL_Interface := False; @@ -1571,12 +1572,24 @@ package body ALI is Withs.Table (Withs.Last).Sfile := Get_Name (Lower => True); Withs.Table (Withs.Last).Afile := Get_Name; - -- Scan out possible E, EA, and NE parameters + -- Scan out possible E, EA, ED, and AD parameters while not At_Eol loop Skip_Space; - if Nextc = 'E' then + if Nextc = 'A' then + P := P + 1; + Checkc ('D'); + Check_At_End_Of_Field; + + -- Store AD indication unless ignore required + + if not Ignore_ED then + Withs.Table (Withs.Last).Elab_All_Desirable := + True; + end if; + + elsif Nextc = 'E' then P := P + 1; if At_End_Of_Field then @@ -1594,7 +1607,7 @@ package body ALI is -- Store ED indication unless ignore required if not Ignore_ED then - Withs.Table (Withs.Last).Elab_All_Desirable := + Withs.Table (Withs.Last).Elab_Desirable := True; end if; end if; diff --git a/gcc/ada/ali.ads b/gcc/ada/ali.ads index 6582a1a19bc..f00220f59e6 100644 --- a/gcc/ada/ali.ads +++ b/gcc/ada/ali.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -473,6 +473,9 @@ package ALI is -- Indicates presence of EA parameter Elab_All_Desirable : Boolean; + -- Indicates presence of AD parameter + + Elab_Desirable : Boolean; -- Indicates presence of ED parameter SAL_Interface : Boolean := False; @@ -872,7 +875,7 @@ package ALI is -- switch description settings. -- -- Ignore_ED is normally False. If set to True, it indicates that - -- all ED (elaboration desirable) indications in the ALI file are + -- all AD/ED (elaboration desirable) indications in the ALI file are -- to be ignored. This parameter is obsolete now that the -f switch -- is removed from gnatbind, and should be removed ??? -- diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb index 20ea715f9b3..119cf62d080 100644 --- a/gcc/ada/atree.adb +++ b/gcc/ada/atree.adb @@ -1169,7 +1169,7 @@ package body Atree is function Copy_Elist_With_Replacement (Old_Elist : Elist_Id) return Elist_Id; - -- Called during second phase to copy element list doing replacements. + -- Called during second phase to copy element list doing replacements procedure Copy_Itype_With_Replacement (New_Itype : Entity_Id); -- Called during the second phase to process a copied Itype. The actual @@ -1178,7 +1178,7 @@ package body Atree is -- the copied Itype and copy them where necessary. function Copy_List_With_Replacement (Old_List : List_Id) return List_Id; - -- Called during second phase to copy list doing replacements. + -- Called during second phase to copy list doing replacements function Copy_Node_With_Replacement (Old_Node : Node_Id) return Node_Id; -- Called during second phase to copy node doing replacements @@ -1775,7 +1775,7 @@ package body Atree is Visit_Field (Union_Id (Scalar_Range (Old_Itype)), Old_Itype); elsif Has_Discriminants (Base_Type (Old_Itype)) then - -- ??? This should involve call to Visit_Field. + -- ??? This should involve call to Visit_Field Visit_Elist (Discriminant_Constraint (Old_Itype)); elsif Is_Array_Type (Old_Itype) then diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb index d6fd7cbed68..5453dd3ab30 100644 --- a/gcc/ada/back_end.adb +++ b/gcc/ada/back_end.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -141,7 +141,7 @@ package body Back_End is type Arg_Array is array (Nat) of BSP; type Arg_Array_Ptr is access Arg_Array; - -- Import flag_stack_check from toplev.c. + -- Import flag_stack_check from toplev.c flag_stack_check : Int; pragma Import (C, flag_stack_check); -- Import from toplev.c diff --git a/gcc/ada/binde.adb b/gcc/ada/binde.adb index 2985b90b9e9..acba7846418 100644 --- a/gcc/ada/binde.adb +++ b/gcc/ada/binde.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -72,11 +72,16 @@ package body Binde is -- elaborated before unit X is elaborated. The Elab_All_Link list -- traces the dependencies in the latter case. - Elab_Desirable, + Elab_All_Desirable, -- This is just like Elab_All, except that the elaborate all was not -- explicitly present in the source, but rather was created by the -- front end, which decided that it was "desirable". + Elab_Desirable, + -- This is just like Elab, except that the elaborate was not + -- explicitly present in the source, but rather was created by the + -- front end, which decided that it was "desirable". + Spec_First); -- After is a body, and Before is the corresponding spec @@ -249,7 +254,7 @@ package body Binde is Link : Elab_All_Id); -- Used to compute the transitive closure of elaboration links for an -- Elaborate_All pragma (Reason = Elab_All) or for an indication of - -- Elaborate_All_Desirable (Reason = Elab_Desirable). Unit After has + -- Elaborate_All_Desirable (Reason = Elab_All_Desirable). Unit After has -- a pragma Elaborate_All or the front end has determined that a reference -- probably requires Elaborate_All is required, and unit Before must be -- previously elaborated. First a link is built making sure that unit @@ -268,8 +273,7 @@ package body Binde is function Make_Elab_Entry (Unam : Unit_Name_Type; - Link : Elab_All_Id) - return Elab_All_Id; + Link : Elab_All_Id) return Elab_All_Id; -- Make an Elab_All_Entries table entry with the given Unam and Link function Unit_Id_Of (Uname : Unit_Name_Type) return Unit_Id; @@ -800,9 +804,9 @@ package body Binde is SL : Successor_Link renames Succ.Table (S); begin - -- Nothing to do if internal unit involved and no -de flag + -- Nothing to do if internal unit involved and no -da flag - if not Debug_Flag_E + if not Debug_Flag_A and then (Is_Internal_File_Name (Units.Table (SL.Before).Sfile) or else @@ -841,7 +845,7 @@ package body Binde is (" reason: pragma Elaborate_All in unit &", Info => True); - when Elab_Desirable => + when Elab_All_Desirable => Error_Msg_Output (" reason: implicit Elaborate_All in unit &", Info => True); @@ -850,6 +854,15 @@ package body Binde is (" recompile & with -gnatwl for full details", Info => True); + when Elab_Desirable => + Error_Msg_Output + (" reason: implicit Elaborate in unit &", + Info => True); + + Error_Msg_Output + (" recompile & with -gnatwl for full details", + Info => True); + when Spec_First => Error_Msg_Output (" reason: spec always elaborated before body", @@ -1092,7 +1105,7 @@ package body Binde is -- Now establish all the links we need Elab_All_Links - (Withed_Unit, U, Elab_Desirable, + (Withed_Unit, U, Elab_All_Desirable, Make_Elab_Entry (Withs.Table (W).Uname, No_Elab_All_Link)); @@ -1116,6 +1129,18 @@ package body Binde is (Corresponding_Body (Withed_Unit), U, Elab); end if; + -- Elaborate_Desirable case, for this we establish + -- the same links as above, but with a different reason. + + elsif Withs.Table (W).Elab_Desirable then + Build_Link (Withed_Unit, U, Withed); + + if Units.Table (Withed_Unit).Utype = Is_Spec then + Build_Link + (Corresponding_Body (Withed_Unit), + U, Elab_Desirable); + end if; + -- Case of normal WITH with no elaboration pragmas, just -- build the single link to the directly referenced unit @@ -1137,8 +1162,7 @@ package body Binde is function Make_Elab_Entry (Unam : Unit_Name_Type; - Link : Elab_All_Id) - return Elab_All_Id + Link : Elab_All_Id) return Elab_All_Id is begin Elab_All_Entries.Increment_Last; @@ -1153,7 +1177,6 @@ package body Binde is function Unit_Id_Of (Uname : Unit_Name_Type) return Unit_Id is Info : constant Int := Get_Name_Table_Info (Uname); - begin pragma Assert (Info /= 0 and then Unit_Id (Info) /= No_Unit_Id); return Unit_Id (Info); @@ -1172,12 +1195,20 @@ package body Binde is -- Determines if U is a waiting body, defined as a body which has -- not been elaborated, but whose spec has been elaborated. + --------------- + -- Body_Unit -- + --------------- + function Body_Unit (U : Unit_Id) return Boolean is begin return Units.Table (U).Utype = Is_Body or else Units.Table (U).Utype = Is_Body_Only; end Body_Unit; + ------------------ + -- Waiting_Body -- + ------------------ + function Waiting_Body (U : Unit_Id) return Boolean is begin return Units.Table (U).Utype = Is_Body and then @@ -1186,10 +1217,10 @@ package body Binde is -- Start of processing for Worse_Choice - -- Note: the checks here are applied in sequence, and the ordering is - -- significant (i.e. the more important criteria are applied first). - begin + -- Note: the checks here are applied in sequence, and the ordering is + -- significant (i.e. the more important criteria are applied first). + -- If either unit is internal, then use Better_Choice, since the -- language requires that predefined units not mess up in the choice -- of elaboration order, and for internal units, any problems are @@ -1277,7 +1308,7 @@ package body Binde is First_Name : Boolean := True; begin - if ST.Reason in Elab_All .. Elab_Desirable then + if ST.Reason in Elab_All .. Elab_All_Desirable then L := ST.Elab_All_Link; while L /= No_Elab_All_Link loop Nam := Elab_All_Entries.Table (L).Needed_By; diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index bdb864fe3ef..99625301d48 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -2442,7 +2442,7 @@ package body Bindgen is -- When building libraries, the version number of each unit can -- not be computed, since the binder does not know the full list -- of units. Therefore, the 'Version and 'Body_Version - -- attributes can not supported in this case. + -- attributes cannot supported in this case. return; end if; @@ -2510,7 +2510,7 @@ package body Bindgen is -- When building libraries, the version number of each unit can -- not be computed, since the binder does not know the full list -- of units. Therefore, the 'Version and 'Body_Version - -- attributes can not supported. + -- attributes cannot supported. return; end if; diff --git a/gcc/ada/bindusg.adb b/gcc/ada/bindusg.adb index 60deb26b374..667c982efb9 100644 --- a/gcc/ada/bindusg.adb +++ b/gcc/ada/bindusg.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -132,17 +132,17 @@ begin Write_Str ("renamed to xyzinit/final, implies -n"); Write_Eol; - -- Line for -M switch - - Write_Str (" -Mxyz Rename generated main program from main to xyz"); - Write_Eol; - -- Line for -m switch Write_Str (" -mnnn Limit number of detected error"); Write_Str ("s to nnn (1-999999)"); Write_Eol; + -- Line for -M switch + + Write_Str (" -Mxyz Rename generated main program from main to xyz"); + Write_Eol; + -- Line for -n switch Write_Str (" -n No Ada main program (foreign main routine)"); diff --git a/gcc/ada/butil.adb b/gcc/ada/butil.adb index a3f5288553f..1366313c4e6 100644 --- a/gcc/ada/butil.adb +++ b/gcc/ada/butil.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/butil.ads b/gcc/ada/butil.ads index b96b63b30c2..4ed78bb7223 100644 --- a/gcc/ada/butil.ads +++ b/gcc/ada/butil.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 8bb91714202..d53dcc07d8f 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -2481,13 +2481,11 @@ package body Checks is exit when N = Right_Opnd (P) and then Nkind (Left_Opnd (P)) = N_Op_Eq; - -- And/And then case, left operand must be inequality test. Note that - -- at this stage, the expander will have changed a/=b to not (a=b). + -- And/And then case, left operand must be inequality test elsif K = N_Op_And or else K = N_And_Then then exit when N = Right_Opnd (P) - and then Nkind (Left_Opnd (P)) = N_Op_Not - and then Nkind (Right_Opnd (Left_Opnd (P))) = N_Op_Eq; + and then Nkind (Left_Opnd (P)) = N_Op_Ne; end if; N := P; @@ -3259,15 +3257,32 @@ package body Checks is function Elaboration_Checks_Suppressed (E : Entity_Id) return Boolean is begin + -- The complication in this routine is that if we are in the dynamic + -- model of elaboration, we also check All_Checks, since All_Checks + -- does not set Elaboration_Check explicitly. + if Present (E) then if Kill_Elaboration_Checks (E) then return True; + elsif Checks_May_Be_Suppressed (E) then - return Is_Check_Suppressed (E, Elaboration_Check); + if Is_Check_Suppressed (E, Elaboration_Check) then + return True; + elsif Dynamic_Elaboration_Checks then + return Is_Check_Suppressed (E, All_Checks); + else + return False; + end if; end if; end if; - return Scope_Suppress (Elaboration_Check); + if Scope_Suppress (Elaboration_Check) then + return True; + elsif Dynamic_Elaboration_Checks then + return Scope_Suppress (All_Checks); + else + return False; + end if; end Elaboration_Checks_Suppressed; --------------------------- @@ -3690,6 +3705,15 @@ package body Checks is then return; + -- No check on a univeral real constant. The context will eventually + -- convert it to a machine number for some target type, or report an + -- illegality. + + elsif Nkind (Expr) = N_Real_Literal + and then Etype (Expr) = Universal_Real + then + return; + -- An annoying special case. If this is an out parameter of a scalar -- type, then the value is not going to be accessed, therefore it is -- inappropriate to do any validity check at the call site. @@ -3845,11 +3869,10 @@ package body Checks is then return Expr_Known_Valid (Expression (Expr)); - -- The result of any function call or operator is always considered - -- valid, since we assume the necessary checks are done by the call. - -- For operators on floating-point operations, we must also check - -- when the operation is the right-hand side of an assignment, or - -- is an actual in a call. + -- The result of any operator is always considered valid, since we + -- assume the necessary checks are done by the operator. For operators + -- on floating-point operations, we must also check when the operation + -- is the right-hand side of an assignment, or is an actual in a call. elsif Nkind (Expr) in N_Binary_Op or else Nkind (Expr) in N_Unary_Op @@ -3866,9 +3889,6 @@ package body Checks is return True; end if; - elsif Nkind (Expr) = N_Function_Call then - return True; - -- For all other cases, we do not know the expression is valid else diff --git a/gcc/ada/checks.ads b/gcc/ada/checks.ads index c16495dd1a2..168da4c25c0 100644 --- a/gcc/ada/checks.ads +++ b/gcc/ada/checks.ads @@ -247,7 +247,7 @@ package Checks is -- be discarded, even if they are not in the current statement range. procedure Kill_All_Checks; - -- This procedure kills all remembered checks. + -- This procedure kills all remembered checks ----------------------------- -- Length and Range Checks -- @@ -548,7 +548,7 @@ package Checks is -- If all possible stored values are valid, then any uninitialized -- value must be valid. - -- Literals, including enumeration literals, are clearly always valid. + -- Literals, including enumeration literals, are clearly always valid -- Constants are always assumed valid, with a validity check being -- performed on the initializing value where necessary to ensure that diff --git a/gcc/ada/cio.c b/gcc/ada/cio.c index c3fdde15bdd..6fba5a0b0cb 100644 --- a/gcc/ada/cio.c +++ b/gcc/ada/cio.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2005 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * diff --git a/gcc/ada/clean.adb b/gcc/ada/clean.adb index c70cec7ff1e..e5682d08b30 100644 --- a/gcc/ada/clean.adb +++ b/gcc/ada/clean.adb @@ -24,8 +24,6 @@ -- -- ------------------------------------------------------------------------------ -with Ada.Command_Line; use Ada.Command_Line; - with ALI; use ALI; with Csets; with Gnatvsn; @@ -45,6 +43,8 @@ with Snames; with Table; with Types; use Types; +with Ada.Command_Line; use Ada.Command_Line; + with GNAT.Directory_Operations; use GNAT.Directory_Operations; with GNAT.IO; use GNAT.IO; with GNAT.OS_Lib; use GNAT.OS_Lib; @@ -191,13 +191,17 @@ package body Clean is -- Delete a global archive or a fake library project archive and the -- dependency file, if they exist. - procedure Clean_Directory (Dir : Name_Id); - -- Delete all regular files in a library directory or in a library - -- interface dir. - procedure Clean_Executables; -- Do the cleaning work when no project file is specified + procedure Clean_Interface_Copy_Directory (Project : Project_Id); + -- Delete files in an interface coy directory directory: any file that is + -- a copy of a source of the project. + + procedure Clean_Library_Directory (Project : Project_Id); + -- Delete the library file in a library directory and any ALI file + -- of a source of the project in a library ALI directory. + procedure Clean_Project (Project : Project_Id); -- Do the cleaning work when a project file is specified. -- This procedure calls itself recursively when there are several @@ -241,6 +245,11 @@ package body Clean is -- Returns True iff Prj is an extension of Of_Project or if Of_Project is -- an extension of Prj. + function Ultimate_Extension_Of (Project : Project_Id) return Project_Id; + -- Returns either Project, if it is not extended by another project, or + -- the project that extends Project, directly or indirectly, and that is + -- not itself extended. Returns No_Project if Project is No_Project. + procedure Usage; -- Display the usage. -- If called several times, the usage is displayed only the first time. @@ -356,46 +365,6 @@ package body Clean is Change_Dir (Current_Dir); end Clean_Archive; - --------------------- - -- Clean_Directory -- - --------------------- - - procedure Clean_Directory (Dir : Name_Id) is - Directory : constant String := Get_Name_String (Dir); - Current : constant Dir_Name_Str := Get_Current_Dir; - - Direc : Dir_Type; - - Name : String (1 .. 200); - Last : Natural; - - begin - Change_Dir (Directory); - Open (Direc, "."); - - -- For each regular file in the directory, if switch -n has not been - -- specified, make it writable and delete the file. - - loop - Read (Direc, Name, Last); - exit when Last = 0; - - if Is_Regular_File (Name (1 .. Last)) then - if not Do_Nothing then - Set_Writable (Name (1 .. Last)); - end if; - - Delete (Directory, Name (1 .. Last)); - end if; - end loop; - - Close (Direc); - - -- Restore the initial working directory - - Change_Dir (Current); - end Clean_Directory; - ----------------------- -- Clean_Executables -- ----------------------- @@ -550,6 +519,242 @@ package body Clean is end loop; end Clean_Executables; + ------------------------------------ + -- Clean_Interface_Copy_Directory -- + ------------------------------------ + + procedure Clean_Interface_Copy_Directory (Project : Project_Id) is + Current : constant String := Get_Current_Dir; + Data : constant Project_Data := Project_Tree.Projects.Table (Project); + + Direc : Dir_Type; + + Name : String (1 .. 200); + Last : Natural; + + Delete_File : Boolean; + Unit : Unit_Data; + + begin + if Data.Library and then Data.Library_Src_Dir /= No_Name then + declare + Directory : constant String := + Get_Name_String (Data.Library_Src_Dir); + + begin + Change_Dir (Get_Name_String (Data.Library_Src_Dir)); + Open (Direc, "."); + + -- For each regular file in the directory, if switch -n has not + -- been specified, make it writable and delete the file if it is + -- a copy of a source of the project. + + loop + Read (Direc, Name, Last); + exit when Last = 0; + + if Is_Regular_File (Name (1 .. Last)) then + Canonical_Case_File_Name (Name (1 .. Last)); + Delete_File := False; + + -- Compare with source file names of the project + + for Index in 1 .. Unit_Table.Last (Project_Tree.Units) loop + Unit := Project_Tree.Units.Table (Index); + + if Ultimate_Extension_Of + (Unit.File_Names (Body_Part).Project) = Project + and then + Get_Name_String + (Unit.File_Names (Body_Part).Name) = + Name (1 .. Last) + then + Delete_File := True; + exit; + end if; + + if Ultimate_Extension_Of + (Unit.File_Names (Specification).Project) = Project + and then + Get_Name_String + (Unit.File_Names (Specification).Name) = + Name (1 .. Last) + then + Delete_File := True; + exit; + end if; + end loop; + + if Delete_File then + if not Do_Nothing then + Set_Writable (Name (1 .. Last)); + end if; + + Delete (Directory, Name (1 .. Last)); + end if; + end if; + end loop; + + Close (Direc); + + -- Restore the initial working directory + + Change_Dir (Current); + end; + end if; + end Clean_Interface_Copy_Directory; + + ----------------------------- + -- Clean_Library_Directory -- + ----------------------------- + + procedure Clean_Library_Directory (Project : Project_Id) is + Current : constant String := Get_Current_Dir; + Data : constant Project_Data := Project_Tree.Projects.Table (Project); + + Lib_Filename : constant String := Get_Name_String (Data.Library_Name); + DLL_Name : constant String := + DLL_Prefix & Lib_Filename & "." & DLL_Ext; + Archive_Name : constant String := + "lib" & Lib_Filename & "." & Archive_Ext; + Direc : Dir_Type; + + Name : String (1 .. 200); + Last : Natural; + + Delete_File : Boolean; + + begin + if Data.Library then + declare + Lib_Directory : constant String := + Get_Name_String (Data.Library_Dir); + Lib_ALI_Directory : constant String := + Get_Name_String (Data.Library_ALI_Dir); + + begin + Change_Dir (Lib_Directory); + Open (Direc, "."); + + -- For each regular file in the directory, if switch -n has not + -- been specified, make it writable and delete the file if it is + -- the library file. + + loop + Read (Direc, Name, Last); + exit when Last = 0; + + if Is_Regular_File (Name (1 .. Last)) then + Canonical_Case_File_Name (Name (1 .. Last)); + Delete_File := False; + + if (Data.Library_Kind = Static and then + Name (1 .. Last) = Archive_Name) + or else + ((Data.Library_Kind = Dynamic or else + Data.Library_Kind = Relocatable) + and then + Name (1 .. Last) = DLL_Name) + then + if not Do_Nothing then + Set_Writable (Name (1 .. Last)); + end if; + + Delete (Lib_Directory, Name (1 .. Last)); + exit; + end if; + end if; + end loop; + + Close (Direc); + + Change_Dir (Lib_ALI_Directory); + Open (Direc, "."); + + -- For each regular file in the directory, if switch -n has not + -- been specified, make it writable and delete the file if it is + -- any ALI file of a source of the project. + + loop + Read (Direc, Name, Last); + exit when Last = 0; + + if Is_Regular_File (Name (1 .. Last)) then + Canonical_Case_File_Name (Name (1 .. Last)); + Delete_File := False; + + if Last > 4 and then Name (Last - 3 .. Last) = ".ali" then + declare + Unit : Unit_Data; + begin + -- Compare with ALI file names of the project + + for + Index in 1 .. Unit_Table.Last (Project_Tree.Units) + loop + Unit := Project_Tree.Units.Table (Index); + + if Unit.File_Names (Body_Part).Project /= + No_Project + then + if Ultimate_Extension_Of + (Unit.File_Names (Body_Part).Project) = + Project + then + Get_Name_String + (Unit.File_Names (Body_Part).Name); + Name_Len := Name_Len - + File_Extension + (Name (1 .. Name_Len))'Length; + if Name_Buffer (1 .. Name_Len) = + Name (1 .. Last - 4) + then + Delete_File := True; + exit; + end if; + end if; + + elsif Ultimate_Extension_Of + (Unit.File_Names (Specification).Project) = + Project + then + Get_Name_String + (Unit.File_Names (Specification).Name); + Name_Len := Name_Len - + File_Extension + (Name (1 .. Name_Len))'Length; + + if Name_Buffer (1 .. Name_Len) = + Name (1 .. Last - 4) + then + Delete_File := True; + exit; + end if; + end if; + end loop; + end; + end if; + + if Delete_File then + if not Do_Nothing then + Set_Writable (Name (1 .. Last)); + end if; + + Delete (Lib_ALI_Directory, Name (1 .. Last)); + end if; + + end if; + end loop; + + Close (Direc); + + -- Restore the initial working directory + + Change_Dir (Current); + end; + end if; + end Clean_Library_Directory; + ------------------- -- Clean_Project -- ------------------- @@ -588,251 +793,271 @@ package body Clean is ("Cannot specify executable(s) for a Library Project File"); end if; - if Verbose_Mode then - Put ("Cleaning project """); - Put (Get_Name_String (Data.Name)); - Put_Line (""""); - end if; + -- Nothing to clean in an externally built project - -- Add project to the list of processed projects + if Data.Externally_Built then + if Verbose_Mode then + Put ("Nothing to do to clean externally built project """); + Put (Get_Name_String (Data.Name)); + Put_Line (""""); + end if; - Processed_Projects.Increment_Last; - Processed_Projects.Table (Processed_Projects.Last) := Project; + else + if Verbose_Mode then + Put ("Cleaning project """); + Put (Get_Name_String (Data.Name)); + Put_Line (""""); + end if; - if Data.Object_Directory /= No_Name then - declare - Obj_Dir : constant String := - Get_Name_String (Data.Object_Directory); + -- Add project to the list of processed projects - begin - Change_Dir (Obj_Dir); + Processed_Projects.Increment_Last; + Processed_Projects.Table (Processed_Projects.Last) := Project; - -- First, deal with Ada + if Data.Object_Directory /= No_Name then + declare + Obj_Dir : constant String := + Get_Name_String (Data.Object_Directory); - -- Look through the units to find those that are either immediate - -- sources or inherited sources of the project. + begin + Change_Dir (Obj_Dir); - if Data.Languages (Ada_Language_Index) then - for Unit in Unit_Table.First .. - Unit_Table.Last (Project_Tree.Units) - loop - U_Data := Project_Tree.Units.Table (Unit); - File_Name1 := No_Name; - File_Name2 := No_Name; + -- First, deal with Ada - -- If either the spec or the body is a source of the - -- project, check for the corresponding ALI file in the - -- object directory. + -- Look through the units to find those that are either + -- immediate sources or inherited sources of the project. + -- Extending projects may have no language specified, if + -- Source_Dirs or Source_Files is specified as an empty list, + -- so always look for Ada units in extending projects. - if In_Extension_Chain - (U_Data.File_Names (Body_Part).Project, Project) - or else - In_Extension_Chain - (U_Data.File_Names (Specification).Project, Project) - then - File_Name1 := U_Data.File_Names (Body_Part).Name; - Index1 := U_Data.File_Names (Body_Part).Index; - File_Name2 := U_Data.File_Names (Specification).Name; - Index2 := U_Data.File_Names (Specification).Index; - - -- If there is no body file name, then there may be only - -- a spec. - - if File_Name1 = No_Name then - File_Name1 := File_Name2; - Index1 := Index2; - File_Name2 := No_Name; - Index2 := 0; + if Data.Languages (Ada_Language_Index) + or else Data.Extends /= No_Project + then + for Unit in Unit_Table.First .. + Unit_Table.Last (Project_Tree.Units) + loop + U_Data := Project_Tree.Units.Table (Unit); + File_Name1 := No_Name; + File_Name2 := No_Name; + + -- If either the spec or the body is a source of the + -- project, check for the corresponding ALI file in the + -- object directory. + + if In_Extension_Chain + (U_Data.File_Names (Body_Part).Project, Project) + or else + In_Extension_Chain + (U_Data.File_Names (Specification).Project, Project) + then + File_Name1 := U_Data.File_Names (Body_Part).Name; + Index1 := U_Data.File_Names (Body_Part).Index; + File_Name2 := U_Data.File_Names (Specification).Name; + Index2 := U_Data.File_Names (Specification).Index; + + -- If there is no body file name, then there may be + -- only a spec. + + if File_Name1 = No_Name then + File_Name1 := File_Name2; + Index1 := Index2; + File_Name2 := No_Name; + Index2 := 0; + end if; end if; - end if; - -- If there is either a spec or a body, look for files - -- in the object directory. + -- If there is either a spec or a body, look for files + -- in the object directory. - if File_Name1 /= No_Name then - Lib_File := Osint.Lib_File_Name (File_Name1, Index1); + if File_Name1 /= No_Name then + Lib_File := Osint.Lib_File_Name (File_Name1, Index1); - declare - Asm : constant String := Assembly_File_Name (Lib_File); - ALI : constant String := ALI_File_Name (Lib_File); - Obj : constant String := Object_File_Name (Lib_File); - Adt : constant String := Tree_File_Name (Lib_File); - Deb : constant String := - Debug_File_Name (File_Name1); - Rep : constant String := - Repinfo_File_Name (File_Name1); - Del : Boolean := True; + declare + Asm : constant String := + Assembly_File_Name (Lib_File); + ALI : constant String := + ALI_File_Name (Lib_File); + Obj : constant String := + Object_File_Name (Lib_File); + Adt : constant String := + Tree_File_Name (Lib_File); + Deb : constant String := + Debug_File_Name (File_Name1); + Rep : constant String := + Repinfo_File_Name (File_Name1); + Del : Boolean := True; - begin - -- If the ALI file exists and is read-only, no file - -- is deleted. + begin + -- If the ALI file exists and is read-only, no file + -- is deleted. - if Is_Regular_File (ALI) then - if Is_Writable_File (ALI) then - Delete (Obj_Dir, ALI); + if Is_Regular_File (ALI) then + if Is_Writable_File (ALI) then + Delete (Obj_Dir, ALI); - else - Del := False; + else + Del := False; - if Verbose_Mode then - Put ('"'); - Put (Obj_Dir); + if Verbose_Mode then + Put ('"'); + Put (Obj_Dir); - if Obj_Dir (Obj_Dir'Last) /= + if Obj_Dir (Obj_Dir'Last) /= Dir_Separator - then - Put (Dir_Separator); - end if; + then + Put (Dir_Separator); + end if; - Put (ALI); - Put_Line (""" is read-only"); + Put (ALI); + Put_Line (""" is read-only"); + end if; end if; end if; - end if; - if Del then + if Del then - -- Object file + -- Object file - if Is_Regular_File (Obj) then - Delete (Obj_Dir, Obj); - end if; + if Is_Regular_File (Obj) then + Delete (Obj_Dir, Obj); + end if; - -- Assembly file + -- Assembly file - if Is_Regular_File (Asm) then - Delete (Obj_Dir, Asm); - end if; + if Is_Regular_File (Asm) then + Delete (Obj_Dir, Asm); + end if; - -- Tree file + -- Tree file - if Is_Regular_File (Adt) then - Delete (Obj_Dir, Adt); - end if; + if Is_Regular_File (Adt) then + Delete (Obj_Dir, Adt); + end if; - -- First expanded source file + -- First expanded source file - if Is_Regular_File (Deb) then - Delete (Obj_Dir, Deb); - end if; + if Is_Regular_File (Deb) then + Delete (Obj_Dir, Deb); + end if; - -- Repinfo file + -- Repinfo file - if Is_Regular_File (Rep) then - Delete (Obj_Dir, Rep); - end if; + if Is_Regular_File (Rep) then + Delete (Obj_Dir, Rep); + end if; - -- Second expanded source file - - if File_Name2 /= No_Name then - declare - Deb : constant String := - Debug_File_Name (File_Name2); - Rep : constant String := - Repinfo_File_Name (File_Name2); - begin - if Is_Regular_File (Deb) then - Delete (Obj_Dir, Deb); - end if; + -- Second expanded source file - if Is_Regular_File (Rep) then - Delete (Obj_Dir, Rep); - end if; - end; + if File_Name2 /= No_Name then + declare + Deb : constant String := + Debug_File_Name (File_Name2); + Rep : constant String := + Repinfo_File_Name (File_Name2); + + begin + if Is_Regular_File (Deb) then + Delete (Obj_Dir, Deb); + end if; + + if Is_Regular_File (Rep) then + Delete (Obj_Dir, Rep); + end if; + end; + end if; end if; - end if; - end; - end if; - end loop; - end if; + end; + end if; + end loop; + end if; - -- Check if a global archive and it dependency file could have - -- been created and, if they exist, delete them. + -- Check if a global archive and it dependency file could have + -- been created and, if they exist, delete them. - if Project = Main_Project and then not Data.Library then - Global_Archive := False; + if Project = Main_Project and then not Data.Library then + Global_Archive := False; - for Proj in Project_Table.First .. - Project_Table.Last (Project_Tree.Projects) - loop - if Project_Tree.Projects.Table + for Proj in Project_Table.First .. + Project_Table.Last (Project_Tree.Projects) + loop + if Project_Tree.Projects.Table (Proj).Other_Sources_Present - then - Global_Archive := True; - exit; - end if; - end loop; + then + Global_Archive := True; + exit; + end if; + end loop; - if Global_Archive then - Clean_Archive (Project); + if Global_Archive then + Clean_Archive (Project); + end if; end if; - end if; - - if Data.Other_Sources_Present then - -- There is non-Ada code: delete the object files and - -- the dependency files if they exist. + if Data.Other_Sources_Present then - Source_Id := Data.First_Other_Source; + -- There is non-Ada code: delete the object files and + -- the dependency files if they exist. - while Source_Id /= No_Other_Source loop - Source := - Project_Tree.Other_Sources.Table (Source_Id); + Source_Id := Data.First_Other_Source; + while Source_Id /= No_Other_Source loop + Source := + Project_Tree.Other_Sources.Table (Source_Id); - if Is_Regular_File + if Is_Regular_File (Get_Name_String (Source.Object_Name)) - then - Delete (Obj_Dir, Get_Name_String (Source.Object_Name)); - end if; + then + Delete (Obj_Dir, Get_Name_String (Source.Object_Name)); + end if; - if Is_Regular_File (Get_Name_String (Source.Dep_Name)) then - Delete (Obj_Dir, Get_Name_String (Source.Dep_Name)); - end if; + if + Is_Regular_File (Get_Name_String (Source.Dep_Name)) + then + Delete (Obj_Dir, Get_Name_String (Source.Dep_Name)); + end if; - Source_Id := Source.Next; - end loop; + Source_Id := Source.Next; + end loop; - -- If it is a library with only non Ada sources, delete - -- the fake archive and the dependency file, if they exist. + -- If it is a library with only non Ada sources, delete + -- the fake archive and the dependency file, if they exist. - if Data.Library - and then not Data.Languages (Ada_Language_Index) - then - Clean_Archive (Project); + if Data.Library + and then not Data.Languages (Ada_Language_Index) + then + Clean_Archive (Project); + end if; end if; - end if; - end; - end if; + end; + end if; - -- If this is a library project, clean the library directory, the - -- interface copy dir and, for a Stand-Alone Library, the binder - -- generated files of the library. + -- If this is a library project, clean the library directory, the + -- interface copy dir and, for a Stand-Alone Library, the binder + -- generated files of the library. - -- The directories are cleaned only if switch -c is not specified + -- The directories are cleaned only if switch -c is not specified - if Data.Library then - if not Compile_Only then - Clean_Directory (Data.Library_Dir); + if Data.Library then + if not Compile_Only then + Clean_Library_Directory (Project); + + if Data.Library_Src_Dir /= No_Name then + Clean_Interface_Copy_Directory (Project); + end if; + end if; - if Data.Library_Src_Dir /= No_Name - and then Data.Library_Src_Dir /= Data.Library_Dir + if Data.Standalone_Library and then + Data.Object_Directory /= No_Name then - Clean_Directory (Data.Library_Src_Dir); + Delete_Binder_Generated_Files + (Get_Name_String (Data.Object_Directory), Data.Library_Name); end if; end if; - if Data.Standalone_Library and then - Data.Object_Directory /= No_Name - then - Delete_Binder_Generated_Files - (Get_Name_String (Data.Object_Directory), Data.Library_Name); + if Verbose_Mode then + New_Line; end if; end if; - if Verbose_Mode then - New_Line; - end if; - -- If switch -r is specified, call Clean_Project recursively for the -- imported projects and the project being extended. @@ -1610,6 +1835,26 @@ package body Clean is return Src & Tree_Suffix; end Tree_File_Name; + --------------------------- + -- Ultimate_Extension_Of -- + --------------------------- + + function Ultimate_Extension_Of (Project : Project_Id) return Project_Id is + Result : Project_Id := Project; + Data : Project_Data; + + begin + if Project /= No_Project then + loop + Data := Project_Tree.Projects.Table (Result); + exit when Data.Extended_By = No_Project; + Result := Data.Extended_By; + end loop; + end if; + + return Result; + end Ultimate_Extension_Of; + ----------- -- Usage -- ----------- diff --git a/gcc/ada/comperr.adb b/gcc/ada/comperr.adb index 7fc27860c5e..59d0bd28afc 100644 --- a/gcc/ada/comperr.adb +++ b/gcc/ada/comperr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -99,7 +99,7 @@ package body Comperr is -- Start of processing for Compiler_Abort begin - -- Prevent recursion through Compiler_Abort, e.g. via SIGSEGV. + -- Prevent recursion through Compiler_Abort, e.g. via SIGSEGV if Abort_In_Progress then Exit_Program (E_Abort); diff --git a/gcc/ada/csets.ads b/gcc/ada/csets.ads index 5b612b315c3..44ef68cee38 100644 --- a/gcc/ada/csets.ads +++ b/gcc/ada/csets.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/cstand.adb b/gcc/ada/cstand.adb index efd3237bf75..cbe596962e9 100644 --- a/gcc/ada/cstand.adb +++ b/gcc/ada/cstand.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/cuintp.c b/gcc/ada/cuintp.c index ff2dfb9027b..7adc057ce7c 100644 --- a/gcc/ada/cuintp.c +++ b/gcc/ada/cuintp.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2003 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005 Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -41,6 +41,7 @@ #include "stringt.h" #include "fe.h" #include "gigi.h" +#include "ada-tree.h" /* Universal integers are represented by the Uint type which is an index into the Uints_Ptr table containing Uint_Entry values. A Uint_Entry contains an @@ -74,22 +75,41 @@ UI_To_gnu (Uint Input, tree type) { tree gnu_ret; + /* We might have a TYPE with biased representation and be passed an + unbiased value that doesn't fit. We always use an unbiased type able + to hold any such possible value for intermediate computations, and + then rely on a conversion back to TYPE to perform the bias adjustment + when need be. */ + + int biased_type_p + = (TREE_CODE (type) == INTEGER_TYPE + && TYPE_BIASED_REPRESENTATION_P (type)); + + tree comp_type = biased_type_p ? get_base_type (type) : type; + if (Input <= Uint_Direct_Last) - gnu_ret = build_cst_from_int (type, Input - Uint_Direct_Bias); + gnu_ret = build_cst_from_int (comp_type, Input - Uint_Direct_Bias); else { Int Idx = Uints_Ptr[Input].Loc; Pos Length = Uints_Ptr[Input].Length; Int First = Udigits_Ptr[Idx]; - /* Do computations in integer type or TYPE whichever is wider, then - convert later. This avoid overflow if type is short integer. */ - tree comp_type - = ((TREE_CODE (type) == REAL_TYPE - || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node)) - ? type : integer_type_node); - tree gnu_base = build_cst_from_int (comp_type, Base); + tree gnu_base; gcc_assert (Length > 0); + + /* The computations we perform below always require a type at least as + large as an integer not to overflow. REAL types are always fine, but + INTEGER or ENUMERAL types we are handed may be too short. We use a + base integer type node for the computations in this case and will + convert the final result back to the incoming type later on. */ + + if (TREE_CODE (comp_type) != REAL_TYPE + && TYPE_PRECISION (comp_type) < TYPE_PRECISION (integer_type_node)) + comp_type = integer_type_node; + + gnu_base = build_cst_from_int (comp_type, Base); + gnu_ret = build_cst_from_int (comp_type, First); if (First < 0) for (Idx++, Length--; Length; Idx++, Length--) diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index 2fd5b25c673..96e9ca74e7b 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -98,7 +98,7 @@ package body Debug is -- d.c -- d.d -- d.e - -- d.f + -- d.f Inhibit folding of static expressions -- d.g -- d.h -- d.i @@ -132,7 +132,7 @@ package body Debug is -- Debug flags for binder (GNATBIND) - -- da + -- da All links (including internal units) listed if there is a cycle -- db -- dc List units as they are chosen -- dd @@ -410,7 +410,7 @@ package body Debug is -- indications. This debug flag disconnects the tracking of constant -- values (see Exp_Ch2.Expand_Current_Value). - -- dN Do not generate file name information in exception messages. + -- dN Do not generate file name information in exception messages -- dO Output immediate error messages. This causes error messages to -- be output as soon as they are generated (disconnecting several @@ -461,6 +461,10 @@ package body Debug is -- had Configurable_Run_Time_Mode set to True. This is useful in -- testing high integrity mode. + -- d.f Suppress folding of static expressions. This of course results + -- in seriously non-conforming behavior, but is useful sometimes + -- when tracking down handling of complex expressions. + -- d.x No exception handlers in generated code. This causes exception -- handlers to be eliminated from the generated code. They are still -- fully compiled and analyzed, they just get eliminated from the @@ -511,6 +515,12 @@ package body Debug is -- Documentation for Binder Debug Flags -- ------------------------------------------ + -- da Normally if there is an elaboration circularity, then in describing + -- the cycle, links involving internal units are omitted, since they + -- are irrelevant and confusing. This debug flag causes all links to + -- be listed, and is useful when diagnosing circularities introduced + -- by incorrect changes to the run-time library itself. + -- dc List units as they are chosen. As units are selected for addition to -- the elaboration order, a line of output is generated showing which -- unit has been selected. diff --git a/gcc/ada/debug.ads b/gcc/ada/debug.ads index 48d71de72ea..2a1ae50ce97 100644 --- a/gcc/ada/debug.ads +++ b/gcc/ada/debug.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c index 5a9c931dca6..bbbb471a3ae 100644 --- a/gcc/ada/decl.c +++ b/gcc/ada/decl.c @@ -35,6 +35,7 @@ #include "ggc.h" #include "obstack.h" #include "target.h" +#include "expr.h" #include "ada.h" #include "types.h" @@ -52,21 +53,14 @@ #include "ada-tree.h" #include "gigi.h" -/* Provide default values for the macros controlling stack checking. - This is copied from GCC's expr.h. */ +/* Convention_Stdcall should be processed in a specific way on Windows targets + only. The macro below is a helper to avoid having to check for a Windows + specific attribute throughout this unit. */ -#ifndef STACK_CHECK_BUILTIN -#define STACK_CHECK_BUILTIN 0 -#endif -#ifndef STACK_CHECK_PROBE_INTERVAL -#define STACK_CHECK_PROBE_INTERVAL 4096 -#endif -#ifndef STACK_CHECK_MAX_FRAME_SIZE -#define STACK_CHECK_MAX_FRAME_SIZE \ - (STACK_CHECK_PROBE_INTERVAL - UNITS_PER_WORD) -#endif -#ifndef STACK_CHECK_MAX_VAR_SIZE -#define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100) +#if TARGET_DLLIMPORT_DECL_ATTRIBUTES +#define Has_Stdcall_Convention(E) (Convention (E) == Convention_Stdcall) +#else +#define Has_Stdcall_Convention(E) (0) #endif /* These two variables are used to defer recursively expanding incomplete @@ -531,6 +525,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) || TREE_CODE (gnu_type) == VOID_TYPE) { gcc_assert (type_annotate_only); + if (this_global) + force_global--; return error_mark_node; } @@ -670,11 +666,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) { tree gnu_fat = TREE_TYPE (gnat_to_gnu_type (Base_Type (Etype (gnat_entity)))); - tree gnu_temp_type - = TREE_TYPE (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_fat)))); gnu_type - = build_unc_object_type (gnu_temp_type, gnu_type, + = build_unc_object_type_from_ptr (gnu_fat, gnu_type, concat_id_with_name (gnu_entity_id, "UNC")); } @@ -729,18 +723,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type))))))) gnu_expr = convert (gnu_type, gnu_expr); - /* See if this is a renaming. If this is a constant renaming, treat - it as a normal variable whose initial value is what is being - renamed. We cannot do this if the type is unconstrained or - class-wide. + /* See if this is a renaming, and handle appropriately depending on + what is renamed and in which context. There are three major + cases: + + 1/ This is a constant renaming and we can just make an object + with what is renamed as its initial value, - Otherwise, if what we are renaming is a reference, we can simply - return a stabilized version of that reference, after forcing any - SAVE_EXPRs to be evaluated. But, if this is at global level, we - can only do this if we know no SAVE_EXPRs will be made. + 2/ We can reuse a stabilized version of what is renamed in place + of the renaming, - Otherwise, make this into a constant pointer to the object we are - to rename. */ + 3/ If neither 1 or 2 applies, we make the renaming entity a constant + pointer to what is being renamed. */ if (Present (Renamed_Object (gnat_entity))) { @@ -756,6 +750,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnu_type = TREE_TYPE (gnu_expr); } + /* Case 1: If this is a constant renaming, treat it as a normal + object whose initial value is what is being renamed. We cannot + do this if the type is unconstrained or class-wide. */ if (const_flag && !TREE_SIDE_EFFECTS (gnu_expr) && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE @@ -764,49 +761,100 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) && !Is_Array_Type (Etype (gnat_entity))) ; - /* If this is a declaration or reference that we can stabilize, - just use that declaration or reference as this entity unless - the latter has to be materialized. */ - else if ((DECL_P (gnu_expr) || REFERENCE_CLASS_P (gnu_expr)) - && !Materialize_Entity (gnat_entity) - && (!global_bindings_p () - || (staticp (gnu_expr) - && !TREE_SIDE_EFFECTS (gnu_expr)))) - { - gnu_decl = gnat_stabilize_reference (gnu_expr, true); - save_gnu_tree (gnat_entity, gnu_decl, true); - saved = true; - break; - } - - /* Otherwise, make this into a constant pointer to the object we - are to rename and attach the object to the pointer. We need - to stabilize too since the renaming evaluation may directly - reference the renamed object instead of the pointer we will - attach it to. We don't want variables in the expression to - be evaluated every time the renaming is used, since their - value may change in between. */ + /* Otherwise, see if we can proceed with a stabilized version of + the renamed entity or if we need to make a pointer. */ else { - bool has_side_effects = TREE_SIDE_EFFECTS (gnu_expr); - inner_const_flag = TREE_READONLY (gnu_expr); - const_flag = true; - gnu_type = build_reference_type (gnu_type); - renamed_obj = gnat_stabilize_reference (gnu_expr, true); - gnu_expr = build_unary_op (ADDR_EXPR, gnu_type, renamed_obj); - - if (!global_bindings_p ()) + bool stabilized; + tree maybe_stable_expr = NULL_TREE; + + /* Case 2: If the renaming entity need not be materialized and + the renamed expression is something we can stabilize, use + that for the renaming after forcing the evaluation of any + SAVE_EXPR. At the global level, we can only do this if we + know no SAVE_EXPRs will be made. */ + if (!Materialize_Entity (gnat_entity) + && (!global_bindings_p () + || (staticp (gnu_expr) + && !TREE_SIDE_EFFECTS (gnu_expr)))) { - /* If the original expression had side effects, put a - SAVE_EXPR around this whole thing. */ - if (has_side_effects) - gnu_expr = save_expr (gnu_expr); + maybe_stable_expr + = maybe_stabilize_reference (gnu_expr, true, false, + &stabilized); + + if (stabilized) + { + gnu_decl = maybe_stable_expr; + save_gnu_tree (gnat_entity, gnu_decl, true); + saved = true; + break; + } - add_stmt (gnu_expr); + /* The stabilization failed. Keep maybe_stable_expr + untouched here to let the pointer case below know + about that failure. */ } - gnu_size = NULL_TREE; - used_by_ref = true; + /* Case 3: Make this into a constant pointer to the object we + are to rename and attach the object to the pointer if it is + an lvalue that can be stabilized. + + From the proper scope, attached objects will be referenced + directly instead of indirectly via the pointer to avoid + subtle aliasing problems with non addressable entities. + They have to be stable because we must not evaluate the + variables in the expression every time the renaming is used. + They also have to be lvalues because the context in which + they are reused sometimes requires so. We call pointers + with an attached object "renaming" pointers. + + In the rare cases where we cannot stabilize the renamed + object, we just make a "bare" pointer, and the renamed + entity is always accessed indirectly through it. */ + { + bool has_side_effects = TREE_SIDE_EFFECTS (gnu_expr); + inner_const_flag = TREE_READONLY (gnu_expr); + const_flag = true; + gnu_type = build_reference_type (gnu_type); + + /* If a previous attempt at unrestricted + stabilization failed, there is no point trying + again and we can reuse the result without + attaching it to the pointer. */ + if (maybe_stable_expr) + ; + + /* Otherwise, try to stabilize now, restricting to + lvalues only, and attach the expression to the pointer + if the stabilization succeeds. */ + else + { + maybe_stable_expr + = maybe_stabilize_reference (gnu_expr, true, true, + &stabilized); + + if (stabilized) + renamed_obj = maybe_stable_expr; + /* Attaching is actually performed downstream, as soon + as we have a DECL for the pointer we make. */ + } + + gnu_expr + = build_unary_op (ADDR_EXPR, gnu_type, maybe_stable_expr); + + if (!global_bindings_p ()) + { + /* If the original expression had side effects, put a + SAVE_EXPR around this whole thing. */ + if (has_side_effects) + gnu_expr = save_expr (gnu_expr); + + add_stmt (gnu_expr); + } + + gnu_size = NULL_TREE; + used_by_ref = true; + } } } @@ -894,10 +942,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) imported. */ if ((!definition && Present (Address_Clause (gnat_entity))) || (Is_Imported (gnat_entity) - && Convention (gnat_entity) == Convention_Stdcall)) + && Has_Stdcall_Convention (gnat_entity))) { gnu_type = build_reference_type (gnu_type); gnu_size = NULL_TREE; + + gnu_expr = NULL_TREE; + /* No point in taking the address of an initializing expression + that isn't going to be used. */ + used_by_ref = true; } @@ -1495,19 +1548,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) TYPE_READONLY (gnu_template_type) = 1; /* Make a node for the array. If we are not defining the array - suppress expanding incomplete types and save the node as the type - for GNAT_ENTITY. */ + suppress expanding incomplete types. */ gnu_type = make_node (UNCONSTRAINED_ARRAY_TYPE); + if (!definition) - { - defer_incomplete_level++; - this_deferred = this_made_decl = true; - gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list, - !Comes_From_Source (gnat_entity), - debug_info_p, gnat_entity); - save_gnu_tree (gnat_entity, gnu_decl, false); - saved = true; - } + defer_incomplete_level++, this_deferred = true; /* Build the fat pointer type. Use a "void *" object instead of a pointer to the array type since we don't have the array type @@ -2310,9 +2355,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) } /* Make a node for the record. If we are not defining the record, - suppress expanding incomplete types and save the node as the type - for GNAT_ENTITY. We use the same RECORD_TYPE as for a dummy type - and reset TYPE_DUMMY_P to show it's no longer a dummy. + suppress expanding incomplete types. We use the same RECORD_TYPE + as for a dummy type and reset TYPE_DUMMY_P to show it's no longer + a dummy. It is very tempting to delay resetting this bit until we are done with completing the type, e.g. to let possible intermediate @@ -2335,15 +2380,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) TYPE_PACKED (gnu_type) = packed || has_rep; if (!definition) - { - defer_incomplete_level++; - this_deferred = true; - gnu_decl = create_type_decl (gnu_entity_id, gnu_type, attr_list, - !Comes_From_Source (gnat_entity), - debug_info_p, gnat_entity); - save_gnu_tree (gnat_entity, gnu_decl, false); - this_made_decl = saved = true; - } + defer_incomplete_level++, this_deferred = true; /* If both a size and rep clause was specified, put the size in the record type now so that it can get the proper mode. */ @@ -3642,8 +3679,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) if (list_length (gnu_return_list) == 1) gnu_return_type = TREE_TYPE (TREE_PURPOSE (gnu_return_list)); -#ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES - if (Convention (gnat_entity) == Convention_Stdcall) + if (Has_Stdcall_Convention (gnat_entity)) { struct attrib *attr = (struct attrib *) xmalloc (sizeof (struct attrib)); @@ -3655,7 +3691,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) attr->error_point = gnat_entity; attr_list = attr; } -#endif /* Both lists ware built in reverse. */ gnu_param_list = nreverse (gnu_param_list); @@ -3766,14 +3801,23 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) compiling, then just get the type from its Etype. */ if (No (Full_View (gnat_entity))) { - /* If this is an incomplete type with no full view, it must - be a Taft Amendement type, so just return a dummy type. */ + /* If this is an incomplete type with no full view, it must be + either a limited view brought in by a limited_with clause, in + which case we use the non-limited view, or a Taft Amendement + type, in which case we just return a dummy type. */ if (kind == E_Incomplete_Type) - gnu_type = make_dummy_type (gnat_entity); + { + if (From_With_Type (gnat_entity) + && Present (Non_Limited_View (gnat_entity))) + gnu_decl = gnat_to_gnu_entity (Non_Limited_View (gnat_entity), + NULL_TREE, 0); + else + gnu_type = make_dummy_type (gnat_entity); + } - else if (Present (Underlying_Full_View (gnat_entity))) - gnu_decl = gnat_to_gnu_entity (Underlying_Full_View (gnat_entity), - NULL_TREE, 0); + else if (Present (Underlying_Full_View (gnat_entity))) + gnu_decl = gnat_to_gnu_entity (Underlying_Full_View (gnat_entity), + NULL_TREE, 0); else { gnu_decl = gnat_to_gnu_entity (Etype (gnat_entity), @@ -4087,7 +4131,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) DECL_ARTIFICIAL (gnu_decl) = 1; if (!debug_info_p && DECL_P (gnu_decl) - && TREE_CODE (gnu_decl) != FUNCTION_DECL) + && TREE_CODE (gnu_decl) != FUNCTION_DECL + && No (Renamed_Object (gnat_entity))) DECL_IGNORED_P (gnu_decl) = 1; /* If we haven't already, associate the ..._DECL node that we just made with @@ -4703,9 +4748,9 @@ elaborate_expression_1 (Node_Id gnat_expr, Entity_Id gnat_entity, gnu_decl = create_var_decl (create_concat_name (gnat_entity, IDENTIFIER_POINTER (gnu_name)), - NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr, true, - Is_Public (gnat_entity), !definition, false, NULL, - gnat_entity); + NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr, + !need_debug, Is_Public (gnat_entity), + !definition, false, NULL, gnat_entity); /* We only need to use this variable if we are in global context since GCC can do the right thing in the local case. */ @@ -5812,6 +5857,7 @@ annotate_value (tree gnu_size) case TRUTH_OR_EXPR: tcode = Truth_Or_Expr; break; case TRUTH_XOR_EXPR: tcode = Truth_Xor_Expr; break; case TRUTH_NOT_EXPR: tcode = Truth_Not_Expr; break; + case BIT_AND_EXPR: tcode = Bit_And_Expr; break; case LT_EXPR: tcode = Lt_Expr; break; case LE_EXPR: tcode = Le_Expr; break; case GT_EXPR: tcode = Gt_Expr; break; @@ -5898,8 +5944,7 @@ annotate_rep (Entity_Id gnat_entity, tree gnu_type) Set_Esize (gnat_field, annotate_value (DECL_SIZE (TREE_PURPOSE (gnu_entry)))); } - else if (type_annotate_only - && Is_Tagged_Type (gnat_entity) + else if (Is_Tagged_Type (gnat_entity) && Is_Derived_Type (gnat_entity)) { /* If there is no gnu_entry, this is an inherited component whose @@ -6638,32 +6683,28 @@ rm_size (tree gnu_type) tree create_concat_name (Entity_Id gnat_entity, const char *suffix) { + Entity_Kind kind = Ekind (gnat_entity); + const char *str = (!suffix ? "" : suffix); String_Template temp = {1, strlen (str)}; Fat_Pointer fp = {str, &temp}; Get_External_Name_With_Suffix (gnat_entity, fp); -#ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES /* A variable using the Stdcall convention (meaning we are running on a Windows box) live in a DLL. Here we adjust its name to use the jump-table, the _imp__NAME contains the address for the NAME variable. */ - { - Entity_Kind kind = Ekind (gnat_entity); - const char *prefix = "_imp__"; - int plen = strlen (prefix); + if ((kind == E_Variable || kind == E_Constant) + && Has_Stdcall_Convention (gnat_entity)) + { + const char *prefix = "_imp__"; + int k, plen = strlen (prefix); - if ((kind == E_Variable || kind == E_Constant) - && Convention (gnat_entity) == Convention_Stdcall) - { - int k; - for (k = 0; k <= Name_Len; k++) - Name_Buffer [Name_Len - k + plen] = Name_Buffer [Name_Len - k]; - strncpy (Name_Buffer, prefix, plen); - } - } -#endif + for (k = 0; k <= Name_Len; k++) + Name_Buffer [Name_Len - k + plen] = Name_Buffer [Name_Len - k]; + strncpy (Name_Buffer, prefix, plen); + } return get_identifier (Name_Buffer); } diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb index db446143abb..c126bd88e33 100644 --- a/gcc/ada/einfo.adb +++ b/gcc/ada/einfo.adb @@ -214,8 +214,10 @@ package body Einfo is -- Abstract_Interfaces Elist24 -- Abstract_Interface_Alias Node25 + -- Current_Use_Clause Node25 -- Overridden_Operation Node26 + -- Package_Instantiation Node26 -- Wrapped_Entity Node27 @@ -388,7 +390,7 @@ package body Einfo is -- Has_Recursive_Call Flag143 -- Is_Unsigned_Type Flag144 -- Strict_Alignment Flag145 - -- Elaborate_All_Desirable Flag146 + -- (unused) Flag146 -- Needs_Debug_Info Flag147 -- Suppress_Elaboration_Warnings Flag148 -- Is_Compilation_Unit Flag149 @@ -444,12 +446,13 @@ package body Einfo is -- Is_Local_Anonymous_Access Flag194 -- Is_Primitive_Wrapper Flag195 -- Was_Hidden Flag196 + -- Is_Limited_Interface Flag197 + -- Is_Protected_Interface Flag198 + -- Is_Synchronized_Interface Flag199 + -- Is_Task_Interface Flag200 + + -- Has_Anon_Block_Suffix Flag201 - -- (unused) Flag197 - -- (unused) Flag198 - -- (unused) Flag199 - -- (unused) Flag200 - -- (unused) Flag201 -- (unused) Flag202 -- (unused) Flag203 -- (unused) Flag204 @@ -698,6 +701,12 @@ package body Einfo is return Node22 (Id); end Corresponding_Remote_Type; + function Current_Use_Clause (Id : E) return E is + begin + pragma Assert (Ekind (Id) = E_Package); + return Node25 (Id); + end Current_Use_Clause; + function Current_Value (Id : E) return N is begin pragma Assert (Ekind (Id) in Object_Kind); @@ -839,11 +848,6 @@ package body Einfo is return Node16 (Id); end DTC_Entity; - function Elaborate_All_Desirable (Id : E) return B is - begin - return Flag146 (Id); - end Elaborate_All_Desirable; - function Elaboration_Entity (Id : E) return E is begin pragma Assert @@ -1073,6 +1077,11 @@ package body Einfo is return Flag79 (Id); end Has_All_Calls_Remote; + function Has_Anon_Block_Suffix (Id : E) return B is + begin + return Flag201 (Id); + end Has_Anon_Block_Suffix; + function Has_Atomic_Components (Id : E) return B is begin return Flag86 (Implementation_Base_Type (Id)); @@ -1667,6 +1676,12 @@ package body Einfo is return Flag106 (Id); end Is_Limited_Composite; + function Is_Limited_Interface (Id : E) return B is + begin + pragma Assert (Is_Interface (Id)); + return Flag197 (Id); + end Is_Limited_Interface; + function Is_Limited_Record (Id : E) return B is begin return Flag25 (Id); @@ -1750,6 +1765,12 @@ package body Einfo is return Flag53 (Id); end Is_Private_Descendant; + function Is_Protected_Interface (Id : E) return B is + begin + pragma Assert (Is_Interface (Id)); + return Flag198 (Id); + end Is_Protected_Interface; + function Is_Public (Id : E) return B is begin pragma Assert (Nkind (Id) in N_Entity); @@ -1792,6 +1813,12 @@ package body Einfo is return Flag28 (Id); end Is_Statically_Allocated; + function Is_Synchronized_Interface (Id : E) return B is + begin + pragma Assert (Is_Interface (Id)); + return Flag199 (Id); + end Is_Synchronized_Interface; + function Is_Tag (Id : E) return B is begin pragma Assert (Nkind (Id) in N_Entity); @@ -1803,6 +1830,12 @@ package body Einfo is return Flag55 (Id); end Is_Tagged_Type; + function Is_Task_Interface (Id : E) return B is + begin + pragma Assert (Is_Interface (Id)); + return Flag200 (Id); + end Is_Task_Interface; + function Is_Thread_Body (Id : E) return B is begin return Flag77 (Id); @@ -2016,7 +2049,8 @@ package body Einfo is function Obsolescent_Warning (Id : E) return N is begin - pragma Assert (Is_Subprogram (Id)); + pragma Assert + (Is_Subprogram (Id) or else Is_Package_Or_Generic_Package (Id)); return Node24 (Id); end Obsolescent_Warning; @@ -2048,6 +2082,15 @@ package body Einfo is return Node26 (Id); end Overridden_Operation; + function Package_Instantiation (Id : E) return N is + begin + pragma Assert + (False + or else Ekind (Id) = E_Generic_Package + or else Ekind (Id) = E_Package); + return Node26 (Id); + end Package_Instantiation; + function Packed_Array_Type (Id : E) return E is begin pragma Assert (Is_Array_Type (Id)); @@ -2744,7 +2787,13 @@ package body Einfo is Set_Node22 (Id, V); end Set_Corresponding_Remote_Type; - procedure Set_Current_Value (Id : E; V : E) is + procedure Set_Current_Use_Clause (Id : E; V : E) is + begin + pragma Assert (Ekind (Id) = E_Package); + Set_Node25 (Id, V); + end Set_Current_Use_Clause; + + procedure Set_Current_Value (Id : E; V : N) is begin pragma Assert (Ekind (Id) in Object_Kind or else Ekind (Id) = E_Void); Set_Node9 (Id, V); @@ -2888,11 +2937,6 @@ package body Einfo is Set_Node16 (Id, V); end Set_DTC_Entity; - procedure Set_Elaborate_All_Desirable (Id : E; V : B := True) is - begin - Set_Flag146 (Id, V); - end Set_Elaborate_All_Desirable; - procedure Set_Elaboration_Entity (Id : E; V : E) is begin pragma Assert @@ -3126,6 +3170,11 @@ package body Einfo is Set_Flag79 (Id, V); end Set_Has_All_Calls_Remote; + procedure Set_Has_Anon_Block_Suffix (Id : E; V : B := True) is + begin + Set_Flag201 (Id, V); + end Set_Has_Anon_Block_Suffix; + procedure Set_Has_Atomic_Components (Id : E; V : B := True) is begin pragma Assert (not Is_Type (Id) or else Base_Type (Id) = Id); @@ -3754,6 +3803,12 @@ package body Einfo is Set_Flag106 (Id, V); end Set_Is_Limited_Composite; + procedure Set_Is_Limited_Interface (Id : E; V : B := True) is + begin + pragma Assert (Is_Interface (Id)); + Set_Flag197 (Id, V); + end Set_Is_Limited_Interface; + procedure Set_Is_Limited_Record (Id : E; V : B := True) is begin Set_Flag25 (Id, V); @@ -3838,6 +3893,12 @@ package body Einfo is Set_Flag53 (Id, V); end Set_Is_Private_Descendant; + procedure Set_Is_Protected_Interface (Id : E; V : B := True) is + begin + pragma Assert (Is_Interface (Id)); + Set_Flag198 (Id, V); + end Set_Is_Protected_Interface; + procedure Set_Is_Public (Id : E; V : B := True) is begin pragma Assert (Nkind (Id) in N_Entity); @@ -3886,6 +3947,12 @@ package body Einfo is Set_Flag28 (Id, V); end Set_Is_Statically_Allocated; + procedure Set_Is_Synchronized_Interface (Id : E; V : B := True) is + begin + pragma Assert (Is_Interface (Id)); + Set_Flag199 (Id, V); + end Set_Is_Synchronized_Interface; + procedure Set_Is_Tag (Id : E; V : B := True) is begin pragma Assert (Nkind (Id) in N_Entity); @@ -3902,6 +3969,12 @@ package body Einfo is Set_Flag77 (Id, V); end Set_Is_Thread_Body; + procedure Set_Is_Task_Interface (Id : E; V : B := True) is + begin + pragma Assert (Is_Interface (Id)); + Set_Flag200 (Id, V); + end Set_Is_Task_Interface; + procedure Set_Is_True_Constant (Id : E; V : B := True) is begin Set_Flag163 (Id, V); @@ -4108,7 +4181,8 @@ package body Einfo is procedure Set_Obsolescent_Warning (Id : E; V : N) is begin - pragma Assert (Is_Subprogram (Id)); + pragma Assert + (Is_Subprogram (Id) or else Is_Package_Or_Generic_Package (Id)); Set_Node24 (Id, V); end Set_Obsolescent_Warning; @@ -4140,6 +4214,15 @@ package body Einfo is Set_Node26 (Id, V); end Set_Overridden_Operation; + procedure Set_Package_Instantiation (Id : E; V : N) is + begin + pragma Assert + (Ekind (Id) = E_Void + or else Ekind (Id) = E_Generic_Package + or else Ekind (Id) = E_Package); + Set_Node26 (Id, V); + end Set_Package_Instantiation; + procedure Set_Packed_Array_Type (Id : E; V : E) is begin pragma Assert (Is_Array_Type (Id)); @@ -5693,17 +5776,17 @@ package body Einfo is end if; end Is_Limited_Type; - ---------------- - -- Is_Package -- - ---------------- + ----------------------------------- + -- Is_Package_Or_Generic_Package -- + ----------------------------------- - function Is_Package (Id : E) return B is + function Is_Package_Or_Generic_Package (Id : E) return B is begin return Ekind (Id) = E_Package or else Ekind (Id) = E_Generic_Package; - end Is_Package; + end Is_Package_Or_Generic_Package; -------------------------- -- Is_Protected_Private -- @@ -6466,7 +6549,6 @@ package body Einfo is W ("Delay_Subprogram_Descriptors", Flag50 (Id)); W ("Depends_On_Private", Flag14 (Id)); W ("Discard_Names", Flag88 (Id)); - W ("Elaborate_All_Desirable", Flag146 (Id)); W ("Elaboration_Entity_Required", Flag174 (Id)); W ("Entry_Accepted", Flag152 (Id)); W ("Finalize_Storage_Only", Flag158 (Id)); @@ -6475,6 +6557,7 @@ package body Einfo is W ("Has_Aliased_Components", Flag135 (Id)); W ("Has_Alignment_Clause", Flag46 (Id)); W ("Has_All_Calls_Remote", Flag79 (Id)); + W ("Has_Anon_Block_Suffix", Flag201 (Id)); W ("Has_Atomic_Components", Flag86 (Id)); W ("Has_Biased_Representation", Flag139 (Id)); W ("Has_Completion", Flag26 (Id)); @@ -6580,6 +6663,7 @@ package body Einfo is W ("Is_Known_Valid", Flag37 (Id)); W ("Is_Known_Valid", Flag170 (Id)); W ("Is_Limited_Composite", Flag106 (Id)); + W ("Is_Limited_Interface", Flag197 (Id)); W ("Is_Limited_Record", Flag25 (Id)); W ("Is_Machine_Code_Subprogram", Flag137 (Id)); W ("Is_Non_Static_Subtype", Flag109 (Id)); @@ -6595,6 +6679,7 @@ package body Einfo is W ("Is_Primitive_Wrapper", Flag195 (Id)); W ("Is_Private_Composite", Flag107 (Id)); W ("Is_Private_Descendant", Flag53 (Id)); + W ("Is_Protected_Interface", Flag198 (Id)); W ("Is_Public", Flag10 (Id)); W ("Is_Pure", Flag44 (Id)); W ("Is_Pure_Unit_Access_Type", Flag189 (Id)); @@ -6602,9 +6687,11 @@ package body Einfo is W ("Is_Remote_Types", Flag61 (Id)); W ("Is_Renaming_Of_Object", Flag112 (Id)); W ("Is_Shared_Passive", Flag60 (Id)); + W ("Is_Synchronized_Interface", Flag199 (Id)); W ("Is_Statically_Allocated", Flag28 (Id)); W ("Is_Tag", Flag78 (Id)); W ("Is_Tagged_Type", Flag55 (Id)); + W ("Is_Task_Interface", Flag200 (Id)); W ("Is_Thread_Body", Flag77 (Id)); W ("Is_True_Constant", Flag163 (Id)); W ("Is_Unchecked_Union", Flag117 (Id)); @@ -7526,7 +7613,9 @@ package body Einfo is E_Record_Subtype_With_Private => Write_Str ("Abstract_Interfaces"); - when Subprogram_Kind => + when Subprogram_Kind | + E_Package | + E_Generic_Package => Write_Str ("Obsolescent_Warning"); when Task_Kind => @@ -7548,6 +7637,9 @@ package body Einfo is E_Function => Write_Str ("Abstract_Interface_Alias"); + when E_Package => + Write_Str ("Current_Use_Clause"); + when others => Write_Str ("Field25??"); end case; @@ -7560,6 +7652,10 @@ package body Einfo is procedure Write_Field26_Name (Id : Entity_Id) is begin case Ekind (Id) is + when E_Generic_Package | + E_Package => + Write_Str ("Package_Instantiation"); + when E_Procedure | E_Function => Write_Str ("Overridden_Operation"); diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index 189a9ecfffe..fa1e5841674 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -594,6 +594,11 @@ package Einfo is -- created at the same time as the discriminal, and used to replace -- occurrences of the discriminant within the type declaration. +-- Current_Use_Clause (Node25) +-- Present in packages. Indicates the use clause currently in scope +-- that makes the package use_visible. Used to detect redundant use +-- clauses for the same package. + -- Current_Value (Node9) -- Present in E_Variable, E_Out_Parameter and E_In_Out_Parameter -- entities. Set non-Empty if the (constant) current value of the @@ -801,13 +806,6 @@ package Einfo is -- Present in all entities. Contains a value of the enumeration type -- Entity_Kind declared in a subsequent section in this spec. --- Elaborate_All_Desirable (Flag146) --- Present in package and subprogram entities, and in generic package --- and subprogram entities. Set if internal analysis of a client that --- with's this unit determines that Elaborate_All is desirable, i.e. --- that there is a possibility that Program_Error may be raised if --- Elaborate_All conditions cannot be met. - -- Elaboration_Entity (Node13) -- Present in generic and non-generic package and subprogram -- entities. This is a boolean entity associated with the unit that @@ -1230,6 +1228,11 @@ package Einfo is -- be RCI entities, so the flag Is_Remote_Call_Interface will always -- be set if this flag is set. +-- Has_Anon_Block_Suffix (Flag201) +-- Present in all entities. Set if the entity is nested within one or +-- more anonymous blocks and the Chars field contains a name with an +-- anonymous block suffix (see Exp_Dbug for furthert details). + -- Has_Atomic_Components (Flag86) [implementation base type only] -- Present in all types and objects. Set only for an array type or -- an array object if a valid pragma Atomic_Components applies to the @@ -2106,6 +2109,10 @@ package Einfo is -- do not become visible until the immediate scope of the composite -- type itself (RM 7.3.1 (5)). +-- Is_Limited_Interface (Flag197) +-- Present in types that are interfaces. True if interface is declared +-- limited, or is derived from limited interfaces. + -- Is_Limited_Record (Flag25) -- Present in all entities. Set to true for record (sub)types if the -- record is declared to be limited. Note that this flag is not set @@ -2159,8 +2166,8 @@ package Einfo is -- including generic formal parameters. -- Is_Obsolescent (Flag153) --- Present in all entities. Set only for subprograms when a valid pragma --- Obsolescent applies to the subprogram. +-- Present in all entities. Set only for packages and subprograms to +-- which a valid pragma Obsolescent applies. -- Is_Optional_Parameter (Flag134) -- Present in parameter entities. Set if the parameter is specified as @@ -2175,7 +2182,7 @@ package Einfo is -- Present in subprograms. Set if the subprogram is a primitive -- operation of a derived type, that overrides an inherited operation. --- Is_Package (synthesized) +-- Is_Package_Or_Generic_Package (synthesized) -- Applies to all entities. True for packages and generic packages. -- False for all other entities. @@ -2264,6 +2271,10 @@ package Einfo is -- Applies to all entities, true for private types and subtypes, -- as well as for record with private types as subtypes +-- Is_Protected_Interface (Flag198) +-- Present in types that are interfaces. True if interface is declared +-- protected, or is derived from protected interfaces. + -- Is_Protected_Type (synthesized) -- Applies to all entities, true for protected types and subtypes @@ -2358,6 +2369,10 @@ package Einfo is -- or a string slice type, or an array type with one dimension and a -- component type that is a character type. +-- Is_Synchronized_Interface (Flag199) +-- Present_types that are interfaces. True is interface is declared +-- synchronized, or is derived from synchronized interfaces. + -- Is_Tag (Flag78) -- Present in E_Component. For regular tagged type this flag is set on -- the tag component (whose name is Name_uTag) and for CPP_Class tagged @@ -2367,6 +2382,10 @@ package Einfo is -- Is_Tagged_Type (Flag55) -- Present in all entities, true for an entity for a tagged type. +-- Is_Task_Interface (Flag200) +-- Present in types that are interfaces. True is interface is declared +-- as such, or if it is derived from task interfaces. + -- Is_Task_Record_Type (synthesized) -- Applies to all entities, true if Is_Concurrent_Record_Type -- Corresponding_Concurrent_Type is a task type. @@ -2732,8 +2751,8 @@ package Einfo is -- formals as a value of type Pos. -- Obsolescent_Warning (Node24) --- Present in subprogram entities. Set non-empty only if the pragma --- Obsolescent had a string argument, in which case it records the +-- Present in package and subprogram entities. Set non-empty only if the +-- pragma Obsolescent had a string argument, in which case it records the -- contents of the corresponding string literal node. -- Original_Access_Type (Node21) @@ -2778,6 +2797,18 @@ package Einfo is -- Present in subprograms. For overriding operations, points to the -- user-defined parent subprogram that is being overridden. +-- Package_Instantiation (Node26) +-- Present in packages and generic packages. When present, this field +-- references an N_Package_Instantiation node associated with an +-- instantiated package. In the case where the referenced node has +-- been rewritten to an N_Package_Specification, the instantiation +-- node is available from the Original_Node field of the package spec +-- node. This is currently not guaranteed to be set in all cases, but +-- when set, the field is used in Get_Package_Instantiation_Node as +-- one of the means of obtaining the instantiation node. Eventually +-- it should be set in all cases, including package entities associated +-- with formal packages. ??? + -- Packed_Array_Type (Node23) -- Present in array types and subtypes, including the string literal -- subtype case, if the corresponding type is packed (either bit packed @@ -4009,6 +4040,7 @@ package Einfo is -- Can_Never_Be_Null (Flag38) -- Checks_May_Be_Suppressed (Flag31) -- Debug_Info_Off (Flag166) + -- Has_Anon_Block_Suffix (Flag201) -- Has_Controlled_Component (Flag43) (base type only) -- Has_Convention_Pragma (Flag119) -- Has_Delayed_Freeze (Flag18) @@ -4123,6 +4155,10 @@ package Einfo is -- Is_Frozen (Flag4) -- Is_Generic_Actual_Type (Flag94) -- Is_Generic_Type (Flag13) + -- Is_Limited_Interface (Flag197) + -- Is_Protected_Interface (Flag198) + -- Is_Synchronized_Interface (Flag199) + -- Is_Task_Interface (Flag200) -- Is_Non_Static_Subtype (Flag109) -- Is_Packed (Flag51) (base type only) -- Is_Private_Composite (Flag107) @@ -4428,7 +4464,6 @@ package Einfo is -- Delay_Cleanups (Flag114) -- Delay_Subprogram_Descriptors (Flag50) -- Discard_Names (Flag88) - -- Elaborate_All_Desirable (Flag146) -- Has_Completion (Flag26) -- Has_Controlling_Result (Flag98) -- Has_Master_Entity (Flag21) @@ -4596,10 +4631,12 @@ package Einfo is -- Generic_Renamings (Elist23) (for an instance) -- Inner_Instances (Elist23) (generic case only) -- Limited_View (Node23) (non-generic, not instance) + -- Obsolescent_Warning (Node24) + -- Current_Use_Clause (Node25) + -- Package_Instantiation (Node26) -- Delay_Subprogram_Descriptors (Flag50) -- Body_Needed_For_SAL (Flag40) -- Discard_Names (Flag88) - -- Elaborate_All_Desirable (Flag146) -- Elaboration_Entity_Required (Flag174) -- From_With_Type (Flag159) -- Has_All_Calls_Remote (Flag79) @@ -4678,7 +4715,6 @@ package Einfo is -- Delay_Cleanups (Flag114) -- Delay_Subprogram_Descriptors (Flag50) -- Discard_Names (Flag88) - -- Elaborate_All_Desirable (Flag146) -- Has_Completion (Flag26) -- Has_Master_Entity (Flag21) -- Has_Nested_Block_With_Handler (Flag101) @@ -5145,6 +5181,7 @@ package Einfo is function Corresponding_Equality (Id : E) return E; function Corresponding_Record_Type (Id : E) return E; function Corresponding_Remote_Type (Id : E) return E; + function Current_Use_Clause (Id : E) return E; function Current_Value (Id : E) return N; function Debug_Info_Off (Id : E) return B; function Debug_Renaming_Link (Id : E) return E; @@ -5168,7 +5205,6 @@ package Einfo is function Discriminant_Constraint (Id : E) return L; function Discriminant_Default_Value (Id : E) return N; function Discriminant_Number (Id : E) return U; - function Elaborate_All_Desirable (Id : E) return B; function Elaboration_Entity (Id : E) return E; function Elaboration_Entity_Required (Id : E) return B; function Enclosing_Scope (Id : E) return E; @@ -5208,6 +5244,7 @@ package Einfo is function Has_Aliased_Components (Id : E) return B; function Has_Alignment_Clause (Id : E) return B; function Has_All_Calls_Remote (Id : E) return B; + function Has_Anon_Block_Suffix (Id : E) return B; function Has_Atomic_Components (Id : E) return B; function Has_Biased_Representation (Id : E) return B; function Has_Completion (Id : E) return B; @@ -5314,6 +5351,7 @@ package Einfo is function Is_Known_Non_Null (Id : E) return B; function Is_Known_Valid (Id : E) return B; function Is_Limited_Composite (Id : E) return B; + function Is_Limited_Interface (Id : E) return B; function Is_Machine_Code_Subprogram (Id : E) return B; function Is_Non_Static_Subtype (Id : E) return B; function Is_Null_Init_Proc (Id : E) return B; @@ -5328,6 +5366,7 @@ package Einfo is function Is_Private_Composite (Id : E) return B; function Is_Private_Descendant (Id : E) return B; + function Is_Protected_Interface (Id : E) return B; function Is_Public (Id : E) return B; function Is_Pure (Id : E) return B; function Is_Pure_Unit_Access_Type (Id : E) return B; @@ -5336,8 +5375,10 @@ package Einfo is function Is_Renaming_Of_Object (Id : E) return B; function Is_Shared_Passive (Id : E) return B; function Is_Statically_Allocated (Id : E) return B; + function Is_Synchronized_Interface (Id : E) return B; function Is_Tag (Id : E) return B; function Is_Tagged_Type (Id : E) return B; + function Is_Task_Interface (Id : E) return B; function Is_Thread_Body (Id : E) return B; function Is_True_Constant (Id : E) return B; function Is_Unchecked_Union (Id : E) return B; @@ -5379,6 +5420,7 @@ package Einfo is function Original_Array_Type (Id : E) return E; function Original_Record_Component (Id : E) return E; function Overridden_Operation (Id : E) return E; + function Package_Instantiation (Id : E) return N; function Packed_Array_Type (Id : E) return E; function Parent_Subtype (Id : E) return E; function Primitive_Operations (Id : E) return L; @@ -5519,7 +5561,7 @@ package Einfo is function Is_Dynamic_Scope (Id : E) return B; function Is_Indefinite_Subtype (Id : E) return B; function Is_Limited_Type (Id : E) return B; - function Is_Package (Id : E) return B; + function Is_Package_Or_Generic_Package (Id : E) return B; function Is_Protected_Private (Id : E) return B; function Is_Protected_Record_Type (Id : E) return B; function Is_Return_By_Reference_Type (Id : E) return B; @@ -5638,6 +5680,7 @@ package Einfo is procedure Set_Corresponding_Equality (Id : E; V : E); procedure Set_Corresponding_Record_Type (Id : E; V : E); procedure Set_Corresponding_Remote_Type (Id : E; V : E); + procedure Set_Current_Use_Clause (Id : E; V : E); procedure Set_Current_Value (Id : E; V : N); procedure Set_Debug_Info_Off (Id : E; V : B := True); procedure Set_Debug_Renaming_Link (Id : E; V : E); @@ -5661,7 +5704,6 @@ package Einfo is procedure Set_Discriminant_Constraint (Id : E; V : L); procedure Set_Discriminant_Default_Value (Id : E; V : N); procedure Set_Discriminant_Number (Id : E; V : U); - procedure Set_Elaborate_All_Desirable (Id : E; V : B := True); procedure Set_Elaboration_Entity (Id : E; V : E); procedure Set_Elaboration_Entity_Required (Id : E; V : B := True); procedure Set_Enclosing_Scope (Id : E; V : E); @@ -5700,6 +5742,7 @@ package Einfo is procedure Set_Has_Aliased_Components (Id : E; V : B := True); procedure Set_Has_Alignment_Clause (Id : E; V : B := True); procedure Set_Has_All_Calls_Remote (Id : E; V : B := True); + procedure Set_Has_Anon_Block_Suffix (Id : E; V : B := True); procedure Set_Has_Atomic_Components (Id : E; V : B := True); procedure Set_Has_Biased_Representation (Id : E; V : B := True); procedure Set_Has_Completion (Id : E; V : B := True); @@ -5810,6 +5853,7 @@ package Einfo is procedure Set_Is_Known_Non_Null (Id : E; V : B := True); procedure Set_Is_Known_Valid (Id : E; V : B := True); procedure Set_Is_Limited_Composite (Id : E; V : B := True); + procedure Set_Is_Limited_Interface (Id : E; V : B := True); procedure Set_Is_Limited_Record (Id : E; V : B := True); procedure Set_Is_Machine_Code_Subprogram (Id : E; V : B := True); procedure Set_Is_Non_Static_Subtype (Id : E; V : B := True); @@ -5823,9 +5867,9 @@ package Einfo is procedure Set_Is_Potentially_Use_Visible (Id : E; V : B := True); procedure Set_Is_Preelaborated (Id : E; V : B := True); procedure Set_Is_Primitive_Wrapper (Id : E; V : B := True); - procedure Set_Is_Private_Composite (Id : E; V : B := True); procedure Set_Is_Private_Descendant (Id : E; V : B := True); + procedure Set_Is_Protected_Interface (Id : E; V : B := True); procedure Set_Is_Public (Id : E; V : B := True); procedure Set_Is_Pure (Id : E; V : B := True); procedure Set_Is_Pure_Unit_Access_Type (Id : E; V : B := True); @@ -5834,8 +5878,10 @@ package Einfo is procedure Set_Is_Renaming_Of_Object (Id : E; V : B := True); procedure Set_Is_Shared_Passive (Id : E; V : B := True); procedure Set_Is_Statically_Allocated (Id : E; V : B := True); + procedure Set_Is_Synchronized_Interface (Id : E; V : B := True); procedure Set_Is_Tag (Id : E; V : B := True); procedure Set_Is_Tagged_Type (Id : E; V : B := True); + procedure Set_Is_Task_Interface (Id : E; V : B := True); procedure Set_Is_Thread_Body (Id : E; V : B := True); procedure Set_Is_True_Constant (Id : E; V : B := True); procedure Set_Is_Unchecked_Union (Id : E; V : B := True); @@ -5876,6 +5922,7 @@ package Einfo is procedure Set_Original_Array_Type (Id : E; V : E); procedure Set_Original_Record_Component (Id : E; V : E); procedure Set_Overridden_Operation (Id : E; V : E); + procedure Set_Package_Instantiation (Id : E; V : N); procedure Set_Packed_Array_Type (Id : E; V : E); procedure Set_Parent_Subtype (Id : E; V : E); procedure Set_Primitive_Operations (Id : E; V : L); @@ -6185,6 +6232,7 @@ package Einfo is pragma Inline (Corresponding_Equality); pragma Inline (Corresponding_Record_Type); pragma Inline (Corresponding_Remote_Type); + pragma Inline (Current_Use_Clause); pragma Inline (Current_Value); pragma Inline (Debug_Info_Off); pragma Inline (Debug_Renaming_Link); @@ -6208,7 +6256,6 @@ package Einfo is pragma Inline (Discriminant_Constraint); pragma Inline (Discriminant_Default_Value); pragma Inline (Discriminant_Number); - pragma Inline (Elaborate_All_Desirable); pragma Inline (Elaboration_Entity); pragma Inline (Elaboration_Entity_Required); pragma Inline (Enclosing_Scope); @@ -6247,6 +6294,7 @@ package Einfo is pragma Inline (Has_Aliased_Components); pragma Inline (Has_Alignment_Clause); pragma Inline (Has_All_Calls_Remote); + pragma Inline (Has_Anon_Block_Suffix); pragma Inline (Has_Atomic_Components); pragma Inline (Has_Biased_Representation); pragma Inline (Has_Completion); @@ -6377,6 +6425,7 @@ package Einfo is pragma Inline (Is_Known_Non_Null); pragma Inline (Is_Known_Valid); pragma Inline (Is_Limited_Composite); + pragma Inline (Is_Limited_Interface); pragma Inline (Is_Limited_Record); pragma Inline (Is_Machine_Code_Subprogram); pragma Inline (Is_Modular_Integer_Type); @@ -6400,6 +6449,7 @@ package Einfo is pragma Inline (Is_Private_Composite); pragma Inline (Is_Private_Descendant); pragma Inline (Is_Private_Type); + pragma Inline (Is_Protected_Interface); pragma Inline (Is_Protected_Type); pragma Inline (Is_Public); pragma Inline (Is_Pure); @@ -6414,8 +6464,10 @@ package Einfo is pragma Inline (Is_Signed_Integer_Type); pragma Inline (Is_Statically_Allocated); pragma Inline (Is_Subprogram); + pragma Inline (Is_Synchronized_Interface); pragma Inline (Is_Tag); pragma Inline (Is_Tagged_Type); + pragma Inline (Is_Task_Interface); pragma Inline (Is_Thread_Body); pragma Inline (Is_True_Constant); pragma Inline (Is_Task_Type); @@ -6459,6 +6511,7 @@ package Einfo is pragma Inline (Original_Array_Type); pragma Inline (Original_Record_Component); pragma Inline (Overridden_Operation); + pragma Inline (Package_Instantiation); pragma Inline (Packed_Array_Type); pragma Inline (Parameter_Mode); pragma Inline (Parent_Subtype); @@ -6552,6 +6605,7 @@ package Einfo is pragma Inline (Set_Corresponding_Equality); pragma Inline (Set_Corresponding_Record_Type); pragma Inline (Set_Corresponding_Remote_Type); + pragma Inline (Set_Current_Use_Clause); pragma Inline (Set_Current_Value); pragma Inline (Set_Debug_Info_Off); pragma Inline (Set_Debug_Renaming_Link); @@ -6574,7 +6628,6 @@ package Einfo is pragma Inline (Set_Discriminant_Constraint); pragma Inline (Set_Discriminant_Default_Value); pragma Inline (Set_Discriminant_Number); - pragma Inline (Set_Elaborate_All_Desirable); pragma Inline (Set_Elaboration_Entity); pragma Inline (Set_Elaboration_Entity_Required); pragma Inline (Set_Enclosing_Scope); @@ -6611,6 +6664,7 @@ package Einfo is pragma Inline (Set_Has_Aliased_Components); pragma Inline (Set_Has_Alignment_Clause); pragma Inline (Set_Has_All_Calls_Remote); + pragma Inline (Set_Has_Anon_Block_Suffix); pragma Inline (Set_Has_Atomic_Components); pragma Inline (Set_Has_Biased_Representation); pragma Inline (Set_Has_Completion); @@ -6720,6 +6774,7 @@ package Einfo is pragma Inline (Set_Is_Known_Non_Null); pragma Inline (Set_Is_Known_Valid); pragma Inline (Set_Is_Limited_Composite); + pragma Inline (Set_Is_Limited_Interface); pragma Inline (Set_Is_Limited_Record); pragma Inline (Set_Is_Machine_Code_Subprogram); pragma Inline (Set_Is_Non_Static_Subtype); @@ -6736,6 +6791,7 @@ package Einfo is pragma Inline (Set_Is_Private_Composite); pragma Inline (Set_Is_Private_Descendant); + pragma Inline (Set_Is_Protected_Interface); pragma Inline (Set_Is_Public); pragma Inline (Set_Is_Pure); pragma Inline (Set_Is_Pure_Unit_Access_Type); @@ -6744,8 +6800,10 @@ package Einfo is pragma Inline (Set_Is_Renaming_Of_Object); pragma Inline (Set_Is_Shared_Passive); pragma Inline (Set_Is_Statically_Allocated); + pragma Inline (Set_Is_Synchronized_Interface); pragma Inline (Set_Is_Tag); pragma Inline (Set_Is_Tagged_Type); + pragma Inline (Set_Is_Task_Interface); pragma Inline (Set_Is_Thread_Body); pragma Inline (Set_Is_True_Constant); pragma Inline (Set_Is_Unchecked_Union); @@ -6786,6 +6844,7 @@ package Einfo is pragma Inline (Set_Original_Array_Type); pragma Inline (Set_Original_Record_Component); pragma Inline (Set_Overridden_Operation); + pragma Inline (Set_Package_Instantiation); pragma Inline (Set_Packed_Array_Type); pragma Inline (Set_Parent_Subtype); pragma Inline (Set_Primitive_Operations); @@ -6849,7 +6908,7 @@ package Einfo is -- things here which are small, but not of the canonical attribute -- access/set format that can be handled by xeinfo. - pragma Inline (Is_Package); + pragma Inline (Is_Package_Or_Generic_Package); pragma Inline (Is_Wrapper_Package); pragma Inline (Known_RM_Size); pragma Inline (Known_Static_Component_Bit_Offset); diff --git a/gcc/ada/elists.ads b/gcc/ada/elists.ads index 0482ff31d27..f7e347cca3c 100644 --- a/gcc/ada/elists.ads +++ b/gcc/ada/elists.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -122,10 +122,10 @@ package Elists is -- that contains no items. procedure Append_Elmt (Node : Node_Id; To : Elist_Id); - -- Appends Node at the end of To, allocating a new element. + -- Appends Node at the end of To, allocating a new element procedure Prepend_Elmt (Node : Node_Id; To : Elist_Id); - -- Appends Node at the beginning of To, allocating a new element. + -- Appends Node at the beginning of To, allocating a new element procedure Insert_Elmt_After (Node : Node_Id; Elmt : Elmt_Id); -- Add a new element (Node) right after the pre-existing element Elmt diff --git a/gcc/ada/err_vars.ads b/gcc/ada/err_vars.ads index 04ef8b20018..1abc4acbe12 100644 --- a/gcc/ada/err_vars.ads +++ b/gcc/ada/err_vars.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/errno.c b/gcc/ada/errno.c index 50e852139c2..93981d60a8f 100644 --- a/gcc/ada/errno.c +++ b/gcc/ada/errno.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2005 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index 5da299a419e..d699828d395 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1122,9 +1122,9 @@ package body Errout is -- Brief Error mode if Brief_Output or (not Full_List and not Verbose_Mode) then - E := First_Error_Msg; Set_Standard_Error; + E := First_Error_Msg; while E /= No_Error_Msg loop if not Errors.Table (E).Deleted and then not Debug_Flag_KK then if Full_Path_Name_For_Brief_Errors then diff --git a/gcc/ada/errout.ads b/gcc/ada/errout.ads index ff254683d04..5aa7f7f13d5 100644 --- a/gcc/ada/errout.ads +++ b/gcc/ada/errout.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -333,7 +333,10 @@ package Errout is -- passed to the error message routine for insertion sequences described -- above. The reason these are passed globally is that the insertion -- mechanism is essentially an untyped one in which the appropriate - -- variables are set dependingon the specific insertion characters used. + -- variables are set depending on the specific insertion characters used. + + -- Note that is mandatory that the caller ensure that global variables + -- are set before the Error_Msg call, otherwise the result is undefined. Error_Msg_Col : Column_Number renames Err_Vars.Error_Msg_Col; -- Column for @ insertion character in message diff --git a/gcc/ada/erroutc.adb b/gcc/ada/erroutc.adb index 2a962964eb9..05d17c91a8d 100644 --- a/gcc/ada/erroutc.adb +++ b/gcc/ada/erroutc.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/erroutc.ads b/gcc/ada/erroutc.ads index ea6fda053ec..bde057483b8 100644 --- a/gcc/ada/erroutc.ads +++ b/gcc/ada/erroutc.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/errutil.adb b/gcc/ada/errutil.adb index e0a68645484..b70f18d2ce8 100644 --- a/gcc/ada/errutil.adb +++ b/gcc/ada/errutil.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1991-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/errutil.ads b/gcc/ada/errutil.ads index 07359ddb431..a2688b0d6a1 100644 --- a/gcc/ada/errutil.ads +++ b/gcc/ada/errutil.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -27,7 +27,7 @@ -- This package contains routines to output error messages and the -- corresponding instantiation of Styleg, suitable to instantiate Scng. --- It is not dependent on the GNAT tree packages (Atree, Sinfo, ...). +-- It is not dependent on the GNAT tree packages (Atree, Sinfo, ...) -- It uses the same global variables as Errout, located in package -- Err_Vars. Like Errout, it also uses the common variables and routines @@ -222,10 +222,10 @@ package Errutil is -- preprocessor). procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr); - -- Output a message at specified location. + -- Output a message at specified location procedure Error_Msg_S (Msg : String); - -- Output a message at current scan pointer location. + -- Output a message at current scan pointer location procedure Error_Msg_SC (Msg : String); -- Output a message at the start of the current token, unless we are at @@ -233,7 +233,7 @@ package Errutil is -- last real token in the file. procedure Error_Msg_SP (Msg : String); - -- Output a message at the start of the previous token. + -- Output a message at the start of the previous token procedure Set_Ignore_Errors (To : Boolean); -- Indicate, when To = True, that all reported errors should diff --git a/gcc/ada/eval_fat.adb b/gcc/ada/eval_fat.adb index bbe66537ee1..99db7769b1a 100644 --- a/gcc/ada/eval_fat.adb +++ b/gcc/ada/eval_fat.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -419,7 +419,7 @@ package body Eval_Fat is Exponent := Exponent + 1; end if; - -- Put back sign after applying the rounding. + -- Put back sign after applying the rounding if UR_Is_Negative (X) then Fraction := -Fraction; diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index c17a1664ee9..6699b422c24 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1045,6 +1045,26 @@ package body Exp_Aggr is if Present (Comp_Type) and then Controlled_Type (Comp_Type) then Set_No_Ctrl_Actions (A); + + -- If this is an aggregate for an array of arrays, each + -- subaggregate will be expanded as well, and even with + -- No_Ctrl_Actions the assignments of inner components will + -- require attachment in their assignments to temporaries. + -- These temporaries must be finalized for each subaggregate, + -- to prevent multiple attachments of the same temporary + -- location to same finalization chain (and consequently + -- circular lists). To ensure that finalization takes place + -- for each subaggregate we wrap the assignment in a block. + + if Is_Array_Type (Comp_Type) + and then Nkind (Expr) = N_Aggregate + then + A := + Make_Block_Statement (Loc, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List (A))); + end if; end if; Append_To (L, A); @@ -1574,7 +1594,6 @@ package body Exp_Aggr is is Loc : constant Source_Ptr := Sloc (N); L : constant List_Id := New_List; - Start_L : constant List_Id := New_List; N_Typ : constant Entity_Id := Etype (N); Comp : Node_Id; @@ -1600,6 +1619,7 @@ package body Exp_Aggr is Init_Typ : Entity_Id := Empty; Attach : Node_Id; + Ctrl_Stuff_Done : Boolean := False; function Get_Constraint_Association (T : Entity_Id) return Node_Id; -- Returns the first discriminant association in the constraint @@ -1627,6 +1647,10 @@ package body Exp_Aggr is -- it to finalization list F. Init_Pr conditions the call to the -- init proc since it may already be done due to ancestor initialization + procedure Gen_Ctrl_Actions_For_Aggr; + -- Deal with the various controlled type data structure + -- initializations + --------------------------------- -- Ancestor_Discriminant_Value -- --------------------------------- @@ -1821,6 +1845,7 @@ package body Exp_Aggr is is L : constant List_Id := New_List; Ref : Node_Id; + RC : RE_Id; begin -- Generate: @@ -1854,51 +1879,233 @@ package body Exp_Aggr is and then Present (Etype (Prefix (Expression (Target)))) and then Is_Limited_Type (Etype (Prefix (Expression (Target))))) then - if Init_Pr then - Append_List_To (L, - Build_Initialization_Call (Loc, - Id_Ref => Ref, - Typ => RTE (RE_Limited_Record_Controller), - In_Init_Proc => Within_Init_Proc)); - end if; - - Append_To (L, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To - (Find_Prim_Op - (RTE (RE_Limited_Record_Controller), Name_Initialize), - Loc), - Parameter_Associations => New_List (New_Copy_Tree (Ref)))); - + RC := RE_Limited_Record_Controller; else - if Init_Pr then - Append_List_To (L, - Build_Initialization_Call (Loc, - Id_Ref => Ref, - Typ => RTE (RE_Record_Controller), - In_Init_Proc => Within_Init_Proc)); - end if; - - Append_To (L, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To - (Find_Prim_Op - (RTE (RE_Record_Controller), Name_Initialize), - Loc), - Parameter_Associations => New_List (New_Copy_Tree (Ref)))); + RC := RE_Record_Controller; + end if; + if Init_Pr then + Append_List_To (L, + Build_Initialization_Call (Loc, + Id_Ref => Ref, + Typ => RTE (RC), + In_Init_Proc => Within_Init_Proc)); end if; Append_To (L, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To ( + Find_Prim_Op (RTE (RC), Name_Initialize), Loc), + Parameter_Associations => + New_List (New_Copy_Tree (Ref)))); + + Append_To (L, Make_Attach_Call ( Obj_Ref => New_Copy_Tree (Ref), Flist_Ref => F, With_Attach => Attach)); + return L; end Init_Controller; + ------------------------------- + -- Gen_Ctrl_Actions_For_Aggr -- + ------------------------------- + + procedure Gen_Ctrl_Actions_For_Aggr is + begin + if Present (Obj) + and then Finalize_Storage_Only (Typ) + and then (Is_Library_Level_Entity (Obj) + or else Entity (Constant_Value (RTE (RE_Garbage_Collected))) = + Standard_True) + then + Attach := Make_Integer_Literal (Loc, 0); + + elsif Nkind (Parent (N)) = N_Qualified_Expression + and then Nkind (Parent (Parent (N))) = N_Allocator + then + Attach := Make_Integer_Literal (Loc, 2); + + else + Attach := Make_Integer_Literal (Loc, 1); + end if; + + -- Determine the external finalization list. It is either the + -- finalization list of the outer-scope or the one coming from + -- an outer aggregate. When the target is not a temporary, the + -- proper scope is the scope of the target rather than the + -- potentially transient current scope. + + if Controlled_Type (Typ) then + if Present (Flist) then + External_Final_List := New_Copy_Tree (Flist); + + elsif Is_Entity_Name (Target) + and then Present (Scope (Entity (Target))) + then + External_Final_List + := Find_Final_List (Scope (Entity (Target))); + + else + External_Final_List := Find_Final_List (Current_Scope); + end if; + + else + External_Final_List := Empty; + end if; + + -- Initialize and attach the outer object in the is_controlled case + + if Is_Controlled (Typ) then + if Ancestor_Is_Subtype_Mark then + Ref := Convert_To (Init_Typ, New_Copy_Tree (Target)); + Set_Assignment_OK (Ref); + Append_To (L, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To + (Find_Prim_Op (Init_Typ, Name_Initialize), Loc), + Parameter_Associations => New_List (New_Copy_Tree (Ref)))); + end if; + + if not Has_Controlled_Component (Typ) then + Ref := New_Copy_Tree (Target); + Set_Assignment_OK (Ref); + Append_To (L, + Make_Attach_Call ( + Obj_Ref => Ref, + Flist_Ref => New_Copy_Tree (External_Final_List), + With_Attach => Attach)); + end if; + end if; + + -- In the Has_Controlled component case, all the intermediate + -- controllers must be initialized + + if Has_Controlled_Component (Typ) + and not Is_Limited_Ancestor_Expansion + then + declare + Inner_Typ : Entity_Id; + Outer_Typ : Entity_Id; + At_Root : Boolean; + + begin + + Outer_Typ := Base_Type (Typ); + + -- Find outer type with a controller + + while Outer_Typ /= Init_Typ + and then not Has_New_Controlled_Component (Outer_Typ) + loop + Outer_Typ := Etype (Outer_Typ); + end loop; + + -- Attach it to the outer record controller to the + -- external final list + + if Outer_Typ = Init_Typ then + Append_List_To (L, + Init_Controller ( + Target => Target, + Typ => Outer_Typ, + F => External_Final_List, + Attach => Attach, + Init_Pr => False)); + + At_Root := True; + Inner_Typ := Init_Typ; + + else + Append_List_To (L, + Init_Controller ( + Target => Target, + Typ => Outer_Typ, + F => External_Final_List, + Attach => Attach, + Init_Pr => True)); + + Inner_Typ := Etype (Outer_Typ); + At_Root := + not Is_Tagged_Type (Typ) or else Inner_Typ = Outer_Typ; + end if; + + -- The outer object has to be attached as well + + if Is_Controlled (Typ) then + Ref := New_Copy_Tree (Target); + Set_Assignment_OK (Ref); + Append_To (L, + Make_Attach_Call ( + Obj_Ref => Ref, + Flist_Ref => New_Copy_Tree (External_Final_List), + With_Attach => New_Copy_Tree (Attach))); + end if; + + -- Initialize the internal controllers for tagged types with + -- more than one controller. + + while not At_Root and then Inner_Typ /= Init_Typ loop + if Has_New_Controlled_Component (Inner_Typ) then + F := + Make_Selected_Component (Loc, + Prefix => + Convert_To (Outer_Typ, New_Copy_Tree (Target)), + Selector_Name => + Make_Identifier (Loc, Name_uController)); + F := + Make_Selected_Component (Loc, + Prefix => F, + Selector_Name => Make_Identifier (Loc, Name_F)); + + Append_List_To (L, + Init_Controller ( + Target => Target, + Typ => Inner_Typ, + F => F, + Attach => Make_Integer_Literal (Loc, 1), + Init_Pr => True)); + Outer_Typ := Inner_Typ; + end if; + + -- Stop at the root + + At_Root := Inner_Typ = Etype (Inner_Typ); + Inner_Typ := Etype (Inner_Typ); + end loop; + + -- If not done yet attach the controller of the ancestor part + + if Outer_Typ /= Init_Typ + and then Inner_Typ = Init_Typ + and then Has_Controlled_Component (Init_Typ) + then + F := + Make_Selected_Component (Loc, + Prefix => Convert_To (Outer_Typ, New_Copy_Tree (Target)), + Selector_Name => + Make_Identifier (Loc, Name_uController)); + F := + Make_Selected_Component (Loc, + Prefix => F, + Selector_Name => Make_Identifier (Loc, Name_F)); + + Attach := Make_Integer_Literal (Loc, 1); + Append_List_To (L, + Init_Controller ( + Target => Target, + Typ => Init_Typ, + F => F, + Attach => Attach, + Init_Pr => Ancestor_Is_Expression)); + end if; + end; + end if; + end Gen_Ctrl_Actions_For_Aggr; + -- Start of processing for Build_Record_Aggr_Code begin @@ -1908,6 +2115,7 @@ package body Exp_Aggr is if Nkind (N) = N_Extension_Aggregate then declare A : constant Node_Id := Ancestor_Part (N); + Assign : List_Id; begin -- If the ancestor part is a subtype mark "T", we generate @@ -1975,14 +2183,14 @@ package body Exp_Aggr is if Has_Default_Init_Comps (N) or else Has_Task (Base_Type (Init_Typ)) then - Append_List_To (Start_L, + Append_List_To (L, Build_Initialization_Call (Loc, Id_Ref => Ref, Typ => Init_Typ, In_Init_Proc => Within_Init_Proc, With_Default_Init => True)); else - Append_List_To (Start_L, + Append_List_To (L, Build_Initialization_Call (Loc, Id_Ref => Ref, Typ => Init_Typ, @@ -2001,7 +2209,7 @@ package body Exp_Aggr is elsif Is_Limited_Type (Etype (A)) then Ancestor_Is_Expression := True; - Append_List_To (Start_L, + Append_List_To (L, Build_Record_Aggr_Code ( N => Expression (A), Typ => Etype (Expression (A)), @@ -2017,9 +2225,34 @@ package body Exp_Aggr is Ancestor_Is_Expression := True; Init_Typ := Etype (A); - -- Assign the tag before doing the assignment to make sure - -- that the dispatching call in the subsequent deep_adjust - -- works properly (unless Java_VM, where tags are implicit). + -- If the ancestor part is an aggregate, force its full + -- expansion, which was delayed. + + if Nkind (A) = N_Qualified_Expression + and then (Nkind (Expression (A)) = N_Aggregate + or else + Nkind (Expression (A)) = N_Extension_Aggregate) + then + Set_Analyzed (A, False); + Set_Analyzed (Expression (A), False); + end if; + + Ref := Convert_To (Init_Typ, New_Copy_Tree (Target)); + Set_Assignment_OK (Ref); + + -- Make the assignment without usual controlled actions since + -- we only want the post adjust but not the pre finalize here + -- Add manual adjust when necessary + + Assign := New_List ( + Make_OK_Assignment_Statement (Loc, + Name => Ref, + Expression => A)); + Set_No_Ctrl_Actions (First (Assign)); + + -- Assign the tag now to make sure that the dispatching call in + -- the subsequent deep_adjust works properly (unless Java_VM, + -- where tags are implicit). if not Java_VM then Instr := @@ -2039,30 +2272,23 @@ package body Exp_Aggr is Loc))); Set_Assignment_OK (Name (Instr)); - Append_To (L, Instr); + Append_To (Assign, Instr); end if; - -- If the ancestor part is an aggregate, force its full - -- expansion, which was delayed. + -- Call Adjust manually - if Nkind (A) = N_Qualified_Expression - and then (Nkind (Expression (A)) = N_Aggregate - or else - Nkind (Expression (A)) = N_Extension_Aggregate) - then - Set_Analyzed (A, False); - Set_Analyzed (Expression (A), False); + if Controlled_Type (Etype (A)) then + Append_List_To (Assign, + Make_Adjust_Call ( + Ref => New_Copy_Tree (Ref), + Typ => Etype (A), + Flist_Ref => New_Reference_To ( + RTE (RE_Global_Final_List), Loc), + With_Attach => Make_Integer_Literal (Loc, 0))); end if; - Ref := Convert_To (Init_Typ, New_Copy_Tree (Target)); - Set_Assignment_OK (Ref); Append_To (L, - Make_Unsuppress_Block (Loc, - Name_Discriminant_Check, - New_List ( - Make_OK_Assignment_Statement (Loc, - Name => Ref, - Expression => A)))); + Make_Unsuppress_Block (Loc, Name_Discriminant_Check, Assign)); if Has_Discriminants (Init_Typ) then Check_Ancestor_Discriminants (Init_Typ); @@ -2160,10 +2386,6 @@ package body Exp_Aggr is if not Inside_Init_Proc and not Inside_Allocator then Build_Activation_Chain_Entity (N); - - if not Has_Master_Entity (Current_Scope) then - Build_Master_Entity (Etype (N)); - end if; end if; end if; end; @@ -2180,11 +2402,23 @@ package body Exp_Aggr is goto Next_Comp; end if; - -- ??? + -- Prepare for component assignment if Ekind (Selector) /= E_Discriminant or else Nkind (N) = N_Extension_Aggregate then + + -- All the discriminants have now been assigned + -- This is now a good moment to initialize and attach all the + -- controllers. Their position may depend on the discriminants. + + if Ekind (Selector) /= E_Discriminant + and then not Ctrl_Stuff_Done + then + Gen_Ctrl_Actions_For_Aggr; + Ctrl_Stuff_Done := True; + end if; + Comp_Type := Etype (Selector); Comp_Expr := Make_Selected_Component (Loc, @@ -2222,7 +2456,8 @@ package body Exp_Aggr is Internal_Final_List := Empty; end if; - -- ??? + -- Now either create the assignment or generate the code for the + -- inner aggregate top-down. if Is_Delayed_Aggregate (Expr_Q) then Append_List_To (L, @@ -2347,199 +2582,15 @@ package body Exp_Aggr is Append_To (L, Instr); end if; - -- Now deal with the various controlled type data structure - -- initializations - - if Present (Obj) - and then Finalize_Storage_Only (Typ) - and then - (Is_Library_Level_Entity (Obj) - or else Entity (Constant_Value (RTE (RE_Garbage_Collected))) = - Standard_True) - then - Attach := Make_Integer_Literal (Loc, 0); - - elsif Nkind (Parent (N)) = N_Qualified_Expression - and then Nkind (Parent (Parent (N))) = N_Allocator - then - Attach := Make_Integer_Literal (Loc, 2); - - else - Attach := Make_Integer_Literal (Loc, 1); - end if; - - -- Determine the external finalization list. It is either the - -- finalization list of the outer-scope or the one coming from - -- an outer aggregate. When the target is not a temporary, the - -- proper scope is the scope of the target rather than the - -- potentially transient current scope. - - if Controlled_Type (Typ) then - if Present (Flist) then - External_Final_List := New_Copy_Tree (Flist); - - elsif Is_Entity_Name (Target) - and then Present (Scope (Entity (Target))) - then - External_Final_List := Find_Final_List (Scope (Entity (Target))); - - else - External_Final_List := Find_Final_List (Current_Scope); - end if; - - else - External_Final_List := Empty; - end if; - - -- Initialize and attach the outer object in the is_controlled case - - if Is_Controlled (Typ) then - if Ancestor_Is_Subtype_Mark then - Ref := Convert_To (Init_Typ, New_Copy_Tree (Target)); - Set_Assignment_OK (Ref); - Append_To (L, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To - (Find_Prim_Op (Init_Typ, Name_Initialize), Loc), - Parameter_Associations => New_List (New_Copy_Tree (Ref)))); - end if; + -- If the controllers have not been initialized yet (by lack of non- + -- discriminant components), let's do it now. - if not Has_Controlled_Component (Typ) then - Ref := New_Copy_Tree (Target); - Set_Assignment_OK (Ref); - Append_To (Start_L, - Make_Attach_Call ( - Obj_Ref => Ref, - Flist_Ref => New_Copy_Tree (External_Final_List), - With_Attach => Attach)); - end if; + if not Ctrl_Stuff_Done then + Gen_Ctrl_Actions_For_Aggr; + Ctrl_Stuff_Done := True; end if; - -- In the Has_Controlled component case, all the intermediate - -- controllers must be initialized - - if Has_Controlled_Component (Typ) - and not Is_Limited_Ancestor_Expansion - then - declare - Inner_Typ : Entity_Id; - Outer_Typ : Entity_Id; - At_Root : Boolean; - - begin - - Outer_Typ := Base_Type (Typ); - - -- Find outer type with a controller - - while Outer_Typ /= Init_Typ - and then not Has_New_Controlled_Component (Outer_Typ) - loop - Outer_Typ := Etype (Outer_Typ); - end loop; - - -- Attach it to the outer record controller to the - -- external final list - - if Outer_Typ = Init_Typ then - Append_List_To (Start_L, - Init_Controller ( - Target => Target, - Typ => Outer_Typ, - F => External_Final_List, - Attach => Attach, - Init_Pr => Ancestor_Is_Expression)); - - At_Root := True; - Inner_Typ := Init_Typ; - - else - Append_List_To (Start_L, - Init_Controller ( - Target => Target, - Typ => Outer_Typ, - F => External_Final_List, - Attach => Attach, - Init_Pr => True)); - - Inner_Typ := Etype (Outer_Typ); - At_Root := - not Is_Tagged_Type (Typ) or else Inner_Typ = Outer_Typ; - end if; - - -- The outer object has to be attached as well - - if Is_Controlled (Typ) then - Ref := New_Copy_Tree (Target); - Set_Assignment_OK (Ref); - Append_To (Start_L, - Make_Attach_Call ( - Obj_Ref => Ref, - Flist_Ref => New_Copy_Tree (External_Final_List), - With_Attach => New_Copy_Tree (Attach))); - end if; - - -- Initialize the internal controllers for tagged types with - -- more than one controller. - - while not At_Root and then Inner_Typ /= Init_Typ loop - if Has_New_Controlled_Component (Inner_Typ) then - F := - Make_Selected_Component (Loc, - Prefix => Convert_To (Outer_Typ, New_Copy_Tree (Target)), - Selector_Name => - Make_Identifier (Loc, Name_uController)); - F := - Make_Selected_Component (Loc, - Prefix => F, - Selector_Name => Make_Identifier (Loc, Name_F)); - - Append_List_To (Start_L, - Init_Controller ( - Target => Target, - Typ => Inner_Typ, - F => F, - Attach => Make_Integer_Literal (Loc, 1), - Init_Pr => True)); - Outer_Typ := Inner_Typ; - end if; - - -- Stop at the root - - At_Root := Inner_Typ = Etype (Inner_Typ); - Inner_Typ := Etype (Inner_Typ); - end loop; - - -- If not done yet attach the controller of the ancestor part - - if Outer_Typ /= Init_Typ - and then Inner_Typ = Init_Typ - and then Has_Controlled_Component (Init_Typ) - then - F := - Make_Selected_Component (Loc, - Prefix => Convert_To (Outer_Typ, New_Copy_Tree (Target)), - Selector_Name => Make_Identifier (Loc, Name_uController)); - F := - Make_Selected_Component (Loc, - Prefix => F, - Selector_Name => Make_Identifier (Loc, Name_F)); - - Attach := Make_Integer_Literal (Loc, 1); - Append_List_To (Start_L, - Init_Controller ( - Target => Target, - Typ => Init_Typ, - F => F, - Attach => Attach, - Init_Pr => Ancestor_Is_Expression)); - end if; - end; - end if; - - Append_List_To (Start_L, L); - return Start_L; + return L; end Build_Record_Aggr_Code; ------------------------------- @@ -2700,6 +2751,11 @@ package body Exp_Aggr is return; end if; + if Requires_Transient_Scope (Typ) then + Establish_Transient_Scope (Aggr, Sec_Stack => + Is_Controlled (Typ) or else Has_Controlled_Component (Typ)); + end if; + Insert_Actions_After (N, Late_Expansion (Aggr, Typ, Occ, Obj => Obj)); Set_No_Initialization (N); Initialize_Discriminants (N, Typ); diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index b9d7ee1f1df..11bc258d86e 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -85,16 +85,17 @@ package body Exp_Attr is procedure Expand_Fpt_Attribute (N : Node_Id; - Rtp : Entity_Id; + Pkg : RE_Id; Nam : Name_Id; Args : List_Id); -- This procedure expands a call to a floating-point attribute function. -- N is the attribute reference node, and Args is a list of arguments to - -- be passed to the function call. Rtp is the root type of the floating - -- point type involved (used to select the proper generic instantiation - -- of the package containing the attribute routines). The Nam argument - -- is the attribute processing routine to be called. This is normally - -- the same as the attribute name, except in the Unaligned_Valid case. + -- be passed to the function call. Pkg identifies the package containing + -- the appropriate instantiation of System.Fat_Gen. Float arguments in Args + -- have already been converted to the floating-point type for which Pkg was + -- instantiated. The Nam argument is the relevant attribute processing + -- routine to be called. This is the same as the attribute name, except in + -- the Unaligned_Valid case. procedure Expand_Fpt_Attribute_R (N : Node_Id); -- This procedure expands a call to a floating-point attribute function @@ -123,6 +124,15 @@ package body Exp_Attr is -- A reference to a type within its own scope is resolved to a reference -- to the current instance of the type in its initialization procedure. + procedure Find_Fat_Info + (T : Entity_Id; + Fat_Type : out Entity_Id; + Fat_Pkg : out RE_Id); + -- Given a floating-point type T, identifies the package containing the + -- attributes for this type (returned in Fat_Pkg), and the corresponding + -- type for which this package was instantiated from Fat_Gen. Error if T + -- is not a floating-point type. + function Find_Stream_Subprogram (Typ : Entity_Id; Nam : TSS_Name_Type) return Entity_Id; @@ -176,7 +186,7 @@ package body Exp_Attr is if Check then Insert_Action (N, Decl); else - Insert_Action (N, Decl, All_Checks); + Insert_Action (N, Decl, Suppress => All_Checks); end if; if Installed then @@ -260,18 +270,17 @@ package body Exp_Attr is procedure Expand_Fpt_Attribute (N : Node_Id; - Rtp : Entity_Id; + Pkg : RE_Id; Nam : Name_Id; Args : List_Id) is Loc : constant Source_Ptr := Sloc (N); Typ : constant Entity_Id := Etype (N); - Pkg : RE_Id; Fnm : Node_Id; begin - -- The function name is the selected component Fat_xxx.yyy where xxx - -- is the floating-point root type, and yyy is the argument Nam. + -- The function name is the selected component Attr_xxx.yyy where + -- Attr_xxx is the package name, and yyy is the argument Nam. -- Note: it would be more usual to have separate RE entries for each -- of the entities in the Fat packages, but first they have identical @@ -279,16 +288,6 @@ package body Exp_Attr is -- meet the normal RE rule of separate names for all runtime entities), -- and second there would be an awful lot of them! - if Rtp = Standard_Short_Float then - Pkg := RE_Fat_Short_Float; - elsif Rtp = Standard_Float then - Pkg := RE_Fat_Float; - elsif Rtp = Standard_Long_Float then - Pkg := RE_Fat_Long_Float; - else - Pkg := RE_Fat_Long_Long_Float; - end if; - Fnm := Make_Selected_Component (Loc, Prefix => New_Reference_To (RTE (Pkg), Loc), @@ -302,7 +301,7 @@ package body Exp_Attr is Rewrite (N, Unchecked_Convert_To (Base_Type (Etype (N)), Make_Function_Call (Loc, - Name => Fnm, + Name => Fnm, Parameter_Associations => Args))); Analyze_And_Resolve (N, Typ); @@ -318,12 +317,13 @@ package body Exp_Attr is procedure Expand_Fpt_Attribute_R (N : Node_Id) is E1 : constant Node_Id := First (Expressions (N)); - Rtp : constant Entity_Id := Root_Type (Etype (E1)); - + Ftp : Entity_Id; + Pkg : RE_Id; begin + Find_Fat_Info (Etype (E1), Ftp, Pkg); Expand_Fpt_Attribute - (N, Rtp, Attribute_Name (N), - New_List (Unchecked_Convert_To (Rtp, Relocate_Node (E1)))); + (N, Pkg, Attribute_Name (N), + New_List (Unchecked_Convert_To (Ftp, Relocate_Node (E1)))); end Expand_Fpt_Attribute_R; ----------------------------- @@ -337,14 +337,15 @@ package body Exp_Attr is procedure Expand_Fpt_Attribute_RI (N : Node_Id) is E1 : constant Node_Id := First (Expressions (N)); - Rtp : constant Entity_Id := Root_Type (Etype (E1)); + Ftp : Entity_Id; + Pkg : RE_Id; E2 : constant Node_Id := Next (E1); - begin + Find_Fat_Info (Etype (E1), Ftp, Pkg); Expand_Fpt_Attribute - (N, Rtp, Attribute_Name (N), + (N, Pkg, Attribute_Name (N), New_List ( - Unchecked_Convert_To (Rtp, Relocate_Node (E1)), + Unchecked_Convert_To (Ftp, Relocate_Node (E1)), Unchecked_Convert_To (Standard_Integer, Relocate_Node (E2)))); end Expand_Fpt_Attribute_RI; @@ -358,15 +359,16 @@ package body Exp_Attr is procedure Expand_Fpt_Attribute_RR (N : Node_Id) is E1 : constant Node_Id := First (Expressions (N)); - Rtp : constant Entity_Id := Root_Type (Etype (E1)); + Ftp : Entity_Id; + Pkg : RE_Id; E2 : constant Node_Id := Next (E1); - begin + Find_Fat_Info (Etype (E1), Ftp, Pkg); Expand_Fpt_Attribute - (N, Rtp, Attribute_Name (N), + (N, Pkg, Attribute_Name (N), New_List ( - Unchecked_Convert_To (Rtp, Relocate_Node (E1)), - Unchecked_Convert_To (Rtp, Relocate_Node (E2)))); + Unchecked_Convert_To (Ftp, Relocate_Node (E1)), + Unchecked_Convert_To (Ftp, Relocate_Node (E2)))); end Expand_Fpt_Attribute_RR; ---------------------------------- @@ -1011,8 +1013,31 @@ package body Exp_Attr is when Attribute_Callable => Callable : begin - Rewrite (N, - Build_Call_With_Task (Pref, RTE (RE_Callable))); + -- We have an object of a task interface class-wide type as a prefix + -- to Callable. Generate: + + -- callable (Pref._disp_get_task_id); + + if Ada_Version >= Ada_05 + and then Ekind (Etype (Pref)) = E_Class_Wide_Type + and then Is_Interface (Etype (Pref)) + and then Is_Task_Interface (Etype (Pref)) + then + Rewrite (N, + Make_Function_Call (Loc, + Name => + New_Reference_To (RTE (RE_Callable), Loc), + Parameter_Associations => New_List ( + Make_Selected_Component (Loc, + Prefix => + New_Copy_Tree (Pref), + Selector_Name => + Make_Identifier (Loc, Name_uDisp_Get_Task_Id))))); + else + Rewrite (N, + Build_Call_With_Task (Pref, RTE (RE_Callable))); + end if; + Analyze_And_Resolve (N, Standard_Boolean); end Callable; @@ -1630,8 +1655,8 @@ package body Exp_Attr is -- expands into - -- Result_Type (System.Fore (Long_Long_Float (Type'First)), - -- Long_Long_Float (Type'Last)) + -- Result_Type (System.Fore (Universal_Real (Type'First)), + -- Universal_Real (Type'Last)) -- Note that we know that the type is a non-static subtype, or Fore -- would have itself been computed dynamically in Eval_Attribute. @@ -1647,12 +1672,12 @@ package body Exp_Attr is Name => New_Reference_To (RTE (RE_Fore), Loc), Parameter_Associations => New_List ( - Convert_To (Standard_Long_Long_Float, + Convert_To (Universal_Real, Make_Attribute_Reference (Loc, Prefix => New_Reference_To (Ptyp, Loc), Attribute_Name => Name_First)), - Convert_To (Standard_Long_Long_Float, + Convert_To (Universal_Real, Make_Attribute_Reference (Loc, Prefix => New_Reference_To (Ptyp, Loc), Attribute_Name => Name_Last)))))); @@ -2283,6 +2308,17 @@ package body Exp_Attr is when Attribute_Machine => Expand_Fpt_Attribute_R (N); + ---------------------- + -- Machine_Rounding -- + ---------------------- + + -- Transforms 'Machine_Rounding into a call to the floating-point + -- attribute function Machine_Rounding in Fat_xxx (where xxx is the root + -- type). + + when Attribute_Machine_Rounding => + Expand_Fpt_Attribute_R (N); + ------------------ -- Machine_Size -- ------------------ @@ -2425,7 +2461,7 @@ package body Exp_Attr is end if; - Analyze_And_Resolve (N, Btyp, All_Checks); + Analyze_And_Resolve (N, Btyp, Suppress => All_Checks); end Mod_Case; ----------- @@ -3211,7 +3247,7 @@ package body Exp_Attr is Rewrite (Prefix (N), New_Occurrence_Of (Entity (Pref), Loc)); return; - -- For x'Size applied to an object of a class-wide type, transform + -- For X'Size applied to an object of a class-wide type, transform -- X'Size into a call to the primitive operation _Size applied to X. elsif Is_Class_Wide_Type (Ptyp) then @@ -3268,8 +3304,8 @@ package body Exp_Attr is else Apply_Universal_Integer_Attribute_Checks (N); - -- If we have Size applied to a formal parameter, that is a - -- packed array subtype, then apply size to the actual subtype. + -- If Size is applied to a formal parameter that is of a packed + -- array subtype, then apply Size to the actual subtype. if Is_Entity_Name (Pref) and then Is_Formal (Entity (Pref)) @@ -3284,6 +3320,20 @@ package body Exp_Attr is Analyze_And_Resolve (N, Typ); end if; + -- If Size is applied to a dereference of an access to + -- unconstrained packed array, GIGI needs to see its + -- unconstrained nominal type, but also a hint to the actual + -- constrained type. + + if Nkind (Pref) = N_Explicit_Dereference + and then Is_Array_Type (Etype (Pref)) + and then not Is_Constrained (Etype (Pref)) + and then Is_Packed (Etype (Pref)) + then + Set_Actual_Designated_Subtype (Pref, + Get_Actual_Subtype (Pref)); + end if; + return; end if; @@ -3590,7 +3640,28 @@ package body Exp_Attr is when Attribute_Terminated => Terminated : begin - if Restricted_Profile then + -- The prefix of Terminated is of a task interface class-wide type. + -- Generate: + + -- terminated (Pref._disp_get_task_id); + + if Ada_Version >= Ada_05 + and then Ekind (Etype (Pref)) = E_Class_Wide_Type + and then Is_Interface (Etype (Pref)) + and then Is_Task_Interface (Etype (Pref)) + then + Rewrite (N, + Make_Function_Call (Loc, + Name => + New_Reference_To (RTE (RE_Terminated), Loc), + Parameter_Associations => New_List ( + Make_Selected_Component (Loc, + Prefix => + New_Copy_Tree (Pref), + Selector_Name => + Make_Identifier (Loc, Name_uDisp_Get_Task_Id))))); + + elsif Restricted_Profile then Rewrite (N, Build_Call_With_Task (Pref, RTE (RE_Restricted_Terminated))); @@ -3641,7 +3712,26 @@ package body Exp_Attr is ---------------------- when Attribute_Unchecked_Access => - Expand_Access_To_Type (N); + + -- Ada 2005 (AI-251): If the designated type is an interface, then + -- rewrite the referenced object as a conversion to force the + -- displacement of the pointer to the secondary dispatch table. + + if Is_Interface (Directly_Designated_Type (Btyp)) then + declare + Ref_Object : constant Node_Id := Get_Referenced_Object (Pref); + Conversion : Node_Id; + begin + Conversion := Convert_To (Typ, New_Copy_Tree (Ref_Object)); + Rewrite (N, Conversion); + Analyze_And_Resolve (N, Typ); + end; + + -- Otherwise this is like normal Access without a check + + else + Expand_Access_To_Type (N); + end if; ----------------- -- UET_Address -- @@ -3687,7 +3777,26 @@ package body Exp_Attr is ------------------------- when Attribute_Unrestricted_Access => - Expand_Access_To_Type (N); + + -- Ada 2005 (AI-251): If the designated type is an interface, then + -- rewrite the referenced object as a conversion to force the + -- displacement of the pointer to the secondary dispatch table. + + if Is_Interface (Directly_Designated_Type (Btyp)) then + declare + Ref_Object : constant Node_Id := Get_Referenced_Object (Pref); + Conversion : Node_Id; + begin + Conversion := Convert_To (Typ, New_Copy_Tree (Ref_Object)); + Rewrite (N, Conversion); + Analyze_And_Resolve (N, Typ); + end; + + -- Otherwise this is like Access without a check + + else + Expand_Access_To_Type (N); + end if; --------------- -- VADS_Size -- @@ -3824,43 +3933,50 @@ package body Exp_Attr is if Is_Floating_Point_Type (Ptyp) then declare - Rtp : constant Entity_Id := Root_Type (Etype (Pref)); + Pkg : RE_Id; + Ftp : Entity_Id; begin -- For vax fpt types, call appropriate routine in special vax -- floating point unit. We do not have to worry about loads in -- this case, since these types have no signalling NaN's. - if Vax_Float (Rtp) then + if Vax_Float (Btyp) then Expand_Vax_Valid (N); - -- If the floating-point object might be unaligned, we need - -- to call the special routine Unaligned_Valid, which makes - -- the needed copy, being careful not to load the value into - -- any floating-point register. The argument in this case is - -- obj'Address (see Unchecked_Valid routine in s-fatgen.ads). + -- Non VAX float case - elsif Is_Possibly_Unaligned_Object (Pref) then - Set_Attribute_Name (N, Name_Unaligned_Valid); - Expand_Fpt_Attribute - (N, Rtp, Name_Unaligned_Valid, - New_List ( - Make_Attribute_Reference (Loc, - Prefix => Relocate_Node (Pref), - Attribute_Name => Name_Address))); + else + Find_Fat_Info (Etype (Pref), Ftp, Pkg); + + -- If the floating-point object might be unaligned, we need + -- to call the special routine Unaligned_Valid, which makes + -- the needed copy, being careful not to load the value into + -- any floating-point register. The argument in this case is + -- obj'Address (see Unchecked_Valid routine in Fat_Gen). + + if Is_Possibly_Unaligned_Object (Pref) then + Set_Attribute_Name (N, Name_Unaligned_Valid); + Expand_Fpt_Attribute + (N, Pkg, Name_Unaligned_Valid, + New_List ( + Make_Attribute_Reference (Loc, + Prefix => Relocate_Node (Pref), + Attribute_Name => Name_Address))); - -- In the normal case where we are sure the object is aligned, - -- we generate a call to Valid, and the argument in this case - -- is obj'Unrestricted_Access (after converting obj to the - -- right floating-point type). + -- In the normal case where we are sure the object is + -- aligned, we generate a call to Valid, and the argument in + -- this case is obj'Unrestricted_Access (after converting + -- obj to the right floating-point type). - else - Expand_Fpt_Attribute - (N, Rtp, Name_Valid, - New_List ( - Make_Attribute_Reference (Loc, - Prefix => Unchecked_Convert_To (Rtp, Pref), - Attribute_Name => Name_Unrestricted_Access))); + else + Expand_Fpt_Attribute + (N, Pkg, Name_Valid, + New_List ( + Make_Attribute_Reference (Loc, + Prefix => Unchecked_Convert_To (Ftp, Pref), + Attribute_Name => Name_Unrestricted_Access))); + end if; end if; -- One more task, we still need a range check. Required @@ -4488,6 +4604,78 @@ package body Exp_Attr is Reason => CE_Overflow_Check_Failed)); end Expand_Pred_Succ; + ------------------- + -- Find_Fat_Info -- + ------------------- + + procedure Find_Fat_Info + (T : Entity_Id; + Fat_Type : out Entity_Id; + Fat_Pkg : out RE_Id) + is + Btyp : constant Entity_Id := Base_Type (T); + Rtyp : constant Entity_Id := Root_Type (T); + Digs : constant Nat := UI_To_Int (Digits_Value (Btyp)); + + begin + -- If the base type is VAX float, then get appropriate VAX float type + + if Vax_Float (Btyp) then + case Digs is + when 6 => + Fat_Type := RTE (RE_Fat_VAX_F); + Fat_Pkg := RE_Attr_VAX_F_Float; + + when 9 => + Fat_Type := RTE (RE_Fat_VAX_D); + Fat_Pkg := RE_Attr_VAX_D_Float; + + when 15 => + Fat_Type := RTE (RE_Fat_VAX_G); + Fat_Pkg := RE_Attr_VAX_G_Float; + + when others => + raise Program_Error; + end case; + + -- If root type is VAX float, this is the case where the library has + -- been recompiled in VAX float mode, and we have an IEEE float type. + -- This is when we use the special IEEE Fat packages. + + elsif Vax_Float (Rtyp) then + case Digs is + when 6 => + Fat_Type := RTE (RE_Fat_IEEE_Short); + Fat_Pkg := RE_Attr_IEEE_Short; + + when 15 => + Fat_Type := RTE (RE_Fat_IEEE_Long); + Fat_Pkg := RE_Attr_IEEE_Long; + + when others => + raise Program_Error; + end case; + + -- If neither the base type nor the root type is VAX_Float then VAX + -- float is out of the picture, and we can just use the root type. + + else + Fat_Type := Rtyp; + + if Fat_Type = Standard_Short_Float then + Fat_Pkg := RE_Attr_Short_Float; + elsif Fat_Type = Standard_Float then + Fat_Pkg := RE_Attr_Float; + elsif Fat_Type = Standard_Long_Float then + Fat_Pkg := RE_Attr_Long_Float; + elsif Fat_Type = Standard_Long_Long_Float then + Fat_Pkg := RE_Attr_Long_Long_Float; + else + raise Program_Error; + end if; + end if; + end Find_Fat_Info; + ---------------------------- -- Find_Stream_Subprogram -- ---------------------------- diff --git a/gcc/ada/exp_ch11.adb b/gcc/ada/exp_ch11.adb index ec6b9589286..56c3095b2df 100644 --- a/gcc/ada/exp_ch11.adb +++ b/gcc/ada/exp_ch11.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_ch11.ads b/gcc/ada/exp_ch11.ads index ff8e82cbdcd..85340d672df 100644 --- a/gcc/ada/exp_ch11.ads +++ b/gcc/ada/exp_ch11.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_ch2.adb b/gcc/ada/exp_ch2.adb index 56a294a5bad..0dcde3b24d7 100644 --- a/gcc/ada/exp_ch2.adb +++ b/gcc/ada/exp_ch2.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 4b829214bf7..3feb7d33aaa 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,13 +79,6 @@ package body Exp_Ch3 is -- used for attachment of any actions required in its construction. -- It also supplies the source location used for the procedure. - procedure Build_Class_Wide_Master (T : Entity_Id); - -- for access to class-wide limited types we must build a task master - -- because some subsequent extension may add a task component. To avoid - -- bringing in the tasking run-time whenever an access-to-class-wide - -- limited type is used, we use the soft-link mechanism and add a level - -- of indirection to calls to routines that manipulate Master_Ids. - function Build_Discriminant_Formals (Rec_Id : Entity_Id; Use_Dl : Boolean) return List_Id; @@ -651,6 +644,7 @@ package body Exp_Ch3 is M_Id : Entity_Id; Decl : Node_Id; P : Node_Id; + Par : Node_Id; begin -- Nothing to do if there is no task hierarchy @@ -659,6 +653,16 @@ package body Exp_Ch3 is return; end if; + -- Find declaration that created the access type: either a + -- type declaration, or an object declaration with an + -- access definition, in which case the type is anonymous. + + if Is_Itype (T) then + P := Associated_Node_For_Itype (T); + else + P := Parent (T); + end if; + -- Nothing to do if we already built a master entity for this scope if not Has_Master_Entity (Scope (T)) then @@ -677,24 +681,24 @@ package body Exp_Ch3 is Make_Explicit_Dereference (Loc, New_Reference_To (RTE (RE_Current_Master), Loc))); - P := Parent (T); Insert_Before (P, Decl); Analyze (Decl); Set_Has_Master_Entity (Scope (T)); -- Now mark the containing scope as a task master - while Nkind (P) /= N_Compilation_Unit loop - P := Parent (P); + Par := P; + while Nkind (Par) /= N_Compilation_Unit loop + Par := Parent (Par); -- If we fall off the top, we are at the outer level, and the -- environment task is our effective master, so nothing to mark. - if Nkind (P) = N_Task_Body - or else Nkind (P) = N_Block_Statement - or else Nkind (P) = N_Subprogram_Body + if Nkind (Par) = N_Task_Body + or else Nkind (Par) = N_Block_Statement + or else Nkind (Par) = N_Subprogram_Body then - Set_Is_Task_Master (P, True); + Set_Is_Task_Master (Par, True); exit; end if; end loop; @@ -711,7 +715,7 @@ package body Exp_Ch3 is Defining_Identifier => M_Id, Subtype_Mark => New_Reference_To (Standard_Integer, Loc), Name => Make_Identifier (Loc, Name_uMaster)); - Insert_Before (Parent (T), Decl); + Insert_Before (P, Decl); Analyze (Decl); Set_Master_Id (T, M_Id); @@ -1758,10 +1762,18 @@ package body Exp_Ch3 is Aux_N : Node_Id; begin - if not Is_Interface (Typ) - and then Etype (Typ) /= Typ - then - Init_Secondary_Tags_Internal (Etype (Typ)); + if not Is_Interface (Typ) then + + -- Climb to the ancestor (if any) handling private types + + if Present (Full_View (Etype (Typ))) then + if Full_View (Etype (Typ)) /= Typ then + Init_Secondary_Tags_Internal (Full_View (Etype (Typ))); + end if; + + elsif Etype (Typ) /= Typ then + Init_Secondary_Tags_Internal (Etype (Typ)); + end if; end if; if Present (Abstract_Interfaces (Typ)) @@ -1824,7 +1836,14 @@ package body Exp_Ch3 is -- interfaces. ADT := Next_Elmt (First_Elmt (Access_Disp_Table (Typ))); - Init_Secondary_Tags_Internal (Typ); + + -- Handle private types + + if Present (Full_View (Typ)) then + Init_Secondary_Tags_Internal (Full_View (Typ)); + else + Init_Secondary_Tags_Internal (Typ); + end if; end Init_Secondary_Tags; -- Start of processing for Build_Init_Procedure @@ -2478,6 +2497,13 @@ package body Exp_Ch3 is return False; end if; + -- If it is a type derived from a type with unknown discriminants, + -- we cannot build an initialization procedure for it. + + if Has_Unknown_Discriminants (Rec_Id) then + return False; + end if; + -- Otherwise we need to generate an initialization procedure if -- Is_CPP_Class is False and at least one of the following applies: @@ -4547,34 +4573,52 @@ package body Exp_Ch3 is ADT : Elist_Id := Access_Disp_Table (Def_Id); procedure Add_Secondary_Tables (Typ : Entity_Id); - -- Comment required ??? + -- Internal subprogram, recursively climb to the ancestors -------------------------- -- Add_Secondary_Tables -- -------------------------- procedure Add_Secondary_Tables (Typ : Entity_Id) is - E : Entity_Id; - Result : List_Id; + E : Entity_Id; + Iface : Elmt_Id; + Result : List_Id; + Suffix_Index : Int; begin - if Etype (Typ) /= Typ then + -- Climb to the ancestor (if any) handling private types + + if Present (Full_View (Etype (Typ))) then + if Full_View (Etype (Typ)) /= Typ then + Add_Secondary_Tables (Full_View (Etype (Typ))); + end if; + + elsif Etype (Typ) /= Typ then Add_Secondary_Tables (Etype (Typ)); end if; if Present (Abstract_Interfaces (Typ)) - and then not Is_Empty_Elmt_List - (Abstract_Interfaces (Typ)) + and then + not Is_Empty_Elmt_List (Abstract_Interfaces (Typ)) then + Iface := First_Elmt (Abstract_Interfaces (Typ)); + Suffix_Index := 0; + E := First_Entity (Typ); while Present (E) loop if Is_Tag (E) and then Chars (E) /= Name_uTag then - Make_Abstract_Interface_DT - (AI_Tag => E, + Make_Secondary_DT + (Typ => Def_Id, + Ancestor_Typ => Typ, + Suffix_Index => Suffix_Index, + Iface => Node (Iface), + AI_Tag => E, Acc_Disp_Tables => ADT, Result => Result); Append_Freeze_Actions (Def_Id, Result); + Suffix_Index := Suffix_Index + 1; + Next_Elmt (Iface); end if; Next_Entity (E); @@ -4585,7 +4629,14 @@ package body Exp_Ch3 is -- Start of processing to build secondary dispatch tables begin - Add_Secondary_Tables (Def_Id); + -- Handle private types + + if Present (Full_View (Def_Id)) then + Add_Secondary_Tables (Full_View (Def_Id)); + else + Add_Secondary_Tables (Def_Id); + end if; + Set_Access_Disp_Table (Def_Id, ADT); Append_Freeze_Actions (Def_Id, Make_DT (Def_Id)); end; @@ -4699,9 +4750,14 @@ package body Exp_Ch3 is and then not Is_Interface (Def_Id) and then not Is_Abstract (Def_Id) and then not Is_Controlled (Def_Id) - and then Implements_Limited_Interface (Def_Id) + and then + Implements_Interface + (Typ => Def_Id, + Kind => Any_Limited_Interface, + Check_Parent => True) then - Append_Freeze_Actions (Def_Id, Make_Disp_Select_Tables (Def_Id)); + Append_Freeze_Actions (Def_Id, + Make_Select_Specific_Data_Table (Def_Id)); end if; end if; end Freeze_Record_Type; @@ -5897,6 +5953,7 @@ package body Exp_Ch3 is -- disp_asynchronous_select -- disp_conditional_select -- disp_get_prim_op_kind + -- disp_get_task_id -- disp_timed_select -- for limited interfaces and tagged types that implement a limited -- interface. @@ -5908,50 +5965,36 @@ package body Exp_Ch3 is or else (not Is_Abstract (Tag_Typ) and then not Is_Controlled (Tag_Typ) - and then Implements_Limited_Interface (Tag_Typ))) + and then + Implements_Interface + (Typ => Tag_Typ, + Kind => Any_Limited_Interface, + Check_Parent => True))) then - if Is_Interface (Tag_Typ) then - Append_To (Res, - Make_Abstract_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Asynchronous_Select_Spec (Tag_Typ))); - - Append_To (Res, - Make_Abstract_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Conditional_Select_Spec (Tag_Typ))); - - Append_To (Res, - Make_Abstract_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Get_Prim_Op_Kind_Spec (Tag_Typ))); - - Append_To (Res, - Make_Abstract_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Timed_Select_Spec (Tag_Typ))); + Append_To (Res, + Make_Subprogram_Declaration (Loc, + Specification => + Make_Disp_Asynchronous_Select_Spec (Tag_Typ))); - else - Append_To (Res, - Make_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Asynchronous_Select_Spec (Tag_Typ))); + Append_To (Res, + Make_Subprogram_Declaration (Loc, + Specification => + Make_Disp_Conditional_Select_Spec (Tag_Typ))); - Append_To (Res, - Make_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Conditional_Select_Spec (Tag_Typ))); + Append_To (Res, + Make_Subprogram_Declaration (Loc, + Specification => + Make_Disp_Get_Prim_Op_Kind_Spec (Tag_Typ))); - Append_To (Res, - Make_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Get_Prim_Op_Kind_Spec (Tag_Typ))); + Append_To (Res, + Make_Subprogram_Declaration (Loc, + Specification => + Make_Disp_Get_Task_Id_Spec (Tag_Typ))); - Append_To (Res, - Make_Subprogram_Declaration (Loc, - Specification => - Make_Disp_Timed_Select_Spec (Tag_Typ))); - end if; + Append_To (Res, + Make_Subprogram_Declaration (Loc, + Specification => + Make_Disp_Timed_Select_Spec (Tag_Typ))); end if; -- Specs for finalization actions that may be required in case a @@ -6310,26 +6353,33 @@ package body Exp_Ch3 is end if; -- Generate the bodies for the following primitive operations: + -- disp_asynchronous_select -- disp_conditional_select -- disp_get_prim_op_kind + -- disp_get_task_id -- disp_timed_select - -- for tagged types that implement a limited interface. + + -- for limited interfaces and tagged types that implement a limited + -- interface. The interface versions will have null bodies. if Ada_Version >= Ada_05 - and then not Is_Interface (Tag_Typ) - and then not Is_Abstract (Tag_Typ) - and then not Is_Controlled (Tag_Typ) - and then Implements_Limited_Interface (Tag_Typ) + and then + ((Is_Interface (Tag_Typ) and then Is_Limited_Record (Tag_Typ)) + or else + (not Is_Abstract (Tag_Typ) + and then not Is_Controlled (Tag_Typ) + and then + Implements_Interface + (Typ => Tag_Typ, + Kind => Any_Limited_Interface, + Check_Parent => True))) then - Append_To (Res, - Make_Disp_Asynchronous_Select_Body (Tag_Typ)); - Append_To (Res, - Make_Disp_Conditional_Select_Body (Tag_Typ)); - Append_To (Res, - Make_Disp_Get_Prim_Op_Kind_Body (Tag_Typ)); - Append_To (Res, - Make_Disp_Timed_Select_Body (Tag_Typ)); + Append_To (Res, Make_Disp_Asynchronous_Select_Body (Tag_Typ)); + Append_To (Res, Make_Disp_Conditional_Select_Body (Tag_Typ)); + Append_To (Res, Make_Disp_Get_Prim_Op_Kind_Body (Tag_Typ)); + Append_To (Res, Make_Disp_Get_Task_Id_Body (Tag_Typ)); + Append_To (Res, Make_Disp_Timed_Select_Body (Tag_Typ)); end if; if not Is_Limited_Type (Tag_Typ) then @@ -6337,23 +6387,23 @@ package body Exp_Ch3 is -- Body for equality if Eq_Needed then + Decl := + Predef_Spec_Or_Body (Loc, + Tag_Typ => Tag_Typ, + Name => Eq_Name, + Profile => New_List ( + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_X), + Parameter_Type => New_Reference_To (Tag_Typ, Loc)), - Decl := Predef_Spec_Or_Body (Loc, - Tag_Typ => Tag_Typ, - Name => Eq_Name, - Profile => New_List ( - Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_X), - Parameter_Type => New_Reference_To (Tag_Typ, Loc)), - - Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_Y), - Parameter_Type => New_Reference_To (Tag_Typ, Loc))), + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_Y), + Parameter_Type => New_Reference_To (Tag_Typ, Loc))), - Ret_Type => Standard_Boolean, - For_Body => True); + Ret_Type => Standard_Boolean, + For_Body => True); declare Def : constant Node_Id := Parent (Tag_Typ); @@ -6403,19 +6453,20 @@ package body Exp_Ch3 is -- Body for dispatching assignment - Decl := Predef_Spec_Or_Body (Loc, - Tag_Typ => Tag_Typ, - Name => Name_uAssign, - Profile => New_List ( - Make_Parameter_Specification (Loc, - Defining_Identifier => Make_Defining_Identifier (Loc, Name_X), - Out_Present => True, - Parameter_Type => New_Reference_To (Tag_Typ, Loc)), - - Make_Parameter_Specification (Loc, - Defining_Identifier => Make_Defining_Identifier (Loc, Name_Y), - Parameter_Type => New_Reference_To (Tag_Typ, Loc))), - For_Body => True); + Decl := + Predef_Spec_Or_Body (Loc, + Tag_Typ => Tag_Typ, + Name => Name_uAssign, + Profile => New_List ( + Make_Parameter_Specification (Loc, + Defining_Identifier => Make_Defining_Identifier (Loc, Name_X), + Out_Present => True, + Parameter_Type => New_Reference_To (Tag_Typ, Loc)), + + Make_Parameter_Specification (Loc, + Defining_Identifier => Make_Defining_Identifier (Loc, Name_Y), + Parameter_Type => New_Reference_To (Tag_Typ, Loc))), + For_Body => True); Set_Handled_Statement_Sequence (Decl, Make_Handled_Sequence_Of_Statements (Loc, New_List ( @@ -6541,6 +6592,7 @@ package body Exp_Ch3 is return not (Is_Limited_Type (Typ) and then not Has_Inheritable_Stream_Attribute) + and then not Has_Unknown_Discriminants (Typ) and then RTE_Available (RE_Tag) and then RTE_Available (RE_Root_Stream_Type) and then not Restriction_Active (No_Dispatch) diff --git a/gcc/ada/exp_ch3.ads b/gcc/ada/exp_ch3.ads index f4d6097dce0..ce2b7990a11 100644 --- a/gcc/ada/exp_ch3.ads +++ b/gcc/ada/exp_ch3.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,12 +40,21 @@ package Exp_Ch3 is procedure Expand_Previous_Access_Type (Def_Id : Entity_Id); -- For a full type declaration that contains tasks, or that is a task, -- check whether there exists an access type whose designated type is an - -- incomplete declarations for the current composite type. If so, build - -- the master for that access type, now that it is known to denote an - -- object with tasks. + -- incomplete declarations for the current composite type. If so, build the + -- master for that access type, now that it is known to denote an object + -- with tasks. procedure Expand_Record_Extension (T : Entity_Id; Def : Node_Id); - -- Add a field _parent in the extension part of the record. + -- Add a field _parent in the extension part of the record + + procedure Build_Class_Wide_Master (T : Entity_Id); + -- For access to class-wide limited types we must build a task master + -- because some subsequent extension may add a task component. To avoid + -- bringing in the tasking run-time whenever an access-to-class-wide + -- limited type is used, we use the soft-link mechanism and add a level of + -- indirection to calls to routines that manipulate Master_Ids. This must + -- also be used for anonymous access types whose designated type is a task + -- or synchronized interface. procedure Build_Discr_Checking_Funcs (N : Node_Id); -- Builds function which checks whether the component name is consistent @@ -66,10 +75,10 @@ package Exp_Ch3 is -- constructed tree, and Typ is the type of the entity (the initialization -- procedure of the base type is the procedure that actually gets called). -- In_Init_Proc has to be set to True when the call is itself in an init - -- proc in order to enable the use of discriminals. Enclos_type is the - -- type of the init proc and it is used for various expansion cases - -- including the case where Typ is a task type which is a array component, - -- the indices of the enclosing type are used to build the string that + -- proc in order to enable the use of discriminals. Enclos_type is the type + -- of the init proc and it is used for various expansion cases including + -- the case where Typ is a task type which is a array component, the + -- indices of the enclosing type are used to build the string that -- identifies each task at runtime. -- -- Discr_Map is used to replace discriminants by their discriminals in @@ -84,33 +93,32 @@ package Exp_Ch3 is function Freeze_Type (N : Node_Id) return Boolean; -- This function executes the freezing actions associated with the given - -- freeze type node N and returns True if the node is to be deleted. - -- We delete the node if it is present just for front end purpose and - -- we don't want Gigi to see the node. This function can't delete the - -- node itself since it would confuse any remaining processing of the - -- freeze node. + -- freeze type node N and returns True if the node is to be deleted. We + -- delete the node if it is present just for front end purpose and we don't + -- want Gigi to see the node. This function can't delete the node itself + -- since it would confuse any remaining processing of the freeze node. function Needs_Simple_Initialization (T : Entity_Id) return Boolean; -- Certain types need initialization even though there is no specific - -- initialization routine. In this category are access types (which - -- need initializing to null), packed array types whose implementation - -- is a modular type, and all scalar types if Normalize_Scalars is set, - -- as well as private types whose underlying type is present and meets - -- any of these criteria. Finally, descendants of String and Wide_String - -- also need initialization in Initialize/Normalize_Scalars mode. + -- initialization routine. In this category are access types (which need + -- initializing to null), packed array types whose implementation is a + -- modular type, and all scalar types if Normalize_Scalars is set, as well + -- as private types whose underlying type is present and meets any of these + -- criteria. Finally, descendants of String and Wide_String also need + -- initialization in Initialize/Normalize_Scalars mode. function Get_Simple_Init_Val (T : Entity_Id; Loc : Source_Ptr; Size : Uint := No_Uint) return Node_Id; - -- For a type which Needs_Simple_Initialization (see above), prepares - -- the tree for an expression representing the required initial value. - -- Loc is the source location used in constructing this tree which is - -- returned as the result of the call. The Size parameter indicates the - -- target size of the object if it is known (indicated by a value that - -- is not No_Uint and is greater than zero). If Size is not given (Size - -- set to No_Uint, or non-positive), then the Esize of T is used as an - -- estimate of the Size. The object size is needed to prepare a known - -- invalid value for use by Normalize_Scalars. + -- For a type which Needs_Simple_Initialization (see above), prepares the + -- tree for an expression representing the required initial value. Loc is + -- the source location used in constructing this tree which is returned as + -- the result of the call. The Size parameter indicates the target size of + -- the object if it is known (indicated by a value that is not No_Uint and + -- is greater than zero). If Size is not given (Size set to No_Uint, or + -- non-positive), then the Esize of T is used as an estimate of the Size. + -- The object size is needed to prepare a known invalid value for use by + -- Normalize_Scalars. end Exp_Ch3; diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index fbdb701550a..2e1f38f88e4 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -38,6 +38,7 @@ with Exp_Pakd; use Exp_Pakd; with Exp_Tss; use Exp_Tss; with Exp_Util; use Exp_Util; with Exp_VFpt; use Exp_VFpt; +with Freeze; use Freeze; with Hostparm; use Hostparm; with Inline; use Inline; with Nlists; use Nlists; @@ -361,14 +362,15 @@ package body Exp_Ch4 is --------------------------------- procedure Expand_Allocator_Expression (N : Node_Id) is - Loc : constant Source_Ptr := Sloc (N); - Exp : constant Node_Id := Expression (Expression (N)); - Indic : constant Node_Id := Subtype_Mark (Expression (N)); - PtrT : constant Entity_Id := Etype (N); - T : constant Entity_Id := Entity (Indic); - Flist : Node_Id; - Node : Node_Id; - Temp : Entity_Id; + Loc : constant Source_Ptr := Sloc (N); + Exp : constant Node_Id := Expression (Expression (N)); + Indic : constant Node_Id := Subtype_Mark (Expression (N)); + PtrT : constant Entity_Id := Etype (N); + DesigT : constant Entity_Id := Designated_Type (PtrT); + T : constant Entity_Id := Entity (Indic); + Flist : Node_Id; + Node : Node_Id; + Temp : Entity_Id; Aggr_In_Place : constant Boolean := Is_Delayed_Aggregate (Exp); @@ -456,7 +458,7 @@ package body Exp_Ch4 is -- body, so a run-time check is needed in general. if Ada_Version >= Ada_05 - and then Is_Class_Wide_Type (Designated_Type (PtrT)) + and then Is_Class_Wide_Type (DesigT) and then not Scope_Suppress (Accessibility_Check) and then (Is_Class_Wide_Type (Etype (Exp)) @@ -539,7 +541,7 @@ package body Exp_Ch4 is end; end if; - if Controlled_Type (Designated_Type (PtrT)) + if Controlled_Type (DesigT) and then Controlled_Type (T) then declare @@ -629,14 +631,14 @@ package body Exp_Ch4 is Rewrite (N, New_Reference_To (Temp, Loc)); Analyze_And_Resolve (N, PtrT); - elsif Is_Access_Type (Designated_Type (PtrT)) + elsif Is_Access_Type (DesigT) and then Nkind (Exp) = N_Allocator and then Nkind (Expression (Exp)) /= N_Qualified_Expression then -- Apply constraint to designated subtype indication Apply_Constraint_Check (Expression (Exp), - Designated_Type (Designated_Type (PtrT)), + Designated_Type (DesigT), No_Sliding => True); if Nkind (Expression (Exp)) = N_Raise_Constraint_Error then @@ -663,12 +665,12 @@ package body Exp_Ch4 is -- on the qualified expression does not allow sliding, -- but this check does (a relaxation from Ada 83). - if Is_Constrained (Designated_Type (PtrT)) + if Is_Constrained (DesigT) and then not Subtypes_Statically_Match - (T, Designated_Type (PtrT)) + (T, DesigT) then Apply_Constraint_Check - (Exp, Designated_Type (PtrT), No_Sliding => False); + (Exp, DesigT, No_Sliding => False); -- The nonsliding check should really be performed -- (unconditionally) against the subtype of the @@ -677,8 +679,33 @@ package body Exp_Ch4 is else Apply_Constraint_Check - (Exp, Designated_Type (PtrT), No_Sliding => True); + (Exp, DesigT, No_Sliding => True); + end if; + + -- For an access to unconstrained packed array, GIGI needs + -- to see an expression with a constrained subtype in order + -- to compute the proper size for the allocator. + + if Is_Array_Type (T) + and then not Is_Constrained (T) + and then Is_Packed (T) + then + declare + ConstrT : constant Entity_Id := + Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('A')); + Internal_Exp : constant Node_Id := Relocate_Node (Exp); + begin + Insert_Action (Exp, + Make_Subtype_Declaration (Loc, + Defining_Identifier => ConstrT, + Subtype_Indication => + Make_Subtype_From_Expr (Exp, T))); + Freeze_Itype (ConstrT, Exp); + Rewrite (Exp, OK_Convert_To (ConstrT, Internal_Exp)); + end; end if; + end if; exception @@ -3854,13 +3881,6 @@ package body Exp_Ch4 is begin Binary_Op_Validity_Checks (N); - -- Vax_Float is a special case - - if Vax_Float (Typ) then - Expand_Vax_Arith (N); - return; - end if; - -- N / 1 = N for integer types if Is_Integer_Type (Typ) @@ -3951,7 +3971,7 @@ package body Exp_Ch4 is Analyze_And_Resolve (Left_Opnd (N), Universal_Real); - -- Non-fixed point cases, do zero divide and overflow checks + -- Non-fixed point cases, do integer zero divide and overflow checks elsif Is_Integer_Type (Typ) then Apply_Divide_Check (N); @@ -3963,6 +3983,12 @@ package body Exp_Ch4 is then Error_Msg_CRT ("64-bit division", N); end if; + + -- Deal with Vax_Float + + elsif Vax_Float (Typ) then + Expand_Vax_Arith (N); + return; end if; end Expand_N_Op_Divide; @@ -4023,7 +4049,7 @@ package body Exp_Ch4 is begin -- Per-object constrained selected components require special -- attention. If the enclosing scope of the component is an - -- Unchecked_Union, we can not reference its discriminants + -- Unchecked_Union, we cannot reference its discriminants -- directly. This is why we use the two extra parameters of -- the equality function of the enclosing Unchecked_Union. @@ -4239,14 +4265,13 @@ package body Exp_Ch4 is return False; end if; + -- We only need to test one component + declare Comp : Node_Id := First (Component_Items (Clist)); begin while Present (Comp) loop - - -- One component is sufficent - if Component_Is_Unconstrained_UU (Comp) then return True; end if; @@ -4324,9 +4349,10 @@ package body Exp_Ch4 is if Ekind (Typl) = E_Private_Type then Typl := Underlying_Type (Typl); - elsif Ekind (Typl) = E_Private_Subtype then Typl := Underlying_Type (Base_Type (Typl)); + else + null; end if; -- It may happen in error situations that the underlying type is not @@ -4339,15 +4365,9 @@ package body Exp_Ch4 is Typl := Base_Type (Typl); - -- Vax float types - - if Vax_Float (Typl) then - Expand_Vax_Comparison (N); - return; - -- Boolean types (requiring handling of non-standard case) - elsif Is_Boolean_Type (Typl) then + if Is_Boolean_Type (Typl) then Adjust_Condition (Left_Opnd (N)); Adjust_Condition (Right_Opnd (N)); Set_Etype (N, Standard_Boolean); @@ -4551,11 +4571,18 @@ package body Exp_Ch4 is end if; -- If we still have an equality comparison (i.e. it was not rewritten - -- in some way), then we can test if result is needed at compile time). + -- in some way), then we can test if result is known at compile time). if Nkind (N) = N_Op_Eq then Rewrite_Comparison (N); end if; + + -- If we still have comparison for Vax_Float, process it + + if Vax_Float (Typl) and then Nkind (N) in N_Op_Compare then + Expand_Vax_Comparison (N); + return; + end if; end Expand_N_Op_Eq; ----------------------- @@ -4870,11 +4897,7 @@ package body Exp_Ch4 is begin Binary_Op_Validity_Checks (N); - if Vax_Float (Typ1) then - Expand_Vax_Comparison (N); - return; - - elsif Is_Array_Type (Typ1) then + if Is_Array_Type (Typ1) then Expand_Array_Comparison (N); return; end if; @@ -4887,6 +4910,13 @@ package body Exp_Ch4 is end if; Rewrite_Comparison (N); + + -- If we still have comparison, and Vax_Float type, process it + + if Vax_Float (Typ1) and then Nkind (N) in N_Op_Compare then + Expand_Vax_Comparison (N); + return; + end if; end Expand_N_Op_Ge; -------------------- @@ -4902,11 +4932,7 @@ package body Exp_Ch4 is begin Binary_Op_Validity_Checks (N); - if Vax_Float (Typ1) then - Expand_Vax_Comparison (N); - return; - - elsif Is_Array_Type (Typ1) then + if Is_Array_Type (Typ1) then Expand_Array_Comparison (N); return; end if; @@ -4919,6 +4945,13 @@ package body Exp_Ch4 is end if; Rewrite_Comparison (N); + + -- If we still have comparison, and Vax_Float type, process it + + if Vax_Float (Typ1) and then Nkind (N) in N_Op_Compare then + Expand_Vax_Comparison (N); + return; + end if; end Expand_N_Op_Gt; -------------------- @@ -4934,11 +4967,7 @@ package body Exp_Ch4 is begin Binary_Op_Validity_Checks (N); - if Vax_Float (Typ1) then - Expand_Vax_Comparison (N); - return; - - elsif Is_Array_Type (Typ1) then + if Is_Array_Type (Typ1) then Expand_Array_Comparison (N); return; end if; @@ -4951,6 +4980,13 @@ package body Exp_Ch4 is end if; Rewrite_Comparison (N); + + -- If we still have comparison, and Vax_Float type, process it + + if Vax_Float (Typ1) and then Nkind (N) in N_Op_Compare then + Expand_Vax_Comparison (N); + return; + end if; end Expand_N_Op_Le; -------------------- @@ -4966,11 +5002,7 @@ package body Exp_Ch4 is begin Binary_Op_Validity_Checks (N); - if Vax_Float (Typ1) then - Expand_Vax_Comparison (N); - return; - - elsif Is_Array_Type (Typ1) then + if Is_Array_Type (Typ1) then Expand_Array_Comparison (N); return; end if; @@ -4983,6 +5015,13 @@ package body Exp_Ch4 is end if; Rewrite_Comparison (N); + + -- If we still have comparison, and Vax_Float type, process it + + if Vax_Float (Typ1) and then Nkind (N) in N_Op_Compare then + Expand_Vax_Comparison (N); + return; + end if; end Expand_N_Op_Lt; ----------------------- @@ -5187,13 +5226,6 @@ package body Exp_Ch4 is end if; end if; - -- Deal with VAX float case - - if Vax_Float (Typ) then - Expand_Vax_Arith (N); - return; - end if; - -- Convert x * 2 ** y to Shift_Left (x, y). Note that the fact that -- Is_Power_Of_2_For_Shift is set means that we know that our left -- operand is an integer, as required for this to work. @@ -5304,6 +5336,12 @@ package body Exp_Ch4 is elsif Is_Signed_Integer_Type (Etype (N)) then Apply_Arithmetic_Overflow_Check (N); + + -- Deal with VAX float case + + elsif Vax_Float (Typ) then + Expand_Vax_Arith (N); + return; end if; end Expand_N_Op_Multiply; @@ -5311,39 +5349,74 @@ package body Exp_Ch4 is -- Expand_N_Op_Ne -- -------------------- - -- Rewrite node as the negation of an equality operation, and reanalyze. - -- The equality to be used is defined in the same scope and has the same - -- signature. It must be set explicitly because in an instance it may not - -- have the same visibility as in the generic unit. - procedure Expand_N_Op_Ne (N : Node_Id) is - Loc : constant Source_Ptr := Sloc (N); - Neg : Node_Id; - Ne : constant Entity_Id := Entity (N); + Typ : constant Entity_Id := Etype (Left_Opnd (N)); begin - Binary_Op_Validity_Checks (N); + -- Case of elementary type with standard operator - Neg := - Make_Op_Not (Loc, - Right_Opnd => - Make_Op_Eq (Loc, - Left_Opnd => Left_Opnd (N), - Right_Opnd => Right_Opnd (N))); - Set_Paren_Count (Right_Opnd (Neg), 1); + if Is_Elementary_Type (Typ) + and then Sloc (Entity (N)) = Standard_Location + then + Binary_Op_Validity_Checks (N); - if Scope (Ne) /= Standard_Standard then - Set_Entity (Right_Opnd (Neg), Corresponding_Equality (Ne)); - end if; + -- Boolean types (requiring handling of non-standard case) - -- For navigation purposes, the inequality is treated as an implicit - -- reference to the corresponding equality. Preserve the Comes_From_ - -- source flag so that the proper Xref entry is generated. + if Is_Boolean_Type (Typ) then + Adjust_Condition (Left_Opnd (N)); + Adjust_Condition (Right_Opnd (N)); + Set_Etype (N, Standard_Boolean); + Adjust_Result_Type (N, Typ); + end if; - Preserve_Comes_From_Source (Neg, N); - Preserve_Comes_From_Source (Right_Opnd (Neg), N); - Rewrite (N, Neg); - Analyze_And_Resolve (N, Standard_Boolean); + Rewrite_Comparison (N); + + -- If we still have comparison for Vax_Float, process it + + if Vax_Float (Typ) and then Nkind (N) in N_Op_Compare then + Expand_Vax_Comparison (N); + return; + end if; + + -- For all cases other than elementary types, we rewrite node as the + -- negation of an equality operation, and reanalyze. The equality to be + -- used is defined in the same scope and has the same signature. This + -- signature must be set explicitly since in an instance it may not have + -- the same visibility as in the generic unit. This avoids duplicating + -- or factoring the complex code for record/array equality tests etc. + + else + declare + Loc : constant Source_Ptr := Sloc (N); + Neg : Node_Id; + Ne : constant Entity_Id := Entity (N); + + begin + Binary_Op_Validity_Checks (N); + + Neg := + Make_Op_Not (Loc, + Right_Opnd => + Make_Op_Eq (Loc, + Left_Opnd => Left_Opnd (N), + Right_Opnd => Right_Opnd (N))); + Set_Paren_Count (Right_Opnd (Neg), 1); + + if Scope (Ne) /= Standard_Standard then + Set_Entity (Right_Opnd (Neg), Corresponding_Equality (Ne)); + end if; + + -- For navigation purposes, the inequality is treated as an + -- implicit reference to the corresponding equality. Preserve the + -- Comes_From_ source flag so that the proper Xref entry is + -- generated. + + Preserve_Comes_From_Source (Neg, N); + Preserve_Comes_From_Source (Right_Opnd (Neg), N); + Rewrite (N, Neg); + Analyze_And_Resolve (N, Standard_Boolean); + end; + end if; end Expand_N_Op_Ne; --------------------- @@ -6480,8 +6553,8 @@ package body Exp_Ch4 is -- then we do not trust it to be in range (might be infinite) declare - S_Lo : constant Node_Id := Type_Low_Bound (Xtyp); - S_Hi : constant Node_Id := Type_High_Bound (Xtyp); + S_Lo : constant Node_Id := Type_Low_Bound (Xtyp); + S_Hi : constant Node_Id := Type_High_Bound (Xtyp); begin if (not Is_Floating_Point_Type (Xtyp) @@ -6533,9 +6606,9 @@ package body Exp_Ch4 is (Subtype_Mark (Conv), New_Occurrence_Of (Btyp, Loc)); Set_Etype (Conv, Btyp); - -- Enable overflow except in the case of integer to float - -- conversions, where it is never required, since we can - -- never have overflow in this case. + -- Enable overflow except for case of integer to float conversions, + -- where it is never required, since we can never have overflow in + -- this case. if not Is_Integer_Type (Etype (Operand)) then Enable_Overflow_Check (Conv); @@ -6588,13 +6661,6 @@ package body Exp_Ch4 is return; end if; - -- Deal with Vax floating-point cases - - if Vax_Float (Operand_Type) or else Vax_Float (Target_Type) then - Expand_Vax_Conversion (N); - return; - end if; - -- Nothing to do if this is the second argument of read. This -- is a "backwards" conversion that will be handled by the -- specialized code in attribute processing. @@ -6881,7 +6947,7 @@ package body Exp_Ch4 is -- this type with proper overflow checking, and so gigi is doing an -- approximation of what is required by doing floating-point compares -- with the end-point. But that can lose precision in some cases, and - -- give a wrong result. Converting the operand to Long_Long_Float is + -- give a wrong result. Converting the operand to Universal_Real is -- helpful, but still does not catch all cases with 64-bit integers -- on targets with only 64-bit floats ??? @@ -6889,11 +6955,11 @@ package body Exp_Ch4 is Rewrite (Operand, Make_Type_Conversion (Loc, Subtype_Mark => - New_Occurrence_Of (Standard_Long_Long_Float, Loc), + New_Occurrence_Of (Universal_Real, Loc), Expression => Relocate_Node (Operand))); - Set_Etype (Operand, Standard_Long_Long_Float); + Set_Etype (Operand, Universal_Real); Enable_Range_Check (Operand); Set_Do_Range_Check (Expression (Operand), False); end if; @@ -6986,11 +7052,6 @@ package body Exp_Ch4 is elsif Is_Floating_Point_Type (Target_Type) then Real_Range_Check; - - -- The remaining cases require no front end processing - - else - null; end if; -- At this stage, either the conversion node has been transformed @@ -7065,6 +7126,16 @@ package body Exp_Ch4 is end if; end; end if; + + -- Final step, if the result is a type conversion involving Vax_Float + -- types, then it is subject for further special processing. + + if Nkind (N) = N_Type_Conversion + and then (Vax_Float (Operand_Type) or else Vax_Float (Target_Type)) + then + Expand_Vax_Conversion (N); + return; + end if; end Expand_N_Type_Conversion; ----------------------------------- @@ -7803,7 +7874,6 @@ package body Exp_Ch4 is Statements => New_List (If_Stat))); return Func_Body; - end Make_Array_Comparison_Op; --------------------------- @@ -7960,6 +8030,18 @@ package body Exp_Ch4 is True_Result := Res in Compare_GE; False_Result := Res = LT; + if Res = LE + and then Constant_Condition_Warnings + and then Comes_From_Source (Original_Node (N)) + and then Nkind (Original_Node (N)) = N_Op_Ge + and then not In_Instance + and then not Warnings_Off (Etype (Left_Opnd (N))) + and then Is_Integer_Type (Etype (Left_Opnd (N))) + then + Error_Msg_N + ("can never be greater than, could replace by ""'=""?", N); + end if; + when N_Op_Gt => True_Result := Res = GT; False_Result := Res in Compare_LE; @@ -7972,9 +8054,21 @@ package body Exp_Ch4 is True_Result := Res in Compare_LE; False_Result := Res = GT; + if Res = GE + and then Constant_Condition_Warnings + and then Comes_From_Source (Original_Node (N)) + and then Nkind (Original_Node (N)) = N_Op_Le + and then not In_Instance + and then not Warnings_Off (Etype (Left_Opnd (N))) + and then Is_Integer_Type (Etype (Left_Opnd (N))) + then + Error_Msg_N + ("can never be less than, could replace by ""'=""?", N); + end if; + when N_Op_Ne => - True_Result := Res = NE; - False_Result := Res = LT or else Res = GT or else Res = EQ; + True_Result := Res = NE or else Res = GT or else Res = LT; + False_Result := Res = EQ; end case; if True_Result then diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 54da8cb4811..af7cd2426f7 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -45,6 +45,7 @@ with Rtsfind; use Rtsfind; with Sinfo; use Sinfo; with Sem; use Sem; with Sem_Ch3; use Sem_Ch3; +with Sem_Ch5; use Sem_Ch5; with Sem_Ch8; use Sem_Ch8; with Sem_Ch13; use Sem_Ch13; with Sem_Eval; use Sem_Eval; @@ -1808,7 +1809,11 @@ package body Exp_Ch5 is end; end if; - Analyze (N); + -- N has been rewritten to a block statement for which it is + -- known by construction that no checks are necessary: analyze + -- it with all checks suppressed. + + Analyze (N, Suppress => All_Checks); return; end Tagged_Case; @@ -2259,6 +2264,13 @@ package body Exp_Ch5 is Set_Condition (N, Condition (Hed)); Set_Then_Statements (N, Then_Statements (Hed)); + -- Hed might have been captured as the condition determining + -- the current value for an entity. Now it is detached from + -- the tree, so a Current_Value pointer in the condition might + -- need to be updated. + + Check_Possible_Current_Value_Condition (N); + if Is_Empty_List (Elsif_Parts (N)) then Set_Elsif_Parts (N, No_List); end if; @@ -2762,123 +2774,38 @@ package body Exp_Ch5 is Analyze (Exp); end if; - -- Implement the rules of 6.5(8-10), which require a tag check in - -- the case of a limited tagged return type, and tag reassignment - -- for nonlimited tagged results. These actions are needed when - -- the return type is a specific tagged type and the result - -- expression is a conversion or a formal parameter, because in - -- that case the tag of the expression might differ from the tag - -- of the specific result type. - - if Is_Tagged_Type (Utyp) - and then not Is_Class_Wide_Type (Utyp) - and then (Nkind (Exp) = N_Type_Conversion - or else Nkind (Exp) = N_Unchecked_Type_Conversion - or else (Is_Entity_Name (Exp) - and then Ekind (Entity (Exp)) in Formal_Kind)) - then - -- When the return type is limited, perform a check that the - -- tag of the result is the same as the tag of the return type. - - if Is_Limited_Type (Return_Type) then - Insert_Action (Exp, - Make_Raise_Constraint_Error (Loc, - Condition => - Make_Op_Ne (Loc, - Left_Opnd => - Make_Selected_Component (Loc, - Prefix => Duplicate_Subexpr (Exp), - Selector_Name => - New_Reference_To (First_Tag_Component (Utyp), Loc)), - Right_Opnd => - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To - (Node (First_Elmt - (Access_Disp_Table (Base_Type (Utyp)))), - Loc))), - Reason => CE_Tag_Check_Failed)); - - -- If the result type is a specific nonlimited tagged type, - -- then we have to ensure that the tag of the result is that - -- of the result type. This is handled by making a copy of the - -- expression in the case where it might have a different tag, - -- namely when the expression is a conversion or a formal - -- parameter. We create a new object of the result type and - -- initialize it from the expression, which will implicitly - -- force the tag to be set appropriately. - - else - Result_Id := - Make_Defining_Identifier (Loc, New_Internal_Name ('R')); - Result_Exp := New_Reference_To (Result_Id, Loc); - - Result_Obj := - Make_Object_Declaration (Loc, - Defining_Identifier => Result_Id, - Object_Definition => New_Reference_To (Return_Type, Loc), - Constant_Present => True, - Expression => Relocate_Node (Exp)); - - Set_Assignment_OK (Result_Obj); - Insert_Action (Exp, Result_Obj); - - Rewrite (Exp, Result_Exp); - Analyze_And_Resolve (Exp, Return_Type); - end if; - - -- Ada 2005 (AI-344): If the result type is class-wide, then insert - -- a check that the level of the return expression's underlying type - -- is not deeper than the level of the master enclosing the function. - -- Always generate the check when the type of the return expression - -- is class-wide, when it's a type conversion, or when it's a formal - -- parameter. Otherwise, suppress the check in the case where the - -- return expression has a specific type whose level is known not to - -- be statically deeper than the function's result type. - - elsif Ada_Version >= Ada_05 - and then Is_Class_Wide_Type (Return_Type) - and then not Scope_Suppress (Accessibility_Check) - and then - (Is_Class_Wide_Type (Etype (Exp)) - or else Nkind (Exp) = N_Type_Conversion - or else Nkind (Exp) = N_Unchecked_Type_Conversion - or else (Is_Entity_Name (Exp) - and then Ekind (Entity (Exp)) in Formal_Kind) - or else Scope_Depth (Enclosing_Dynamic_Scope (Etype (Exp))) > - Scope_Depth (Enclosing_Dynamic_Scope (Scope_Id))) - then - Insert_Action (Exp, - Make_Raise_Program_Error (Loc, - Condition => - Make_Op_Gt (Loc, - Left_Opnd => - Make_Function_Call (Loc, - Name => - New_Reference_To - (RTE (RE_Get_Access_Level), Loc), - Parameter_Associations => - New_List (Make_Attribute_Reference (Loc, - Prefix => - Duplicate_Subexpr (Exp), - Attribute_Name => - Name_Tag))), - Right_Opnd => - Make_Integer_Literal (Loc, - Scope_Depth (Enclosing_Dynamic_Scope (Scope_Id)))), - Reason => PE_Accessibility_Check_Failed)); - end if; - -- Deal with returning variable length objects and controlled types -- Nothing to do if we are returning by reference, or this is not -- a type that requires special processing (indicated by the fact -- that it requires a cleanup scope for the secondary stack case) - if Is_Return_By_Reference_Type (T) - or else not Requires_Transient_Scope (Return_Type) - then + if Is_Return_By_Reference_Type (T) then null; + elsif not Requires_Transient_Scope (Return_Type) then + + -- mutable records with no variable length components are not + -- returned on the sec-stack so we need to make sure that the + -- backend will only copy back the size of the actual value and not + -- the maximum size. We create an actual subtype for this purpose + + declare + Ubt : constant Entity_Id := Underlying_Type (Base_Type (T)); + Decl : Node_Id; + Ent : Entity_Id; + begin + if Has_Discriminants (Ubt) + and then not Is_Constrained (Ubt) + and then not Has_Unchecked_Union (Ubt) + then + Decl := Build_Actual_Subtype (Ubt, Exp); + Ent := Defining_Identifier (Decl); + Insert_Action (Exp, Decl); + Rewrite (Exp, Unchecked_Convert_To (Ent, Exp)); + end if; + end; + -- Case of secondary stack not used elsif Function_Returns_With_DSP (Scope_Id) then @@ -3063,6 +2990,12 @@ package body Exp_Ch5 is then Set_By_Ref (N); + -- Remove side effects from the expression now so that + -- other part of the expander do not have to reanalyze + -- this node without this optimization + + Rewrite (Exp, Duplicate_Subexpr_No_Checks (Exp)); + -- For controlled types, do the allocation on the sec-stack -- manually in order to call adjust at the right time -- type Anon1 is access Return_Type; @@ -3128,6 +3061,112 @@ package body Exp_Ch5 is end if; end if; + -- Implement the rules of 6.5(8-10), which require a tag check in + -- the case of a limited tagged return type, and tag reassignment + -- for nonlimited tagged results. These actions are needed when + -- the return type is a specific tagged type and the result + -- expression is a conversion or a formal parameter, because in + -- that case the tag of the expression might differ from the tag + -- of the specific result type. + + if Is_Tagged_Type (Utyp) + and then not Is_Class_Wide_Type (Utyp) + and then (Nkind (Exp) = N_Type_Conversion + or else Nkind (Exp) = N_Unchecked_Type_Conversion + or else (Is_Entity_Name (Exp) + and then Ekind (Entity (Exp)) in Formal_Kind)) + then + -- When the return type is limited, perform a check that the + -- tag of the result is the same as the tag of the return type. + + if Is_Limited_Type (Return_Type) then + Insert_Action (Exp, + Make_Raise_Constraint_Error (Loc, + Condition => + Make_Op_Ne (Loc, + Left_Opnd => + Make_Selected_Component (Loc, + Prefix => Duplicate_Subexpr (Exp), + Selector_Name => + New_Reference_To (First_Tag_Component (Utyp), Loc)), + Right_Opnd => + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To + (Node (First_Elmt + (Access_Disp_Table (Base_Type (Utyp)))), + Loc))), + Reason => CE_Tag_Check_Failed)); + + -- If the result type is a specific nonlimited tagged type, + -- then we have to ensure that the tag of the result is that + -- of the result type. This is handled by making a copy of the + -- expression in the case where it might have a different tag, + -- namely when the expression is a conversion or a formal + -- parameter. We create a new object of the result type and + -- initialize it from the expression, which will implicitly + -- force the tag to be set appropriately. + + else + Result_Id := + Make_Defining_Identifier (Loc, New_Internal_Name ('R')); + Result_Exp := New_Reference_To (Result_Id, Loc); + + Result_Obj := + Make_Object_Declaration (Loc, + Defining_Identifier => Result_Id, + Object_Definition => New_Reference_To (Return_Type, Loc), + Constant_Present => True, + Expression => Relocate_Node (Exp)); + + Set_Assignment_OK (Result_Obj); + Insert_Action (Exp, Result_Obj); + + Rewrite (Exp, Result_Exp); + Analyze_And_Resolve (Exp, Return_Type); + end if; + + -- Ada 2005 (AI-344): If the result type is class-wide, then insert + -- a check that the level of the return expression's underlying type + -- is not deeper than the level of the master enclosing the function. + -- Always generate the check when the type of the return expression + -- is class-wide, when it's a type conversion, or when it's a formal + -- parameter. Otherwise, suppress the check in the case where the + -- return expression has a specific type whose level is known not to + -- be statically deeper than the function's result type. + + elsif Ada_Version >= Ada_05 + and then Is_Class_Wide_Type (Return_Type) + and then not Scope_Suppress (Accessibility_Check) + and then + (Is_Class_Wide_Type (Etype (Exp)) + or else Nkind (Exp) = N_Type_Conversion + or else Nkind (Exp) = N_Unchecked_Type_Conversion + or else (Is_Entity_Name (Exp) + and then Ekind (Entity (Exp)) in Formal_Kind) + or else Scope_Depth (Enclosing_Dynamic_Scope (Etype (Exp))) > + Scope_Depth (Enclosing_Dynamic_Scope (Scope_Id))) + then + Insert_Action (Exp, + Make_Raise_Program_Error (Loc, + Condition => + Make_Op_Gt (Loc, + Left_Opnd => + Make_Function_Call (Loc, + Name => + New_Reference_To + (RTE (RE_Get_Access_Level), Loc), + Parameter_Associations => + New_List (Make_Attribute_Reference (Loc, + Prefix => + Duplicate_Subexpr (Exp), + Attribute_Name => + Name_Tag))), + Right_Opnd => + Make_Integer_Literal (Loc, + Scope_Depth (Enclosing_Dynamic_Scope (Scope_Id)))), + Reason => PE_Accessibility_Check_Failed)); + end if; + exception when RE_Not_Available => return; @@ -3175,7 +3214,7 @@ package body Exp_Ch5 is if not Ctrl_Act then null; - -- The left hand side is an uninitialized temporary + -- The left hand side is an uninitialized temporary elsif Nkind (L) = N_Type_Conversion and then Is_Entity_Name (Expression (L)) diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 884d549493b..76dde0e73cb 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -99,10 +99,11 @@ package body Exp_Ch6 is -- we have an infinite recursion. procedure Expand_Actuals (N : Node_Id; Subp : Entity_Id); - -- For each actual of an in-out parameter which is a numeric conversion - -- of the form T(A), where A denotes a variable, we insert the declaration: + -- For each actual of an in-out or out parameter which is a numeric + -- (view) conversion of the form T (A), where A denotes a variable, + -- we insert the declaration: -- - -- Temp : T := T (A); + -- Temp : T[ := T (A)]; -- -- prior to the call. Then we replace the actual with a reference to Temp, -- and append the assignment: @@ -1464,6 +1465,48 @@ package body Exp_Ch6 is end if; end if; + -- Ada 2005 (AI-345): We have a procedure call as a triggering + -- alternative in an asynchronous select or as an entry call in + -- a conditional or timed select. Check whether the procedure call + -- is a renaming of an entry and rewrite it as an entry call. + + if Ada_Version >= Ada_05 + and then Nkind (N) = N_Procedure_Call_Statement + and then + ((Nkind (Parent (N)) = N_Triggering_Alternative + and then Triggering_Statement (Parent (N)) = N) + or else + (Nkind (Parent (N)) = N_Entry_Call_Alternative + and then Entry_Call_Statement (Parent (N)) = N)) + then + declare + Ren_Decl : Node_Id; + Ren_Root : Entity_Id := Subp; + + begin + -- This may be a chain of renamings, find the root + + if Present (Alias (Ren_Root)) then + Ren_Root := Alias (Ren_Root); + end if; + + if Present (Original_Node (Parent (Parent (Ren_Root)))) then + Ren_Decl := Original_Node (Parent (Parent (Ren_Root))); + + if Nkind (Ren_Decl) = N_Subprogram_Renaming_Declaration then + Rewrite (N, + Make_Entry_Call_Statement (Loc, + Name => + New_Copy_Tree (Name (Ren_Decl)), + Parameter_Associations => + New_Copy_List_Tree (Parameter_Associations (N)))); + + return; + end if; + end if; + end; + end if; + -- First step, compute extra actuals, corresponding to any -- Extra_Formals present. Note that we do not access Extra_Formals -- directly, instead we simply note the presence of the extra @@ -1558,13 +1601,29 @@ package body Exp_Ch6 is Act_Prev := Expression (Act_Prev); end loop; - Add_Extra_Actual ( - Make_Attribute_Reference (Sloc (Prev), - Prefix => - Duplicate_Subexpr_No_Checks - (Act_Prev, Name_Req => True), - Attribute_Name => Name_Constrained), - Extra_Constrained (Formal)); + -- If the expression is a conversion of a dereference, + -- this is internally generated code that manipulates + -- addresses, e.g. when building interface tables. No + -- check should occur in this case, and the discriminated + -- object is not directly a hand. + + if not Comes_From_Source (Actual) + and then Nkind (Actual) = N_Unchecked_Type_Conversion + and then Nkind (Act_Prev) = N_Explicit_Dereference + then + Add_Extra_Actual + (New_Occurrence_Of (Standard_False, Loc), + Extra_Constrained (Formal)); + + else + Add_Extra_Actual + (Make_Attribute_Reference (Sloc (Prev), + Prefix => + Duplicate_Subexpr_No_Checks + (Act_Prev, Name_Req => True), + Attribute_Name => Name_Constrained), + Extra_Constrained (Formal)); + end if; end; end if; end if; @@ -1591,10 +1650,10 @@ package body Exp_Ch6 is pragma Assert (Present (Parm_Ent)); if Present (Extra_Accessibility (Parm_Ent)) then - Add_Extra_Actual ( - New_Occurrence_Of - (Extra_Accessibility (Parm_Ent), Loc), - Extra_Accessibility (Formal)); + Add_Extra_Actual + (New_Occurrence_Of + (Extra_Accessibility (Parm_Ent), Loc), + Extra_Accessibility (Formal)); -- If the actual access parameter does not have an -- associated extra formal providing its scope level, @@ -1602,10 +1661,10 @@ package body Exp_Ch6 is -- accessibility. else - Add_Extra_Actual ( - Make_Integer_Literal (Loc, - Intval => Scope_Depth (Standard_Standard)), - Extra_Accessibility (Formal)); + Add_Extra_Actual + (Make_Integer_Literal (Loc, + Intval => Scope_Depth (Standard_Standard)), + Extra_Accessibility (Formal)); end if; end; @@ -1613,10 +1672,10 @@ package body Exp_Ch6 is -- level of the actual's access type. else - Add_Extra_Actual ( - Make_Integer_Literal (Loc, - Intval => Type_Access_Level (Etype (Prev_Orig))), - Extra_Accessibility (Formal)); + Add_Extra_Actual + (Make_Integer_Literal (Loc, + Intval => Type_Access_Level (Etype (Prev_Orig))), + Extra_Accessibility (Formal)); end if; else @@ -3092,6 +3151,12 @@ package body Exp_Ch6 is -- If the call is the right side of an assignment or the expression in -- an object declaration, we don't need to create a temp as the left -- side will already trigger stack checking if necessary. + -- + -- If the call is a component in an extension aggregate, it will be + -- expanded into assignments as well, so no temporary is needed. This + -- also solves the problem of functions returning types with unknown + -- discriminants, where it is not possible to declare an object of the + -- type altogether. --------------------------- -- Returned_By_Reference -- @@ -3143,6 +3208,9 @@ package body Exp_Ch6 is and then Expression (Parent (N)) = N and then Nkind (Parent (Parent (N))) = N_Aggregate and then Rhs_Of_Assign_Or_Decl (Parent (Parent (N)))) + or else + (Nkind (Parent (N)) = N_Extension_Aggregate + and then Is_Private_Type (Etype (Typ))) then return True; else @@ -4052,8 +4120,8 @@ package body Exp_Ch6 is ----------------------- procedure Freeze_Subprogram (N : Node_Id) is - Loc : constant Source_Ptr := Sloc (N); - E : constant Entity_Id := Entity (N); + Loc : constant Source_Ptr := Sloc (N); + E : constant Entity_Id := Entity (N); procedure Check_Overriding_Inherited_Interfaces (E : Entity_Id); -- (Ada 2005): Check if the primitive E covers some interface already @@ -4068,6 +4136,10 @@ package body Exp_Ch6 is -- immediate ancestor associated with the interface; otherwise Prim and -- Ancestor_Iface_Prim have the same info. + procedure Register_Predefined_DT_Entry (Prim : Entity_Id); + -- (Ada 2005): Register a predefined primitive in all the secondary + -- dispatch tables of its primitive type. + ------------------------------------------- -- Check_Overriding_Inherited_Interfaces -- ------------------------------------------- @@ -4090,11 +4162,18 @@ package body Exp_Ch6 is -- Get the entity associated with this primitive operation Typ := Scope (DTC_Entity (E)); - while Etype (Typ) /= Typ loop + loop + exit when Etype (Typ) = Typ + or else (Present (Full_View (Etype (Typ))) + and then Full_View (Etype (Typ)) = Typ); - -- Climb to the immediate ancestor + -- Climb to the immediate ancestor handling private types - Typ := Etype (Typ); + if Present (Full_View (Etype (Typ))) then + Typ := Full_View (Etype (Typ)); + else + Typ := Etype (Typ); + end if; if Present (Abstract_Interfaces (Typ)) then @@ -4192,35 +4271,40 @@ package body Exp_Ch6 is if not Present (Ancestor_Iface_Prim) then Prim_Typ := Scope (DTC_Entity (Alias (Prim))); Iface_Typ := Scope (DTC_Entity (Abstract_Interface_Alias (Prim))); - Iface_Tag := Find_Interface_Tag - (T => Prim_Typ, - Iface => Iface_Typ); -- Generate the code of the thunk only when this primitive -- operation is associated with a secondary dispatch table. - if Etype (Iface_Tag) = RTE (RE_Interface_Tag) then - Thunk_Id := Make_Defining_Identifier (Loc, - New_Internal_Name ('T')); - New_Thunk := - Expand_Interface_Thunk - (N => Prim, - Thunk_Alias => Alias (Prim), - Thunk_Id => Thunk_Id, - Thunk_Tag => Iface_Tag); - - Insert_After (N, New_Thunk); - - Iface_DT_Ptr := - Find_Interface_ADT - (T => Prim_Typ, - Iface => Iface_Typ); - - Insert_After (New_Thunk, - Fill_Secondary_DT_Entry (Sloc (Prim), - Prim => Prim, - Iface_DT_Ptr => Iface_DT_Ptr, - Thunk_Id => Thunk_Id)); + if Is_Interface (Iface_Typ) then + Iface_Tag := Find_Interface_Tag + (T => Prim_Typ, + Iface => Iface_Typ); + + if Etype (Iface_Tag) = RTE (RE_Interface_Tag) then + Thunk_Id := + Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('T')); + + New_Thunk := + Expand_Interface_Thunk + (N => Prim, + Thunk_Alias => Alias (Prim), + Thunk_Id => Thunk_Id, + Thunk_Tag => Iface_Tag); + + Insert_After (N, New_Thunk); + + Iface_DT_Ptr := + Find_Interface_ADT + (T => Prim_Typ, + Iface => Iface_Typ); + + Insert_After (New_Thunk, + Fill_Secondary_DT_Entry (Sloc (Prim), + Prim => Prim, + Iface_DT_Ptr => Iface_DT_Ptr, + Thunk_Id => Thunk_Id)); + end if; end if; else @@ -4243,8 +4327,9 @@ package body Exp_Ch6 is -- type T is new I with ... if Etype (Iface_Tag) = RTE (RE_Interface_Tag) then - Thunk_Id := Make_Defining_Identifier (Loc, - New_Internal_Name ('T')); + Thunk_Id := + Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('T')); if Present (Alias (Prim)) then Prim_Op := Alias (Prim); @@ -4275,6 +4360,70 @@ package body Exp_Ch6 is end if; end Register_Interface_DT_Entry; + ---------------------------------- + -- Register_Predefined_DT_Entry -- + ---------------------------------- + + procedure Register_Predefined_DT_Entry (Prim : Entity_Id) is + Iface_DT_Ptr : Elmt_Id; + Iface_Tag : Entity_Id; + Iface_Typ : Elmt_Id; + New_Thunk : Entity_Id; + Prim_Typ : Entity_Id; + Thunk_Id : Entity_Id; + + begin + Prim_Typ := Scope (DTC_Entity (Prim)); + + if not Present (Access_Disp_Table (Prim_Typ)) + or else not Present (Abstract_Interfaces (Prim_Typ)) + then + return; + end if; + + -- Skip the first acces-to-dispatch-table pointer since it leads + -- to the primary dispatch table. We are only concerned with the + -- secondary dispatch table pointers. Note that the access-to- + -- dispatch-table pointer corresponds to the first implemented + -- interface retrieved below. + + Iface_DT_Ptr := Next_Elmt (First_Elmt (Access_Disp_Table (Prim_Typ))); + Iface_Typ := First_Elmt (Abstract_Interfaces (Prim_Typ)); + while Present (Iface_DT_Ptr) and then Present (Iface_Typ) loop + Iface_Tag := Find_Interface_Tag (Prim_Typ, Node (Iface_Typ)); + pragma Assert (Present (Iface_Tag)); + + if Etype (Iface_Tag) = RTE (RE_Interface_Tag) then + Thunk_Id := Make_Defining_Identifier (Loc, + New_Internal_Name ('T')); + + New_Thunk := + Expand_Interface_Thunk + (N => Prim, + Thunk_Alias => Prim, + Thunk_Id => Thunk_Id, + Thunk_Tag => Iface_Tag); + + Insert_After (N, New_Thunk); + Insert_After (New_Thunk, + Make_DT_Access_Action (Node (Iface_Typ), + Action => Set_Prim_Op_Address, + Args => New_List ( + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To (Node (Iface_DT_Ptr), Loc)), + + Make_Integer_Literal (Loc, DT_Position (Prim)), + + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (Thunk_Id, Loc), + Attribute_Name => Name_Address)))); + end if; + + Next_Elmt (Iface_DT_Ptr); + Next_Elmt (Iface_Typ); + end loop; + end Register_Predefined_DT_Entry; + -- Start of processing for Freeze_Subprogram begin @@ -4297,19 +4446,38 @@ package body Exp_Ch6 is Fill_DT_Entry (Sloc (N), Prim => E)); else - -- Ada 2005 (AI-251): Check if this entry corresponds with - -- a subprogram that covers an abstract interface type. + declare + Typ : constant Entity_Id := Scope (DTC_Entity (E)); - if Present (Abstract_Interface_Alias (E)) then - Register_Interface_DT_Entry (E); + begin + -- There is no dispatch table associated with abstract + -- interface types; each type implementing interfaces + -- will fill the associated secondary DT entries. - -- Common case: Primitive subprogram + if not Is_Interface (Typ) + or else Present (Alias (E)) + then + -- Ada 2005 (AI-251): Check if this entry corresponds with + -- a subprogram that covers an abstract interface type. - else - Insert_After (N, - Fill_DT_Entry (Sloc (N), Prim => E)); - Check_Overriding_Inherited_Interfaces (E); - end if; + if Present (Abstract_Interface_Alias (E)) then + Register_Interface_DT_Entry (E); + + -- Common case: Primitive subprogram + + else + -- Generate thunks for all the predefined operations + + if Is_Predefined_Dispatching_Operation (E) then + Register_Predefined_DT_Entry (E); + end if; + + Insert_After (N, + Fill_DT_Entry (Sloc (N), Prim => E)); + Check_Overriding_Inherited_Interfaces (E); + end if; + end if; + end; end if; end if; diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index f7d01197b7c..b0bad8c5718 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -1793,6 +1793,13 @@ package body Exp_Ch7 is return The_Parent; end if; + -- A raise statement can be wrapped. This will arise when the + -- expression in a raise_with_expression uses the secondary + -- stack, for example. + + when N_Raise_Statement => + return The_Parent; + -- If the expression is within the iteration scheme of a loop, -- we must create a declaration for it, followed by an assignment -- in order to have a usable statement to wrap. @@ -2728,13 +2735,27 @@ package body Exp_Ch7 is Utyp := Underlying_Type (Base_Type (Utyp)); Set_Assignment_OK (Cref); - -- Deal with non-tagged derivation of private views + -- Deal with non-tagged derivation of private views. If the parent is + -- now known to be protected, the finalization routine is the one + -- defined on the corresponding record of the ancestor (corresponding + -- records do not automatically inherit operations, but maybe they + -- should???) if Is_Untagged_Derivation (Typ) then - Utyp := Underlying_Type (Root_Type (Base_Type (Typ))); + if Is_Protected_Type (Typ) then + Utyp := Corresponding_Record_Type (Root_Type (Base_Type (Typ))); + else + Utyp := Underlying_Type (Root_Type (Base_Type (Typ))); + end if; + Cref := Unchecked_Convert_To (Utyp, Cref); + + -- We need to set Assignment_OK to prevent problems with unchecked + -- conversions, where we do not want them to be converted back in the + -- case of untagged record derivation (see code in Make_*_Call + -- procedures for similar situations). + Set_Assignment_OK (Cref); - -- To prevent problems with UC see 1.156 RH ??? end if; -- If the underlying_type is a subtype, we are dealing with diff --git a/gcc/ada/exp_ch7.ads b/gcc/ada/exp_ch7.ads index 597755abd98..eb17fe09bf9 100644 --- a/gcc/ada/exp_ch7.ads +++ b/gcc/ada/exp_ch7.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -164,7 +164,7 @@ package Exp_Ch7 is function Cleanup_Protected_Object (N : Node_Id; Ref : Node_Id) return Node_Id; - -- Generate code to finalize a protected object without entries. + -- Generate code to finalize a protected object without entries function Cleanup_Record (N : Node_Id; @@ -176,10 +176,10 @@ package Exp_Ch7 is function Cleanup_Task (N : Node_Id; Ref : Node_Id) return Node_Id; - -- Generate code to finalize a task. + -- Generate code to finalize a task function Has_Simple_Protected_Object (T : Entity_Id) return Boolean; - -- Check whether composite type contains a simple protected component. + -- Check whether composite type contains a simple protected component function Is_Simple_Protected_Type (T : Entity_Id) return Boolean; -- Check whether argument is a protected type without entries. @@ -203,7 +203,7 @@ package Exp_Ch7 is -- secondary stack is brought in, otherwise it isn't. function Node_To_Be_Wrapped return Node_Id; - -- return the node to be wrapped if the current scope is transient. + -- return the node to be wrapped if the current scope is transient procedure Store_Before_Actions_In_Scope (L : List_Id); -- Append the list L of actions to the end of the before-actions store diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 6911d862a59..3943dc4dbc0 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -65,21 +65,33 @@ package body Exp_Ch9 is -- Select_Expansion_Utilities -- -------------------------------- + -- The following constant establishes the upper bound for the index of + -- an entry family. It is used to limit the allocated size of protected + -- types with defaulted discriminant of an integer type, when the bound + -- of some entry family depends on a discriminant. The limitation to + -- entry families of 128K should be reasonable in all cases, and is a + -- documented implementation restriction. It will be lifted when protected + -- entry families are re-implemented as a single ordered queue. + + Entry_Family_Bound : constant Int := 2**16; + -- The following package contains helper routines used in the expansion of -- dispatching asynchronous, conditional and timed selects. package Select_Expansion_Utilities is function Build_Abort_Block - (Loc : Source_Ptr; - Blk_Ent : Entity_Id; - Blk : Node_Id) return Node_Id; + (Loc : Source_Ptr; + Abr_Blk_Ent : Entity_Id; + Cln_Blk_Ent : Entity_Id; + Blk : Node_Id) return Node_Id; -- Generate: -- begin -- Blk -- exception -- when Abort_Signal => Abort_Undefer; -- end; - -- Blk_Ent is the name of the encapsulated block, Blk is the actual + -- Abr_Blk_Ent is the name of the generated block, Cln_Blk_Ent is + -- the name of the encapsulated cleanup block, Blk is the actual -- block node. function Build_B @@ -121,28 +133,23 @@ package body Exp_Ch9 is function Build_S (Loc : Source_Ptr; Decls : List_Id; + Obj : Entity_Id; Call_Ent : Entity_Id) return Entity_Id; -- Generate: - -- S : constant Integer := DT_Position (Call_Ent); - -- where Call_Ent is the entity of the dispatching call name. Append - -- the object declaration to the list and return the name of the - -- object. + -- S : constant Integer := + -- Ada.Tags.Get_Offset_Index ( + -- Unchecked_Convert_To (Ada.Tags.Interface_Tag, Obj), + -- DT_Position (Call_Ent)); + -- where Obj is the pointer to a secondary table, Call_Ent is the + -- entity of the dispatching call name. Append the object declaration + -- to the list and return its defining identifier. - function Build_Wrapping_Procedure - (Loc : Source_Ptr; - Nam : Character; - Decls : List_Id; - Stmts : List_Id) return Entity_Id; - -- Generate: - -- procedure Nam is - -- begin - -- Stmts - -- end Nam; - -- where Nam is the generated procedure name and Stmts are the - -- encapsulated statements. Append the procedure body to Decls. - -- Return the internally generated procedure name. end Select_Expansion_Utilities; + ----------------------------------------- + -- Body for Select_Expansion_Utilities -- + ----------------------------------------- + package body Select_Expansion_Utilities is ----------------------- @@ -150,15 +157,17 @@ package body Exp_Ch9 is ----------------------- function Build_Abort_Block - (Loc : Source_Ptr; - Blk_Ent : Entity_Id; - Blk : Node_Id) return Node_Id + (Loc : Source_Ptr; + Abr_Blk_Ent : Entity_Id; + Cln_Blk_Ent : Entity_Id; + Blk : Node_Id) return Node_Id is begin return Make_Block_Statement (Loc, - Declarations => - No_List, + Identifier => New_Reference_To (Abr_Blk_Ent, Loc), + + Declarations => No_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, @@ -166,7 +175,7 @@ package body Exp_Ch9 is New_List ( Make_Implicit_Label_Declaration (Loc, Defining_Identifier => - Blk_Ent, + Cln_Blk_Ent, Label_Construct => Blk), Blk), @@ -194,7 +203,8 @@ package body Exp_Ch9 is (Loc : Source_Ptr; Decls : List_Id) return Entity_Id is - B : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uB); + B : constant Entity_Id := Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('B')); begin Append_To (Decls, @@ -217,7 +227,8 @@ package body Exp_Ch9 is (Loc : Source_Ptr; Decls : List_Id) return Entity_Id is - C : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uC); + C : constant Entity_Id := Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('C')); begin Append_To (Decls, @@ -262,52 +273,30 @@ package body Exp_Ch9 is function Build_S (Loc : Source_Ptr; Decls : List_Id; + Obj : Entity_Id; Call_Ent : Entity_Id) return Entity_Id is - S : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uS); + S : constant Entity_Id := Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('S')); begin Append_To (Decls, Make_Object_Declaration (Loc, Defining_Identifier => S, Constant_Present => True, + Object_Definition => New_Reference_To (Standard_Integer, Loc), + Expression => - Make_Integer_Literal (Loc, - Intval => DT_Position (Call_Ent)))); + Make_Function_Call (Loc, + Name => New_Reference_To (RTE (RE_Get_Offset_Index), Loc), + Parameter_Associations => New_List ( + Unchecked_Convert_To (RTE (RE_Interface_Tag), Obj), + Make_Integer_Literal (Loc, DT_Position (Call_Ent)))))); return S; end Build_S; - - ------------------------------ - -- Build_Wrapping_Procedure -- - ------------------------------ - - function Build_Wrapping_Procedure - (Loc : Source_Ptr; - Nam : Character; - Decls : List_Id; - Stmts : List_Id) return Entity_Id - is - Proc_Nam : constant Entity_Id := - Make_Defining_Identifier (Loc, New_Internal_Name (Nam)); - begin - Append_To (Decls, - Make_Subprogram_Body (Loc, - Specification => - Make_Procedure_Specification (Loc, - Defining_Unit_Name => - Proc_Nam), - Declarations => - No_List, - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, - Statements => - New_Copy_List (Stmts)))); - - return Proc_Nam; - end Build_Wrapping_Procedure; end Select_Expansion_Utilities; package SEU renames Select_Expansion_Utilities; @@ -335,6 +324,18 @@ package body Exp_Ch9 is -- of the System.Address pointer passed to entry barrier functions -- and entry body procedures. + procedure Add_Formal_Renamings + (Spec : Node_Id; + Decls : List_Id; + Ent : Entity_Id; + Loc : Source_Ptr); + -- Create renaming declarations for the formals, inside the procedure + -- that implements an entry body. The renamings make the original names + -- of the formals accessible to gdb, and serve no other purpose. + -- Spec is the specification of the procedure being built. + -- Decls is the list of declarations to be enhanced. + -- Ent is the entity for the original entry body. + function Build_Accept_Body (Astat : Node_Id) return Node_Id; -- Transform accept statement into a block with added exception handler. -- Used both for simple accept statements and for accept alternatives in @@ -463,8 +464,9 @@ package body Exp_Ch9 is -- The object is a limited record and therefore a by_reference type. function Build_Selected_Name - (Prefix, Selector : Name_Id; - Append_Char : Character := ' ') return Name_Id; + (Prefix : Entity_Id; + Selector : Entity_Id; + Append_Char : Character := ' ') return Name_Id; -- Build a name in the form of Prefix__Selector, with an optional -- character appended. This is used for internal subprograms generated -- for operations of protected types, including barrier functions. @@ -572,7 +574,7 @@ package body Exp_Ch9 is Actuals : List_Id; Formals : List_Id; Decls : List_Id; - Stmts : List_Id) return Node_Id; + Stmts : List_Id) return Entity_Id; -- Set the components of the generated parameter block with the values of -- the actual parameters. Generate aliased temporaries to capture the -- values for types that are passed by copy. Otherwise generate a reference @@ -588,6 +590,7 @@ package body Exp_Ch9 is function Parameter_Block_Unpack (Loc : Source_Ptr; + P : Entity_Id; Actuals : List_Id; Formals : List_Id) return List_Id; -- Retrieve the values of the components from the parameter block and @@ -795,6 +798,7 @@ package body Exp_Ch9 is Pid : Entity_Id; Loc : Source_Ptr) is + Decl : Node_Id; Obj_Ptr : Node_Id; begin @@ -812,14 +816,16 @@ package body Exp_Ch9 is New_External_Name (Chars (Corresponding_Record_Type (Pid)), 'P')); - Prepend_To (Decls, + Decl := Make_Object_Declaration (Loc, Defining_Identifier => Make_Defining_Identifier (Loc, Name_uObject), Object_Definition => New_Reference_To (Obj_Ptr, Loc), Expression => Unchecked_Convert_To (Obj_Ptr, - Make_Identifier (Loc, Name_uO)))); + Make_Identifier (Loc, Name_uO))); + Set_Needs_Debug_Info (Defining_Identifier (Decl)); + Prepend_To (Decls, Decl); Prepend_To (Decls, Make_Full_Type_Declaration (Loc, @@ -829,6 +835,65 @@ package body Exp_Ch9 is New_Reference_To (Corresponding_Record_Type (Pid), Loc)))); end Add_Object_Pointer; + -------------------------- + -- Add_Formal_Renamings -- + -------------------------- + + procedure Add_Formal_Renamings + (Spec : Node_Id; + Decls : List_Id; + Ent : Entity_Id; + Loc : Source_Ptr) + is + Ptr : constant Entity_Id := + Defining_Identifier + (Next (First (Parameter_Specifications (Spec)))); + -- The name of the formal that holds the address of the parameter block + -- for the call. + + Comp : Entity_Id; + Decl : Node_Id; + Formal : Entity_Id; + New_F : Entity_Id; + + begin + Formal := First_Formal (Ent); + while Present (Formal) loop + Comp := Entry_Component (Formal); + New_F := + Make_Defining_Identifier (Sloc (Formal), Chars (Formal)); + Set_Etype (New_F, Etype (Formal)); + Set_Scope (New_F, Ent); + Set_Needs_Debug_Info (New_F); -- That's the whole point. + + if Ekind (Formal) = E_In_Parameter then + Set_Ekind (New_F, E_Constant); + else + Set_Ekind (New_F, E_Variable); + Set_Extra_Constrained (New_F, Extra_Constrained (Formal)); + end if; + + Set_Actual_Subtype (New_F, Actual_Subtype (Formal)); + + Decl := + Make_Object_Renaming_Declaration (Loc, + Defining_Identifier => New_F, + Subtype_Mark => New_Reference_To (Etype (Formal), Loc), + Name => + Make_Explicit_Dereference (Loc, + Make_Selected_Component (Loc, + Prefix => + Unchecked_Convert_To (Entry_Parameters_Type (Ent), + Make_Identifier (Loc, Chars (Ptr))), + Selector_Name => + New_Reference_To (Comp, Loc)))); + + Append (Decl, Decls); + Set_Renamed_Object (Formal, New_F); + Next_Formal (Formal); + end loop; + end Add_Formal_Renamings; + ------------------------------ -- Add_Private_Declarations -- ------------------------------ @@ -840,6 +905,7 @@ package body Exp_Ch9 is Loc : Source_Ptr) is Def : constant Node_Id := Protected_Definition (Parent (Typ)); + Decl : Node_Id; Body_Ent : constant Entity_Id := Corresponding_Body (Parent (Typ)); P : Node_Id; Pdef : Entity_Id; @@ -849,28 +915,30 @@ package body Exp_Ch9 is if Present (Private_Declarations (Def)) then P := First (Private_Declarations (Def)); - while Present (P) loop if Nkind (P) = N_Component_Declaration then Pdef := Defining_Identifier (P); - Prepend_To (Decls, + Decl := Make_Object_Renaming_Declaration (Loc, Defining_Identifier => Prival (Pdef), Subtype_Mark => New_Reference_To (Etype (Pdef), Loc), Name => Make_Selected_Component (Loc, Prefix => Make_Identifier (Loc, Name), - Selector_Name => Make_Identifier (Loc, Chars (Pdef))))); + Selector_Name => Make_Identifier (Loc, Chars (Pdef)))); + Set_Needs_Debug_Info (Defining_Identifier (Decl)); + Prepend_To (Decls, Decl); end if; + Next (P); end loop; end if; - -- One more "prival" for the object itself, with the right protection - -- type. + -- One more "prival" for object itself, with the right protection type declare Protection_Type : RE_Id; + begin if Has_Attach_Handler (Typ) then if Restricted_Profile then @@ -906,14 +974,16 @@ package body Exp_Ch9 is Protection_Type := RE_Protection; end if; - Prepend_To (Decls, + Decl := Make_Object_Renaming_Declaration (Loc, Defining_Identifier => Object_Ref (Body_Ent), Subtype_Mark => New_Reference_To (RTE (Protection_Type), Loc), Name => Make_Selected_Component (Loc, Prefix => Make_Identifier (Loc, Name), - Selector_Name => Make_Identifier (Loc, Name_uObject)))); + Selector_Name => Make_Identifier (Loc, Name_uObject))); + Set_Needs_Debug_Info (Defining_Identifier (Decl)); + Prepend_To (Decls, Decl); end; end Add_Private_Declarations; @@ -931,9 +1001,9 @@ package body Exp_Ch9 is begin -- At the end of the statement sequence, Complete_Rendezvous is called. - -- A label skipping the Complete_Rendezvous, and all other - -- accept processing, has already been added for the expansion - -- of requeue statements. + -- A label skipping the Complete_Rendezvous, and all other accept + -- processing, has already been added for the expansion of requeue + -- statements. Call := Build_Runtime_Call (Loc, RE_Complete_Rendezvous); Insert_Before (Last (Statements (Stats)), Call); @@ -1161,7 +1231,6 @@ package body Exp_Ch9 is E : Entity_Id) return Node_Id is Loc : constant Source_Ptr := Sloc (N); - begin return Make_Function_Call (Loc, @@ -1247,7 +1316,8 @@ package body Exp_Ch9 is Component_List => Make_Component_List (Loc, Component_Items => Cdecls), - Tagged_Present => Ada_Version >= Ada_05, + Tagged_Present => + Ada_Version >= Ada_05 and then Is_Tagged_Type (Ctyp), Limited_Present => True)); end Build_Corresponding_Record; @@ -1269,11 +1339,10 @@ package body Exp_Ch9 is Typ : Entity_Id; begin - Ent := First_Entity (Concurrent_Type); - Eindx := 0; - -- Count number of non-family entries + Eindx := 0; + Ent := First_Entity (Concurrent_Type); while Present (Ent) loop if Ekind (Ent) = E_Entry then Eindx := Eindx + 1; @@ -1288,7 +1357,6 @@ package body Exp_Ch9 is Ent := First_Entity (Concurrent_Type); Comp := First (Component_List); - while Present (Ent) loop if Ekind (Ent) = E_Entry_Family then while Chars (Ent) /= Chars (Defining_Identifier (Comp)) loop @@ -1323,75 +1391,97 @@ package body Exp_Ch9 is is Actual : Entity_Id; Comp_Nam : Node_Id; - Comp_Rec : Node_Id; Comps : List_Id; Formal : Entity_Id; + Has_Comp : Boolean := False; + Rec_Nam : Node_Id; begin Actual := First (Actuals); Comps := New_List; Formal := Defining_Identifier (First (Formals)); + while Present (Actual) loop - -- Generate: - -- type Ann is access all + if not Is_Controlling_Actual (Actual) then - Comp_Nam := - Make_Defining_Identifier (Loc, New_Internal_Name ('A')); + -- Generate: + -- type Ann is access all - Append_To (Decls, - Make_Full_Type_Declaration (Loc, - Defining_Identifier => - Comp_Nam, - Type_Definition => - Make_Access_To_Object_Definition (Loc, - All_Present => - True, - Constant_Present => - Ekind (Formal) = E_In_Parameter, - Subtype_Indication => - New_Reference_To (Etype (Actual), Loc)))); + Comp_Nam := + Make_Defining_Identifier (Loc, New_Internal_Name ('A')); - -- Generate: - -- Param : Ann; + Append_To (Decls, + Make_Full_Type_Declaration (Loc, + Defining_Identifier => + Comp_Nam, + Type_Definition => + Make_Access_To_Object_Definition (Loc, + All_Present => + True, + Constant_Present => + Ekind (Formal) = E_In_Parameter, + Subtype_Indication => + New_Reference_To (Etype (Actual), Loc)))); - Append_To (Comps, - Make_Component_Declaration (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Chars (Formal)), - Component_Definition => - Make_Component_Definition (Loc, - Aliased_Present => - False, - Subtype_Indication => - New_Reference_To (Comp_Nam, Loc)))); + -- Generate: + -- Param : Ann; + + Append_To (Comps, + Make_Component_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Chars (Formal)), + Component_Definition => + Make_Component_Definition (Loc, + Aliased_Present => + False, + Subtype_Indication => + New_Reference_To (Comp_Nam, Loc)))); + + Has_Comp := True; + end if; Next_Actual (Actual); Next_Formal_With_Extras (Formal); end loop; - -- Generate: - -- type Pnn is record - -- Param1 : Ann1; - -- ... - -- ParamN : AnnN; + Rec_Nam := + Make_Defining_Identifier (Loc, New_Internal_Name ('P')); - -- where Pnn is a parameter wrapping record, Param1 .. ParamN are the - -- original parameter names and Ann1 .. AnnN are the access to actual - -- types. + if Has_Comp then - Comp_Rec := - Make_Defining_Identifier (Loc, New_Internal_Name ('P')); + -- Generate: + -- type Pnn is record + -- Param1 : Ann1; + -- ... + -- ParamN : AnnN; - Append_To (Decls, - Make_Full_Type_Declaration (Loc, - Defining_Identifier => - Comp_Rec, - Type_Definition => - Make_Record_Definition (Loc, - Component_List => - Make_Component_List (Loc, Comps)))); + -- where Pnn is a parameter wrapping record, Param1 .. ParamN are + -- the original parameter names and Ann1 .. AnnN are the access to + -- actual types. + + Append_To (Decls, + Make_Full_Type_Declaration (Loc, + Defining_Identifier => + Rec_Nam, + Type_Definition => + Make_Record_Definition (Loc, + Component_List => + Make_Component_List (Loc, Comps)))); + else + -- Generate: + -- type Pnn is null record; - return Comp_Rec; + Append_To (Decls, + Make_Full_Type_Declaration (Loc, + Defining_Identifier => + Rec_Nam, + Type_Definition => + Make_Record_Definition (Loc, + Null_Present => True, + Component_List => Empty))); + end if; + + return Rec_Nam; end Build_Parameter_Block; ------------------------ @@ -1579,8 +1669,8 @@ package body Exp_Ch9 is -- The two parameters must be mode conformant and have -- the exact same types. - if Out_Present (Prim_Op_Param) /= Out_Present (Proc_Param) - or else In_Present (Prim_Op_Param) /= In_Present (Proc_Param) + if Ekind (Defining_Identifier (Prim_Op_Param)) /= + Ekind (Defining_Identifier (Proc_Param)) or else Etype (Parameter_Type (Prim_Op_Param)) /= Etype (Parameter_Type (Proc_Param)) then @@ -1637,7 +1727,6 @@ package body Exp_Ch9 is return Type_Conformant_Parameters ( Parameter_Specifications (Prim_Op_Spec), Parameter_Specifications (Proc_Spec)); - end Overriding_Possible; ----------------------------- @@ -1653,25 +1742,22 @@ package body Exp_Ch9 is begin Formal := First (Formals); + while Present (Formal) loop - if Present (Formal) then - while Present (Formal) loop + -- Create an explicit copy of the entry parameter - -- Create an explicit copy of the entry parameter + Append_To (New_Formals, + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, + Chars => Chars (Defining_Identifier (Formal))), + In_Present => In_Present (Formal), + Out_Present => Out_Present (Formal), + Parameter_Type => New_Reference_To (Etype ( + Parameter_Type (Formal)), Loc))); - Append_To (New_Formals, - Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, - Chars => Chars (Defining_Identifier (Formal))), - In_Present => In_Present (Formal), - Out_Present => Out_Present (Formal), - Parameter_Type => New_Reference_To (Etype ( - Parameter_Type (Formal)), Loc))); - - Next (Formal); - end loop; - end if; + Next (Formal); + end loop; return New_Formals; end Replicate_Entry_Formals; @@ -1697,10 +1783,13 @@ package body Exp_Ch9 is if Present (Primitive_Operations (Iface)) then Iface_Prim_Op_Elmt := First_Elmt (Primitive_Operations (Iface)); - while Present (Iface_Prim_Op_Elmt) loop Iface_Prim_Op := Node (Iface_Prim_Op_Elmt); + while Present (Alias (Iface_Prim_Op)) loop + Iface_Prim_Op := Alias (Iface_Prim_Op); + end loop; + -- The current primitive operation can be overriden by the -- generated entry wrapper. @@ -1897,9 +1986,7 @@ package body Exp_Ch9 is Spec := Build_Find_Body_Index_Spec (Typ); Ent := First_Entity (Typ); - while Present (Ent) loop - if Ekind (Ent) = E_Entry_Family then Has_F := True; exit; @@ -1955,12 +2042,10 @@ package body Exp_Ch9 is elsif Nkind (Ret) = N_If_Statement then - -- Ranges are in increasing order, so last one doesn't need a - -- guard. + -- Ranges are in increasing order, so last one doesn't need guard declare Nod : constant Node_Id := Last (Elsif_Parts (Ret)); - begin Remove (Nod); Set_Else_Statements (Ret, Then_Statements (Nod)); @@ -2021,7 +2106,8 @@ package body Exp_Ch9 is S := Scope (E); -- Ada 2005 (AI-287): Do not set/get the has_master_entity reminder - -- in internal scopes. Required for nested limited aggregates. + -- in internal scopes, unless present already.. Required for nested + -- limited aggregates. This could use some more explanation ???? if Ada_Version >= Ada_05 then while Is_Internal (S) loop @@ -2110,12 +2196,17 @@ package body Exp_Ch9 is Espec := Build_Protected_Entry_Specification (Edef, Empty, Loc); -- - -- Add object pointer declaration. This is needed by the - -- discriminal and prival renamings, which should already - -- have been inserted into the declaration list. + + -- Add object pointer declaration. This is needed by the discriminal and + -- prival renamings, which should already have been inserted into the + -- declaration list. Add_Object_Pointer (Op_Decls, Pid, Loc); + -- Add renamings for formals for use by debugger + + Add_Formal_Renamings (Espec, Op_Decls, Ent, Loc); + if Abort_Allowed or else Restriction_Active (No_Entry_Queue) = False or else Number_Entries (Pid) > 1 @@ -2169,6 +2260,9 @@ package body Exp_Ch9 is RTE (RE_Exceptional_Complete_Single_Entry_Body), Loc); end if; + -- Create body of entry procedure. The renaming declarations are + -- placed ahead of the block that contains the actual entry body. + return Make_Subprogram_Body (Loc, Specification => Espec, @@ -2248,6 +2342,7 @@ package body Exp_Ch9 is Ident : Entity_Id) return List_Id is Loc : constant Source_Ptr := Sloc (N); + Decl : Node_Id; Formal : Entity_Id; New_Plist : List_Id; New_Param : Node_Id; @@ -2255,7 +2350,6 @@ package body Exp_Ch9 is begin New_Plist := New_List; Formal := First_Formal (Ident); - while Present (Formal) loop New_Param := Make_Parameter_Specification (Loc, @@ -2278,7 +2372,7 @@ package body Exp_Ch9 is -- to protected subprogram, the parameter is in-out. Otherwise it is -- an in parameter. - Prepend_To (New_Plist, + Decl := Make_Parameter_Specification (Loc, Defining_Identifier => Make_Defining_Identifier (Loc, Name_uObject), @@ -2286,7 +2380,9 @@ package body Exp_Ch9 is Out_Present => (Etype (Ident) = Standard_Void_Type and then not Is_RTE (Obj_Type, RE_Address)), - Parameter_Type => New_Reference_To (Obj_Type, Loc))); + Parameter_Type => New_Reference_To (Obj_Type, Loc)); + Set_Needs_Debug_Info (Defining_Identifier (Decl)); + Prepend_To (New_Plist, Decl); return New_Plist; end Build_Protected_Spec; @@ -2302,9 +2398,7 @@ package body Exp_Ch9 is is Loc : constant Source_Ptr := Sloc (N); Decl : Node_Id; - Protnm : constant Name_Id := Chars (Prottyp); Ident : Entity_Id; - Nam : Name_Id; New_Id : Entity_Id; New_Plist : List_Id; New_Spec : Node_Id; @@ -2324,7 +2418,6 @@ package body Exp_Ch9 is end if; Ident := Defining_Unit_Name (Specification (Decl)); - Nam := Chars (Ident); New_Plist := Build_Protected_Spec (Decl, @@ -2333,7 +2426,7 @@ package body Exp_Ch9 is New_Id := Make_Defining_Identifier (Loc, - Chars => Build_Selected_Name (Protnm, Nam, Append_Chr (Mode))); + Chars => Build_Selected_Name (Prottyp, Ident, Append_Chr (Mode))); -- The unprotected operation carries the user code, and debugging -- information must be generated for it, even though this spec does @@ -2397,24 +2490,28 @@ package body Exp_Ch9 is function Is_Exception_Safe (Subprogram : Node_Id) return Boolean is function Has_Side_Effect (N : Node_Id) return Boolean; - -- Return True whenever encountering a subprogram call or a - -- raise statement of any kind in the sequence of statements N + -- Return True whenever encountering a subprogram call or raise + -- statement of any kind in the sequence of statements --------------------- -- Has_Side_Effect -- --------------------- - -- What is this doing buried two levels down in exp_ch9. It - -- seems like a generally useful function, and indeed there - -- may be code duplication going on here ??? + -- What is this doing buried two levels down in exp_ch9. It seems + -- like a generally useful function, and indeed there may be code + -- duplication going on here ??? function Has_Side_Effect (N : Node_Id) return Boolean is - Stmt : Node_Id := N; + Stmt : Node_Id; Expr : Node_Id; function Is_Call_Or_Raise (N : Node_Id) return Boolean; -- Indicate whether N is a subprogram call or a raise statement + ---------------------- + -- Is_Call_Or_Raise -- + ---------------------- + function Is_Call_Or_Raise (N : Node_Id) return Boolean is begin return Nkind (N) = N_Procedure_Call_Statement @@ -2428,6 +2525,7 @@ package body Exp_Ch9 is -- Start of processing for Has_Side_Effect begin + Stmt := N; while Present (Stmt) loop if Is_Call_Or_Raise (Stmt) then return True; @@ -2485,13 +2583,12 @@ package body Exp_Ch9 is P_Op_Spec := Build_Protected_Sub_Specification (N, Pid, Protected_Mode); - -- Build a list of the formal parameters of the protected - -- version of the subprogram to use as the actual parameters - -- of the unprotected version. + -- Build a list of the formal parameters of the protected version of + -- the subprogram to use as the actual parameters of the unprotected + -- version. Uactuals := New_List; Pformal := First (Parameter_Specifications (P_Op_Spec)); - while Present (Pformal) loop Append ( Make_Identifier (Loc, Chars (Defining_Identifier (Pformal))), @@ -2499,8 +2596,8 @@ package body Exp_Ch9 is Next (Pformal); end loop; - -- Make a call to the unprotected version of the subprogram - -- built above for use by the protected version built below. + -- Make a call to the unprotected version of the subprogram built above + -- for use by the protected version built below. if Nkind (Op_Spec) = N_Function_Specification then if Exc_Safe then @@ -2711,17 +2808,18 @@ package body Exp_Ch9 is ------------------------- function Build_Selected_Name - (Prefix, Selector : Name_Id; - Append_Char : Character := ' ') return Name_Id + (Prefix : Entity_Id; + Selector : Entity_Id; + Append_Char : Character := ' ') return Name_Id is Select_Buffer : String (1 .. Hostparm.Max_Name_Length); Select_Len : Natural; begin - Get_Name_String (Selector); + Get_Name_String (Chars (Selector)); Select_Len := Name_Len; Select_Buffer (1 .. Select_Len) := Name_Buffer (1 .. Name_Len); - Get_Name_String (Prefix); + Get_Name_String (Chars (Prefix)); -- If scope is anonymous type, discard suffix to recover name of -- single protected object. Otherwise use protected type name. @@ -2739,12 +2837,28 @@ package body Exp_Ch9 is Name_Buffer (Name_Len) := Select_Buffer (J); end loop; + -- Now add the Append_Char if specified. The encoding to follow + -- depends on the type of entity. If Append_Char is either 'N' or 'P', + -- then the entity is associated to a protected type subprogram. + -- Otherwise, it is a protected type entry. For each case, the + -- encoding to follow for the suffix is documented in exp_dbug.ads. + + -- It would be better to encapsulate this as a routine in Exp_Dbug ??? + if Append_Char /= ' ' then - Name_Len := Name_Len + 1; - Name_Buffer (Name_Len) := Append_Char; + if Append_Char = 'P' or Append_Char = 'N' then + Name_Len := Name_Len + 1; + Name_Buffer (Name_Len) := Append_Char; + return Name_Find; + else + Name_Buffer (Name_Len + 1) := '_'; + Name_Buffer (Name_Len + 2) := Append_Char; + Name_Len := Name_Len + 2; + return New_External_Name (Name_Find, ' ', -1); + end if; + else + return Name_Find; end if; - - return Name_Find; end Build_Selected_Name; ----------------------------- @@ -2815,24 +2929,26 @@ package body Exp_Ch9 is Loc : constant Source_Ptr := Sloc (N); Parms : constant List_Id := Parameter_Associations (N); Stats : constant List_Id := New_List; - Pdecl : Node_Id; - Xdecl : Node_Id; - Decls : List_Id; + Actual : Node_Id; + Call : Node_Id; + Comm_Name : Entity_Id; Conctyp : Node_Id; + Decls : List_Id; Ent : Entity_Id; Ent_Acc : Entity_Id; + Formal : Node_Id; + Iface_Tag : Entity_Id; + Iface_Typ : Entity_Id; + N_Node : Node_Id; + N_Var : Node_Id; P : Entity_Id; - X : Entity_Id; - Plist : List_Id; Parm1 : Node_Id; Parm2 : Node_Id; Parm3 : Node_Id; - Call : Node_Id; - Actual : Node_Id; - Formal : Node_Id; - N_Node : Node_Id; - N_Var : Node_Id; - Comm_Name : Entity_Id; + Pdecl : Node_Id; + Plist : List_Id; + X : Entity_Id; + Xdecl : Node_Id; begin -- Simple entry and entry family cases merge here @@ -2899,7 +3015,7 @@ package body Exp_Ch9 is end if; -- The third parameter is the packaged parameters. If there are - -- none, then it is just the null address, since nothing is passed + -- none, then it is just the null address, since nothing is passed. if No (Parms) then Parm3 := New_Reference_To (RTE (RE_Null_Address), Loc); @@ -2909,8 +3025,8 @@ package body Exp_Ch9 is -- of a packaged record containing the required parameter values. else - -- First build a list of parameter values, which are - -- references to objects of the parameter types. + -- First build a list of parameter values, which are references to + -- objects of the parameter types. Plist := New_List; @@ -2932,9 +3048,9 @@ package body Exp_Ch9 is Object_Definition => New_Reference_To (Etype (Formal), Loc)); - -- We have to make an assignment statement separate for - -- the case of limited type. We can not assign it unless - -- the Assignment_OK flag is set first. + -- We have to make an assignment statement separate for the + -- case of limited type. We cannot assign it unless the + -- Assignment_OK flag is set first. if Ekind (Formal) /= E_Out_Parameter then N_Var := @@ -2954,8 +3070,36 @@ package body Exp_Ch9 is Prefix => New_Reference_To (Defining_Identifier (N_Node), Loc))); else - Append_To (Plist, - Make_Reference (Loc, Prefix => Relocate_Node (Actual))); + -- Interface class-wide formal + + if Ada_Version >= Ada_05 + and then Ekind (Etype (Formal)) = E_Class_Wide_Type + and then Is_Interface (Etype (Formal)) + then + Iface_Typ := Etype (Etype (Formal)); + + -- Generate: + -- formal_iface_type! (actual.iface_tag)'reference + + Iface_Tag := + Find_Interface_Tag (Etype (Actual), Iface_Typ); + pragma Assert (Present (Iface_Tag)); + + Append_To (Plist, + Make_Reference (Loc, + Unchecked_Convert_To (Iface_Typ, + Make_Selected_Component (Loc, + Prefix => + Relocate_Node (Actual), + Selector_Name => + New_Reference_To (Iface_Tag, Loc))))); + else + -- Generate: + -- actual'reference + + Append_To (Plist, + Make_Reference (Loc, Relocate_Node (Actual))); + end if; end if; Next_Actual (Actual); @@ -3066,8 +3210,8 @@ package body Exp_Ch9 is Append_To (Stats, Call); - -- If there are out or in/out parameters by copy - -- add assignment statements for the result values. + -- If there are out or in/out parameters by copy add assignment + -- statements for the result values. if Present (Parms) then Actual := First_Actual (N); @@ -3088,17 +3232,17 @@ package body Exp_Ch9 is Selector_Name => Make_Identifier (Loc, Chars (Formal))))); - -- In all cases (including limited private types) we - -- want the assignment to be valid. + -- In all cases (including limited private types) we want + -- the assignment to be valid. Set_Assignment_OK (Name (N_Node)); -- If the call is the triggering alternative in an - -- asynchronous select, or the entry_call alternative - -- of a conditional entry call, the assignments for in-out - -- parameters are incorporated into the statement list - -- that follows, so that there are executed only if the - -- entry call succeeds. + -- asynchronous select, or the entry_call alternative of a + -- conditional entry call, the assignments for in-out + -- parameters are incorporated into the statement list that + -- follows, so that there are executed only if the entry + -- call succeeds. if (Nkind (Parent (N)) = N_Triggering_Alternative and then N = Triggering_Statement (Parent (N))) @@ -3394,9 +3538,9 @@ package body Exp_Ch9 is Op_Decls : List_Id; begin - -- Make an unprotected version of the subprogram for use - -- within the same object, with a new name and an additional - -- parameter representing the object. + -- Make an unprotected version of the subprogram for use within the same + -- object, with a new name and an additional parameter representing the + -- object. Op_Decls := Declarations (N); N_Op_Spec := @@ -3434,22 +3578,61 @@ package body Exp_Ch9 is Make_Defining_Identifier (Loc, Chars => New_Internal_Name ('F')); - Efam_Decl := - Make_Full_Type_Declaration (Loc, - Defining_Identifier => Efam_Type, - Type_Definition => - Make_Unconstrained_Array_Definition (Loc, - Subtype_Marks => (New_List ( - New_Occurrence_Of ( + declare + Bas : Entity_Id := Base_Type - (Etype (Discrete_Subtype_Definition - (Parent (Efam)))), Loc))), + (Etype (Discrete_Subtype_Definition (Parent (Efam)))); + Bas_Decl : Node_Id := Empty; + Lo, Hi : Node_Id; + + begin + Get_Index_Bounds + (Discrete_Subtype_Definition (Parent (Efam)), Lo, Hi); + if Scope (Bas) = Standard_Standard + and then Bas = Base_Type (Standard_Integer) + and then Has_Discriminants (Conctyp) + and then Present + (Discriminant_Default_Value (First_Discriminant (Conctyp))) + and then + (Denotes_Discriminant (Lo, True) + or else Denotes_Discriminant (Hi, True)) + then + Bas := + Make_Defining_Identifier (Loc, New_Internal_Name ('B')); + Bas_Decl := + Make_Subtype_Declaration (Loc, + Defining_Identifier => Bas, + Subtype_Indication => + Make_Subtype_Indication (Loc, + Subtype_Mark => + New_Occurrence_Of (Standard_Integer, Loc), + Constraint => + Make_Range_Constraint (Loc, + Range_Expression => Make_Range (Loc, + Make_Integer_Literal + (Loc, -Entry_Family_Bound), + Make_Integer_Literal + (Loc, Entry_Family_Bound - 1))))); + + Insert_After (Current_Node, Bas_Decl); + Current_Node := Bas_Decl; + Analyze (Bas_Decl); + end if; + + Efam_Decl := + Make_Full_Type_Declaration (Loc, + Defining_Identifier => Efam_Type, + Type_Definition => + Make_Unconstrained_Array_Definition (Loc, + Subtype_Marks => + (New_List (New_Occurrence_Of (Bas, Loc))), Component_Definition => Make_Component_Definition (Loc, Aliased_Present => False, Subtype_Indication => New_Reference_To (Standard_Character, Loc)))); + end; Insert_After (Current_Node, Efam_Decl); Current_Node := Efam_Decl; @@ -3485,8 +3668,8 @@ package body Exp_Ch9 is -- Concurrent_Ref -- -------------------- - -- The expression returned for a reference to a concurrent - -- object has the form: + -- The expression returned for a reference to a concurrent object has the + -- form: -- taskV!(name)._Task_Id @@ -3501,8 +3684,8 @@ package body Exp_Ch9 is -- objectV!(name.all)._Object -- here taskV and objectV are the types for the associated records, which - -- contain the required _Task_Id and _Object fields for tasks and - -- protected objects, respectively. + -- contain the required _Task_Id and _Object fields for tasks and protected + -- objects, respectively. -- For the case of a task type name, the expression is @@ -3514,8 +3697,8 @@ package body Exp_Ch9 is -- objectR - -- which is a renaming of the _object field of the current object - -- object record, passed into protected operations as a parameter. + -- which is a renaming of the _object field of the current object object + -- record, passed into protected operations as a parameter. function Concurrent_Ref (N : Node_Id) return Node_Id is Loc : constant Source_Ptr := Sloc (N); @@ -3560,8 +3743,8 @@ package body Exp_Ch9 is end if; end loop; - -- We know that we are within the task body, so should have - -- found it in scope. + -- We know that we are within the task body, so should have found it + -- in scope. raise Program_Error; end Is_Current_Task; @@ -3598,10 +3781,11 @@ package body Exp_Ch9 is else declare Decl : Node_Id; - T_Self : constant Entity_Id - := Make_Defining_Identifier (Loc, New_Internal_Name ('T')); - T_Body : constant Node_Id - := Parent (Corresponding_Body (Parent (Entity (N)))); + T_Self : constant Entity_Id := + Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('T')); + T_Body : constant Node_Id := + Parent (Corresponding_Body (Parent (Entity (N)))); begin Decl := Make_Object_Declaration (Loc, @@ -3680,22 +3864,22 @@ package body Exp_Ch9 is S : Node_Id; begin - -- The queues of entries and entry families appear in textual - -- order in the associated record. The entry index is computed as - -- the sum of the number of queues for all entries that precede the - -- designated one, to which is added the index expression, if this - -- expression denotes a member of a family. + -- The queues of entries and entry families appear in textual order in + -- the associated record. The entry index is computed as the sum of the + -- number of queues for all entries that precede the designated one, to + -- which is added the index expression, if this expression denotes a + -- member of a family. -- The following is a place holder for the count of simple entries Num := Make_Integer_Literal (Sloc, 1); - -- We construct an expression which is a series of addition - -- operations. The first operand is the number of single entries that - -- precede this one, the second operand is the index value relative - -- to the start of the referenced family, and the remaining operands - -- are the lengths of the entry families that precede this entry, i.e. - -- the constructed expression is: + -- We construct an expression which is a series of addition operations. + -- The first operand is the number of single entries that precede this + -- one, the second operand is the index value relative to the start of + -- the referenced family, and the remaining operands are the lengths of + -- the entry families that precede this entry, i.e. the constructed + -- expression is: -- number_simple_entries + -- (s'pos (index-value) - s'pos (family'first)) + 1 + @@ -3703,8 +3887,8 @@ package body Exp_Ch9 is -- where index-value is the given index value, and s is the index -- subtype (we have to use pos because the subtype might be an - -- enumeration type preventing direct subtraction). - -- Note that the task entry array is one-indexed. + -- enumeration type preventing direct subtraction). Note that the task + -- entry array is one-indexed. -- The upper bound of the entry family may be a discriminant, so we -- retrieve the lower bound explicitly to compute offset, rather than @@ -3770,7 +3954,6 @@ package body Exp_Ch9 is procedure Establish_Task_Master (N : Node_Id) is Call : Node_Id; - begin if Restriction_Active (No_Task_Hierarchy) = False then Call := Build_Runtime_Call (Sloc (N), RE_Enter_Master); @@ -3822,13 +4005,12 @@ package body Exp_Ch9 is -- We can distinguish the two cases by seeing whether the accept statement -- is part of a list. If not, then it must be in an accept alternative. - -- To expand the requeue statement, a label is provided at the end of - -- the accept statement or alternative of which it is a part, so that - -- the statement can be skipped after the requeue is complete. - -- This label is created here rather than during the expansion of the - -- accept statement, because it will be needed by any requeue - -- statements within the accept, which are expanded before the - -- accept. + -- To expand the requeue statement, a label is provided at the end of the + -- accept statement or alternative of which it is a part, so that the + -- statement can be skipped after the requeue is complete. This label is + -- created here rather than during the expansion of the accept statement, + -- because it will be needed by any requeue statements within the accept, + -- which are expanded before the accept. procedure Expand_Accept_Declarations (N : Node_Id; Ent : Entity_Id) is Loc : constant Source_Ptr := Sloc (N); @@ -3864,8 +4046,8 @@ package body Exp_Ch9 is -- Create and declare two labels to be placed at the end of the -- accept statement. The first label is used to allow requeues to - -- skip the remainder of entry processing. The second label is - -- used to skip the remainder of entry processing if the rendezvous + -- skip the remainder of entry processing. The second label is used + -- to skip the remainder of entry processing if the rendezvous -- completes in the middle of the accept body. if Present (Handled_Statement_Sequence (N)) then @@ -3952,11 +4134,10 @@ package body Exp_Ch9 is Next (Alt); end loop; - -- If we are the first accept statement, then we have to - -- create the Ann variable, as for the stand alone case, - -- except that it is inserted before the selective accept. - -- Similarly, a label for requeue expansion must be - -- declared. + -- If we are the first accept statement, then we have to create + -- the Ann variable, as for the stand alone case, except that + -- it is inserted before the selective accept. Similarly, a + -- label for requeue expansion must be declared. if N = Accept_Statement (Alt) then Ann := @@ -3971,8 +4152,8 @@ package body Exp_Ch9 is Insert_Before (Sel_Acc, Adecl); Analyze (Adecl); - -- If we are not the first accept statement, then find the - -- Ann variable allocated by the first accept and use it. + -- If we are not the first accept statement, then find the Ann + -- variable allocated by the first accept and use it. else Ann := @@ -3991,30 +4172,31 @@ package body Exp_Ch9 is Set_Needs_Debug_Info (Ann); end if; - -- Create renaming declarations for the entry formals. Each - -- reference to a formal becomes a dereference of a component - -- of the parameter block, whose address is held in Ann. - -- These declarations are eventually inserted into the accept - -- block, and analyzed there so that they have the proper scope - -- for gdb and do not conflict with other declarations. + -- Create renaming declarations for the entry formals. Each reference + -- to a formal becomes a dereference of a component of the parameter + -- block, whose address is held in Ann. These declarations are + -- eventually inserted into the accept block, and analyzed there so + -- that they have the proper scope for gdb and do not conflict with + -- other declarations. if Present (Parameter_Specifications (N)) and then Present (Handled_Statement_Sequence (N)) then declare - Formal : Entity_Id; - New_F : Entity_Id; Comp : Entity_Id; Decl : Node_Id; + Formal : Entity_Id; + New_F : Entity_Id; begin New_Scope (Ent); Formal := First_Formal (Ent); while Present (Formal) loop - Comp := Entry_Component (Formal); - New_F := + Comp := Entry_Component (Formal); + New_F := Make_Defining_Identifier (Sloc (Formal), Chars (Formal)); + Set_Etype (New_F, Etype (Formal)); Set_Scope (New_F, Ent); Set_Needs_Debug_Info (New_F); -- That's the whole point. @@ -4030,16 +4212,19 @@ package body Exp_Ch9 is Decl := Make_Object_Renaming_Declaration (Loc, - Defining_Identifier => New_F, - Subtype_Mark => New_Reference_To (Etype (Formal), Loc), - Name => - Make_Explicit_Dereference (Loc, - Make_Selected_Component (Loc, - Prefix => - Unchecked_Convert_To (Entry_Parameters_Type (Ent), - New_Reference_To (Ann, Loc)), - Selector_Name => - New_Reference_To (Comp, Loc)))); + Defining_Identifier => + New_F, + Subtype_Mark => + New_Reference_To (Etype (Formal), Loc), + Name => + Make_Explicit_Dereference (Loc, + Make_Selected_Component (Loc, + Prefix => + Unchecked_Convert_To ( + Entry_Parameters_Type (Ent), + New_Reference_To (Ann, Loc)), + Selector_Name => + New_Reference_To (Comp, Loc)))); if No (Declarations (N)) then Set_Declarations (N, New_List); @@ -4065,10 +4250,10 @@ package body Exp_Ch9 is Comps : List_Id; T : constant Entity_Id := Defining_Identifier (N); D_T : constant Entity_Id := Designated_Type (T); - D_T2 : constant Entity_Id := Make_Defining_Identifier - (Loc, New_Internal_Name ('D')); - E_T : constant Entity_Id := Make_Defining_Identifier - (Loc, New_Internal_Name ('E')); + D_T2 : constant Entity_Id := Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('D')); + E_T : constant Entity_Id := Make_Defining_Identifier (Loc, + Chars => New_Internal_Name ('E')); P_List : constant List_Id := Build_Protected_Spec (N, RTE (RE_Address), False, D_T); Decl1 : Node_Id; @@ -4099,8 +4284,8 @@ package body Exp_Ch9 is Analyze (Decl1); Insert_After (N, Decl1); - -- Create Equivalent_Type, a record with two components for an - -- access to object and an access to subprogram. + -- Create Equivalent_Type, a record with two components for an access to + -- object and an access to subprogram. Comps := New_List ( Make_Component_Declaration (Loc, @@ -4154,12 +4339,12 @@ package body Exp_Ch9 is return; end if; - -- The body of the entry barrier must be analyzed in the context of - -- the protected object, but its scope is external to it, just as any - -- other unprotected version of a protected operation. The specification - -- has been produced when the protected type declaration was elaborated. - -- We build the body, insert it in the enclosing scope, but analyze it - -- in the current context. A more uniform approach would be to treat a + -- The body of the entry barrier must be analyzed in the context of the + -- protected object, but its scope is external to it, just as any other + -- unprotected version of a protected operation. The specification has + -- been produced when the protected type declaration was elaborated. We + -- build the body, insert it in the enclosing scope, but analyze it in + -- the current context. A more uniform approach would be to treat -- barrier just as a protected function, and discard the protected -- version of it because it is never called. @@ -4178,7 +4363,7 @@ package body Exp_Ch9 is Update_Prival_Subtypes (B_F); - Set_Privals (Spec_Decl, N, Loc); + Set_Privals (Spec_Decl, N, Loc, After_Barrier => True); Set_Discriminals (Spec_Decl); Set_Scope (Func, Scope (Prot)); @@ -4186,16 +4371,16 @@ package body Exp_Ch9 is Analyze_And_Resolve (Cond, Any_Boolean); end if; - -- The Ravenscar profile restricts barriers to simple variables - -- declared within the protected object. We also allow Boolean - -- constants, since these appear in several published examples - -- and are also allowed by the Aonix compiler. + -- The Ravenscar profile restricts barriers to simple variables declared + -- within the protected object. We also allow Boolean constants, since + -- these appear in several published examples and are also allowed by + -- the Aonix compiler. - -- Note that after analysis variables in this context will be - -- replaced by the corresponding prival, that is to say a renaming - -- of a selected component of the form _Object.Var. If expansion is - -- disabled, as within a generic, we check that the entity appears in - -- the current scope. + -- Note that after analysis variables in this context will be replaced + -- by the corresponding prival, that is to say a renaming of a selected + -- component of the form _Object.Var. If expansion is disabled, as + -- within a generic, we check that the entity appears in the current + -- scope. if Is_Entity_Name (Cond) then @@ -4278,11 +4463,37 @@ package body Exp_Ch9 is while Present (Tasknm) loop Count := Count + 1; - Append_To (Component_Associations (Aggr), - Make_Component_Association (Loc, - Choices => New_List ( - Make_Integer_Literal (Loc, Count)), - Expression => Concurrent_Ref (Tasknm))); + + -- A task interface class-wide type object is being aborted. + -- Retrieve its _task_id by calling a dispatching routine. + + if Ada_Version >= Ada_05 + and then Ekind (Etype (Tasknm)) = E_Class_Wide_Type + and then Is_Interface (Etype (Tasknm)) + and then Is_Task_Interface (Etype (Tasknm)) + then + Append_To (Component_Associations (Aggr), + Make_Component_Association (Loc, + Choices => New_List ( + Make_Integer_Literal (Loc, Count)), + Expression => + + -- Tasknm._disp_get_task_id + + Make_Selected_Component (Loc, + Prefix => + New_Copy_Tree (Tasknm), + Selector_Name => + Make_Identifier (Loc, Name_uDisp_Get_Task_Id)))); + + else + Append_To (Component_Associations (Aggr), + Make_Component_Association (Loc, + Choices => New_List ( + Make_Integer_Literal (Loc, Count)), + Expression => Concurrent_Ref (Tasknm))); + end if; + Next (Tasknm); end loop; @@ -4340,10 +4551,10 @@ package body Exp_Ch9 is -- Exceptional_Complete_Rendezvous (Get_GNAT_Exception); -- end; - -- The first three declarations were already inserted ahead of the - -- accept statement by the Expand_Accept_Declarations procedure, which - -- was called directly from the semantics during analysis of the accept. - -- statement, before analyzing its contained statements. + -- The first three declarations were already inserted ahead of the accept + -- statement by the Expand_Accept_Declarations procedure, which was called + -- directly from the semantics during analysis of the accept. statement, + -- before analyzing its contained statements. -- The declarations from the N_Accept_Statement, as noted in Sinfo, come -- from possible expansion activity (the original source of course does @@ -4372,7 +4583,11 @@ package body Exp_Ch9 is function Null_Statements (Stats : List_Id) return Boolean; -- Check for null statement sequence (i.e a list of labels and - -- null statements) + -- null statements). + + --------------------- + -- Null_Statements -- + --------------------- function Null_Statements (Stats : List_Id) return Boolean is Stmt : Node_Id; @@ -4475,11 +4690,11 @@ package body Exp_Ch9 is Declarations => Declarations (N), Handled_Statement_Sequence => Build_Accept_Body (N)); - -- Prepend call to Accept_Call to main statement sequence - -- If the accept has exception handlers, the statement sequence - -- is wrapped in a block. Insert call and renaming declarations - -- in the declarations of the block, so they are elaborated before - -- the handlers. + -- Prepend call to Accept_Call to main statement sequence If the + -- accept has exception handlers, the statement sequence is wrapped + -- in a block. Insert call and renaming declarations in the + -- declarations of the block, so they are elaborated before the + -- handlers. Call := Make_Procedure_Call_Statement (Loc, @@ -4504,28 +4719,28 @@ package body Exp_Ch9 is D : Node_Id; Next_D : Node_Id; Typ : Entity_Id; + begin D := First (Declarations (N)); - while Present (D) loop Next_D := Next (D); if Nkind (D) = N_Object_Renaming_Declaration then - -- The renaming declarations for the formals were - -- created during analysis of the accept statement, - -- and attached to the list of declarations. Place - -- them now in the context of the accept block or - -- subprogram. + + -- The renaming declarations for the formals were created + -- during analysis of the accept statement, and attached to + -- the list of declarations. Place them now in the context + -- of the accept block or subprogram. Remove (D); Typ := Entity (Subtype_Mark (D)); Insert_After (Call, D); Analyze (D); - -- If the formal is class_wide, it does not have an - -- actual subtype. The analysis of the renaming declaration - -- creates one, but we need to retain the class-wide - -- nature of the entity. + -- If the formal is class_wide, it does not have an actual + -- subtype. The analysis of the renaming declaration creates + -- one, but we need to retain the class-wide nature of the + -- entity. if Is_Class_Wide_Type (Typ) then Set_Etype (Defining_Identifier (D), Typ); @@ -4691,16 +4906,6 @@ package body Exp_Ch9 is -- S : constant Integer := DT_Position (); -- U : Boolean; - -- procedure A is - -- begin - -- - -- end A; - - -- procedure T is - -- begin - -- - -- end T; - -- begin -- disp_get_prim_op_kind (, S, C); @@ -4723,7 +4928,7 @@ package body Exp_Ch9 is -- ParamN := P.ParamN; -- if Enqueued (Bnn) then - -- A; + -- -- end if; -- at end -- _clean; @@ -4733,7 +4938,7 @@ package body Exp_Ch9 is -- end; -- if not Cancelled (Bnn) then - -- T; + -- -- end if; -- elsif C = POK_Task_Entry then @@ -4756,7 +4961,7 @@ package body Exp_Ch9 is -- begin -- begin -- Abort_Undefer; - -- A; + -- -- at end -- _clean; -- end; @@ -4765,13 +4970,13 @@ package body Exp_Ch9 is -- end; -- if not U then - -- T; + -- -- end if; -- end; -- else -- ; - -- T; + -- -- end if; -- The job is to convert this to the asynchronous form @@ -4795,46 +5000,46 @@ package body Exp_Ch9 is Trig : constant Node_Id := Triggering_Alternative (N); Tstats : constant List_Id := Statements (Trig); - Abortable_Block : Node_Id; - Actuals : List_Id; - Aproc : Entity_Id; - Blk_Ent : Entity_Id; - Blk_Typ : Entity_Id; - Call : Node_Id; - Call_Ent : Entity_Id; - Cancel_Param : Entity_Id; - Cleanup_Block : Node_Id; - Cleanup_Stmts : List_Id; - Concval : Node_Id; - Dblock_Ent : Entity_Id; - Decl : Node_Id; - Decls : List_Id; - Ecall : Node_Id; - Ename : Node_Id; - Enqueue_Call : Node_Id; - Formals : List_Id; - Hdle : List_Id; - Index : Node_Id; - N_Orig : Node_Id; - Obj : Entity_Id; - Param : Node_Id; - Params : List_Id; - Pdef : Entity_Id; - ProtE_Stmts : List_Id; - ProtP_Stmts : List_Id; - Stmt : Node_Id; - Stmts : List_Id; - Target_Undefer : RE_Id; - TaskE_Stmts : List_Id; - Tproc : Entity_Id; - Undefer_Args : List_Id := No_List; + Abort_Block_Ent : Entity_Id; + Abortable_Block : Node_Id; + Actuals : List_Id; + Blk_Ent : Entity_Id; + Blk_Typ : Entity_Id; + Call : Node_Id; + Call_Ent : Entity_Id; + Cancel_Param : Entity_Id; + Cleanup_Block : Node_Id; + Cleanup_Block_Ent : Entity_Id; + Cleanup_Stmts : List_Id; + Concval : Node_Id; + Dblock_Ent : Entity_Id; + Decl : Node_Id; + Decls : List_Id; + Ecall : Node_Id; + Ename : Node_Id; + Enqueue_Call : Node_Id; + Formals : List_Id; + Hdle : List_Id; + Index : Node_Id; + N_Orig : Node_Id; + Obj : Entity_Id; + Param : Node_Id; + Params : List_Id; + Pdef : Entity_Id; + ProtE_Stmts : List_Id; + ProtP_Stmts : List_Id; + Stmt : Node_Id; + Stmts : List_Id; + Target_Undefer : RE_Id; + TaskE_Stmts : List_Id; + Undefer_Args : List_Id := No_List; B : Entity_Id; -- Call status flag Bnn : Entity_Id; -- Communication block C : Entity_Id; -- Call kind - P : Node_Id; -- Parameter block + P : Entity_Id; -- Parameter block S : Entity_Id; -- Primitive operation slot - U : Entity_Id; -- Additional status flag + T : Entity_Id; -- Additional status flag begin Blk_Ent := Make_Defining_Identifier (Loc, New_Internal_Name ('A')); @@ -4900,50 +5105,37 @@ package body Exp_Ch9 is -- Dispatch table slot processing, generate: -- S : constant Integer := - -- DT_Position (); + -- Ada.Tags.Get_Offset_Index ( + -- Unchecked_Convert_To (Ada.Tags.Interface_Tag, Obj), + -- DT_Position ()); - S := SEU.Build_S (Loc, Decls, Call_Ent); + S := SEU.Build_S (Loc, Decls, Obj, Call_Ent); -- Additional status flag processing, generate: - U := Make_Defining_Identifier (Loc, Name_uU); + T := Make_Defining_Identifier (Loc, New_Internal_Name ('T')); Append_To (Decls, Make_Object_Declaration (Loc, Defining_Identifier => - U, + T, Object_Definition => New_Reference_To (Standard_Boolean, Loc))); - -- Generate: - -- procedure A is - -- begin - -- Astmts - -- end A; - - Aproc := SEU.Build_Wrapping_Procedure (Loc, 'A', Decls, Astats); - - -- Generate: - -- procedure T is - -- begin - -- Tstmts - -- end T; - - Tproc := SEU.Build_Wrapping_Procedure (Loc, 'T', Decls, Tstats); - - -- Generate: - -- _dispatching_get_prim_op_kind (, S, C); - Append_To (Stmts, Make_Procedure_Call_Statement (Loc, Name => - Make_Identifier (Loc, Name_uDisp_Get_Prim_Op_Kind), + New_Reference_To ( + Find_Prim_Op (Etype (Etype (Obj)), + Name_uDisp_Get_Prim_Op_Kind), + Loc), Parameter_Associations => New_List ( New_Copy_Tree (Obj), New_Reference_To (S, Loc), New_Reference_To (C, Loc)))); + -- --------------------------------------------------------------- -- Protected entry handling -- Generate: @@ -4951,7 +5143,7 @@ package body Exp_Ch9 is -- ... -- ParamN := P.ParamN; - Cleanup_Stmts := Parameter_Block_Unpack (Loc, Actuals, Formals); + Cleanup_Stmts := Parameter_Block_Unpack (Loc, P, Actuals, Formals); -- Generate: -- _dispatching_asynchronous_select @@ -4960,22 +5152,25 @@ package body Exp_Ch9 is Prepend_To (Cleanup_Stmts, Make_Procedure_Call_Statement (Loc, Name => - Make_Identifier (Loc, Name_uDisp_Asynchronous_Select), + New_Reference_To ( + Find_Prim_Op (Etype (Etype (Obj)), + Name_uDisp_Asynchronous_Select), + Loc), Parameter_Associations => New_List ( New_Copy_Tree (Obj), New_Reference_To (S, Loc), - P, + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (P, Loc), + Attribute_Name => Name_Address), New_Reference_To (Bnn, Loc), New_Reference_To (B, Loc)))); -- Generate: -- if Enqueued (Bnn) then - -- A + -- -- end if; - -- where A is the abort statements wrapping procedure - Append_To (Cleanup_Stmts, Make_If_Statement (Loc, Condition => @@ -4987,12 +5182,7 @@ package body Exp_Ch9 is New_Reference_To (Bnn, Loc))), Then_Statements => - New_List ( - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (Aproc, Loc), - Parameter_Associations => - No_List)))); + New_Copy_List_Tree (Astats))); -- Wrap the statements in a block. Exp_Ch7.Expand_Cleanup_Actions -- will then generate a _clean for the communication block Bnn. @@ -5011,10 +5201,13 @@ package body Exp_Ch9 is -- _clean; -- end; - Cleanup_Block := - SEU.Build_Cleanup_Block (Loc, Blk_Ent, Cleanup_Stmts, Bnn); + Cleanup_Block_Ent := + Make_Defining_Identifier (Loc, New_Internal_Name ('C')); + + Cleanup_Block := SEU.Build_Cleanup_Block (Loc, + Cleanup_Block_Ent, Cleanup_Stmts, Bnn); - -- Wrap the cleanup block in an exception handling block. + -- Wrap the cleanup block in an exception handling block -- Generate: -- begin @@ -5023,17 +5216,22 @@ package body Exp_Ch9 is -- when Abort_Signal => Abort_Undefer; -- end; + Abort_Block_Ent := + Make_Defining_Identifier (Loc, New_Internal_Name ('A')); + ProtE_Stmts := New_List ( - SEU.Build_Abort_Block (Loc, Blk_Ent, Cleanup_Block)); + Make_Implicit_Label_Declaration (Loc, + Defining_Identifier => Abort_Block_Ent), + + SEU.Build_Abort_Block (Loc, + Abort_Block_Ent, Cleanup_Block_Ent, Cleanup_Block)); -- Generate: -- if not Cancelled (Bnn) then - -- T + -- -- end if; - -- there T is the triggering statements wrapping procedure - Append_To (ProtE_Stmts, Make_If_Statement (Loc, Condition => @@ -5047,14 +5245,9 @@ package body Exp_Ch9 is New_Reference_To (Bnn, Loc)))), Then_Statements => - New_List ( - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (Tproc, Loc), - Parameter_Associations => - No_List)))); + New_Copy_List_Tree (Tstats))); - ------------------------------------------------------------------- + -- --------------------------------------------------------------- -- Task entry handling -- Generate: @@ -5062,7 +5255,7 @@ package body Exp_Ch9 is -- ... -- ParamN := P.ParamN; - TaskE_Stmts := Parameter_Block_Unpack (Loc, Actuals, Formals); + TaskE_Stmts := Parameter_Block_Unpack (Loc, P, Actuals, Formals); -- Generate: -- _dispatching_asynchronous_select @@ -5071,12 +5264,17 @@ package body Exp_Ch9 is Prepend_To (TaskE_Stmts, Make_Procedure_Call_Statement (Loc, Name => - Make_Identifier (Loc, Name_uDisp_Asynchronous_Select), + New_Reference_To ( + Find_Prim_Op (Etype (Etype (Obj)), + Name_uDisp_Asynchronous_Select), + Loc), Parameter_Associations => New_List ( New_Copy_Tree (Obj), New_Reference_To (S, Loc), - New_Copy_Tree (P), + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (P, Loc), + Attribute_Name => Name_Address), New_Reference_To (Bnn, Loc), New_Reference_To (B, Loc)))); @@ -5092,23 +5290,16 @@ package body Exp_Ch9 is -- Generate: -- Abort_Undefer; - -- A - - -- where A is the abortable statements wrapping procedure + -- - Cleanup_Stmts := - New_List ( - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Abort_Undefer), Loc), - Parameter_Associations => - No_List), + Cleanup_Stmts := New_Copy_List_Tree (Astats); - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (Aproc, Loc), - Parameter_Associations => - No_List)); + Prepend_To (Cleanup_Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Abort_Undefer), Loc), + Parameter_Associations => + No_List)); -- Wrap the statements in a block. Exp_Ch7.Expand_Cleanup_Actions -- will generate a _clean for the additional status flag. @@ -5125,10 +5316,11 @@ package body Exp_Ch9 is -- _clean; -- end; - Blk_Ent := Make_Defining_Identifier (Loc, New_Internal_Name ('A')); + Cleanup_Block_Ent := + Make_Defining_Identifier (Loc, New_Internal_Name ('C')); - Cleanup_Block := - SEU.Build_Cleanup_Block (Loc, Blk_Ent, Cleanup_Stmts, U); + Cleanup_Block := SEU.Build_Cleanup_Block (Loc, + Cleanup_Block_Ent, Cleanup_Stmts, T); -- Wrap the cleanup block in an exception handling block @@ -5139,48 +5331,41 @@ package body Exp_Ch9 is -- when Abort_Signal => Abort_Undefer; -- end; + Abort_Block_Ent := + Make_Defining_Identifier (Loc, New_Internal_Name ('A')); + Append_To (TaskE_Stmts, - SEU.Build_Abort_Block (Loc, Blk_Ent, Cleanup_Block)); + Make_Implicit_Label_Declaration (Loc, + Defining_Identifier => Abort_Block_Ent)); + + Append_To (TaskE_Stmts, + SEU.Build_Abort_Block (Loc, + Abort_Block_Ent, Cleanup_Block_Ent, Cleanup_Block)); -- Generate: - -- if not U then - -- T + -- if not T then + -- -- end if; - -- where T is the triggering statements wrapping procedure - Append_To (TaskE_Stmts, Make_If_Statement (Loc, Condition => Make_Op_Not (Loc, Right_Opnd => - New_Reference_To (U, Loc)), + New_Reference_To (T, Loc)), + Then_Statements => - New_List ( - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (Tproc, Loc), - Parameter_Associations => - No_List)))); + New_Copy_List_Tree (Tstats))); ------------------------------------------------------------------- -- Protected procedure handling -- Generate: -- ; - -- T; + -- - -- where T is the triggering statements wrapping procedure - - ProtP_Stmts := - New_List ( - New_Copy_Tree (Ecall), - - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (Tproc, Loc), - Parameter_Associations => - No_List)); + ProtP_Stmts := New_Copy_List_Tree (Tstats); + Prepend_To (ProtP_Stmts, New_Copy_Tree (Ecall)); -- Generate: -- if C = POK_Procedure_Entry then @@ -5212,6 +5397,7 @@ package body Exp_Ch9 is New_Reference_To (C, Loc), Right_Opnd => New_Reference_To (RTE (RE_POK_Task_Entry), Loc)), + Then_Statements => TaskE_Stmts)), @@ -5331,6 +5517,7 @@ package body Exp_Ch9 is Analyze (N); return; end if; + else N_Orig := N; end if; @@ -5725,10 +5912,11 @@ package body Exp_Ch9 is Params : List_Id; Stmt : Node_Id; Stmts : List_Id; + Unpack : List_Id; B : Entity_Id; -- Call status flag C : Entity_Id; -- Call kind - P : Node_Id; -- Parameter block + P : Entity_Id; -- Parameter block S : Entity_Id; -- Primitive operation slot begin @@ -5758,9 +5946,11 @@ package body Exp_Ch9 is -- Dispatch table slot processing, generate: -- S : constant Integer := - -- DT_Position (); + -- Ada.Tags.Get_Offset_Index ( + -- Unchecked_Convert_To (Ada.Tags.Interface_Tag, Obj), + -- DT_Position ()); - S := SEU.Build_S (Loc, Decls, Call_Ent); + S := SEU.Build_S (Loc, Decls, Obj, Call_Ent); -- Generate: -- _dispatching_conditional_select (, S, P'address, C, B); @@ -5768,12 +5958,17 @@ package body Exp_Ch9 is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, Name => - Make_Identifier (Loc, Name_uDisp_Conditional_Select), + New_Reference_To ( + Find_Prim_Op (Etype (Etype (Obj)), + Name_uDisp_Conditional_Select), + Loc), Parameter_Associations => New_List ( New_Copy_Tree (Obj), New_Reference_To (S, Loc), - P, + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (P, Loc), + Attribute_Name => Name_Address), New_Reference_To (C, Loc), New_Reference_To (B, Loc)))); @@ -5786,26 +5981,33 @@ package body Exp_Ch9 is -- ParamN := P.ParamN; -- end if; - Append_To (Stmts, - Make_If_Statement (Loc, + Unpack := Parameter_Block_Unpack (Loc, P, Actuals, Formals); - Condition => - Make_Or_Else (Loc, - Left_Opnd => - Make_Op_Eq (Loc, - Left_Opnd => - New_Reference_To (C, Loc), - Right_Opnd => - New_Reference_To (RTE (RE_POK_Protected_Entry), Loc)), - Right_Opnd => - Make_Op_Eq (Loc, - Left_Opnd => - New_Reference_To (C, Loc), - Right_Opnd => - New_Reference_To (RTE (RE_POK_Task_Entry), Loc))), + -- Generate the if statement only when the packed parameters need + -- explicit assignments to their corresponding actuals. - Then_Statements => - Parameter_Block_Unpack (Loc, Actuals, Formals))); + if Present (Unpack) then + Append_To (Stmts, + Make_If_Statement (Loc, + + Condition => + Make_Or_Else (Loc, + Left_Opnd => + Make_Op_Eq (Loc, + Left_Opnd => + New_Reference_To (C, Loc), + Right_Opnd => + New_Reference_To (RTE ( + RE_POK_Protected_Entry), Loc)), + Right_Opnd => + Make_Op_Eq (Loc, + Left_Opnd => + New_Reference_To (C, Loc), + Right_Opnd => + New_Reference_To (RTE (RE_POK_Task_Entry), Loc))), + + Then_Statements => Unpack)); + end if; -- Generate: -- if B then @@ -5820,7 +6022,7 @@ package body Exp_Ch9 is -- -- end if; - N_Stats := New_Copy_List (Statements (Alt)); + N_Stats := New_Copy_List_Tree (Statements (Alt)); Prepend_To (N_Stats, Make_If_Statement (Loc, @@ -6060,10 +6262,9 @@ package body Exp_Ch9 is end if; end if; - -- Associate privals and discriminals with the next protected - -- operation body to be expanded. These are used to expand - -- references to private data objects and discriminants, - -- respectively. + -- Associate privals and discriminals with the next protected operation + -- body to be expanded. These are used to expand references to private + -- data objects and discriminants, respectively. Next_Op := Next_Protected_Operation (N); @@ -6091,16 +6292,15 @@ package body Exp_Ch9 is return; end if; - -- If this entry call is part of an asynchronous select, don't - -- expand it here; it will be expanded with the select statement. - -- Don't expand timed entry calls either, as they are translated - -- into asynchronous entry calls. + -- If this entry call is part of an asynchronous select, don't expand it + -- here; it will be expanded with the select statement. Don't expand + -- timed entry calls either, as they are translated into asynchronous + -- entry calls. - -- ??? This whole approach is questionable; it may be better - -- to go back to allowing the expansion to take place and then - -- attempting to fix it up in Expand_N_Asynchronous_Select. - -- The tricky part is figuring out whether the expanded - -- call is on a task or protected entry. + -- ??? This whole approach is questionable; it may be better to go back + -- to allowing the expansion to take place and then attempting to fix it + -- up in Expand_N_Asynchronous_Select. The tricky part is figuring out + -- whether the expanded call is on a task or protected entry. if (Nkind (Parent (N)) /= N_Triggering_Alternative or else N /= Triggering_Statement (Parent (N))) @@ -6117,17 +6317,17 @@ package body Exp_Ch9 is -- Expand_N_Entry_Declaration -- -------------------------------- - -- If there are parameters, then first, each of the formals is marked - -- by setting Is_Entry_Formal. Next a record type is built which is - -- used to hold the parameter values. The name of this record type is - -- entryP where entry is the name of the entry, with an additional - -- corresponding access type called entryPA. The record type has matching - -- components for each formal (the component names are the same as the - -- formal names). For elementary types, the component type matches the - -- formal type. For composite types, an access type is declared (with - -- the name formalA) which designates the formal type, and the type of - -- the component is this access type. Finally the Entry_Component of - -- each formal is set to reference the corresponding record component. + -- If there are parameters, then first, each of the formals is marked by + -- setting Is_Entry_Formal. Next a record type is built which is used to + -- hold the parameter values. The name of this record type is entryP where + -- entry is the name of the entry, with an additional corresponding access + -- type called entryPA. The record type has matching components for each + -- formal (the component names are the same as the formal names). For + -- elementary types, the component type matches the formal type. For + -- composite types, an access type is declared (with the name formalA) + -- which designates the formal type, and the type of the component is this + -- access type. Finally the Entry_Component of each formal is set to + -- reference the corresponding record component. procedure Expand_N_Entry_Declaration (N : Node_Id) is Loc : constant Source_Ptr := Sloc (N); @@ -6231,11 +6431,11 @@ package body Exp_Ch9 is ----------------------------- -- Protected bodies are expanded to the completion of the subprograms - -- created for the corresponding protected type. These are a protected - -- and unprotected version of each protected subprogram in the object, - -- a function to calculate each entry barrier, and a procedure to - -- execute the sequence of statements of each protected entry body. - -- For example, for protected type ptype: + -- created for the corresponding protected type. These are a protected and + -- unprotected version of each protected subprogram in the object, a + -- function to calculate each entry barrier, and a procedure to execute the + -- sequence of statements of each protected entry body. For example, for + -- protected type ptype: -- function entB -- (O : System.Address; @@ -6379,7 +6579,6 @@ package body Exp_Ch9 is Actuals := New_List; Formal := First (Parameter_Specifications (Spec)); - while Present (Formal) loop Append_To (Actuals, Make_Identifier (Loc, Chars (Defining_Identifier (Formal)))); @@ -6581,10 +6780,9 @@ package body Exp_Ch9 is Analyze (New_Op_Body); end if; - -- Ada 2005 (AI-345): Construct the primitive entry wrapper bodies - -- after the protected body. At this point the entry specs have been - -- created, frozen and included in the dispatch table for the - -- protected type. + -- Ada 2005 (AI-345): Construct the primitive entry wrapper bodies after + -- the protected body. At this point the entry specs have been created, + -- frozen and included in the dispatch table for the protected type. pragma Assert (Present (Corresponding_Record_Type (Pid))); @@ -6600,10 +6798,10 @@ package body Exp_Ch9 is Wrap_Body : Node_Id; begin - -- Examine the visible declarations of the protected type, - -- looking for an entry declaration. We do not consider - -- entry families since they can not have dispatching - -- operations, thus they do not need entry wrappers. + -- Examine the visible declarations of the protected type, looking + -- for an entry declaration. We do not consider entry families + -- since they cannot have dispatching operations, thus they do not + -- need entry wrappers. while Present (Vis_Decl) loop if Nkind (Vis_Decl) = N_Entry_Declaration then @@ -6658,57 +6856,55 @@ package body Exp_Ch9 is -- -- end record; - -- The discriminants are present only if the corresponding protected - -- type has discriminants, and they exactly mirror the protected type - -- discriminants. The private data fields similarly mirror the - -- private declarations of the protected type. + -- The discriminants are present only if the corresponding protected type + -- has discriminants, and they exactly mirror the protected type + -- discriminants. The private data fields similarly mirror the private + -- declarations of the protected type. - -- The Object field is always present. It contains RTS specific data - -- used to control the protected object. It is declared as Aliased - -- so that it can be passed as a pointer to the RTS. This allows the - -- protected record to be referenced within RTS data structures. - -- An appropriate Protection type and discriminant are generated. + -- The Object field is always present. It contains RTS specific data used + -- to control the protected object. It is declared as Aliased so that it + -- can be passed as a pointer to the RTS. This allows the protected record + -- to be referenced within RTS data structures. An appropriate Protection + -- type and discriminant are generated. -- The Service field is present for protected objects with entries. It - -- contains sufficient information to allow the entry service procedure - -- for this object to be called when the object is not known till runtime. + -- contains sufficient information to allow the entry service procedure for + -- this object to be called when the object is not known till runtime. -- One entry_family component is present for each entry family in the -- task definition (see Expand_N_Task_Type_Declaration). -- When a protected object is declared, an instance of the protected type - -- value record is created. The elaboration of this declaration creates - -- the correct bounds for the entry families, and also evaluates the - -- priority expression if needed. The initialization routine for - -- the protected type itself then calls Initialize_Protection with - -- appropriate parameters to initialize the value of the Task_Id field. - -- Install_Handlers may be also called if a pragma Attach_Handler applies. - - -- Note: this record is passed to the subprograms created by the - -- expansion of protected subprograms and entries. It is an in parameter - -- to protected functions and an in out parameter to procedures and - -- entry bodies. The Entity_Id for this created record type is placed - -- in the Corresponding_Record_Type field of the associated protected - -- type entity. - - -- Next we create a procedure specifications for protected subprograms - -- and entry bodies. For each protected subprograms two subprograms are - -- created, an unprotected and a protected version. The unprotected - -- version is called from within other operations of the same protected - -- object. + -- value record is created. The elaboration of this declaration creates the + -- correct bounds for the entry families, and also evaluates the priority + -- expression if needed. The initialization routine for the protected type + -- itself then calls Initialize_Protection with appropriate parameters to + -- initialize the value of the Task_Id field. Install_Handlers may be also + -- called if a pragma Attach_Handler applies. + + -- Note: this record is passed to the subprograms created by the expansion + -- of protected subprograms and entries. It is an in parameter to protected + -- functions and an in out parameter to procedures and entry bodies. The + -- Entity_Id for this created record type is placed in the + -- Corresponding_Record_Type field of the associated protected type entity. + + -- Next we create a procedure specifications for protected subprograms and + -- entry bodies. For each protected subprograms two subprograms are + -- created, an unprotected and a protected version. The unprotected version + -- is called from within other operations of the same protected object. -- We also build the call to register the procedure if a pragma -- Interrupt_Handler applies. -- A single subprogram is created to service all entry bodies; it has an - -- additional boolean out parameter indicating that the previous entry - -- call made by the current task was serviced immediately, i.e. not by - -- proxy. The O parameter contains a pointer to a record object of the - -- type described above. An untyped interface is used here to allow this + -- additional boolean out parameter indicating that the previous entry call + -- made by the current task was serviced immediately, i.e. not by proxy. + -- The O parameter contains a pointer to a record object of the type + -- described above. An untyped interface is used here to allow this -- procedure to be called in places where the type of the object to be - -- serviced is not known. This must be done, for example, when a call - -- that may have been requeued is cancelled; the corresponding object - -- must be serviced, but which object that is not known till runtime. + -- serviced is not known. This must be done, for example, when a call that + -- may have been requeued is cancelled; the corresponding object must be + -- serviced, but which object that is not known till runtime. -- procedure ptypeS -- (O : System.Address; P : out Boolean); @@ -6724,9 +6920,8 @@ package body Exp_Ch9 is procedure Expand_N_Protected_Type_Declaration (N : Node_Id) is Loc : constant Source_Ptr := Sloc (N); Prottyp : constant Entity_Id := Defining_Identifier (N); - Protnm : constant Name_Id := Chars (Prottyp); - Pdef : constant Node_Id := Protected_Definition (N); + Pdef : constant Node_Id := Protected_Definition (N); -- This contains two lists; one for visible and one for private decls Rec_Decl : Node_Id; @@ -6748,7 +6943,7 @@ package body Exp_Ch9 is Object_Comp : Node_Id; procedure Register_Handler; - -- for a protected operation that is an interrupt handler, add the + -- For a protected operation that is an interrupt handler, add the -- freeze action that will register it as such. ---------------------- @@ -6803,7 +6998,8 @@ package body Exp_Ch9 is -- corresponding record type must refer to the discriminants of that -- record, so we must apply a new renaming to subtypes_indications: - -- protected discriminant => discriminal => record discriminant. + -- protected discriminant => discriminal => record discriminant + -- This replacement is not applied to default expressions, for which -- the discriminal is correct. @@ -6811,11 +7007,9 @@ package body Exp_Ch9 is declare Disc : Entity_Id; Decl : Node_Id; - begin Disc := First_Discriminant (Prottyp); Decl := First (Discriminant_Specifications (Rec_Decl)); - while Present (Disc) loop Append_Elmt (Discriminal (Disc), Discr_Map); Append_Elmt (Defining_Identifier (Decl), Discr_Map); @@ -6827,15 +7021,14 @@ package body Exp_Ch9 is -- Fill in the component declarations - -- Add components for entry families. For each entry family, - -- create an anonymous type declaration with the same size, and - -- analyze the type. + -- Add components for entry families. For each entry family, create an + -- anonymous type declaration with the same size, and analyze the type. Collect_Entry_Families (Loc, Cdecls, Current_Node, Prottyp); - -- Prepend the _Object field with the right type to the component - -- list. We need to compute the number of entries, and in some cases - -- the number of Attach_Handler pragmas. + -- Prepend the _Object field with the right type to the component list. + -- We need to compute the number of entries, and in some cases the + -- number of Attach_Handler pragmas. declare Ritem : Node_Id; @@ -6892,8 +7085,7 @@ package body Exp_Ch9 is Sloc => Loc, Constraints => New_List (Entry_Count_Expr))); - -- The type has explicit entries or generated primitive entry - -- wrappers. + -- Type has explicit entries or generated primitive entry wrappers elsif Has_Entries (Prottyp) or else (Ada_Version >= Ada_05 @@ -7039,7 +7231,7 @@ package body Exp_Ch9 is begin -- Examine the visible declarations of the protected type, looking -- for declarations of entries, and subprograms. We do not - -- consider entry families since they can not have dispatching + -- consider entry families since they cannot have dispatching -- operations, thus they do not need entry wrappers. Vis_Decl := First (Visible_Declarations (Pdef)); @@ -7096,12 +7288,12 @@ package body Exp_Ch9 is Entries_Aggr := Empty; end if; - -- Build two new procedure specifications for each protected - -- subprogram; one to call from outside the object and one to - -- call from inside. Build a barrier function and an entry - -- body action procedure specification for each protected entry. - -- Initialize the entry body array. If subprogram is flagged as - -- eliminated, do not generate any internal operations. + -- Build two new procedure specifications for each protected subprogram; + -- one to call from outside the object and one to call from inside. + -- Build a barrier function and an entry body action procedure + -- specification for each protected entry. Initialize the entry body + -- array. If subprogram is flagged as eliminated, do not generate any + -- internal operations. E_Count := 0; @@ -7124,8 +7316,8 @@ package body Exp_Ch9 is (Defining_Unit_Name (Specification (Comp)), Defining_Unit_Name (Specification (Sub))); - -- Make the protected version of the subprogram available - -- for expansion of external calls. + -- Make the protected version of the subprogram available for + -- expansion of external calls. Current_Node := Sub; @@ -7160,9 +7352,10 @@ package body Exp_Ch9 is Current_Node := Sub; end if; - -- If a pragma Interrupt_Handler applies, build and add - -- a call to Register_Interrupt_Handler to the freezing actions - -- of the protected version (Current_Node) of the subprogram: + -- If a pragma Interrupt_Handler applies, build and add a call to + -- Register_Interrupt_Handler to the freezing actions of the + -- protected version (Current_Node) of the subprogram: + -- system.interrupts.register_interrupt_handler -- (prot_procP'address); @@ -7179,10 +7372,7 @@ package body Exp_Ch9 is Set_Privals_Chain (Comp_Id, New_Elmt_List); Edef := Make_Defining_Identifier (Loc, - Build_Selected_Name - (Protnm, - New_External_Name (Chars (Comp_Id), Suffix_Index => -1), - 'E')); + Build_Selected_Name (Prottyp, Comp_Id, 'E')); Sub := Make_Subprogram_Declaration (Loc, Specification => @@ -7199,10 +7389,7 @@ package body Exp_Ch9 is Bdef := Make_Defining_Identifier (Loc, - Build_Selected_Name - (Protnm, - New_External_Name (Chars (Comp_Id), Suffix_Index => -1), - 'B')); + Build_Selected_Name (Prottyp, Comp_Id, 'B')); Sub := Make_Subprogram_Declaration (Loc, Specification => @@ -7246,10 +7433,7 @@ package body Exp_Ch9 is Set_Privals_Chain (Comp_Id, New_Elmt_List); Edef := Make_Defining_Identifier (Loc, - Build_Selected_Name - (Protnm, - New_External_Name (Chars (Comp_Id), Suffix_Index => -1), - 'E')); + Build_Selected_Name (Prottyp, Comp_Id, 'E')); Sub := Make_Subprogram_Declaration (Loc, @@ -7267,10 +7451,8 @@ package body Exp_Ch9 is Bdef := Make_Defining_Identifier (Loc, - Build_Selected_Name - (Protnm, - New_External_Name (Chars (Comp_Id), Suffix_Index => -1), - 'B')); + Build_Selected_Name (Prottyp, Comp_Id, 'E')); + Sub := Make_Subprogram_Declaration (Loc, Specification => @@ -7283,9 +7465,8 @@ package body Exp_Ch9 is Set_Scope (Bdef, Scope (Comp_Id)); Current_Node := Sub; - -- Collect pointers to the protected subprogram and the - -- barrier of the current entry, for insertion into - -- Entry_Bodies_Array. + -- Collect pointers to the protected subprogram and the barrier + -- of the current entry, for insertion into Entry_Bodies_Array. Append ( Make_Aggregate (Loc, @@ -7345,9 +7526,8 @@ package body Exp_Ch9 is Attribute_Name => Name_Unrestricted_Access)))); end if; - -- A pointer to this array will be placed in the corresponding - -- record by its initialization procedure, so this needs to be - -- analyzed here. + -- A pointer to this array will be placed in the corresponding record + -- by its initialization procedure so this needs to be analyzed here. Insert_After (Current_Node, Body_Arr); Current_Node := Body_Arr; @@ -7378,11 +7558,11 @@ package body Exp_Ch9 is -------------------------------- -- A requeue statement is expanded into one of four GNARLI operations, - -- depending on the source and destination (task or protected object). - -- In addition, code must be generated to jump around the remainder of - -- processing for the original entry and, if the destination is a - -- (different) protected object, to attempt to service it. - -- The following illustrates the various cases: + -- depending on the source and destination (task or protected object). In + -- addition, code must be generated to jump around the remainder of + -- processing for the original entry and, if the destination is (different) + -- protected object, to attempt to service it. The following illustrates + -- the various cases: -- procedure entE -- (O : System.Address; @@ -7539,8 +7719,8 @@ package body Exp_Ch9 is Prepend (Self_Param, Params); exit; - -- If neither task type or protected type, must be in some - -- inner enclosing block, so move on out + -- If neither task type or protected type, must be in some inner + -- enclosing block, so move on out else Oldtyp := Scope (Oldtyp); @@ -7573,8 +7753,8 @@ package body Exp_Ch9 is end loop; -- The last statement is the second label, used for completing the - -- rendezvous the usual way. - -- The label we are looking for is right before it. + -- rendezvous the usual way. The label we are looking for is right + -- before it. Lab_Node := Prev (Last (Statements (Handled_Statement_Sequence (Acc_Stat)))); @@ -7825,9 +8005,9 @@ package body Exp_Ch9 is -- During the analysis of the body of the accept statement, any -- zero cost exception handler records were collected in the - -- Accept_Handler_Records field of the N_Accept_Alternative - -- node. This is where we move them to where they belong, - -- namely the newly created procedure. + -- Accept_Handler_Records field of the N_Accept_Alternative node. + -- This is where we move them to where they belong, namely the + -- newly created procedure. Set_Handler_Records (PB_Ent, Accept_Handler_Records (Alt)); Append (Proc_Body, Body_List); @@ -7835,8 +8015,8 @@ package body Exp_Ch9 is else Null_Body := New_Reference_To (Standard_True, Loc); - -- if accept statement has declarations, insert above, given - -- that we are not creating a body for the accept. + -- if accept statement has declarations, insert above, given that + -- we are not creating a body for the accept. if Present (Declarations (Acc_Stm)) then Insert_Actions (N, Declarations (Acc_Stm)); @@ -7931,9 +8111,9 @@ package body Exp_Ch9 is Alt_Stats := New_List; end if; - -- After the call, if any, branch to to trailing statements. - -- We create a label for each, as well as the corresponding - -- label declaration. + -- After the call, if any, branch to to trailing statements. We + -- create a label for each, as well as the corresponding label + -- declaration. Lab := Make_And_Declare_Label (Index); Append_To (Alt_Stats, @@ -8067,8 +8247,8 @@ package body Exp_Ch9 is Append_List (Delay_Alt, Delay_List); - -- If the delay alternative has a statement part, add a - -- choice to the case statements for delays. + -- If the delay alternative has a statement part, add choice to the + -- case statements for delays. if Present (Statements (Alt)) then @@ -8437,14 +8617,12 @@ package body Exp_Ch9 is Discrete_Choices => Choices, Statements => Alt_Stats)); - -- We make use of the fact that Accept_Index is an integer type, - -- and generate successive literals for entries for each accept. - -- Only those for which there is a body or trailing statements are - -- given a case entry. + -- We make use of the fact that Accept_Index is an integer type, and + -- generate successive literals for entries for each accept. Only those + -- for which there is a body or trailing statements get a case entry. Alt := First (Select_Alternatives (N)); Proc := First (Body_List); - while Present (Alt) loop if Nkind (Alt) = N_Accept_Alternative then @@ -8587,8 +8765,8 @@ package body Exp_Ch9 is Name => New_Reference_To (RTE (RE_Timed_Selective_Wait), Loc), Parameter_Associations => Parms)); - -- This new call should follow the calculation of the - -- minimum delay. + -- This new call should follow the calculation of the minimum + -- delay. Insert_List_Before (Select_Call, Delay_List); @@ -8652,9 +8830,9 @@ package body Exp_Ch9 is -------------------------------------- -- Single task declarations should never be present after semantic - -- analysis, since we expect them to be replaced by a declaration of - -- an anonymous task type, followed by a declaration of the task - -- object. We include this routine to make sure that is happening! + -- analysis, since we expect them to be replaced by a declaration of an + -- anonymous task type, followed by a declaration of the task object. We + -- include this routine to make sure that is happening! procedure Expand_N_Single_Task_Declaration (N : Node_Id) is begin @@ -8699,16 +8877,16 @@ package body Exp_Ch9 is -- tnameE := True; - -- In addition, if the task body is an activator, then a call to - -- activate tasks is added at the start of the statements, before - -- the call to Complete_Activation, and if in addition the task is - -- a master then it must be established as a master. These calls are - -- inserted and analyzed in Expand_Cleanup_Actions, when the - -- Handled_Sequence_Of_Statements is expanded. + -- In addition, if the task body is an activator, then a call to activate + -- tasks is added at the start of the statements, before the call to + -- Complete_Activation, and if in addition the task is a master then it + -- must be established as a master. These calls are inserted and analyzed + -- in Expand_Cleanup_Actions, when the Handled_Sequence_Of_Statements is + -- expanded. -- There is one discriminal declaration line generated for each - -- discriminant that is present to provide an easy reference point - -- for discriminant references inside the body (see Exp_Ch2.Expand_Name). + -- discriminant that is present to provide an easy reference point for + -- discriminant references inside the body (see Exp_Ch2.Expand_Name). -- Note on relationship to GNARLI definition. In the GNARLI definition, -- task body procedures have a profile (Arg : System.Address). That is @@ -8777,9 +8955,8 @@ package body Exp_Ch9 is Rewrite (N, New_N); Analyze (N); - -- Set elaboration flag immediately after task body. If the body - -- is a subunit, the flag is set in the declarative part that - -- contains the stub. + -- Set elaboration flag immediately after task body. If the body is a + -- subunit, the flag is set in the declarative part containing the stub. if Nkind (Parent (N)) /= N_Subunit then Insert_After (N, @@ -8789,10 +8966,9 @@ package body Exp_Ch9 is Expression => New_Reference_To (Standard_True, Loc))); end if; - -- Ada 2005 (AI-345): Construct the primitive entry wrapper bodies - -- after the task body. At this point the entry specs have been - -- created, frozen and included in the dispatch table for the task - -- type. + -- Ada 2005 (AI-345): Construct the primitive entry wrapper bodies after + -- the task body. At this point the entry specs have been created, + -- frozen and included in the dispatch table for the task type. pragma Assert (Present (Corresponding_Record_Type (Ttyp))); @@ -8814,10 +8990,10 @@ package body Exp_Ch9 is Current_Node := N; end if; - -- Examine the visible declarations of the task type, - -- looking for an entry declaration. We do not consider - -- entry families since they can not have dispatching - -- operations, thus they do not need entry wrappers. + -- Examine the visible declarations of the task type, looking for + -- an entry declaration. We do not consider entry families since + -- they cannot have dispatching operations, thus they do not need + -- entry wrappers. while Present (Vis_Decl) loop if Nkind (Vis_Decl) = N_Entry_Declaration @@ -8858,8 +9034,8 @@ package body Exp_Ch9 is -- taskE : aliased Boolean := False; - -- Next a variable is declared to hold the task stack size (either - -- the default : Unspecified_Size, or a value that is set by a pragma + -- Next a variable is declared to hold the task stack size (either the + -- default : Unspecified_Size, or a value that is set by a pragma -- Storage_Size). If the value of the pragma Storage_Size is static, then -- the variable is initialized with this value: @@ -8881,28 +9057,28 @@ package body Exp_Ch9 is -- The discriminants are present only if the corresponding task type has -- discriminants, and they exactly mirror the task type discriminants. - -- The Id field is always present. It contains the Task_Id value, as - -- set by the call to Create_Task. Note that although the task is - -- limited, the task value record type is not limited, so there is no - -- problem in passing this field as an out parameter to Create_Task. + -- The Id field is always present. It contains the Task_Id value, as set by + -- the call to Create_Task. Note that although the task is limited, the + -- task value record type is not limited, so there is no problem in passing + -- this field as an out parameter to Create_Task. - -- One entry_family component is present for each entry family in the - -- task definition. The bounds correspond to the bounds of the entry - -- family (which may depend on discriminants). The element type is - -- void, since we only need the bounds information for determining - -- the entry index. Note that the use of an anonymous array would - -- normally be illegal in this context, but this is a parser check, - -- and the semantics is quite prepared to handle such a case. - - -- The _Size field is present only if a Storage_Size pragma appears in - -- the task definition. The expression captures the argument that was - -- present in the pragma, and is used to override the task stack size - -- otherwise associated with the task type. + -- One entry_family component is present for each entry family in the task + -- definition. The bounds correspond to the bounds of the entry family + -- (which may depend on discriminants). The element type is void, since we + -- only need the bounds information for determining the entry index. Note + -- that the use of an anonymous array would normally be illegal in this + -- context, but this is a parser check, and the semantics is quite prepared + -- to handle such a case. + + -- The _Size field is present only if a Storage_Size pragma appears in the + -- task definition. The expression captures the argument that was present + -- in the pragma, and is used to override the task stack size otherwise + -- associated with the task type. -- The _Priority field is present only if a Priority or Interrupt_Priority -- pragma appears in the task definition. The expression captures the - -- argument that was present in the pragma, and is used to provide - -- the Size parameter to the call to Create_Task. + -- argument that was present in the pragma, and is used to provide the Size + -- parameter to the call to Create_Task. -- The _Task_Info field is present only if a Task_Info pragma appears in -- the task definition. The expression captures the argument that was @@ -8910,18 +9086,18 @@ package body Exp_Ch9 is -- to the call to Create_Task. -- When a task is declared, an instance of the task value record is - -- created. The elaboration of this declaration creates the correct - -- bounds for the entry families, and also evaluates the size, priority, - -- and task_Info expressions if needed. The initialization routine for - -- the task type itself then calls Create_Task with appropriate - -- parameters to initialize the value of the Task_Id field. + -- created. The elaboration of this declaration creates the correct bounds + -- for the entry families, and also evaluates the size, priority, and + -- task_Info expressions if needed. The initialization routine for the task + -- type itself then calls Create_Task with appropriate parameters to + -- initialize the value of the Task_Id field. -- Note: the address of this record is passed as the "Discriminants" - -- parameter for Create_Task. Since Create_Task merely passes this onto - -- the body procedure, it does not matter that it does not quite match - -- the GNARLI model of what is being passed (the record contains more - -- than just the discriminants, but the discriminants can be found from - -- the record value). + -- parameter for Create_Task. Since Create_Task merely passes this onto the + -- body procedure, it does not matter that it does not quite match the + -- GNARLI model of what is being passed (the record contains more than just + -- the discriminants, but the discriminants can be found from the record + -- value). -- The Entity_Id for this created record type is placed in the -- Corresponding_Record_Type field of the associated task type entity. @@ -9023,9 +9199,9 @@ package body Exp_Ch9 is Insert_After (Elab_Decl, Size_Decl); - -- Next build the rest of the corresponding record declaration. - -- This is done last, since the corresponding record initialization - -- procedure will reference the previously created entities. + -- Next build the rest of the corresponding record declaration. This is + -- done last, since the corresponding record initialization procedure + -- will reference the previously created entities. -- Fill in the component declarations -- first the _Task_Id field @@ -9039,8 +9215,8 @@ package body Exp_Ch9 is Subtype_Indication => New_Reference_To (RTE (RO_ST_Task_Id), Loc)))); - -- Declare static ATCB (that is, created by the expander) if we - -- are using the Restricted run time. + -- Declare static ATCB (that is, created by the expander) if we are + -- using the Restricted run time. if Restricted_Profile then Append_To (Cdecls, @@ -9062,8 +9238,8 @@ package body Exp_Ch9 is end if; - -- Declare static stack (that is, created by the expander) if we - -- are using the Restricted run time on a bare board configuration. + -- Declare static stack (that is, created by the expander) if we are + -- using the Restricted run time on a bare board configuration. if Restricted_Profile and then Preallocated_Stacks_On_Target @@ -9102,8 +9278,8 @@ package body Exp_Ch9 is Append_To (Cdecls, Decl_Stack); - -- The appropriate alignment for the stack is ensured by the - -- run-time code in charge of task creation. + -- The appropriate alignment for the stack is ensured by the run-time + -- code in charge of task creation. end if; @@ -9218,14 +9394,14 @@ package body Exp_Ch9 is Insert_After (Rec_Decl, Body_Decl); - -- The subprogram does not comes from source, so we have to indicate - -- the need for debugging information explicitly. + -- The subprogram does not comes from source, so we have to indicate the + -- need for debugging information explicitly. Set_Needs_Debug_Info (Defining_Entity (Proc_Spec), Comes_From_Source (Original_Node (N))); - -- Ada 2005 (AI-345): Construct the primitive entry wrapper specs - -- before the corresponding record has been frozen. + -- Ada 2005 (AI-345): Construct the primitive entry wrapper specs before + -- the corresponding record has been frozen. if Ada_Version >= Ada_05 and then Present (Taskdef) @@ -9242,10 +9418,10 @@ package body Exp_Ch9 is New_N : Node_Id; begin - -- Examine the visible declarations of the task type, - -- looking for an entry declaration. We do not consider - -- entry families since they can not have dispatching - -- operations, thus they do not need entry wrappers. + -- Examine the visible declarations of the task type, looking for + -- an entry declaration. We do not consider entry families since + -- they cannot have dispatching operations, thus they do not need + -- entry wrappers. while Present (Vis_Decl) loop if Nkind (Vis_Decl) = N_Entry_Declaration @@ -9295,8 +9471,8 @@ package body Exp_Ch9 is end; end if; - -- Complete the expansion of access types to the current task - -- type, if any were declared. + -- Complete the expansion of access types to the current task type, if + -- any were declared. Expand_Previous_Access_Type (Tasktyp); end Expand_N_Task_Type_Declaration; @@ -9305,8 +9481,8 @@ package body Exp_Ch9 is -- Expand_N_Timed_Entry_Call -- ------------------------------- - -- A timed entry call in normal case is not implemented using ATC - -- mechanism anymore for efficiency reason. + -- A timed entry call in normal case is not implemented using ATC mechanism + -- anymore for efficiency reason. -- select -- T.E; @@ -9421,12 +9597,13 @@ package body Exp_Ch9 is Params : List_Id; Stmt : Node_Id; Stmts : List_Id; + Unpack : List_Id; B : Entity_Id; -- Call status flag C : Entity_Id; -- Call kind D : Entity_Id; -- Delay M : Entity_Id; -- Delay mode - P : Node_Id; -- Parameter block + P : Entity_Id; -- Parameter block S : Entity_Id; -- Primitive operation slot begin @@ -9576,9 +9753,11 @@ package body Exp_Ch9 is -- Dispatch table slot processing, generate: -- S : constant Integer := - -- DT_Prosition () + -- Ada.Tags.Get_Offset_Index ( + -- Unchecked_Convert_To (Ada.Tags.Interface_Tag, Obj), + -- DT_Position ()); - S := SEU.Build_S (Loc, Decls, Call_Ent); + S := SEU.Build_S (Loc, Decls, Obj, Call_Ent); -- Generate: -- _dispatching_timed_select (Obj, S, P'address, D, M, C, B); @@ -9592,7 +9771,9 @@ package body Exp_Ch9 is Append_To (Params, New_Copy_Tree (Obj)); Append_To (Params, New_Reference_To (S, Loc)); - Append_To (Params, P); + Append_To (Params, Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (P, Loc), + Attribute_Name => Name_Address)); Append_To (Params, New_Reference_To (D, Loc)); Append_To (Params, New_Reference_To (M, Loc)); Append_To (Params, New_Reference_To (C, Loc)); @@ -9601,7 +9782,10 @@ package body Exp_Ch9 is Append_To (Stmts, Make_Procedure_Call_Statement (Loc, Name => - Make_Identifier (Loc, Name_uDisp_Timed_Select), + New_Reference_To ( + Find_Prim_Op (Etype (Etype (Obj)), + Name_uDisp_Timed_Select), + Loc), Parameter_Associations => Params)); @@ -9614,28 +9798,36 @@ package body Exp_Ch9 is -- ParamN := P.ParamN; -- end if; - Append_To (Stmts, - Make_If_Statement (Loc, + Unpack := Parameter_Block_Unpack (Loc, P, Actuals, Formals); - Condition => - Make_Or_Else (Loc, - Left_Opnd => - Make_Op_Eq (Loc, - Left_Opnd => - New_Reference_To (C, Loc), - Right_Opnd => - New_Reference_To (RTE (RE_POK_Protected_Entry), Loc)), - Right_Opnd => - Make_Op_Eq (Loc, - Left_Opnd => - New_Reference_To (C, Loc), - Right_Opnd => - New_Reference_To (RTE (RE_POK_Task_Entry), Loc))), + -- Generate the if statement only when the packed parameters need + -- explicit assignments to their corresponding actuals. - Then_Statements => - Parameter_Block_Unpack (Loc, Actuals, Formals))); + if Present (Unpack) then + Append_To (Stmts, + Make_If_Statement (Loc, + + Condition => + Make_Or_Else (Loc, + Left_Opnd => + Make_Op_Eq (Loc, + Left_Opnd => + New_Reference_To (C, Loc), + Right_Opnd => + New_Reference_To (RTE ( + RE_POK_Protected_Entry), Loc)), + Right_Opnd => + Make_Op_Eq (Loc, + Left_Opnd => + New_Reference_To (C, Loc), + Right_Opnd => + New_Reference_To (RTE (RE_POK_Task_Entry), Loc))), + + Then_Statements => Unpack)); + end if; -- Generate: + -- if B then -- if C = POK_Procedure -- or else C = POK_Protected_Procedure @@ -9648,7 +9840,7 @@ package body Exp_Ch9 is -- -- end if; - N_Stats := New_Copy_List (E_Stats); + N_Stats := New_Copy_List_Tree (E_Stats); Prepend_To (N_Stats, Make_If_Statement (Loc, @@ -9802,18 +9994,18 @@ package body Exp_Ch9 is -- Expand_Protected_Body_Declarations -- ---------------------------------------- - -- Part of the expansion of a protected body involves the creation of - -- a declaration that can be referenced from the statement sequences of - -- the entry bodies: + -- Part of the expansion of a protected body involves the creation of a + -- declaration that can be referenced from the statement sequences of the + -- entry bodies: -- A : Address; - -- This declaration is inserted in the declarations of the service - -- entries procedure for the protected body, and it is important that - -- it be inserted before the statements of the entry body statement - -- sequences are analyzed. Thus it would be too late to create this - -- declaration in the Expand_N_Protected_Body routine, which is why - -- there is a separate procedure to be called directly from Sem_Ch9. + -- This declaration is inserted in the declarations of the service entries + -- procedure for the protected body, and it is important that it be + -- inserted before the statements of the entry body statement sequences are + -- analyzed. Thus it would be too late to create this declaration in the + -- Expand_N_Protected_Body routine, which is why there is a separate + -- procedure to be called directly from Sem_Ch9. -- Ann is used to hold the address of the record containing the parameters -- (see Expand_N_Entry_Call for more details on how this record is built). @@ -9824,14 +10016,14 @@ package body Exp_Ch9 is -- Accept_Address stack in the corresponding entry entity, and this element -- must be set in place before the statements are processed. - -- No stack is needed for entry bodies, since they cannot be nested, but - -- it is kept for consistency between protected and task entries. The - -- stack will never contain more than one element. There is also only one - -- such variable for a given protected body, but this is placed on the + -- No stack is needed for entry bodies, since they cannot be nested, but it + -- is kept for consistency between protected and task entries. The stack + -- will never contain more than one element. There is also only one such + -- variable for a given protected body, but this is placed on the -- Accept_Address stack of all of the entries, again for consistency. - -- To expand the requeue statement, a label is provided at the end of - -- the loop in the entry service routine created by the expander (see + -- To expand the requeue statement, a label is provided at the end of the + -- loop in the entry service routine created by the expander (see -- Expand_N_Protected_Body for details), so that the statement can be -- skipped after the requeue is complete. This label is created during the -- expansion of the entry body, which will take place after the expansion @@ -9859,9 +10051,9 @@ package body Exp_Ch9 is elsif Expander_Active then - -- Associate privals with the first subprogram or entry - -- body to be expanded. These are used to expand references - -- to private data objects. + -- Associate privals with the first subprogram or entry body to be + -- expanded. These are used to expand references to private data + -- objects. Op := First_Protected_Operation (Declarations (N)); @@ -9991,12 +10183,11 @@ package body Exp_Ch9 is Ttyp : Entity_Id) return Node_Id is function Convert_Discriminant_Ref (Bound : Node_Id) return Node_Id; - -- If one of the bounds is a reference to a discriminant, replace - -- with corresponding discriminal of type. Within the body of a task - -- retrieve the renamed discriminant by simple visibility, using its - -- generated name. Within a protected object, find the original dis- - -- criminant and replace it with the discriminal of the current prot- - -- ected operation. + -- If one of the bounds is a reference to a discriminant, replace with + -- corresponding discriminal of type. Within the body of a task retrieve + -- the renamed discriminant by simple visibility, using its generated + -- name. Within a protected object, find the original dis- criminant and + -- replace it with the discriminal of the current prot- ected operation. ------------------------------ -- Convert_Discriminant_Ref -- @@ -10019,7 +10210,6 @@ package body Exp_Ch9 is elsif Is_Protected_Type (Ttyp) then D := First_Discriminant (Ttyp); - while Chars (D) /= Chars (Entity (Bound)) loop Next_Discriminant (D); end loop; @@ -10097,7 +10287,6 @@ package body Exp_Ch9 is begin N := First (Visible_Declarations (T)); - while Present (N) loop if Nkind (N) = N_Pragma then if Chars (N) = P then @@ -10118,7 +10307,6 @@ package body Exp_Ch9 is end loop; N := First (Private_Declarations (T)); - while Present (N) loop if Nkind (N) = N_Pragma then if Chars (N) = P then @@ -10178,10 +10366,9 @@ package body Exp_Ch9 is Lo : Node_Id := Type_Low_Bound (Etype (Index_Id)); function Replace_Discriminant (Bound : Node_Id) return Node_Id; - -- The bounds of the entry index may depend on discriminants, so - -- each declaration of an entry_index_constant must have its own - -- subtype declaration, using the local renaming of the object discri- - -- minant. + -- The bounds of the entry index may depend on discriminants, so each + -- declaration of an entry_index_constant must have its own subtype + -- declaration, using the local renaming of the object discriminant. -------------------------- -- Replace_Discriminant -- @@ -10285,22 +10472,20 @@ package body Exp_Ch9 is Restricted : constant Boolean := Restricted_Profile; begin - -- We may need two calls to properly initialize the object, one - -- to Initialize_Protection, and possibly one to Install_Handlers - -- if we have a pragma Attach_Handler. + -- We may need two calls to properly initialize the object, one to + -- Initialize_Protection, and possibly one to Install_Handlers if we + -- have a pragma Attach_Handler. -- Get protected declaration. In the case of a task type declaration, - -- this is simply the parent of the protected type entity. - -- In the single protected object - -- declaration, this parent will be the implicit type, and we can find - -- the corresponding single protected object declaration by - -- searching forward in the declaration list in the tree. - -- ??? I am not sure that the test for N_Single_Protected_Declaration - -- is needed here. Nodes of this type should have been removed - -- during semantic analysis. + -- this is simply the parent of the protected type entity. In the single + -- protected object declaration, this parent will be the implicit type, + -- and we can find the corresponding single protected object declaration + -- by searching forward in the declaration list in the tree. - Pdec := Parent (Ptyp); + -- Is the test for N_Single_Protected_Declaration needed here??? Nodes + -- of this type should have been removed during semantic analysis. + Pdec := Parent (Ptyp); while Nkind (Pdec) /= N_Protected_Type_Declaration and then Nkind (Pdec) /= N_Single_Protected_Declaration loop @@ -10378,10 +10563,11 @@ package body Exp_Ch9 is end if; if Has_Entry then + -- Entry_Bodies parameter. This is a pointer to an array of - -- pointers to the entry body procedures and barrier functions - -- of the object. If the protected type has no entries this - -- object will not exist; in this case, pass a null. + -- pointers to the entry body procedures and barrier functions of + -- the object. If the protected type has no entries this object + -- will not exist; in this case, pass a null. P_Arr := Entry_Bodies_Array (Ptyp); @@ -10446,11 +10632,14 @@ package body Exp_Ch9 is if Has_Attach_Handler (Ptyp) then - -- We have a list of N Attach_Handler (ProcI, ExprI), - -- and we have to make the following call: + -- We have a list of N Attach_Handler (ProcI, ExprI), and we have to + -- make the following call: + -- Install_Handlers (_object, -- ((Expr1, Proc1'access), ...., (ExprN, ProcN'access)); + -- or, in the case of Ravenscar: + -- Install_Handlers -- ((Expr1, Proc1'access), ...., (ExprN, ProcN'access)); @@ -10461,6 +10650,7 @@ package body Exp_Ch9 is begin if not Restricted then + -- Appends the _object argument Append_To (Args, @@ -10536,17 +10726,16 @@ package body Exp_Ch9 is Ttyp := Corresponding_Concurrent_Type (Task_Rec); Tnam := Chars (Ttyp); - -- Get task declaration. In the case of a task type declaration, this - -- is simply the parent of the task type entity. In the single task + -- Get task declaration. In the case of a task type declaration, this is + -- simply the parent of the task type entity. In the single task -- declaration, this parent will be the implicit type, and we can find - -- the corresponding single task declaration by searching forward in - -- the declaration list in the tree. - -- ??? I am not sure that the test for N_Single_Task_Declaration - -- is needed here. Nodes of this type should have been removed - -- during semantic analysis. + -- the corresponding single task declaration by searching forward in the + -- declaration list in the tree. - Tdec := Parent (Ttyp); + -- Is the test for N_Single_Task_Declaration needed here??? Nodes of + -- this type should have been removed during semantic analysis. + Tdec := Parent (Ttyp); while Nkind (Tdec) /= N_Task_Type_Declaration and then Nkind (Tdec) /= N_Single_Task_Declaration loop @@ -10741,7 +10930,6 @@ package body Exp_Ch9 is begin Next_Op := Next (N); - while Present (Next_Op) and then Nkind (Next_Op) /= N_Subprogram_Body and then Nkind (Next_Op) /= N_Entry_Body @@ -10764,12 +10952,14 @@ package body Exp_Ch9 is Decls : List_Id; Stmts : List_Id) return Node_Id is - Actual : Entity_Id; - Blk_Nam : Node_Id; - Formal : Entity_Id; - Params : List_Id; - Temp_Asn : Node_Id; - Temp_Nam : Node_Id; + Actual : Entity_Id; + Expr : Node_Id := Empty; + Formal : Entity_Id; + Has_Param : Boolean := False; + P : Entity_Id; + Params : List_Id; + Temp_Asn : Node_Id; + Temp_Nam : Node_Id; begin Actual := First (Actuals); @@ -10820,41 +11010,46 @@ package body Exp_Ch9 is Name_Unchecked_Access, Prefix => New_Reference_To (Temp_Nam, Loc))); + + Has_Param := True; + + -- The controlling parameter is omitted + else - Append_To (Params, - Make_Reference (Loc, New_Copy_Tree (Actual))); + if not Is_Controlling_Actual (Actual) then + Append_To (Params, + Make_Reference (Loc, New_Copy_Tree (Actual))); + + Has_Param := True; + end if; end if; Next_Actual (Actual); Next_Formal_With_Extras (Formal); end loop; + if Has_Param then + Expr := Make_Aggregate (Loc, Params); + end if; + -- Generate: -- P : Ann := ( -- J1'unchecked_access; -- 'reference; -- ...); - Blk_Nam := Make_Defining_Identifier (Loc, Name_uP); + P := Make_Defining_Identifier (Loc, New_Internal_Name ('P')); Append_To (Decls, Make_Object_Declaration (Loc, Defining_Identifier => - Blk_Nam, + P, Object_Definition => New_Reference_To (Blk_Typ, Loc), Expression => - Make_Aggregate (Loc, Params))); - - -- Return: - -- P'address + Expr)); - return - Make_Attribute_Reference (Loc, - Attribute_Name => - Name_Address, - Prefix => - New_Reference_To (Blk_Nam, Loc)); + return P; end Parameter_Block_Pack; ---------------------------- @@ -10863,26 +11058,23 @@ package body Exp_Ch9 is function Parameter_Block_Unpack (Loc : Source_Ptr; + P : Entity_Id; Actuals : List_Id; Formals : List_Id) return List_Id is - Actual : Entity_Id; - Asnmt : Node_Id; - Formal : Entity_Id; - Result : constant List_Id := New_List; - - At_Least_One_Asnmt : Boolean := False; + Actual : Entity_Id; + Asnmt : Node_Id; + Formal : Entity_Id; + Has_Asnmt : Boolean := False; + Result : constant List_Id := New_List; begin Actual := First (Actuals); Formal := Defining_Identifier (First (Formals)); - while Present (Actual) loop if Is_By_Copy_Type (Etype (Actual)) and then Ekind (Formal) /= E_In_Parameter then - At_Least_One_Asnmt := True; - -- Generate: -- := P.; @@ -10894,24 +11086,25 @@ package body Exp_Ch9 is Make_Explicit_Dereference (Loc, Make_Selected_Component (Loc, Prefix => - Make_Identifier (Loc, Name_uP), + New_Reference_To (P, Loc), Selector_Name => Make_Identifier (Loc, Chars (Formal))))); Set_Assignment_OK (Name (Asnmt)); - Append_To (Result, Asnmt); + + Has_Asnmt := True; end if; Next_Actual (Actual); Next_Formal_With_Extras (Formal); end loop; - if At_Least_One_Asnmt then + if Has_Asnmt then return Result; + else + return New_List (Make_Null_Statement (Loc)); end if; - - return New_List (Make_Null_Statement (Loc)); end Parameter_Block_Unpack; ---------------------- @@ -10950,15 +11143,19 @@ package body Exp_Ch9 is ----------------- procedure Set_Privals - (Dec : Node_Id; - Op : Node_Id; - Loc : Source_Ptr) + (Dec : Node_Id; + Op : Node_Id; + Loc : Source_Ptr; + After_Barrier : Boolean := False) is - P_Decl : Node_Id; - P_Id : Entity_Id; - Priv : Entity_Id; - Def : Node_Id; - Body_Ent : Entity_Id; + P_Decl : Node_Id; + P_Id : Entity_Id; + Priv : Entity_Id; + Def : Node_Id; + Body_Ent : Entity_Id; + For_Barrier : constant Boolean := + Nkind (Op) = N_Entry_Body and then not After_Barrier; + Prec_Decl : constant Node_Id := Parent (Corresponding_Record_Type (Defining_Identifier (Dec))); @@ -10976,15 +11173,20 @@ package body Exp_Ch9 is Def := Protected_Definition (Dec); if Present (Private_Declarations (Def)) then - P_Decl := First (Private_Declarations (Def)); - while Present (P_Decl) loop if Nkind (P_Decl) = N_Component_Declaration then P_Id := Defining_Identifier (P_Decl); - Priv := - Make_Defining_Identifier (Loc, - New_External_Name (Chars (P_Id), 'P')); + + if For_Barrier then + Priv := + Make_Defining_Identifier (Loc, + Chars => New_External_Name (Chars (P_Id), 'P')); + else + Priv := + Make_Defining_Identifier (Loc, + Chars => New_External_Name (Chars (P_Id))); + end if; Set_Ekind (Priv, E_Variable); Set_Etype (Priv, Etype (P_Id)); @@ -11075,7 +11277,6 @@ package body Exp_Ch9 is if Is_Entity_Name (N) then declare E : constant Entity_Id := Entity (N); - begin if Present (E) and then (Ekind (E) = E_Constant diff --git a/gcc/ada/exp_ch9.ads b/gcc/ada/exp_ch9.ads index 044f56d4543..baa5036d821 100644 --- a/gcc/ada/exp_ch9.ads +++ b/gcc/ada/exp_ch9.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -311,13 +311,21 @@ package Exp_Ch9 is -- protected type. procedure Set_Privals - (Dec : Node_Id; - Op : Node_Id; - Loc : Source_Ptr); + (Dec : Node_Id; + Op : Node_Id; + Loc : Source_Ptr; + After_Barrier : Boolean := False); -- Associates a new set of privals (placeholders for later access to -- private components of protected objects) with the private object -- declarations of a protected object. These will be used to expand -- the references to private objects in the next protected -- subprogram or entry body to be expanded. + -- + -- The flag After_Barrier indicates whether this is called after building + -- the barrier function for an entry body. This flag determines whether + -- the privals should have source names (which simplifies debugging) or + -- internally generated names. Entry barriers contain no debuggable code, + -- and there may be visibility conflicts between an entry index and a + -- a prival, so privals for barrier function have internal names. end Exp_Ch9; diff --git a/gcc/ada/exp_dbug.adb b/gcc/ada/exp_dbug.adb index e7bdcc4e5b3..8281f154183 100644 --- a/gcc/ada/exp_dbug.adb +++ b/gcc/ada/exp_dbug.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -134,7 +134,7 @@ package body Exp_Dbug is -- used to determine whether encoding is required for a discrete type. procedure Output_Homonym_Numbers_Suffix; - -- If homonym numbers are stored, then output them into Name_Buffer. + -- If homonym numbers are stored, then output them into Name_Buffer procedure Prepend_String_To_Buffer (S : String); -- Prepend given string to the contents of the string buffer, updating @@ -250,9 +250,9 @@ package body Exp_Dbug is then return True; - -- Here we check if the static bounds match the natural size, which - -- is the size passed through with the debugging information. This - -- is the Esize rounded up to 8, 16, 32 or 64 as appropriate. + -- Here we check if the static bounds match the natural size, which is + -- the size passed through with the debugging information. This is the + -- Esize rounded up to 8, 16, 32 or 64 as appropriate. else declare @@ -305,12 +305,12 @@ package body Exp_Dbug is Def : Entity_Id; function Output_Subscript (N : Node_Id; S : String) return Boolean; - -- Outputs a single subscript value as ?nnn (subscript is compile - -- time known value with value nnn) or as ?e (subscript is local - -- constant with name e), where S supplies the proper string to - -- use for ?. Returns False if the subscript is not of an appropriate - -- type to output in one of these two forms. The result is prepended - -- to the name stored in Name_Buffer. + -- Outputs a single subscript value as ?nnn (subscript is compile time + -- known value with value nnn) or as ?e (subscript is local constant + -- with name e), where S supplies the proper string to use for ?. + -- Returns False if the subscript is not of an appropriate type to + -- output in one of these two forms. The result is prepended to the + -- name stored in Name_Buffer. ---------------------- -- Output_Subscript -- @@ -358,9 +358,9 @@ package body Exp_Dbug is when N_Package_Renaming_Declaration => Add_Str_To_Name_Buffer ("___XRP"); - -- If it is a child unit create a fully qualified name, - -- to disambiguate multiple child units with the same - -- name and different parents. + -- If it is a child unit create a fully qualified name, to + -- disambiguate multiple child units with the same name and + -- different parents. if Is_Child_Unit (Ent) then Prepend_String_To_Buffer ("__"); @@ -386,8 +386,8 @@ package body Exp_Dbug is when N_Expanded_Name => - -- The entity field for an N_Expanded_Name is on the - -- expanded name node itself, so we are done here too. + -- The entity field for an N_Expanded_Name is on the expanded + -- name node itself, so we are done here too. exit; @@ -713,6 +713,7 @@ package body Exp_Dbug is -- If this is a library level subprogram (i.e. a subprogram that is a -- compilation unit other than a subunit), then we prepend _ada_ to -- ensure distinctions required as described in the spec. + -- Check explicitly for child units, because those are not flagged -- as Compilation_Units by lib. Should they be ??? @@ -880,6 +881,39 @@ package body Exp_Dbug is end if; end Get_Variant_Encoding; + ------------------------------------ + -- Get_Secondary_DT_External_Name -- + ------------------------------------ + + procedure Get_Secondary_DT_External_Name + (Typ : Entity_Id; + Ancestor_Typ : Entity_Id; + Suffix_Index : Int) is + begin + Get_External_Name (Typ, Has_Suffix => False); + + if Ancestor_Typ /= Typ then + declare + Len : constant Natural := Name_Len; + Save_Str : constant String (1 .. Name_Len) + := Name_Buffer (1 .. Name_Len); + begin + Get_External_Name (Ancestor_Typ, Has_Suffix => False); + + -- Append the extended name of the ancestor to the + -- extended name of Typ + + Name_Buffer (Len + 2 .. Len + Name_Len + 1) := + Name_Buffer (1 .. Name_Len); + Name_Buffer (1 .. Len) := Save_Str; + Name_Buffer (Len + 1) := '_'; + Name_Len := Len + Name_Len + 1; + end; + end if; + + Add_Nat_To_Name_Buffer (Suffix_Index); + end Get_Secondary_DT_External_Name; + --------------------------------- -- Make_Packed_Array_Type_Name -- --------------------------------- @@ -1166,7 +1200,6 @@ package body Exp_Dbug is else Add_Char_To_Name_Buffer ('X'); end if; - end Set_BNPE_Suffix; --------------------- @@ -1338,7 +1371,6 @@ package body Exp_Dbug is exit; end if; end loop; - end Strip_Suffixes; end Exp_Dbug; diff --git a/gcc/ada/exp_dbug.ads b/gcc/ada/exp_dbug.ads index 9100d9c2fab..ccd80f38f8a 100644 --- a/gcc/ada/exp_dbug.ads +++ b/gcc/ada/exp_dbug.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -360,7 +360,7 @@ package Exp_Dbug is -- Operations generated for protected entries follow the same encoding. -- Each entry results in two suprograms: a procedure that holds the -- entry body, and a function that holds the evaluation of the barrier. - -- The names of these subprograms include the prefix 'E' or 'B' res- + -- The names of these subprograms include the prefix '_E' or '_B' res- -- pectively. The names also include a numeric suffix to render them -- unique in the presence of overloaded entries. @@ -382,8 +382,8 @@ package Exp_Dbug is -- lock_setN -- lock_setP - -- lock_update1sE - -- lock_udpate2sB + -- lock_update_E1s + -- lock_udpate_B2s -- If the protected type implements at least one interface, the -- following additional operations are created: @@ -538,6 +538,12 @@ package Exp_Dbug is -- field, and neither the outer structure name, nor the field name -- should appear when the value is printed. + -- When the debugger sees a record named REP being a field inside + -- another record, it should treat the fields inside REP as being + -- part of the outer record (this REP field is only present for + -- code generation purposes). The REP record should not appear in + -- the values printed by the debugger. + ----------------------- -- Fixed-Point Types -- ----------------------- @@ -1432,6 +1438,66 @@ package Exp_Dbug is -- the second enumeration literal would be named QU43 and the -- value assigned to it would be 1. + ----------------------------------------------- + -- Secondary Dispatch tables of tagged types -- + ----------------------------------------------- + + procedure Get_Secondary_DT_External_Name + (Typ : Entity_Id; + Ancestor_Typ : Entity_Id; + Suffix_Index : Int); + -- Set Name_Buffer and Name_Len to the external name of one secondary + -- dispatch table of Typ. If the interface has been inherited from some + -- ancestor then Ancestor_Typ is such node (in this case the secondary + -- DT is needed to handle overriden primitives); if there is no such + -- ancestor then Ancestor_Typ is equal to Typ. + -- + -- Internal rule followed for the generation of the external name: + -- + -- Case 1. If the secondary dispatch has not been inherited from some + -- ancestor of Typ then the external name is composed as + -- follows: + -- External_Name (Typ) + Suffix_Number + 'P' + -- + -- Case 2. if the secondary dispatch table has been inherited from some + -- ancestor then the external name is composed as follows: + -- External_Name (Typ) + '_' + External_Name (Ancestor_Typ) + -- + Suffix_Number + 'P' + -- + -- Note: We have to use the external names (instead of simply their + -- names) to protect the frontend against programs that give the same + -- name to all the interfaces and use the expanded name to reference + -- them. The Suffix_Number is used to differentiate all the secondary + -- dispatch tables of a given type. + -- + -- Examples: + -- + -- package Pkg1 is | package Pkg2 is | package Pkg3 is + -- type Typ is | type Typ is | type Typ is + -- interface; | interface; | interface; + -- end Pkg1; | end Pkg; | end Pkg3; + -- + -- with Pkg1, Pkg2, Pkg3; + -- package Case_1 is + -- type Typ is new Pkg1.Typ and Pkg2.Typ and Pkg3.Typ with ... + -- end Case_1; + -- + -- with Case_1; + -- package Case_2 is + -- type Typ is new Case_1.Typ with ... + -- end Case_2; + -- + -- These are the external names generated for Case_1.Typ (note that + -- Pkg1.Typ is associated with the Primary Dispatch Table, because it + -- is the the parent of this type, and hence no external name is + -- generated for it). + -- case_1__typ0P (associated with Pkg2.Typ) + -- case_1__typ1P (associated with Pkg3.Typ) + -- + -- These are the external names generated for Case_2.Typ: + -- case_2__typ_case_1__typ0P + -- case_2__typ_case_1__typ1P + ---------------------------- -- Effect of Optimization -- ---------------------------- diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 524d6deaf19..20e769e1804 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,6 +31,7 @@ with Einfo; use Einfo; with Elists; use Elists; with Errout; use Errout; with Exp_Ch7; use Exp_Ch7; +with Exp_Dbug; use Exp_Dbug; with Exp_Tss; use Exp_Tss; with Exp_Util; use Exp_Util; with Itypes; use Itypes; @@ -74,9 +75,10 @@ package body Exp_Disp is -- C : out Prim_Op_Kind procedure Build_Common_Dispatching_Select_Statements - (Loc : Source_Ptr; - Typ : Entity_Id; - Stmts : List_Id); + (Loc : Source_Ptr; + Typ : Entity_Id; + DT_Ptr : Entity_Id; + Stmts : List_Id); -- Ada 2005 (AI-345): Generate statements that are common between -- asynchronous, conditional and timed select expansion. @@ -151,21 +153,10 @@ package body Exp_Disp is procedure Build_Common_Dispatching_Select_Statements (Loc : Source_Ptr; Typ : Entity_Id; + DT_Ptr : Entity_Id; Stmts : List_Id) is - DT_Ptr : Entity_Id; - DT_Ptr_Typ : Entity_Id := Typ; - begin - -- Typ may be a derived type, climb the derivation chain in order to - -- find the root. - - while Present (Parent_Subtype (DT_Ptr_Typ)) loop - DT_Ptr_Typ := Parent_Subtype (DT_Ptr_Typ); - end loop; - - DT_Ptr := Node (First_Elmt (Access_Disp_Table (DT_Ptr_Typ))); - -- Generate: -- C := get_prim_op_kind (tag! (VP), S); @@ -187,6 +178,7 @@ package body Exp_Disp is Make_Identifier (Loc, Name_uS))))); -- Generate: + -- if C = POK_Procedure -- or else C = POK_Protected_Procedure -- or else C = POK_Task_Procedure; @@ -317,6 +309,7 @@ package body Exp_Disp is Get_Access_Level => RE_Get_Access_Level, Get_Entry_Index => RE_Get_Entry_Index, Get_External_Tag => RE_Get_External_Tag, + Get_Offset_Index => RE_Get_Offset_Index, Get_Prim_Op_Address => RE_Get_Prim_Op_Address, Get_Prim_Op_Kind => RE_Get_Prim_Op_Kind, Get_RC_Offset => RE_Get_RC_Offset, @@ -329,10 +322,13 @@ package body Exp_Disp is Set_Entry_Index => RE_Set_Entry_Index, Set_Expanded_Name => RE_Set_Expanded_Name, Set_External_Tag => RE_Set_External_Tag, + Set_Offset_Index => RE_Set_Offset_Index, + Set_OSD => RE_Set_OSD, Set_Prim_Op_Address => RE_Set_Prim_Op_Address, Set_Prim_Op_Kind => RE_Set_Prim_Op_Kind, Set_RC_Offset => RE_Set_RC_Offset, Set_Remotely_Callable => RE_Set_Remotely_Callable, + Set_SSD => RE_Set_SSD, Set_TSD => RE_Set_TSD, TSD_Entry_Size => RE_TSD_Entry_Size, TSD_Prologue_Size => RE_TSD_Prologue_Size); @@ -345,6 +341,7 @@ package body Exp_Disp is Get_Access_Level => False, Get_Entry_Index => False, Get_External_Tag => False, + Get_Offset_Index => False, Get_Prim_Op_Address => False, Get_Prim_Op_Kind => False, Get_Remotely_Callable => False, @@ -357,10 +354,13 @@ package body Exp_Disp is Set_Entry_Index => True, Set_Expanded_Name => True, Set_External_Tag => True, + Set_Offset_Index => True, + Set_OSD => True, Set_Prim_Op_Address => True, Set_Prim_Op_Kind => True, Set_RC_Offset => True, Set_Remotely_Callable => True, + Set_SSD => True, Set_TSD => True, TSD_Entry_Size => False, TSD_Prologue_Size => False); @@ -373,6 +373,7 @@ package body Exp_Disp is Get_Access_Level => 1, Get_Entry_Index => 2, Get_External_Tag => 1, + Get_Offset_Index => 2, Get_Prim_Op_Address => 2, Get_Prim_Op_Kind => 2, Get_RC_Offset => 1, @@ -385,10 +386,13 @@ package body Exp_Disp is Set_Entry_Index => 3, Set_Expanded_Name => 2, Set_External_Tag => 2, + Set_Offset_Index => 3, + Set_OSD => 2, Set_Prim_Op_Address => 3, Set_Prim_Op_Kind => 3, Set_RC_Offset => 2, Set_Remotely_Callable => 2, + Set_SSD => 2, Set_TSD => 2, TSD_Entry_Size => 0, TSD_Prologue_Size => 0); @@ -552,21 +556,25 @@ package body Exp_Disp is elsif TSS_Name = TSS_Deep_Finalize then return Uint_10; - elsif Chars (E) = Name_uDisp_Asynchronous_Select then - return Uint_11; + elsif Ada_Version >= Ada_05 then + if Chars (E) = Name_uDisp_Asynchronous_Select then + return Uint_11; - elsif Chars (E) = Name_uDisp_Conditional_Select then - return Uint_12; + elsif Chars (E) = Name_uDisp_Conditional_Select then + return Uint_12; - elsif Chars (E) = Name_uDisp_Get_Prim_Op_Kind then - return Uint_13; + elsif Chars (E) = Name_uDisp_Get_Prim_Op_Kind then + return Uint_13; - elsif Chars (E) = Name_uDisp_Timed_Select then - return Uint_14; + elsif Chars (E) = Name_uDisp_Get_Task_Id then + return Uint_14; - else - raise Program_Error; + elsif Chars (E) = Name_uDisp_Timed_Select then + return Uint_15; + end if; end if; + + raise Program_Error; end Default_Prim_Op_Position; ----------------------------- @@ -1527,7 +1535,6 @@ package body Exp_Disp is (Etype (First_Entity (Target)), Make_Explicit_Dereference (Loc, New_Reference_To (Defining_Identifier (Decl_2), Loc)))); - end if; Formal := Next (First (Formals)); @@ -1650,7 +1657,6 @@ package body Exp_Disp is function Get_Remotely_Callable (Obj : Node_Id) return Node_Id is Loc : constant Source_Ptr := Sloc (Obj); - begin return Make_DT_Access_Action (Typ => Etype (Obj), @@ -1675,14 +1681,16 @@ package body Exp_Disp is AI : Elmt_Id; begin - -- No need to inherit primitives if it an abstract interface type + -- No need to inherit primitives if we have an abstract interface + -- type or a concurrent type. - if Is_Interface (Typ) then + if Is_Interface (Typ) or else Is_Concurrent_Record_Type (Typ) then return Result; end if; AI := Next_Elmt (First_Elmt (Access_Disp_Table (Typ))); while Present (AI) loop + -- All the secondary tables inherit the dispatch table entries -- associated with predefined primitives. @@ -1704,696 +1712,1051 @@ package body Exp_Disp is return Result; end Init_Predefined_Interface_Primitives; - ------------- - -- Make_DT -- - ------------- - - function Make_DT (Typ : Entity_Id) return List_Id is - Loc : constant Source_Ptr := Sloc (Typ); - Result : constant List_Id := New_List; - Elab_Code : constant List_Id := New_List; - - Tname : constant Name_Id := Chars (Typ); - Name_DT : constant Name_Id := New_External_Name (Tname, 'T'); - Name_DT_Ptr : constant Name_Id := New_External_Name (Tname, 'P'); - Name_TSD : constant Name_Id := New_External_Name (Tname, 'B'); - Name_Exname : constant Name_Id := New_External_Name (Tname, 'E'); - Name_No_Reg : constant Name_Id := New_External_Name (Tname, 'F'); - - DT : constant Node_Id := Make_Defining_Identifier (Loc, Name_DT); - DT_Ptr : constant Node_Id := Make_Defining_Identifier (Loc, Name_DT_Ptr); - TSD : constant Node_Id := Make_Defining_Identifier (Loc, Name_TSD); - Exname : constant Node_Id := Make_Defining_Identifier (Loc, Name_Exname); - No_Reg : constant Node_Id := Make_Defining_Identifier (Loc, Name_No_Reg); + ---------------------------------------- + -- Make_Disp_Asynchronous_Select_Body -- + ---------------------------------------- - Generalized_Tag : constant Entity_Id := RTE (RE_Tag); - I_Depth : Int; - Size_Expr_Node : Node_Id; - Old_Tag1 : Node_Id; - Old_Tag2 : Node_Id; - Num_Ifaces : Int; - Nb_Prim : Int; - TSD_Num_Entries : Int; - Typ_Copy : constant Entity_Id := New_Copy (Typ); - AI : Elmt_Id; + function Make_Disp_Asynchronous_Select_Body + (Typ : Entity_Id) return Node_Id + is + Conc_Typ : Entity_Id := Empty; + Decls : constant List_Id := New_List; + DT_Ptr : Entity_Id; + Loc : constant Source_Ptr := Sloc (Typ); + Stmts : constant List_Id := New_List; begin - if not RTE_Available (RE_Tag) then - Error_Msg_CRT ("tagged types", Typ); - return New_List; + if Is_Interface (Typ) then + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Asynchronous_Select_Spec (Typ), + Declarations => + New_List, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + New_List (Make_Null_Statement (Loc)))); end if; - -- Collect the full list of directly and indirectly implemented - -- interfaces + if Is_Concurrent_Record_Type (Typ) then + Conc_Typ := Corresponding_Concurrent_Type (Typ); + end if; - Set_Parent (Typ_Copy, Parent (Typ)); - Set_Abstract_Interfaces (Typ_Copy, New_Elmt_List); - Collect_All_Interfaces (Typ_Copy); + DT_Ptr := Node (First_Elmt (Access_Disp_Table (Typ))); - -- Calculate the number of entries required in the table of interfaces + if Present (Conc_Typ) then - Num_Ifaces := 0; - AI := First_Elmt (Abstract_Interfaces (Typ_Copy)); - while Present (AI) loop - Num_Ifaces := Num_Ifaces + 1; - Next_Elmt (AI); - end loop; + -- Generate: + -- I : Integer := get_entry_index (tag! (VP), S); - -- Count ancestors to compute the inheritance depth. For private - -- extensions, always go to the full view in order to compute the real - -- inheritance depth. + -- where I will be used to capture the entry index of the primitive + -- wrapper at position S. - declare - Parent_Type : Entity_Id := Typ; - P : Entity_Id; + Append_To (Decls, + Make_Object_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_uI), + Object_Definition => + New_Reference_To (Standard_Integer, Loc), + Expression => + Make_DT_Access_Action (Typ, + Action => + Get_Entry_Index, + Args => + New_List ( + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To (DT_Ptr, Loc)), + Make_Identifier (Loc, Name_uS))))); - begin - I_Depth := 0; - loop - P := Etype (Parent_Type); + if Ekind (Conc_Typ) = E_Protected_Type then - if Is_Private_Type (P) then - P := Full_View (Base_Type (P)); - end if; + -- Generate: + -- Protected_Entry_Call ( + -- T._object'access, + -- protected_entry_index! (I), + -- P, + -- Asynchronous_Call, + -- B); - exit when P = Parent_Type; + -- where T is the protected object, I is the entry index, P are + -- the wrapped parameters and B is the name of the communication + -- block. - I_Depth := I_Depth + 1; - Parent_Type := P; - end loop; - end; + Append_To (Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Protected_Entry_Call), Loc), + Parameter_Associations => + New_List ( - Nb_Prim := UI_To_Int (DT_Entry_Count (First_Tag_Component (Typ))); + Make_Attribute_Reference (Loc, -- T._object'access + Attribute_Name => + Name_Unchecked_Access, + Prefix => + Make_Selected_Component (Loc, + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uObject))), - -- Ada 2005 (AI-345): The size of the TSD is increased to accomodate - -- the two tables used for dispatching in asynchronous, conditional - -- and timed selects. The tables are solely generated for limited - -- types that implement a limited interface. + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Reference_To (RTE (RE_Protected_Entry_Index), Loc), + Expression => + Make_Identifier (Loc, Name_uI)), - if Ada_Version >= Ada_05 - and then not Is_Interface (Typ) - and then not Is_Abstract (Typ) - and then not Is_Controlled (Typ) - and then Implements_Limited_Interface (Typ) - then - TSD_Num_Entries := I_Depth + Num_Ifaces + 1 + - 2 * (Nb_Prim - Default_Prim_Op_Count); - else - TSD_Num_Entries := I_Depth + Num_Ifaces + 1; - end if; + Make_Identifier (Loc, Name_uP), -- parameter block + New_Reference_To ( -- Asynchronous_Call + RTE (RE_Asynchronous_Call), Loc), + Make_Identifier (Loc, Name_uB)))); -- comm block + else + pragma Assert (Ekind (Conc_Typ) = E_Task_Type); - -- ---------------------------------------------------------------- - -- Dispatch table and related entities are allocated statically + -- Generate: + -- Protected_Entry_Call ( + -- T._task_id, + -- task_entry_index! (I), + -- P, + -- Conditional_Call, + -- F); - Set_Ekind (DT, E_Variable); - Set_Is_Statically_Allocated (DT); + -- where T is the task object, I is the entry index, P are the + -- wrapped parameters and F is the status flag. - Set_Ekind (DT_Ptr, E_Variable); - Set_Is_Statically_Allocated (DT_Ptr); + Append_To (Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Task_Entry_Call), Loc), + Parameter_Associations => + New_List ( - Set_Ekind (TSD, E_Variable); - Set_Is_Statically_Allocated (TSD); + Make_Selected_Component (Loc, -- T._task_id + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uTask_Id)), - Set_Ekind (Exname, E_Variable); - Set_Is_Statically_Allocated (Exname); + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Reference_To (RTE (RE_Task_Entry_Index), Loc), + Expression => + Make_Identifier (Loc, Name_uI)), - Set_Ekind (No_Reg, E_Variable); - Set_Is_Statically_Allocated (No_Reg); + Make_Identifier (Loc, Name_uP), -- parameter block + New_Reference_To ( -- Asynchronous_Call + RTE (RE_Asynchronous_Call), Loc), + Make_Identifier (Loc, Name_uF)))); -- status flag + end if; - -- Generate code to create the storage for the Dispatch_Table object: + -- Implementation for limited tagged types - -- DT : Storage_Array (1..DT_Prologue_Size+nb_prim*DT_Entry_Size); - -- for DT'Alignment use Address'Alignment + else + Append_To (Stmts, + Make_Raise_Program_Error (Loc, Reason => PE_Explicit_Raise)); + end if; - Size_Expr_Node := - Make_Op_Add (Loc, - Left_Opnd => Make_DT_Access_Action (Typ, DT_Prologue_Size, No_List), - Right_Opnd => - Make_Op_Multiply (Loc, - Left_Opnd => - Make_DT_Access_Action (Typ, DT_Entry_Size, No_List), - Right_Opnd => - Make_Integer_Literal (Loc, Nb_Prim))); + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Asynchronous_Select_Spec (Typ), + Declarations => + Decls, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, Stmts)); + end Make_Disp_Asynchronous_Select_Body; - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => DT, - Aliased_Present => True, - Object_Definition => - Make_Subtype_Indication (Loc, - Subtype_Mark => New_Reference_To (RTE (RE_Storage_Array), Loc), - Constraint => Make_Index_Or_Discriminant_Constraint (Loc, - Constraints => New_List ( - Make_Range (Loc, - Low_Bound => Make_Integer_Literal (Loc, 1), - High_Bound => Size_Expr_Node)))))); + ---------------------------------------- + -- Make_Disp_Asynchronous_Select_Spec -- + ---------------------------------------- - Append_To (Result, - Make_Attribute_Definition_Clause (Loc, - Name => New_Reference_To (DT, Loc), - Chars => Name_Alignment, - Expression => - Make_Attribute_Reference (Loc, - Prefix => New_Reference_To (RTE (RE_Integer_Address), Loc), - Attribute_Name => Name_Alignment))); + function Make_Disp_Asynchronous_Select_Spec + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Def_Id : constant Node_Id := + Make_Defining_Identifier (Loc, + Name_uDisp_Asynchronous_Select); + Params : constant List_Id := New_List; - -- Generate code to create the pointer to the dispatch table + begin + -- "T" - Object parameter + -- "S" - Primitive operation slot + -- "P" - Wrapped parameters + -- "B" - Communication block + -- "F" - Status flag - -- DT_Ptr : Tag := Tag!(DT'Address); + SEU.Build_T (Loc, Typ, Params); + SEU.Build_S (Loc, Params); + SEU.Build_P (Loc, Params); + SEU.Build_B (Loc, Params); + SEU.Build_F (Loc, Params); - -- According to the C++ ABI, the base of the vtable is located after a - -- prologue containing Offset_To_Top, and Typeinfo_Ptr. Hence, we move - -- down the pointer to the real base of the vtable + Set_Is_Internal (Def_Id); - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => DT_Ptr, - Constant_Present => True, - Object_Definition => New_Reference_To (Generalized_Tag, Loc), - Expression => - Unchecked_Convert_To (Generalized_Tag, - Make_Op_Add (Loc, - Left_Opnd => - Unchecked_Convert_To (RTE (RE_Storage_Offset), - Make_Attribute_Reference (Loc, - Prefix => New_Reference_To (DT, Loc), - Attribute_Name => Name_Address)), - Right_Opnd => - Make_DT_Access_Action (Typ, - DT_Prologue_Size, No_List))))); + return + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Def_Id, + Parameter_Specifications => Params); + end Make_Disp_Asynchronous_Select_Spec; - -- Generate code to define the boolean that controls registration, in - -- order to avoid multiple registrations for tagged types defined in - -- multiple-called scopes. + --------------------------------------- + -- Make_Disp_Conditional_Select_Body -- + --------------------------------------- - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => No_Reg, - Object_Definition => New_Reference_To (Standard_Boolean, Loc), - Expression => New_Reference_To (Standard_True, Loc))); + function Make_Disp_Conditional_Select_Body + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Blk_Nam : Entity_Id; + Conc_Typ : Entity_Id := Empty; + Decls : constant List_Id := New_List; + DT_Ptr : Entity_Id; + Stmts : constant List_Id := New_List; - -- Set Access_Disp_Table field to be the dispatch table pointer + begin + if Is_Interface (Typ) then + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Conditional_Select_Spec (Typ), + Declarations => + No_List, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + New_List (Make_Null_Statement (Loc)))); + end if; - if not Present (Access_Disp_Table (Typ)) then - Set_Access_Disp_Table (Typ, New_Elmt_List); + if Is_Concurrent_Record_Type (Typ) then + Conc_Typ := Corresponding_Concurrent_Type (Typ); end if; - Prepend_Elmt (DT_Ptr, Access_Disp_Table (Typ)); + DT_Ptr := Node (First_Elmt (Access_Disp_Table (Typ))); - -- Generate code to create the storage for the type specific data object - -- with enough space to store the tags of the ancestors plus the tags - -- of all the implemented interfaces (as described in a-tags.adb). - -- - -- TSD: Storage_Array - -- (1..TSD_Prologue_Size+TSD_Num_Entries*TSD_Entry_Size); - -- for TSD'Alignment use Address'Alignment + if Present (Conc_Typ) then - Size_Expr_Node := - Make_Op_Add (Loc, - Left_Opnd => - Make_DT_Access_Action (Typ, TSD_Prologue_Size, No_List), - Right_Opnd => - Make_Op_Multiply (Loc, - Left_Opnd => - Make_DT_Access_Action (Typ, TSD_Entry_Size, No_List), - Right_Opnd => - Make_Integer_Literal (Loc, TSD_Num_Entries))); + -- Generate: + -- I : Integer; - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => TSD, - Aliased_Present => True, - Object_Definition => - Make_Subtype_Indication (Loc, - Subtype_Mark => New_Reference_To (RTE (RE_Storage_Array), Loc), - Constraint => Make_Index_Or_Discriminant_Constraint (Loc, - Constraints => New_List ( - Make_Range (Loc, - Low_Bound => Make_Integer_Literal (Loc, 1), - High_Bound => Size_Expr_Node)))))); + -- where I will be used to capture the entry index of the primitive + -- wrapper at position S. - Append_To (Result, - Make_Attribute_Definition_Clause (Loc, - Name => New_Reference_To (TSD, Loc), - Chars => Name_Alignment, - Expression => - Make_Attribute_Reference (Loc, - Prefix => New_Reference_To (RTE (RE_Integer_Address), Loc), - Attribute_Name => Name_Alignment))); + Append_To (Decls, + Make_Object_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_uI), + Object_Definition => + New_Reference_To (Standard_Integer, Loc))); + end if; - -- Generate code to put the Address of the TSD in the dispatch table - -- Set_TSD (DT_Ptr, TSD); + -- Generate: + -- C := get_prim_op_kind (tag! (VP), S); - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Set_TSD, - Args => New_List ( - New_Reference_To (DT_Ptr, Loc), -- DTptr - Make_Attribute_Reference (Loc, -- Value - Prefix => New_Reference_To (TSD, Loc), - Attribute_Name => Name_Address)))); + -- if C = POK_Procedure + -- or else C = POK_Protected_Procedure + -- or else C = POK_Task_Procedure; + -- then + -- F := True; + -- return; + -- end if; - -- Generate: Exname : constant String := full_qualified_name (typ); - -- The type itself may be an anonymous parent type, so use the first - -- subtype to have a user-recognizable name. + SEU.Build_Common_Dispatching_Select_Statements (Loc, Typ, DT_Ptr, Stmts); - Append_To (Result, - Make_Object_Declaration (Loc, - Defining_Identifier => Exname, - Constant_Present => True, - Object_Definition => New_Reference_To (Standard_String, Loc), - Expression => - Make_String_Literal (Loc, - Full_Qualified_Name (First_Subtype (Typ))))); + if Present (Conc_Typ) then + + -- Generate: + -- Bnn : Communication_Block; + + -- where Bnn is the name of the communication block used in + -- the call to Protected_Entry_Call. + + Blk_Nam := Make_Defining_Identifier (Loc, New_Internal_Name ('B')); + + Append_To (Decls, + Make_Object_Declaration (Loc, + Defining_Identifier => + Blk_Nam, + Object_Definition => + New_Reference_To (RTE (RE_Communication_Block), Loc))); + + -- Generate: + -- I := get_entry_index (tag! (VP), S); + + -- I is the entry index and S is the dispatch table slot + + Append_To (Stmts, + Make_Assignment_Statement (Loc, + Name => + Make_Identifier (Loc, Name_uI), + Expression => + Make_DT_Access_Action (Typ, + Action => + Get_Entry_Index, + Args => + New_List ( + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To (DT_Ptr, Loc)), + Make_Identifier (Loc, Name_uS))))); + + if Ekind (Conc_Typ) = E_Protected_Type then + + -- Generate: + -- Protected_Entry_Call ( + -- T._object'access, + -- protected_entry_index! (I), + -- P, + -- Conditional_Call, + -- Bnn); + + -- where T is the protected object, I is the entry index, P are + -- the wrapped parameters and Bnn is the name of the communication + -- block. + + Append_To (Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Protected_Entry_Call), Loc), + Parameter_Associations => + New_List ( + + Make_Attribute_Reference (Loc, -- T._object'access + Attribute_Name => + Name_Unchecked_Access, + Prefix => + Make_Selected_Component (Loc, + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uObject))), + + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Reference_To (RTE (RE_Protected_Entry_Index), Loc), + Expression => + Make_Identifier (Loc, Name_uI)), + + Make_Identifier (Loc, Name_uP), -- parameter block + New_Reference_To ( -- Conditional_Call + RTE (RE_Conditional_Call), Loc), + New_Reference_To ( -- Bnn + Blk_Nam, Loc)))); + + -- Generate: + -- F := not Cancelled (Bnn); + + -- where F is the success flag. The status of Cancelled is negated + -- in order to match the behaviour of the version for task types. + + Append_To (Stmts, + Make_Assignment_Statement (Loc, + Name => + Make_Identifier (Loc, Name_uF), + Expression => + Make_Op_Not (Loc, + Right_Opnd => + Make_Function_Call (Loc, + Name => + New_Reference_To (RTE (RE_Cancelled), Loc), + Parameter_Associations => + New_List ( + New_Reference_To (Blk_Nam, Loc)))))); + else + pragma Assert (Ekind (Conc_Typ) = E_Task_Type); + + -- Generate: + -- Protected_Entry_Call ( + -- T._task_id, + -- task_entry_index! (I), + -- P, + -- Conditional_Call, + -- F); + + -- where T is the task object, I is the entry index, P are the + -- wrapped parameters and F is the status flag. + + Append_To (Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Task_Entry_Call), Loc), + Parameter_Associations => + New_List ( + + Make_Selected_Component (Loc, -- T._task_id + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uTask_Id)), + + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Reference_To (RTE (RE_Task_Entry_Index), Loc), + Expression => + Make_Identifier (Loc, Name_uI)), + + Make_Identifier (Loc, Name_uP), -- parameter block + New_Reference_To ( -- Conditional_Call + RTE (RE_Conditional_Call), Loc), + Make_Identifier (Loc, Name_uF)))); -- status flag + end if; + + -- Implementation for limited tagged types + + else + Append_To (Stmts, + Make_Raise_Program_Error (Loc, Reason => PE_Explicit_Raise)); + end if; + + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Conditional_Select_Spec (Typ), + Declarations => + Decls, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, Stmts)); + end Make_Disp_Conditional_Select_Body; + + --------------------------------------- + -- Make_Disp_Conditional_Select_Spec -- + --------------------------------------- + + function Make_Disp_Conditional_Select_Spec + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Def_Id : constant Node_Id := + Make_Defining_Identifier (Loc, + Name_uDisp_Conditional_Select); + Params : constant List_Id := New_List; + + begin + -- "T" - Object parameter + -- "S" - Primitive operation slot + -- "P" - Wrapped parameters + -- "C" - Call kind + -- "F" - Status flag + + SEU.Build_T (Loc, Typ, Params); + SEU.Build_S (Loc, Params); + SEU.Build_P (Loc, Params); + SEU.Build_C (Loc, Params); + SEU.Build_F (Loc, Params); + + Set_Is_Internal (Def_Id); + + return + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Def_Id, + Parameter_Specifications => Params); + end Make_Disp_Conditional_Select_Spec; + + ------------------------------------- + -- Make_Disp_Get_Prim_Op_Kind_Body -- + ------------------------------------- + + function Make_Disp_Get_Prim_Op_Kind_Body + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + DT_Ptr : Entity_Id; + + begin + if Is_Interface (Typ) then + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Get_Prim_Op_Kind_Spec (Typ), + Declarations => + New_List, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + New_List (Make_Null_Statement (Loc)))); + end if; + + DT_Ptr := Node (First_Elmt (Access_Disp_Table (Typ))); + + -- Generate: + -- C := get_prim_op_kind (tag! (VP), S); + + -- where C is the out parameter capturing the call kind and S is the + -- dispatch table slot number. + + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Get_Prim_Op_Kind_Spec (Typ), + Declarations => + New_List, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + New_List ( + Make_Assignment_Statement (Loc, + Name => + Make_Identifier (Loc, Name_uC), + Expression => + Make_DT_Access_Action (Typ, + Action => + Get_Prim_Op_Kind, + Args => + New_List ( + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To (DT_Ptr, Loc)), + Make_Identifier (Loc, Name_uS))))))); + end Make_Disp_Get_Prim_Op_Kind_Body; + + ------------------------------------- + -- Make_Disp_Get_Prim_Op_Kind_Spec -- + ------------------------------------- + + function Make_Disp_Get_Prim_Op_Kind_Spec + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Def_Id : constant Node_Id := + Make_Defining_Identifier (Loc, + Name_uDisp_Get_Prim_Op_Kind); + Params : constant List_Id := New_List; + + begin + -- "T" - Object parameter + -- "S" - Primitive operation slot + -- "C" - Call kind + + SEU.Build_T (Loc, Typ, Params); + SEU.Build_S (Loc, Params); + SEU.Build_C (Loc, Params); + + Set_Is_Internal (Def_Id); + + return + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Def_Id, + Parameter_Specifications => Params); + end Make_Disp_Get_Prim_Op_Kind_Spec; + + -------------------------------- + -- Make_Disp_Get_Task_Id_Body -- + -------------------------------- + + function Make_Disp_Get_Task_Id_Body + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Ret : Node_Id; + + begin + if Is_Concurrent_Record_Type (Typ) + and then Ekind (Corresponding_Concurrent_Type (Typ)) = E_Task_Type + then + Ret := + Make_Return_Statement (Loc, + Expression => + Make_Selected_Component (Loc, + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uTask_Id))); + + -- A null body is constructed for non-task types + + else + Ret := + Make_Return_Statement (Loc, + Expression => + New_Reference_To (RTE (RO_ST_Null_Task), Loc)); + end if; + + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Get_Task_Id_Spec (Typ), + Declarations => + New_List, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + New_List (Ret))); + end Make_Disp_Get_Task_Id_Body; + + -------------------------------- + -- Make_Disp_Get_Task_Id_Spec -- + -------------------------------- + + function Make_Disp_Get_Task_Id_Spec + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Def_Id : constant Node_Id := + Make_Defining_Identifier (Loc, + Name_uDisp_Get_Task_Id); + + begin + Set_Is_Internal (Def_Id); + + return + Make_Function_Specification (Loc, + Defining_Unit_Name => Def_Id, + Parameter_Specifications => New_List ( + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_uT), + Parameter_Type => + New_Reference_To (Typ, Loc))), + Result_Definition => + New_Reference_To (RTE (RO_ST_Task_Id), Loc)); + end Make_Disp_Get_Task_Id_Spec; + + --------------------------------- + -- Make_Disp_Timed_Select_Body -- + --------------------------------- + + function Make_Disp_Timed_Select_Body + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Conc_Typ : Entity_Id := Empty; + Decls : constant List_Id := New_List; + DT_Ptr : Entity_Id; + Stmts : constant List_Id := New_List; + + begin + if Is_Interface (Typ) then + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Timed_Select_Spec (Typ), + Declarations => + New_List, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + New_List (Make_Null_Statement (Loc)))); + end if; + + if Is_Concurrent_Record_Type (Typ) then + Conc_Typ := Corresponding_Concurrent_Type (Typ); + end if; + + DT_Ptr := Node (First_Elmt (Access_Disp_Table (Typ))); + + if Present (Conc_Typ) then + + -- Generate: + -- I : Integer; + + -- where I will be used to capture the entry index of the primitive + -- wrapper at position S. + + Append_To (Decls, + Make_Object_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_uI), + Object_Definition => + New_Reference_To (Standard_Integer, Loc))); + end if; + + -- Generate: + -- C := get_prim_op_kind (tag! (VP), S); - -- Generate: Set_Expanded_Name (DT_Ptr, exname'Address); + -- if C = POK_Procedure + -- or else C = POK_Protected_Procedure + -- or else C = POK_Task_Procedure; + -- then + -- F := True; + -- return; + -- end if; - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Set_Expanded_Name, - Args => New_List ( - Node1 => New_Reference_To (DT_Ptr, Loc), - Node2 => - Make_Attribute_Reference (Loc, - Prefix => New_Reference_To (Exname, Loc), - Attribute_Name => Name_Address)))); + SEU.Build_Common_Dispatching_Select_Statements (Loc, Typ, DT_Ptr, Stmts); - -- Generate: Set_Access_Level (DT_Ptr, ); + if Present (Conc_Typ) then - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Set_Access_Level, - Args => New_List ( - Node1 => New_Reference_To (DT_Ptr, Loc), - Node2 => Make_Integer_Literal (Loc, Type_Access_Level (Typ))))); + -- Generate: + -- I := get_entry_index (tag! (VP), S); - -- Generate: - -- Set_Offset_To_Top (DT_Ptr, 0); + -- I is the entry index and S is the dispatch table slot - Append_To (Elab_Code, - Make_Procedure_Call_Statement (Loc, - Name => New_Reference_To (RTE (RE_Set_Offset_To_Top), Loc), - Parameter_Associations => New_List ( - New_Reference_To (DT_Ptr, Loc), - Make_Integer_Literal (Loc, Uint_0)))); + Append_To (Stmts, + Make_Assignment_Statement (Loc, + Name => + Make_Identifier (Loc, Name_uI), + Expression => + Make_DT_Access_Action (Typ, + Action => + Get_Entry_Index, + Args => + New_List ( + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To (DT_Ptr, Loc)), + Make_Identifier (Loc, Name_uS))))); - if Typ = Etype (Typ) - or else Is_CPP_Class (Etype (Typ)) - then - Old_Tag1 := - Unchecked_Convert_To (Generalized_Tag, - Make_Integer_Literal (Loc, 0)); - Old_Tag2 := - Unchecked_Convert_To (Generalized_Tag, - Make_Integer_Literal (Loc, 0)); + if Ekind (Conc_Typ) = E_Protected_Type then - else - Old_Tag1 := - New_Reference_To - (Node (First_Elmt (Access_Disp_Table (Etype (Typ)))), Loc); - Old_Tag2 := - New_Reference_To - (Node (First_Elmt (Access_Disp_Table (Etype (Typ)))), Loc); - end if; + -- Generate: + -- Timed_Protected_Entry_Call ( + -- T._object'access, + -- protected_entry_index! (I), + -- P, + -- D, + -- M, + -- F); - if Typ /= Etype (Typ) - and then not Is_Interface (Typ) - and then not Is_Interface (Etype (Typ)) - then - -- Generate: Inherit_DT (parent'tag, DT_Ptr, nb_prim of parent); + -- where T is the protected object, I is the entry index, P are + -- the wrapped parameters, D is the delay amount, M is the delay + -- mode and F is the status flag. - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Inherit_DT, - Args => New_List ( - Node1 => Old_Tag1, - Node2 => New_Reference_To (DT_Ptr, Loc), - Node3 => - Make_Integer_Literal (Loc, - DT_Entry_Count (First_Tag_Component (Etype (Typ))))))); + Append_To (Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Timed_Protected_Entry_Call), Loc), + Parameter_Associations => + New_List ( - -- Inherit the secondary dispatch tables of the ancestor + Make_Attribute_Reference (Loc, -- T._object'access + Attribute_Name => + Name_Unchecked_Access, + Prefix => + Make_Selected_Component (Loc, + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uObject))), - if not Is_CPP_Class (Etype (Typ)) then - declare - Sec_DT_Ancestor : Elmt_Id := - Next_Elmt - (First_Elmt - (Access_Disp_Table (Etype (Typ)))); - Sec_DT_Typ : Elmt_Id := - Next_Elmt - (First_Elmt - (Access_Disp_Table (Typ))); + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Reference_To (RTE (RE_Protected_Entry_Index), Loc), + Expression => + Make_Identifier (Loc, Name_uI)), - procedure Copy_Secondary_DTs (Typ : Entity_Id); - -- Local procedure required to climb through the ancestors and - -- copy the contents of all their secondary dispatch tables. + Make_Identifier (Loc, Name_uP), -- parameter block + Make_Identifier (Loc, Name_uD), -- delay + Make_Identifier (Loc, Name_uM), -- delay mode + Make_Identifier (Loc, Name_uF)))); -- status flag - ------------------------ - -- Copy_Secondary_DTs -- - ------------------------ + else + pragma Assert (Ekind (Conc_Typ) = E_Task_Type); - procedure Copy_Secondary_DTs (Typ : Entity_Id) is - E : Entity_Id; + -- Generate: + -- Timed_Task_Entry_Call ( + -- T._task_id, + -- task_entry_index! (I), + -- P, + -- D, + -- M, + -- F); - begin - if Etype (Typ) /= Typ then - Copy_Secondary_DTs (Etype (Typ)); - end if; + -- where T is the task object, I is the entry index, P are the + -- wrapped parameters, D is the delay amount, M is the delay + -- mode and F is the status flag. - if Present (Abstract_Interfaces (Typ)) - and then not Is_Empty_Elmt_List - (Abstract_Interfaces (Typ)) - then - E := First_Entity (Typ); - while Present (E) - and then Present (Node (Sec_DT_Ancestor)) - loop - if Is_Tag (E) and then Chars (E) /= Name_uTag then - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Inherit_DT, - Args => New_List ( - Node1 => Unchecked_Convert_To - (RTE (RE_Tag), - New_Reference_To - (Node (Sec_DT_Ancestor), Loc)), - Node2 => Unchecked_Convert_To - (RTE (RE_Tag), - New_Reference_To - (Node (Sec_DT_Typ), Loc)), - Node3 => Make_Integer_Literal (Loc, - DT_Entry_Count (E))))); + Append_To (Stmts, + Make_Procedure_Call_Statement (Loc, + Name => + New_Reference_To (RTE (RE_Timed_Task_Entry_Call), Loc), + Parameter_Associations => + New_List ( - Next_Elmt (Sec_DT_Ancestor); - Next_Elmt (Sec_DT_Typ); - end if; + Make_Selected_Component (Loc, -- T._task_id + Prefix => + Make_Identifier (Loc, Name_uT), + Selector_Name => + Make_Identifier (Loc, Name_uTask_Id)), - Next_Entity (E); - end loop; - end if; - end Copy_Secondary_DTs; + Make_Unchecked_Type_Conversion (Loc, -- entry index + Subtype_Mark => + New_Reference_To (RTE (RE_Task_Entry_Index), Loc), + Expression => + Make_Identifier (Loc, Name_uI)), - begin - if Present (Node (Sec_DT_Ancestor)) then - Copy_Secondary_DTs (Typ); - end if; - end; + Make_Identifier (Loc, Name_uP), -- parameter block + Make_Identifier (Loc, Name_uD), -- delay + Make_Identifier (Loc, Name_uM), -- delay mode + Make_Identifier (Loc, Name_uF)))); -- status flag end if; - end if; - -- Generate: - -- Inherit_TSD (parent'tag, DT_Ptr); + -- Implementation for limited tagged types - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Inherit_TSD, - Args => New_List ( - Node1 => Old_Tag2, - Node2 => New_Reference_To (DT_Ptr, Loc)))); + else + Append_To (Stmts, + Make_Raise_Program_Error (Loc, Reason => PE_Explicit_Raise)); + end if; - -- For types with no controlled components, generate: - -- Set_RC_Offset (DT_Ptr, 0); + return + Make_Subprogram_Body (Loc, + Specification => + Make_Disp_Timed_Select_Spec (Typ), + Declarations => + Decls, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, Stmts)); + end Make_Disp_Timed_Select_Body; - -- For simple types with controlled components, generate: - -- Set_RC_Offset (DT_Ptr, type._record_controller'position); + --------------------------------- + -- Make_Disp_Timed_Select_Spec -- + --------------------------------- - -- For complex types with controlled components where the position - -- of the record controller is not statically computable, if there are - -- controlled components at this level, generate: - -- Set_RC_Offset (DT_Ptr, -1); - -- to indicate that the _controller field is right after the _parent + function Make_Disp_Timed_Select_Spec + (Typ : Entity_Id) return Node_Id + is + Loc : constant Source_Ptr := Sloc (Typ); + Def_Id : constant Node_Id := + Make_Defining_Identifier (Loc, + Name_uDisp_Timed_Select); + Params : constant List_Id := New_List; - -- Or if there are no controlled components at this level, generate: - -- Set_RC_Offset (DT_Ptr, -2); - -- to indicate that we need to get the position from the parent. + begin + -- "T" - Object parameter + -- "S" - Primitive operation slot + -- "P" - Wrapped parameters + -- "D" - Delay + -- "M" - Delay Mode + -- "C" - Call kind + -- "F" - Status flag - declare - Position : Node_Id; + SEU.Build_T (Loc, Typ, Params); + SEU.Build_S (Loc, Params); + SEU.Build_P (Loc, Params); - begin - if not Has_Controlled_Component (Typ) then - Position := Make_Integer_Literal (Loc, 0); + Append_To (Params, + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_uD), + Parameter_Type => + New_Reference_To (Standard_Duration, Loc))); - elsif Etype (Typ) /= Typ and then Has_Discriminants (Etype (Typ)) then - if Has_New_Controlled_Component (Typ) then - Position := Make_Integer_Literal (Loc, -1); - else - Position := Make_Integer_Literal (Loc, -2); - end if; - else - Position := - Make_Attribute_Reference (Loc, - Prefix => - Make_Selected_Component (Loc, - Prefix => New_Reference_To (Typ, Loc), - Selector_Name => - New_Reference_To (Controller_Component (Typ), Loc)), - Attribute_Name => Name_Position); - - -- This is not proper Ada code to use the attribute 'Position - -- on something else than an object but this is supported by - -- the back end (see comment on the Bit_Component attribute in - -- sem_attr). So we avoid semantic checking here. - - -- Is this documented in sinfo.ads??? it should be! - - Set_Analyzed (Position); - Set_Etype (Prefix (Position), RTE (RE_Record_Controller)); - Set_Etype (Prefix (Prefix (Position)), Typ); - Set_Etype (Selector_Name (Prefix (Position)), - RTE (RE_Record_Controller)); - Set_Etype (Position, RTE (RE_Storage_Offset)); - end if; + Append_To (Params, + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, Name_uM), + Parameter_Type => + New_Reference_To (Standard_Integer, Loc))); - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Set_RC_Offset, - Args => New_List ( - Node1 => New_Reference_To (DT_Ptr, Loc), - Node2 => Position))); - end; + SEU.Build_C (Loc, Params); + SEU.Build_F (Loc, Params); - -- Generate: Set_Remotely_Callable (DT_Ptr, Status); where Status is - -- described in E.4 (18) + Set_Is_Internal (Def_Id); - declare - Status : Entity_Id; + return + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Def_Id, + Parameter_Specifications => Params); + end Make_Disp_Timed_Select_Spec; - begin - Status := - Boolean_Literals - (Is_Pure (Typ) - or else Is_Shared_Passive (Typ) - or else - ((Is_Remote_Types (Typ) - or else Is_Remote_Call_Interface (Typ)) - and then Original_View_In_Visible_Part (Typ)) - or else not Comes_From_Source (Typ)); + ------------- + -- Make_DT -- + ------------- - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Set_Remotely_Callable, - Args => New_List ( - New_Occurrence_Of (DT_Ptr, Loc), - New_Occurrence_Of (Status, Loc)))); - end; + function Make_DT (Typ : Entity_Id) return List_Id is + Loc : constant Source_Ptr := Sloc (Typ); + Result : constant List_Id := New_List; + Elab_Code : constant List_Id := New_List; - -- Generate: Set_External_Tag (DT_Ptr, exname'Address); - -- Should be the external name not the qualified name??? + Tname : constant Name_Id := Chars (Typ); + Name_DT : constant Name_Id := New_External_Name (Tname, 'T'); + Name_DT_Ptr : constant Name_Id := New_External_Name (Tname, 'P'); + Name_SSD : constant Name_Id := New_External_Name (Tname, 'S'); + Name_TSD : constant Name_Id := New_External_Name (Tname, 'B'); + Name_Exname : constant Name_Id := New_External_Name (Tname, 'E'); + Name_No_Reg : constant Name_Id := New_External_Name (Tname, 'F'); - if not Has_External_Tag_Rep_Clause (Typ) then - Append_To (Elab_Code, - Make_DT_Access_Action (Typ, - Action => Set_External_Tag, - Args => New_List ( - Node1 => New_Reference_To (DT_Ptr, Loc), - Node2 => - Make_Attribute_Reference (Loc, - Prefix => New_Reference_To (Exname, Loc), - Attribute_Name => Name_Address)))); + DT : constant Node_Id := Make_Defining_Identifier (Loc, Name_DT); + DT_Ptr : constant Node_Id := Make_Defining_Identifier (Loc, Name_DT_Ptr); + SSD : constant Node_Id := Make_Defining_Identifier (Loc, Name_SSD); + TSD : constant Node_Id := Make_Defining_Identifier (Loc, Name_TSD); + Exname : constant Node_Id := Make_Defining_Identifier (Loc, Name_Exname); + No_Reg : constant Node_Id := Make_Defining_Identifier (Loc, Name_No_Reg); - -- Generate code to register the Tag in the External_Tag hash - -- table for the pure Ada type only. + Generalized_Tag : constant Entity_Id := RTE (RE_Tag); + I_Depth : Int; + Size_Expr_Node : Node_Id; + Old_Tag1 : Node_Id; + Old_Tag2 : Node_Id; + Num_Ifaces : Int; + Nb_Prim : Int; + TSD_Num_Entries : Int; + Typ_Copy : constant Entity_Id := New_Copy (Typ); + AI : Elmt_Id; - -- Register_Tag (Dt_Ptr); + begin + if not RTE_Available (RE_Tag) then + Error_Msg_CRT ("tagged types", Typ); + return New_List; + end if; - -- Skip this if routine not available, or in No_Run_Time mode + -- Collect full list of directly and indirectly implemented interfaces - if RTE_Available (RE_Register_Tag) - and then Is_RTE (Generalized_Tag, RE_Tag) - and then not No_Run_Time_Mode - then - Append_To (Elab_Code, - Make_Procedure_Call_Statement (Loc, - Name => New_Reference_To (RTE (RE_Register_Tag), Loc), - Parameter_Associations => - New_List (New_Reference_To (DT_Ptr, Loc)))); - end if; - end if; + Set_Parent (Typ_Copy, Parent (Typ)); + Set_Abstract_Interfaces (Typ_Copy, New_Elmt_List); + Collect_All_Interfaces (Typ_Copy); - -- Generate: - -- if No_Reg then - -- - -- No_Reg := False; - -- end if; + -- Calculate the size of the DT and the TSD - Append_To (Elab_Code, - Make_Assignment_Statement (Loc, - Name => New_Reference_To (No_Reg, Loc), - Expression => New_Reference_To (Standard_False, Loc))); + if Is_Interface (Typ) then + -- Abstract interfaces need neither the DT nor the ancestors table. + -- We reserve a single entry for its DT because at run-time the + -- pointer to this dummy DT is the tag of this abstract interface + -- type. - Append_To (Result, - Make_Implicit_If_Statement (Typ, - Condition => New_Reference_To (No_Reg, Loc), - Then_Statements => Elab_Code)); + Nb_Prim := 1; + TSD_Num_Entries := 0; - -- Ada 2005 (AI-251): Register the tag of the interfaces into - -- the table of implemented interfaces + else + -- Calculate the number of entries for the table of interfaces - if Present (Abstract_Interfaces (Typ_Copy)) - and then not Is_Empty_Elmt_List (Abstract_Interfaces (Typ_Copy)) - then + Num_Ifaces := 0; AI := First_Elmt (Abstract_Interfaces (Typ_Copy)); while Present (AI) loop + Num_Ifaces := Num_Ifaces + 1; + Next_Elmt (AI); + end loop; - -- Generate: - -- Register_Interface (DT_Ptr, Interface'Tag); + -- Count ancestors to compute the inheritance depth. For private + -- extensions, always go to the full view in order to compute the + -- real inheritance depth. - Append_To (Result, - Make_DT_Access_Action (Typ, - Action => Register_Interface_Tag, - Args => New_List ( - Node1 => New_Reference_To (DT_Ptr, Loc), - Node2 => New_Reference_To - (Node - (First_Elmt - (Access_Disp_Table (Node (AI)))), - Loc)))); + declare + Parent_Type : Entity_Id := Typ; + P : Entity_Id; - Next_Elmt (AI); - end loop; - end if; + begin + I_Depth := 0; + loop + P := Etype (Parent_Type); - return Result; - end Make_DT; + if Is_Private_Type (P) then + P := Full_View (Base_Type (P)); + end if; - -------------------------------- - -- Make_Abstract_Interface_DT -- - -------------------------------- + exit when P = Parent_Type; - procedure Make_Abstract_Interface_DT - (AI_Tag : Entity_Id; - Acc_Disp_Tables : in out Elist_Id; - Result : out List_Id) - is - Loc : constant Source_Ptr := Sloc (AI_Tag); - Name_DT : constant Name_Id := New_Internal_Name ('T'); - Name_DT_Ptr : constant Name_Id := New_Internal_Name ('P'); + I_Depth := I_Depth + 1; + Parent_Type := P; + end loop; + end; - Iface_DT : constant Node_Id := - Make_Defining_Identifier (Loc, Name_DT); - Iface_DT_Ptr : constant Node_Id := - Make_Defining_Identifier (Loc, Name_DT_Ptr); + TSD_Num_Entries := I_Depth + Num_Ifaces + 1; + Nb_Prim := UI_To_Int (DT_Entry_Count (First_Tag_Component (Typ))); - Generalized_Tag : constant Entity_Id := RTE (RE_Interface_Tag); - Size_Expr_Node : Node_Id; - Nb_Prim : Int; + -- If the number of primitives of Typ is less that the number of + -- predefined primitives, we must reserve at least enough space + -- for the predefined primitives. - begin - Result := New_List; + if Nb_Prim < Default_Prim_Op_Count then + Nb_Prim := Default_Prim_Op_Count; + end if; + end if; -- Dispatch table and related entities are allocated statically - Set_Ekind (Iface_DT, E_Variable); - Set_Is_Statically_Allocated (Iface_DT); + Set_Ekind (DT, E_Variable); + Set_Is_Statically_Allocated (DT); - Set_Ekind (Iface_DT_Ptr, E_Variable); - Set_Is_Statically_Allocated (Iface_DT_Ptr); + Set_Ekind (DT_Ptr, E_Variable); + Set_Is_Statically_Allocated (DT_Ptr); - -- Generate code to create the storage for the Dispatch_Table object + Set_Ekind (SSD, E_Variable); + Set_Is_Statically_Allocated (SSD); - -- DT : Storage_Array (1..DT_Prologue_Size+nb_prim*DT_Entry_Size); - -- for DT'Alignment use Address'Alignment + Set_Ekind (TSD, E_Variable); + Set_Is_Statically_Allocated (TSD); - Nb_Prim := UI_To_Int (DT_Entry_Count (AI_Tag)); + Set_Ekind (Exname, E_Variable); + Set_Is_Statically_Allocated (Exname); + + Set_Ekind (No_Reg, E_Variable); + Set_Is_Statically_Allocated (No_Reg); + + -- Generate code to create the storage for the Dispatch_Table object: + + -- DT : Storage_Array (1..DT_Prologue_Size+nb_prim*DT_Entry_Size); + -- for DT'Alignment use Address'Alignment Size_Expr_Node := Make_Op_Add (Loc, - Left_Opnd => Make_DT_Access_Action (Etype (AI_Tag), - DT_Prologue_Size, - No_List), + Left_Opnd => Make_DT_Access_Action (Typ, DT_Prologue_Size, No_List), Right_Opnd => Make_Op_Multiply (Loc, Left_Opnd => - Make_DT_Access_Action (Etype (AI_Tag), - DT_Entry_Size, - No_List), + Make_DT_Access_Action (Typ, DT_Entry_Size, No_List), Right_Opnd => Make_Integer_Literal (Loc, Nb_Prim))); Append_To (Result, Make_Object_Declaration (Loc, - Defining_Identifier => Iface_DT, + Defining_Identifier => DT, Aliased_Present => True, Object_Definition => Make_Subtype_Indication (Loc, - Subtype_Mark => New_Reference_To (RTE (RE_Storage_Array), Loc), + Subtype_Mark => New_Reference_To + (RTE (RE_Storage_Array), Loc), Constraint => Make_Index_Or_Discriminant_Constraint (Loc, Constraints => New_List ( Make_Range (Loc, Low_Bound => Make_Integer_Literal (Loc, 1), - High_Bound => Size_Expr_Node)))), - - -- Initialize the signature of the interface tag. It is currently - -- a sequence of four bytes located in the unused Typeinfo_Ptr - -- field of the prologue). Its current value is the following - -- sequence: (80, Nb_Prim, 0, 80) - - Expression => - Make_Aggregate (Loc, - Component_Associations => New_List ( - Make_Component_Association (Loc, - - -- -80, 0, 0, -80 - - Choices => New_List ( - Make_Integer_Literal (Loc, Uint_5), - Make_Integer_Literal (Loc, Uint_8)), - Expression => - Make_Integer_Literal (Loc, Uint_80)), - - Make_Component_Association (Loc, - Choices => New_List ( - Make_Integer_Literal (Loc, Uint_2)), - Expression => - Make_Integer_Literal (Loc, Nb_Prim)), - - Make_Component_Association (Loc, - Choices => New_List ( - Make_Others_Choice (Loc)), - Expression => Make_Integer_Literal (Loc, Uint_0)))))); + High_Bound => Size_Expr_Node)))))); Append_To (Result, Make_Attribute_Definition_Clause (Loc, - Name => New_Reference_To (Iface_DT, Loc), + Name => New_Reference_To (DT, Loc), Chars => Name_Alignment, Expression => Make_Attribute_Reference (Loc, Prefix => New_Reference_To (RTE (RE_Integer_Address), Loc), Attribute_Name => Name_Alignment))); + -- Initialize the signature of the interface tag. It is a sequence + -- two bytes located in the header of the dispatch table. + + Append_To (Result, + Make_Assignment_Statement (Loc, + Name => + Make_Indexed_Component (Loc, + Prefix => New_Occurrence_Of (DT, Loc), + Expressions => New_List ( + Make_Integer_Literal (Loc, Uint_1))), + Expression => + Unchecked_Convert_To (RTE (RE_Storage_Element), + New_Reference_To (RTE (RE_Valid_Signature), Loc)))); + + if not Is_Interface (Typ) then + + -- The signature of a Primary Dispatch table is: + -- (Valid_Signature, Primary_DT) + + Append_To (Result, + Make_Assignment_Statement (Loc, + Name => + Make_Indexed_Component (Loc, + Prefix => New_Occurrence_Of (DT, Loc), + Expressions => New_List ( + Make_Integer_Literal (Loc, Uint_2))), + Expression => + Unchecked_Convert_To (RTE (RE_Storage_Element), + New_Reference_To (RTE (RE_Primary_DT), Loc)))); + + else + -- The signature of an abstract interface is: + -- (Valid_Signature, Abstract_Interface) + + Append_To (Result, + Make_Assignment_Statement (Loc, + Name => + Make_Indexed_Component (Loc, + Prefix => New_Occurrence_Of (DT, Loc), + Expressions => New_List ( + Make_Integer_Literal (Loc, Uint_2))), + Expression => + Unchecked_Convert_To (RTE (RE_Storage_Element), + New_Reference_To (RTE (RE_Abstract_Interface), Loc)))); + end if; + -- Generate code to create the pointer to the dispatch table - -- Iface_DT_Ptr : Tag := Tag!(DT'Address); + -- DT_Ptr : Tag := Tag!(DT'Address); - -- According to the C++ ABI, the base of the vtable is located - -- after the following prologue: Offset_To_Top, and Typeinfo_Ptr. - -- Hence, move the pointer down to the real base of the vtable. + -- According to the C++ ABI, the base of the vtable is located after a + -- prologue containing Offset_To_Top, and Typeinfo_Ptr. Hence, we move + -- down the pointer to the real base of the vtable Append_To (Result, Make_Object_Declaration (Loc, - Defining_Identifier => Iface_DT_Ptr, + Defining_Identifier => DT_Ptr, Constant_Present => True, Object_Definition => New_Reference_To (Generalized_Tag, Loc), Expression => @@ -2402,886 +2765,953 @@ package body Exp_Disp is Left_Opnd => Unchecked_Convert_To (RTE (RE_Storage_Offset), Make_Attribute_Reference (Loc, - Prefix => New_Reference_To (Iface_DT, Loc), + Prefix => New_Reference_To (DT, Loc), Attribute_Name => Name_Address)), Right_Opnd => - Make_DT_Access_Action (Etype (AI_Tag), + Make_DT_Access_Action (Typ, DT_Prologue_Size, No_List))))); - -- Note: Offset_To_Top will be initialized by the init subprogram - - -- Set Access_Disp_Table field to be the dispatch table pointer - - if not (Present (Acc_Disp_Tables)) then - Acc_Disp_Tables := New_Elmt_List; - end if; - - Append_Elmt (Iface_DT_Ptr, Acc_Disp_Tables); - end Make_Abstract_Interface_DT; - - --------------------------- - -- Make_DT_Access_Action -- - --------------------------- - - function Make_DT_Access_Action - (Typ : Entity_Id; - Action : DT_Access_Action; - Args : List_Id) return Node_Id - is - Action_Name : constant Entity_Id := RTE (Ada_Actions (Action)); - Loc : Source_Ptr; - - begin - if No (Args) then - - -- This is a constant - - return New_Reference_To (Action_Name, Sloc (Typ)); - end if; - - pragma Assert (List_Length (Args) = Action_Nb_Arg (Action)); - - Loc := Sloc (First (Args)); - - if Action_Is_Proc (Action) then - return - Make_Procedure_Call_Statement (Loc, - Name => New_Reference_To (Action_Name, Loc), - Parameter_Associations => Args); - - else - return - Make_Function_Call (Loc, - Name => New_Reference_To (Action_Name, Loc), - Parameter_Associations => Args); - end if; - end Make_DT_Access_Action; + -- Generate code to define the boolean that controls registration, in + -- order to avoid multiple registrations for tagged types defined in + -- multiple-called scopes. - ---------------------------------------- - -- Make_Disp_Asynchronous_Select_Body -- - ---------------------------------------- + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => No_Reg, + Object_Definition => New_Reference_To (Standard_Boolean, Loc), + Expression => New_Reference_To (Standard_True, Loc))); - function Make_Disp_Asynchronous_Select_Body - (Typ : Entity_Id) return Node_Id - is - Conc_Typ : Entity_Id := Empty; - Decls : constant List_Id := New_List; - DT_Ptr : Entity_Id; - DT_Ptr_Typ : Entity_Id; - Loc : constant Source_Ptr := Sloc (Typ); - Stmts : constant List_Id := New_List; + -- Set Access_Disp_Table field to be the dispatch table pointer - begin - if Is_Concurrent_Record_Type (Typ) then - Conc_Typ := Corresponding_Concurrent_Type (Typ); + if not Present (Access_Disp_Table (Typ)) then + Set_Access_Disp_Table (Typ, New_Elmt_List); end if; - -- Typ may be a derived type, climb the derivation chain in order to - -- find the root. + Prepend_Elmt (DT_Ptr, Access_Disp_Table (Typ)); - DT_Ptr_Typ := Typ; - while Present (Parent_Subtype (DT_Ptr_Typ)) loop - DT_Ptr_Typ := Parent_Subtype (DT_Ptr_Typ); - end loop; + -- Generate code to create the storage for the type specific data object + -- with enough space to store the tags of the ancestors plus the tags + -- of all the implemented interfaces (as described in a-tags.adb). - DT_Ptr := Node (First_Elmt (Access_Disp_Table (DT_Ptr_Typ))); + -- TSD: Storage_Array + -- (1..TSD_Prologue_Size+TSD_Num_Entries*TSD_Entry_Size); + -- for TSD'Alignment use Address'Alignment - if Present (Conc_Typ) then + Size_Expr_Node := + Make_Op_Add (Loc, + Left_Opnd => + Make_DT_Access_Action (Typ, TSD_Prologue_Size, No_List), + Right_Opnd => + Make_Op_Multiply (Loc, + Left_Opnd => + Make_DT_Access_Action (Typ, TSD_Entry_Size, No_List), + Right_Opnd => + Make_Integer_Literal (Loc, TSD_Num_Entries))); - -- Generate: - -- I : Integer := get_entry_index (tag! (VP), S); + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => TSD, + Aliased_Present => True, + Object_Definition => + Make_Subtype_Indication (Loc, + Subtype_Mark => New_Reference_To (RTE (RE_Storage_Array), Loc), + Constraint => Make_Index_Or_Discriminant_Constraint (Loc, + Constraints => New_List ( + Make_Range (Loc, + Low_Bound => Make_Integer_Literal (Loc, 1), + High_Bound => Size_Expr_Node)))))); - -- where I will be used to capture the entry index of the primitive - -- wrapper at position S. + Append_To (Result, + Make_Attribute_Definition_Clause (Loc, + Name => New_Reference_To (TSD, Loc), + Chars => Name_Alignment, + Expression => + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (RTE (RE_Integer_Address), Loc), + Attribute_Name => Name_Alignment))); - Append_To (Decls, - Make_Object_Declaration (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uI), - Object_Definition => - New_Reference_To (Standard_Integer, Loc), - Expression => - Make_DT_Access_Action (Typ, - Action => - Get_Entry_Index, - Args => - New_List ( - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To (DT_Ptr, Loc)), - Make_Identifier (Loc, Name_uS))))); + -- Generate code to put the Address of the TSD in the dispatch table + -- Set_TSD (DT_Ptr, TSD); - if Ekind (Conc_Typ) = E_Protected_Type then + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_TSD, + Args => New_List ( + New_Reference_To (DT_Ptr, Loc), -- DTptr + Make_Attribute_Reference (Loc, -- Value + Prefix => New_Reference_To (TSD, Loc), + Attribute_Name => Name_Address)))); - -- Generate: - -- Protected_Entry_Call ( - -- T._object'access, - -- protected_entry_index! (I), - -- P, - -- Asynchronous_Call, - -- B); + -- Generate: + -- Set_Num_Prim_Ops (T'Tag, Nb_Prim) - -- where T is the protected object, I is the entry index, P are - -- the wrapped parameters and B is the name of the communication - -- block. + if not Is_Interface (Typ) then + Append_To (Elab_Code, + Make_Procedure_Call_Statement (Loc, + Name => New_Reference_To (RTE (RE_Set_Num_Prim_Ops), Loc), + Parameter_Associations => New_List ( + New_Reference_To (DT_Ptr, Loc), + Make_Integer_Literal (Loc, Nb_Prim)))); + end if; - Append_To (Stmts, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Protected_Entry_Call), Loc), - Parameter_Associations => - New_List ( + if Ada_Version >= Ada_05 + and then not Is_Interface (Typ) + and then not Is_Abstract (Typ) + and then not Is_Controlled (Typ) + and then Implements_Interface ( + Typ => Typ, + Kind => Any_Limited_Interface, + Check_Parent => True) + and then (Nb_Prim - Default_Prim_Op_Count) > 0 + then + -- Generate the Select Specific Data table for tagged types that + -- implement a synchronized interface. The size of the table is + -- constrained by the number of non-predefined primitive operations. - Make_Attribute_Reference (Loc, -- T._object'access - Attribute_Name => - Name_Unchecked_Access, - Prefix => - Make_Selected_Component (Loc, - Prefix => - Make_Identifier (Loc, Name_uT), - Selector_Name => - Make_Identifier (Loc, Name_uObject))), + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => SSD, + Aliased_Present => True, + Object_Definition => + Make_Subtype_Indication (Loc, + Subtype_Mark => New_Reference_To ( + RTE (RE_Select_Specific_Data), Loc), + Constraint => Make_Index_Or_Discriminant_Constraint (Loc, + Constraints => New_List ( + Make_Integer_Literal (Loc, + Nb_Prim - Default_Prim_Op_Count)))))); - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Reference_To (RTE (RE_Protected_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + -- Set the pointer to the Select Specific Data table in the TSD - Make_Identifier (Loc, Name_uP), -- parameter block - New_Reference_To ( -- Asynchronous_Call - RTE (RE_Asynchronous_Call), Loc), - Make_Identifier (Loc, Name_uB)))); -- comm block - else - pragma Assert (Ekind (Conc_Typ) = E_Task_Type); + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_SSD, + Args => New_List ( + New_Reference_To (DT_Ptr, Loc), -- DTptr + Make_Attribute_Reference (Loc, -- Value + Prefix => New_Reference_To (SSD, Loc), + Attribute_Name => Name_Address)))); + end if; - -- Generate: - -- Protected_Entry_Call ( - -- T._task_id, - -- task_entry_index! (I), - -- P, - -- Conditional_Call, - -- F); + -- Generate: Exname : constant String := full_qualified_name (typ); + -- The type itself may be an anonymous parent type, so use the first + -- subtype to have a user-recognizable name. - -- where T is the task object, I is the entry index, P are the - -- wrapped parameters and F is the status flag. + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => Exname, + Constant_Present => True, + Object_Definition => New_Reference_To (Standard_String, Loc), + Expression => + Make_String_Literal (Loc, + Full_Qualified_Name (First_Subtype (Typ))))); - Append_To (Stmts, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Task_Entry_Call), Loc), - Parameter_Associations => - New_List ( + -- Generate: Set_Expanded_Name (DT_Ptr, exname'Address); - Make_Selected_Component (Loc, -- T._task_id - Prefix => - Make_Identifier (Loc, Name_uT), - Selector_Name => - Make_Identifier (Loc, Name_uTask_Id)), + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_Expanded_Name, + Args => New_List ( + Node1 => New_Reference_To (DT_Ptr, Loc), + Node2 => + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (Exname, Loc), + Attribute_Name => Name_Address)))); - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Reference_To (RTE (RE_Task_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + if not Is_Interface (Typ) then + -- Generate: Set_Access_Level (DT_Ptr, ); - Make_Identifier (Loc, Name_uP), -- parameter block - New_Reference_To ( -- Asynchronous_Call - RTE (RE_Asynchronous_Call), Loc), - Make_Identifier (Loc, Name_uF)))); -- status flag - end if; + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_Access_Level, + Args => New_List ( + Node1 => New_Reference_To (DT_Ptr, Loc), + Node2 => Make_Integer_Literal (Loc, Type_Access_Level (Typ))))); + end if; - -- Null implementation for limited tagged types + if Typ = Etype (Typ) + or else Is_CPP_Class (Etype (Typ)) + or else Is_Interface (Typ) + then + Old_Tag1 := + Unchecked_Convert_To (Generalized_Tag, + Make_Integer_Literal (Loc, 0)); + Old_Tag2 := + Unchecked_Convert_To (Generalized_Tag, + Make_Integer_Literal (Loc, 0)); else - Append_To (Stmts, - Make_Null_Statement (Loc)); + Old_Tag1 := + New_Reference_To + (Node (First_Elmt (Access_Disp_Table (Etype (Typ)))), Loc); + Old_Tag2 := + New_Reference_To + (Node (First_Elmt (Access_Disp_Table (Etype (Typ)))), Loc); end if; - return - Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Asynchronous_Select_Spec (Typ), - Declarations => - Decls, - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, Stmts)); - end Make_Disp_Asynchronous_Select_Body; + if Typ /= Etype (Typ) + and then not Is_Interface (Typ) + then + -- Generate: Inherit_DT (parent'tag, DT_Ptr, nb_prim of parent); - ---------------------------------------- - -- Make_Disp_Asynchronous_Select_Spec -- - ---------------------------------------- + if not Is_Interface (Etype (Typ)) then + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Inherit_DT, + Args => New_List ( + Node1 => Old_Tag1, + Node2 => New_Reference_To (DT_Ptr, Loc), + Node3 => + Make_Integer_Literal (Loc, + DT_Entry_Count (First_Tag_Component (Etype (Typ))))))); + end if; - function Make_Disp_Asynchronous_Select_Spec - (Typ : Entity_Id) return Node_Id - is - Loc : constant Source_Ptr := Sloc (Typ); - Params : constant List_Id := New_List; + -- Inherit the secondary dispatch tables of the ancestor - begin - -- "T" - Object parameter - -- "S" - Primitive operation slot - -- "P" - Wrapped parameters - -- "B" - Communication block - -- "F" - Status flag + if not Is_CPP_Class (Etype (Typ)) then + declare + Sec_DT_Ancestor : Elmt_Id := + Next_Elmt + (First_Elmt + (Access_Disp_Table (Etype (Typ)))); + Sec_DT_Typ : Elmt_Id := + Next_Elmt + (First_Elmt + (Access_Disp_Table (Typ))); + + procedure Copy_Secondary_DTs (Typ : Entity_Id); + -- Local procedure required to climb through the ancestors and + -- copy the contents of all their secondary dispatch tables. + + ------------------------ + -- Copy_Secondary_DTs -- + ------------------------ - SEU.Build_T (Loc, Typ, Params); - SEU.Build_S (Loc, Params); - SEU.Build_P (Loc, Params); - SEU.Build_B (Loc, Params); - SEU.Build_F (Loc, Params); + procedure Copy_Secondary_DTs (Typ : Entity_Id) is + E : Entity_Id; + Iface : Elmt_Id; - return - Make_Procedure_Specification (Loc, - Defining_Unit_Name => - Make_Defining_Identifier (Loc, Name_uDisp_Asynchronous_Select), - Parameter_Specifications => - Params); - end Make_Disp_Asynchronous_Select_Spec; + begin + -- Climb to the ancestor (if any) handling private types - --------------------------------------- - -- Make_Disp_Conditional_Select_Body -- - --------------------------------------- + if Present (Full_View (Etype (Typ))) then + if Full_View (Etype (Typ)) /= Typ then + Copy_Secondary_DTs (Full_View (Etype (Typ))); + end if; - function Make_Disp_Conditional_Select_Body - (Typ : Entity_Id) return Node_Id - is - Blk_Nam : Entity_Id; - Conc_Typ : Entity_Id := Empty; - Decls : constant List_Id := New_List; - DT_Ptr : Entity_Id; - DT_Ptr_Typ : Entity_Id; - Loc : constant Source_Ptr := Sloc (Typ); - Stmts : constant List_Id := New_List; + elsif Etype (Typ) /= Typ then + Copy_Secondary_DTs (Etype (Typ)); + end if; - begin - if Is_Concurrent_Record_Type (Typ) then - Conc_Typ := Corresponding_Concurrent_Type (Typ); - end if; + if Present (Abstract_Interfaces (Typ)) + and then not Is_Empty_Elmt_List + (Abstract_Interfaces (Typ)) + then + Iface := First_Elmt (Abstract_Interfaces (Typ)); + E := First_Entity (Typ); - -- Typ may be a derived type, climb the derivation chain in order to - -- find the root. + while Present (E) + and then Present (Node (Sec_DT_Ancestor)) + loop + if Is_Tag (E) and then Chars (E) /= Name_uTag then + if not Is_Interface (Etype (Typ)) then + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Inherit_DT, + Args => New_List ( + Node1 => Unchecked_Convert_To + (RTE (RE_Tag), + New_Reference_To + (Node (Sec_DT_Ancestor), + Loc)), + Node2 => Unchecked_Convert_To + (RTE (RE_Tag), + New_Reference_To + (Node (Sec_DT_Typ), Loc)), + Node3 => Make_Integer_Literal (Loc, + DT_Entry_Count (E))))); + end if; - DT_Ptr_Typ := Typ; - while Present (Parent_Subtype (DT_Ptr_Typ)) loop - DT_Ptr_Typ := Parent_Subtype (DT_Ptr_Typ); - end loop; + Next_Elmt (Sec_DT_Ancestor); + Next_Elmt (Sec_DT_Typ); + Next_Elmt (Iface); + end if; - DT_Ptr := Node (First_Elmt (Access_Disp_Table (DT_Ptr_Typ))); + Next_Entity (E); + end loop; + end if; + end Copy_Secondary_DTs; - if Present (Conc_Typ) then - -- Generate: - -- I : Integer; + begin + if Present (Node (Sec_DT_Ancestor)) then - -- where I will be used to capture the entry index of the primitive - -- wrapper at position S. + -- Handle private types - Append_To (Decls, - Make_Object_Declaration (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uI), - Object_Definition => - New_Reference_To (Standard_Integer, Loc))); + if Present (Full_View (Typ)) then + Copy_Secondary_DTs (Full_View (Typ)); + else + Copy_Secondary_DTs (Typ); + end if; + end if; + end; + end if; end if; -- Generate: - -- C := get_prim_op_kind (tag! (VP), S); - - -- if C = POK_Procedure - -- or else C = POK_Protected_Procedure - -- or else C = POK_Task_Procedure; - -- then - -- F := True; - -- return; - -- end if; - - SEU.Build_Common_Dispatching_Select_Statements (Loc, Typ, Stmts); + -- Inherit_TSD (parent'tag, DT_Ptr); - if Present (Conc_Typ) then + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Inherit_TSD, + Args => New_List ( + Node1 => Old_Tag2, + Node2 => New_Reference_To (DT_Ptr, Loc)))); - -- Generate: - -- Bnn : Communication_Block; + -- For types with no controlled components, generate: + -- Set_RC_Offset (DT_Ptr, 0); - -- where Bnn is the name of the communication block used in - -- the call to Protected_Entry_Call. + -- For simple types with controlled components, generate: + -- Set_RC_Offset (DT_Ptr, type._record_controller'position); - Blk_Nam := Make_Defining_Identifier (Loc, New_Internal_Name ('B')); + -- For complex types with controlled components where the position + -- of the record controller is not statically computable, if there are + -- controlled components at this level, generate: + -- Set_RC_Offset (DT_Ptr, -1); + -- to indicate that the _controller field is right after the _parent - Append_To (Decls, - Make_Object_Declaration (Loc, - Defining_Identifier => - Blk_Nam, - Object_Definition => - New_Reference_To (RTE (RE_Communication_Block), Loc))); + -- Or if there are no controlled components at this level, generate: + -- Set_RC_Offset (DT_Ptr, -2); + -- to indicate that we need to get the position from the parent. - -- Generate: - -- I := get_entry_index (tag! (VP), S); + if not Is_Interface (Typ) then + declare + Position : Node_Id; - -- where I is the entry index and S is the dispatch table slot. + begin + if not Has_Controlled_Component (Typ) then + Position := Make_Integer_Literal (Loc, 0); - Append_To (Stmts, - Make_Assignment_Statement (Loc, - Name => - Make_Identifier (Loc, Name_uI), - Expression => - Make_DT_Access_Action (Typ, - Action => - Get_Entry_Index, - Args => - New_List ( - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To (DT_Ptr, Loc)), - Make_Identifier (Loc, Name_uS))))); + elsif Etype (Typ) /= Typ + and then Has_Discriminants (Etype (Typ)) + then + if Has_New_Controlled_Component (Typ) then + Position := Make_Integer_Literal (Loc, -1); + else + Position := Make_Integer_Literal (Loc, -2); + end if; + else + Position := + Make_Attribute_Reference (Loc, + Prefix => + Make_Selected_Component (Loc, + Prefix => New_Reference_To (Typ, Loc), + Selector_Name => + New_Reference_To (Controller_Component (Typ), Loc)), + Attribute_Name => Name_Position); + + -- This is not proper Ada code to use the attribute 'Position + -- on something else than an object but this is supported by + -- the back end (see comment on the Bit_Component attribute in + -- sem_attr). So we avoid semantic checking here. + + -- Is this documented in sinfo.ads??? it should be! + + Set_Analyzed (Position); + Set_Etype (Prefix (Position), RTE (RE_Record_Controller)); + Set_Etype (Prefix (Prefix (Position)), Typ); + Set_Etype (Selector_Name (Prefix (Position)), + RTE (RE_Record_Controller)); + Set_Etype (Position, RTE (RE_Storage_Offset)); + end if; - if Ekind (Conc_Typ) = E_Protected_Type then + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_RC_Offset, + Args => New_List ( + Node1 => New_Reference_To (DT_Ptr, Loc), + Node2 => Position))); + end; - -- Generate: - -- Protected_Entry_Call ( - -- T._object'access, - -- protected_entry_index! (I), - -- P, - -- Conditional_Call, - -- Bnn); + -- Generate: Set_Remotely_Callable (DT_Ptr, Status); where Status is + -- described in E.4 (18) - -- where T is the protected object, I is the entry index, P are - -- the wrapped parameters and Bnn is the name of the communication - -- block. + declare + Status : Entity_Id; - Append_To (Stmts, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Protected_Entry_Call), Loc), - Parameter_Associations => - New_List ( + begin + Status := + Boolean_Literals + (Is_Pure (Typ) + or else Is_Shared_Passive (Typ) + or else + ((Is_Remote_Types (Typ) + or else Is_Remote_Call_Interface (Typ)) + and then Original_View_In_Visible_Part (Typ)) + or else not Comes_From_Source (Typ)); - Make_Attribute_Reference (Loc, -- T._object'access - Attribute_Name => - Name_Unchecked_Access, - Prefix => - Make_Selected_Component (Loc, - Prefix => - Make_Identifier (Loc, Name_uT), - Selector_Name => - Make_Identifier (Loc, Name_uObject))), + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_Remotely_Callable, + Args => New_List ( + New_Occurrence_Of (DT_Ptr, Loc), + New_Occurrence_Of (Status, Loc)))); + end; - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Reference_To (RTE (RE_Protected_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + -- Generate: + -- Set_Offset_To_Top (DT_Ptr, 0); - Make_Identifier (Loc, Name_uP), -- parameter block - New_Reference_To ( -- Conditional_Call - RTE (RE_Conditional_Call), Loc), - New_Reference_To ( -- Bnn - Blk_Nam, Loc)))); + Append_To (Elab_Code, + Make_Procedure_Call_Statement (Loc, + Name => New_Reference_To (RTE (RE_Set_Offset_To_Top), Loc), + Parameter_Associations => New_List ( + New_Reference_To (DT_Ptr, Loc), + Make_Integer_Literal (Loc, Uint_0)))); + end if; - -- Generate: - -- F := not Cancelled (Bnn); + -- Generate: Set_External_Tag (DT_Ptr, exname'Address); + -- Should be the external name not the qualified name??? - -- where F is the success flag. The status of Cancelled is negated - -- in order to match the behaviour of the version for task types. + if not Has_External_Tag_Rep_Clause (Typ) then + Append_To (Elab_Code, + Make_DT_Access_Action (Typ, + Action => Set_External_Tag, + Args => New_List ( + Node1 => New_Reference_To (DT_Ptr, Loc), + Node2 => + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (Exname, Loc), + Attribute_Name => Name_Address)))); - Append_To (Stmts, - Make_Assignment_Statement (Loc, - Name => - Make_Identifier (Loc, Name_uF), - Expression => - Make_Op_Not (Loc, - Right_Opnd => - Make_Function_Call (Loc, - Name => - New_Reference_To (RTE (RE_Cancelled), Loc), - Parameter_Associations => - New_List ( - New_Reference_To (Blk_Nam, Loc)))))); - else - pragma Assert (Ekind (Conc_Typ) = E_Task_Type); + -- Generate code to register the Tag in the External_Tag hash + -- table for the pure Ada type only. - -- Generate: - -- Protected_Entry_Call ( - -- T._task_id, - -- task_entry_index! (I), - -- P, - -- Conditional_Call, - -- F); + -- Register_Tag (Dt_Ptr); - -- where T is the task object, I is the entry index, P are the - -- wrapped parameters and F is the status flag. + -- Skip this if routine not available, or in No_Run_Time mode + -- or Typ is an abstract interface type (because the table to + -- register it is not available in the abstract type but in + -- types implementing this interface) - Append_To (Stmts, + if not No_Run_Time_Mode + and then RTE_Available (RE_Register_Tag) + and then Is_RTE (Generalized_Tag, RE_Tag) + and then not Is_Interface (Typ) + then + Append_To (Elab_Code, Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Task_Entry_Call), Loc), + Name => New_Reference_To (RTE (RE_Register_Tag), Loc), Parameter_Associations => - New_List ( + New_List (New_Reference_To (DT_Ptr, Loc)))); + end if; + end if; - Make_Selected_Component (Loc, -- T._task_id - Prefix => - Make_Identifier (Loc, Name_uT), - Selector_Name => - Make_Identifier (Loc, Name_uTask_Id)), + -- Generate: + -- if No_Reg then + -- + -- No_Reg := False; + -- end if; - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Reference_To (RTE (RE_Task_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + Append_To (Elab_Code, + Make_Assignment_Statement (Loc, + Name => New_Reference_To (No_Reg, Loc), + Expression => New_Reference_To (Standard_False, Loc))); + + Append_To (Result, + Make_Implicit_If_Statement (Typ, + Condition => New_Reference_To (No_Reg, Loc), + Then_Statements => Elab_Code)); + + -- Ada 2005 (AI-251): Register the tag of the interfaces into + -- the table of implemented interfaces and ... - Make_Identifier (Loc, Name_uP), -- parameter block - New_Reference_To ( -- Conditional_Call - RTE (RE_Conditional_Call), Loc), - Make_Identifier (Loc, Name_uF)))); -- status flag - end if; + if not Is_Interface (Typ) + and then Present (Abstract_Interfaces (Typ_Copy)) + and then not Is_Empty_Elmt_List (Abstract_Interfaces (Typ_Copy)) + then + AI := First_Elmt (Abstract_Interfaces (Typ_Copy)); + while Present (AI) loop - -- Null implementation for limited tagged types + -- Generate: + -- Register_Interface (DT_Ptr, Interface'Tag); - else - Append_To (Stmts, - Make_Null_Statement (Loc)); + Append_To (Result, + Make_DT_Access_Action (Typ, + Action => Register_Interface_Tag, + Args => New_List ( + Node1 => New_Reference_To (DT_Ptr, Loc), + Node2 => New_Reference_To + (Node + (First_Elmt + (Access_Disp_Table (Node (AI)))), + Loc)))); + + Next_Elmt (AI); + end loop; end if; - return - Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Conditional_Select_Spec (Typ), - Declarations => - Decls, - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, Stmts)); - end Make_Disp_Conditional_Select_Body; + return Result; + end Make_DT; - --------------------------------------- - -- Make_Disp_Conditional_Select_Spec -- - --------------------------------------- + --------------------------- + -- Make_DT_Access_Action -- + --------------------------- - function Make_Disp_Conditional_Select_Spec - (Typ : Entity_Id) return Node_Id + function Make_DT_Access_Action + (Typ : Entity_Id; + Action : DT_Access_Action; + Args : List_Id) return Node_Id is - Loc : constant Source_Ptr := Sloc (Typ); - Params : constant List_Id := New_List; + Action_Name : constant Entity_Id := RTE (Ada_Actions (Action)); + Loc : Source_Ptr; begin - -- "T" - Object parameter - -- "S" - Primitive operation slot - -- "P" - Wrapped parameters - -- "C" - Call kind - -- "F" - Status flag + if No (Args) then - SEU.Build_T (Loc, Typ, Params); - SEU.Build_S (Loc, Params); - SEU.Build_P (Loc, Params); - SEU.Build_C (Loc, Params); - SEU.Build_F (Loc, Params); + -- This is a constant - return - Make_Procedure_Specification (Loc, - Defining_Unit_Name => - Make_Defining_Identifier (Loc, Name_uDisp_Conditional_Select), - Parameter_Specifications => - Params); - end Make_Disp_Conditional_Select_Spec; + return New_Reference_To (Action_Name, Sloc (Typ)); + end if; - ------------------------------------- - -- Make_Disp_Get_Prim_Op_Kind_Body -- - ------------------------------------- + pragma Assert (List_Length (Args) = Action_Nb_Arg (Action)); - function Make_Disp_Get_Prim_Op_Kind_Body - (Typ : Entity_Id) return Node_Id - is - Loc : constant Source_Ptr := Sloc (Typ); - DT_Ptr : Entity_Id; - DT_Ptr_Typ : Entity_Id; + Loc := Sloc (First (Args)); - begin - -- Typ may be a derived type, climb the derivation chain in order to - -- find the root. + if Action_Is_Proc (Action) then + return + Make_Procedure_Call_Statement (Loc, + Name => New_Reference_To (Action_Name, Loc), + Parameter_Associations => Args); - DT_Ptr_Typ := Typ; - while Present (Parent_Subtype (DT_Ptr_Typ)) loop - DT_Ptr_Typ := Parent_Subtype (DT_Ptr_Typ); - end loop; + else + return + Make_Function_Call (Loc, + Name => New_Reference_To (Action_Name, Loc), + Parameter_Associations => Args); + end if; + end Make_DT_Access_Action; - DT_Ptr := Node (First_Elmt (Access_Disp_Table (DT_Ptr_Typ))); + ----------------------- + -- Make_Secondary_DT -- + ----------------------- - -- Generate: - -- C := get_prim_op_kind (tag! (VP), S); + procedure Make_Secondary_DT + (Typ : Entity_Id; + Ancestor_Typ : Entity_Id; + Suffix_Index : Int; + Iface : Entity_Id; + AI_Tag : Entity_Id; + Acc_Disp_Tables : in out Elist_Id; + Result : out List_Id) + is + Loc : constant Source_Ptr := Sloc (AI_Tag); + Generalized_Tag : constant Entity_Id := RTE (RE_Interface_Tag); + Name_DT : constant Name_Id := New_Internal_Name ('T'); + Iface_DT : Node_Id; + Iface_DT_Ptr : Node_Id; + Name_DT_Ptr : Name_Id; + Nb_Prim : Int; + OSD : Entity_Id; + Size_Expr_Node : Node_Id; + Tname : Name_Id; - -- where C is the out parameter capturing the call kind and S is the - -- dispatch table slot number. + begin + Result := New_List; - return - Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Get_Prim_Op_Kind_Spec (Typ), - Declarations => - No_List, - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, - New_List ( - Make_Assignment_Statement (Loc, - Name => - Make_Identifier (Loc, Name_uC), - Expression => - Make_DT_Access_Action (Typ, - Action => - Get_Prim_Op_Kind, - Args => - New_List ( - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To (DT_Ptr, Loc)), - Make_Identifier (Loc, Name_uS))))))); - end Make_Disp_Get_Prim_Op_Kind_Body; + -- Generate a unique external name associated with the secondary + -- dispatch table. This external name will be used to declare an + -- access to this secondary dispatch table, value that will be used + -- for the elaboration of Typ's objects and also for the elaboration + -- of objects of any derivation of Typ that do not override any + -- primitive operation of Typ. - ------------------------------------- - -- Make_Disp_Get_Prim_Op_Kind_Spec -- - ------------------------------------- + Get_Secondary_DT_External_Name (Typ, Ancestor_Typ, Suffix_Index); - function Make_Disp_Get_Prim_Op_Kind_Spec - (Typ : Entity_Id) return Node_Id - is - Loc : constant Source_Ptr := Sloc (Typ); - Params : constant List_Id := New_List; + Tname := Name_Find; + Name_DT_Ptr := New_External_Name (Tname, "P"); + Iface_DT := Make_Defining_Identifier (Loc, Name_DT); + Iface_DT_Ptr := Make_Defining_Identifier (Loc, Name_DT_Ptr); - begin - -- "T" - Object parameter - -- "S" - Primitive operation slot - -- "C" - Call kind + -- Dispatch table and related entities are allocated statically - SEU.Build_T (Loc, Typ, Params); - SEU.Build_S (Loc, Params); - SEU.Build_C (Loc, Params); + Set_Ekind (Iface_DT, E_Variable); + Set_Is_Statically_Allocated (Iface_DT); - return - Make_Procedure_Specification (Loc, - Defining_Unit_Name => - Make_Defining_Identifier (Loc, Name_uDisp_Get_Prim_Op_Kind), - Parameter_Specifications => - Params); - end Make_Disp_Get_Prim_Op_Kind_Spec; + Set_Ekind (Iface_DT_Ptr, E_Variable); + Set_Is_Statically_Allocated (Iface_DT_Ptr); - ----------------------------- - -- Make_Disp_Select_Tables -- - ----------------------------- + -- Generate code to create the storage for the Dispatch_Table object. + -- If the number of primitives of Typ is less that the number of + -- predefined primitives, we must reserve at least enough space + -- for the predefined primitives. - function Make_Disp_Select_Tables - (Typ : Entity_Id) return List_Id - is - Assignments : constant List_Id := New_List; - DT_Ptr : Entity_Id; - DT_Ptr_Typ : Entity_Id; - Index : Uint := Uint_1; - Loc : constant Source_Ptr := Sloc (Typ); - Prim : Entity_Id; - Prim_Als : Entity_Id; - Prim_Elmt : Elmt_Id; - Prim_Pos : Uint; + Nb_Prim := UI_To_Int (DT_Entry_Count (AI_Tag)); - begin - pragma Assert (Present (Primitive_Operations (Typ))); + if Nb_Prim < Default_Prim_Op_Count then + Nb_Prim := Default_Prim_Op_Count; + end if; - -- Typ may be a derived type, climb the derivation chain in order to - -- find the root. + -- DT : Storage_Array (1..DT_Prologue_Size+nb_prim*DT_Entry_Size); + -- for DT'Alignment use Address'Alignment - DT_Ptr_Typ := Typ; - while Present (Parent_Subtype (DT_Ptr_Typ)) loop - DT_Ptr_Typ := Parent_Subtype (DT_Ptr_Typ); - end loop; + Size_Expr_Node := + Make_Op_Add (Loc, + Left_Opnd => Make_DT_Access_Action (Etype (AI_Tag), + DT_Prologue_Size, + No_List), + Right_Opnd => + Make_Op_Multiply (Loc, + Left_Opnd => + Make_DT_Access_Action (Etype (AI_Tag), + DT_Entry_Size, + No_List), + Right_Opnd => + Make_Integer_Literal (Loc, Nb_Prim))); - DT_Ptr := Node (First_Elmt (Access_Disp_Table (DT_Ptr_Typ))); + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => Iface_DT, + Aliased_Present => True, + Object_Definition => + Make_Subtype_Indication (Loc, + Subtype_Mark => New_Reference_To (RTE (RE_Storage_Array), Loc), + Constraint => Make_Index_Or_Discriminant_Constraint (Loc, + Constraints => New_List ( + Make_Range (Loc, + Low_Bound => Make_Integer_Literal (Loc, 1), + High_Bound => Size_Expr_Node)))))); - Prim_Elmt := First_Elmt (Primitive_Operations (Typ)); - while Present (Prim_Elmt) loop - Prim := Node (Prim_Elmt); + Append_To (Result, + Make_Attribute_Definition_Clause (Loc, + Name => New_Reference_To (Iface_DT, Loc), + Chars => Name_Alignment, + Expression => + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (RTE (RE_Integer_Address), Loc), + Attribute_Name => Name_Alignment))); - -- Retrieve the root of the alias chain + -- Initialize the signature of the interface tag. It is a sequence of + -- two bytes located in the header of the dispatch table. The signature + -- of a Secondary Dispatch Table is (Valid_Signature, Secondary_DT). - if Present (Alias (Prim)) then - Prim_Als := Prim; - while Present (Alias (Prim_Als)) loop - Prim_Als := Alias (Prim_Als); - end loop; - else - Prim_Als := Empty; - end if; + Append_To (Result, + Make_Assignment_Statement (Loc, + Name => + Make_Indexed_Component (Loc, + Prefix => New_Occurrence_Of (Iface_DT, Loc), + Expressions => New_List ( + Make_Integer_Literal (Loc, Uint_1))), + Expression => + Unchecked_Convert_To (RTE (RE_Storage_Element), + New_Reference_To (RTE (RE_Valid_Signature), Loc)))); + + Append_To (Result, + Make_Assignment_Statement (Loc, + Name => + Make_Indexed_Component (Loc, + Prefix => New_Occurrence_Of (Iface_DT, Loc), + Expressions => New_List ( + Make_Integer_Literal (Loc, Uint_2))), + Expression => + Unchecked_Convert_To (RTE (RE_Storage_Element), + New_Reference_To (RTE (RE_Secondary_DT), Loc)))); - -- We either have a procedure or a wrapper. Set the primitive - -- operation kind for both cases and set the entry index for - -- wrappers. + -- Generate code to create the pointer to the dispatch table - if Ekind (Prim) = E_Procedure - and then Present (Prim_Als) - and then Is_Primitive_Wrapper (Prim_Als) - then - Prim_Pos := DT_Position (Prim); + -- Iface_DT_Ptr : Tag := Tag!(DT'Address); - -- Generate: - -- set_prim_op_kind (, , ); + -- According to the C++ ABI, the base of the vtable is located + -- after the following prologue: Offset_To_Top, and Typeinfo_Ptr. + -- Hence, move the pointer down to the real base of the vtable. - Append_To (Assignments, - Make_DT_Access_Action (Typ, - Action => - Set_Prim_Op_Kind, - Args => - New_List ( - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To (DT_Ptr, Loc)), - Make_Integer_Literal (Loc, Prim_Pos), - Prim_Op_Kind (Prim, Typ)))); + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => Iface_DT_Ptr, + Constant_Present => True, + Object_Definition => New_Reference_To (Generalized_Tag, Loc), + Expression => + Unchecked_Convert_To (Generalized_Tag, + Make_Op_Add (Loc, + Left_Opnd => + Unchecked_Convert_To (RTE (RE_Storage_Offset), + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (Iface_DT, Loc), + Attribute_Name => Name_Address)), + Right_Opnd => + Make_DT_Access_Action (Etype (AI_Tag), + DT_Prologue_Size, No_List))))); - -- The wrapped entity of the alias is an entry + -- Note: Offset_To_Top will be initialized by the init subprogram - if Ekind (Wrapped_Entity (Prim_Als)) = E_Entry then - -- Generate: - -- set_entry_index (, , ); + -- Set Access_Disp_Table field to be the dispatch table pointer - Append_To (Assignments, - Make_DT_Access_Action (Typ, - Action => - Set_Entry_Index, - Args => - New_List ( - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To (DT_Ptr, Loc)), - Make_Integer_Literal (Loc, Prim_Pos), - Make_Integer_Literal (Loc, Index)))); + if not (Present (Acc_Disp_Tables)) then + Acc_Disp_Tables := New_Elmt_List; + end if; - Index := Index + 1; - end if; - end if; + Append_Elmt (Iface_DT_Ptr, Acc_Disp_Tables); - Next_Elmt (Prim_Elmt); - end loop; + -- Step 1: Generate an Object Specific Data (OSD) table - return Assignments; - end Make_Disp_Select_Tables; + OSD := Make_Defining_Identifier (Loc, New_Internal_Name ('I')); + + -- Generate: + -- OSD : Ada.Tags.Object_Specific_Data + -- (Nb_Prims - Default_Prim_Op_Count); + -- where the constraint is used to allocate space for the + -- non-predefined primitive operations only. - --------------------------------- - -- Make_Disp_Timed_Select_Body -- - --------------------------------- + Append_To (Result, + Make_Object_Declaration (Loc, + Defining_Identifier => OSD, + Object_Definition => + Make_Subtype_Indication (Loc, + Subtype_Mark => New_Reference_To ( + RTE (RE_Object_Specific_Data), Loc), + Constraint => + Make_Index_Or_Discriminant_Constraint (Loc, + Constraints => New_List ( + Make_Integer_Literal (Loc, + Nb_Prim - Default_Prim_Op_Count)))))); - function Make_Disp_Timed_Select_Body - (Typ : Entity_Id) return Node_Id - is - Loc : constant Source_Ptr := Sloc (Typ); - Conc_Typ : Entity_Id := Empty; - Decls : constant List_Id := New_List; - DT_Ptr : Entity_Id; - DT_Ptr_Typ : Entity_Id; - Stmts : constant List_Id := New_List; + -- Generate: + -- Ada.Tags.Set_OSD (Iface_DT_Ptr, OSD); - begin - if Is_Concurrent_Record_Type (Typ) then - Conc_Typ := Corresponding_Concurrent_Type (Typ); - end if; + Append_To (Result, + Make_DT_Access_Action (Typ, + Action => Set_OSD, + Args => New_List ( + New_Reference_To (Iface_DT_Ptr, Loc), + Make_Attribute_Reference (Loc, + Prefix => New_Reference_To (OSD, Loc), + Attribute_Name => Name_Address)))); - -- Typ may be a derived type, climb the derivation chain in order to - -- find the root. + -- Offset table creation - DT_Ptr_Typ := Typ; - while Present (Parent_Subtype (DT_Ptr_Typ)) loop - DT_Ptr_Typ := Parent_Subtype (DT_Ptr_Typ); - end loop; + if not Is_Interface (Typ) + and then not Is_Abstract (Typ) + and then not Is_Controlled (Typ) + and then Implements_Interface + (Typ => Typ, + Kind => Any_Limited_Interface, + Check_Parent => True) + and then (Nb_Prim - Default_Prim_Op_Count) > 0 + then + declare + Prim : Entity_Id; + Prim_Alias : Entity_Id; + Prim_Elmt : Elmt_Id; - DT_Ptr := Node (First_Elmt (Access_Disp_Table (DT_Ptr_Typ))); + begin + -- Step 2: Populate the OSD table - if Present (Conc_Typ) then + Prim_Alias := Empty; + Prim_Elmt := First_Elmt (Primitive_Operations (Typ)); + while Present (Prim_Elmt) loop + Prim := Node (Prim_Elmt); - -- Generate: - -- I : Integer; + if Present (Abstract_Interface_Alias (Prim)) then + Prim_Alias := Abstract_Interface_Alias (Prim); + end if; - -- where I will be used to capture the entry index of the primitive - -- wrapper at position S. + if Present (Prim_Alias) + and then Present (First_Entity (Prim_Alias)) + and then Etype (First_Entity (Prim_Alias)) = Iface + then + -- Generate: + -- Ada.Tags.Set_Offset_Index ( + -- Iface_DT_Ptr, secondary_DT_Pos, primary_DT_pos); + + Append_To (Result, + Make_DT_Access_Action (Iface, + Action => Set_Offset_Index, + Args => New_List ( + New_Reference_To (Iface_DT_Ptr, Loc), + Make_Integer_Literal (Loc, DT_Position (Prim_Alias)), + Make_Integer_Literal (Loc, DT_Position (Prim))))); + + Prim_Alias := Empty; + end if; - Append_To (Decls, - Make_Object_Declaration (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uI), - Object_Definition => - New_Reference_To (Standard_Integer, Loc))); + Next_Elmt (Prim_Elmt); + end loop; + end; end if; -- Generate: - -- C := get_prim_op_kind (tag! (VP), S); + -- Set_Num_Prim_Ops (T'Tag, Nb_Prim) - -- if C = POK_Procedure - -- or else C = POK_Protected_Procedure - -- or else C = POK_Task_Procedure; - -- then - -- F := True; - -- return; - -- end if; + Append_To (Result, + Make_Procedure_Call_Statement (Loc, + Name => New_Reference_To (RTE (RE_Set_Num_Prim_Ops), Loc), + Parameter_Associations => New_List ( + Unchecked_Convert_To (RTE (RE_Tag), + New_Reference_To (Iface_DT_Ptr, Loc)), + Make_Integer_Literal (Loc, Nb_Prim)))); - SEU.Build_Common_Dispatching_Select_Statements (Loc, Typ, Stmts); + end Make_Secondary_DT; - if Present (Conc_Typ) then + ------------------------------------- + -- Make_Select_Specific_Data_Table -- + ------------------------------------- - -- Generate: - -- I := get_entry_index (tag! (VP), S); + function Make_Select_Specific_Data_Table + (Typ : Entity_Id) return List_Id + is + Assignments : constant List_Id := New_List; + Loc : constant Source_Ptr := Sloc (Typ); - -- where I is the entry index and S is the dispatch table slot. + Conc_Typ : Entity_Id; + Decls : List_Id; + DT_Ptr : Entity_Id; + Prim : Entity_Id; + Prim_Als : Entity_Id; + Prim_Elmt : Elmt_Id; + Prim_Pos : Uint; + Nb_Prim : Int := 0; - Append_To (Stmts, - Make_Assignment_Statement (Loc, - Name => - Make_Identifier (Loc, Name_uI), - Expression => - Make_DT_Access_Action (Typ, - Action => - Get_Entry_Index, - Args => - New_List ( - Unchecked_Convert_To (RTE (RE_Tag), - New_Reference_To (DT_Ptr, Loc)), - Make_Identifier (Loc, Name_uS))))); + type Examined_Array is array (Int range <>) of Boolean; - if Ekind (Conc_Typ) = E_Protected_Type then + function Find_Entry_Index (E : Entity_Id) return Uint; + -- Given an entry, find its index in the visible declarations of the + -- corresponding concurrent type of Typ. - -- Generate: - -- Timed_Protected_Entry_Call ( - -- T._object'access, - -- protected_entry_index! (I), - -- P, - -- D, - -- M, - -- F); + ---------------------- + -- Find_Entry_Index -- + ---------------------- - -- where T is the protected object, I is the entry index, P are - -- the wrapped parameters, D is the delay amount, M is the delay - -- mode and F is the status flag. + function Find_Entry_Index (E : Entity_Id) return Uint is + Index : Uint := Uint_1; + Subp_Decl : Entity_Id; - Append_To (Stmts, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Timed_Protected_Entry_Call), Loc), - Parameter_Associations => - New_List ( + begin + if Present (Decls) + and then not Is_Empty_List (Decls) + then + Subp_Decl := First (Decls); + while Present (Subp_Decl) loop + if Nkind (Subp_Decl) = N_Entry_Declaration then + if Defining_Identifier (Subp_Decl) = E then + return Index; + end if; - Make_Attribute_Reference (Loc, -- T._object'access - Attribute_Name => - Name_Unchecked_Access, - Prefix => - Make_Selected_Component (Loc, - Prefix => - Make_Identifier (Loc, Name_uT), - Selector_Name => - Make_Identifier (Loc, Name_uObject))), + Index := Index + 1; + end if; - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Reference_To (RTE (RE_Protected_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + Next (Subp_Decl); + end loop; + end if; - Make_Identifier (Loc, Name_uP), -- parameter block - Make_Identifier (Loc, Name_uD), -- delay - Make_Identifier (Loc, Name_uM), -- delay mode - Make_Identifier (Loc, Name_uF)))); -- status flag + return Uint_0; + end Find_Entry_Index; + + -- Start of processing for Make_Select_Specific_Data_Table + begin + DT_Ptr := Node (First_Elmt (Access_Disp_Table (Typ))); + + if Present (Corresponding_Concurrent_Type (Typ)) then + Conc_Typ := Corresponding_Concurrent_Type (Typ); + + if Ekind (Conc_Typ) = E_Protected_Type then + Decls := Visible_Declarations (Protected_Definition ( + Parent (Conc_Typ))); else pragma Assert (Ekind (Conc_Typ) = E_Task_Type); + Decls := Visible_Declarations (Task_Definition ( + Parent (Conc_Typ))); + end if; + end if; - -- Generate: - -- Timed_Task_Entry_Call ( - -- T._task_id, - -- task_entry_index! (I), - -- P, - -- D, - -- M, - -- F); + -- Count the non-predefined primitive operations - -- where T is the task object, I is the entry index, P are the - -- wrapped parameters, D is the delay amount, M is the delay - -- mode and F is the status flag. + Prim_Elmt := First_Elmt (Primitive_Operations (Typ)); + while Present (Prim_Elmt) loop + if not Is_Predefined_Dispatching_Operation (Node (Prim_Elmt)) then + Nb_Prim := Nb_Prim + 1; + end if; - Append_To (Stmts, - Make_Procedure_Call_Statement (Loc, - Name => - New_Reference_To (RTE (RE_Timed_Task_Entry_Call), Loc), - Parameter_Associations => - New_List ( + Next_Elmt (Prim_Elmt); + end loop; - Make_Selected_Component (Loc, -- T._task_id - Prefix => - Make_Identifier (Loc, Name_uT), - Selector_Name => - Make_Identifier (Loc, Name_uTask_Id)), + declare + Examined_Size : constant Int := Nb_Prim + Default_Prim_Op_Count; + Examined : Examined_Array (1 .. Examined_Size) := (others => False); - Make_Unchecked_Type_Conversion (Loc, -- entry index - Subtype_Mark => - New_Reference_To (RTE (RE_Task_Entry_Index), Loc), - Expression => - Make_Identifier (Loc, Name_uI)), + begin + Prim_Elmt := First_Elmt (Primitive_Operations (Typ)); + while Present (Prim_Elmt) loop + Prim := Node (Prim_Elmt); + Prim_Pos := DT_Position (Prim); - Make_Identifier (Loc, Name_uP), -- parameter block - Make_Identifier (Loc, Name_uD), -- delay - Make_Identifier (Loc, Name_uM), -- delay mode - Make_Identifier (Loc, Name_uF)))); -- status flag - end if; + pragma Assert (UI_To_Int (Prim_Pos) <= Examined_Size); - -- Null implementation for limited tagged types + if Examined (UI_To_Int (Prim_Pos)) then + goto Continue; + else + Examined (UI_To_Int (Prim_Pos)) := True; + end if; - else - Append_To (Stmts, - Make_Null_Statement (Loc)); - end if; + -- The current primitive overrides an interface-level subprogram - return - Make_Subprogram_Body (Loc, - Specification => - Make_Disp_Timed_Select_Spec (Typ), - Declarations => - Decls, - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, Stmts)); - end Make_Disp_Timed_Select_Body; + if Present (Abstract_Interface_Alias (Prim)) then - --------------------------------- - -- Make_Disp_Timed_Select_Spec -- - --------------------------------- + -- Set the primitive operation kind regardless of subprogram + -- type. Generate: + -- Ada.Tags.Set_Prim_Op_Kind (DT_Ptr, , ); - function Make_Disp_Timed_Select_Spec - (Typ : Entity_Id) return Node_Id - is - Loc : constant Source_Ptr := Sloc (Typ); - Params : constant List_Id := New_List; + Append_To (Assignments, + Make_DT_Access_Action (Typ, + Action => + Set_Prim_Op_Kind, + Args => + New_List ( + New_Reference_To (DT_Ptr, Loc), + Make_Integer_Literal (Loc, Prim_Pos), + Prim_Op_Kind (Prim, Typ)))); - begin - -- "T" - Object parameter - -- "S" - Primitive operation slot - -- "P" - Wrapped parameters - -- "D" - Delay - -- "M" - Delay Mode - -- "C" - Call kind - -- "F" - Status flag + -- Retrieve the root of the alias chain if one is present - SEU.Build_T (Loc, Typ, Params); - SEU.Build_S (Loc, Params); - SEU.Build_P (Loc, Params); + if Present (Alias (Prim)) then + Prim_Als := Prim; + while Present (Alias (Prim_Als)) loop + Prim_Als := Alias (Prim_Als); + end loop; + else + Prim_Als := Empty; + end if; - Append_To (Params, - Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uD), - Parameter_Type => - New_Reference_To (Standard_Duration, Loc))); + -- In the case of an entry wrapper, set the entry index - Append_To (Params, - Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Loc, Name_uM), - Parameter_Type => - New_Reference_To (Standard_Integer, Loc))); + if Ekind (Prim) = E_Procedure + and then Present (Prim_Als) + and then Is_Primitive_Wrapper (Prim_Als) + and then Ekind (Wrapped_Entity (Prim_Als)) = E_Entry + then - SEU.Build_C (Loc, Params); - SEU.Build_F (Loc, Params); + -- Generate: + -- Ada.Tags.Set_Entry_Index (DT_Ptr, , ); - return - Make_Procedure_Specification (Loc, - Defining_Unit_Name => - Make_Defining_Identifier (Loc, Name_uDisp_Timed_Select), - Parameter_Specifications => - Params); - end Make_Disp_Timed_Select_Spec; + Append_To (Assignments, + Make_DT_Access_Action (Typ, + Action => + Set_Entry_Index, + Args => + New_List ( + New_Reference_To (DT_Ptr, Loc), + Make_Integer_Literal (Loc, Prim_Pos), + Make_Integer_Literal (Loc, + Find_Entry_Index (Wrapped_Entity (Prim_Als)))))); + end if; + end if; + + <> + + Next_Elmt (Prim_Elmt); + end loop; + end; + + return Assignments; + end Make_Select_Specific_Data_Table; ----------------------------------- -- Original_View_In_Visible_Part -- @@ -3342,6 +3772,11 @@ package body Exp_Disp is if Ekind (Full_Typ) = E_Protected_Type then return New_Reference_To (RTE (RE_POK_Protected_Function), Loc); + -- Task function + + elsif Ekind (Full_Typ) = E_Task_Type then + return New_Reference_To (RTE (RE_POK_Task_Function), Loc); + -- Regular function else @@ -3638,7 +4073,10 @@ package body Exp_Disp is -- Ada 2005 (AI-251) - if Present (Abstract_Interface_Alias (Prim)) then + if Present (Abstract_Interface_Alias (Prim)) + and then Is_Interface (Scope (DTC_Entity + (Abstract_Interface_Alias (Prim)))) + then Set_DTC_Entity (Prim, Find_Interface_Tag (T => Typ, diff --git a/gcc/ada/exp_disp.ads b/gcc/ada/exp_disp.ads index 469ea79caf8..bdc1417d4c4 100644 --- a/gcc/ada/exp_disp.ads +++ b/gcc/ada/exp_disp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,8 +28,144 @@ -- dispatching expansion. with Types; use Types; + package Exp_Disp is + ------------------------------------- + -- Predefined primitive operations -- + ------------------------------------- + + -- The predefined primitive operations (PPOs) are subprograms generated + -- by GNAT for a particular tagged type. Their role is to provide support + -- for different Ada language features such as the attribute 'Size or + -- handling of dispatching triggers in select statements. PPOs are created + -- when a tagged type is expanded or frozen. These subprograms are later + -- collected and inserted into the dispatch table of a tagged type at + -- fixed positions. Some of the PPOs that manipulate data in tagged objects + -- require the generation of thunks. + + -- List of predefined primitive operations + + -- Leading underscores designate reserved names. Bracketed numerical + -- values represent dispatch table slot numbers. + + -- _Size (1) - implementation of the attribute 'Size for any tagged + -- type. Constructs of the form Prefix'Size are converted into + -- Prefix._Size. + + -- _Alignment (2) - implementation of the attribute 'Alignment for + -- any tagged type. Constructs of the form Prefix'Alignment are + -- converted into Prefix._Alignment. + + -- TSS_Stream_Read (3) - implementation of the stream attribute Read + -- for any tagged type. + + -- TSS_Stream_Write (4) - implementation of the stream attribute Write + -- for any tagged type. + + -- TSS_Stream_Input (5) - implementation of the stream attribute Input + -- for any tagged type. + + -- TSS_Stream_Output (6) - implementation of the stream attribute + -- Output for any tagged type. + + -- Op_Eq (7) - implementation of the equality operator for any non- + -- limited tagged type. + + -- _Assign (8) - implementation of the assignment operator for any + -- non-limited tagged type. + + -- TSS_Deep_Adjust (9) - implementation of the finalization operation + -- Adjust for any non-limited tagged type. + + -- TSS_Deep_Finalize (10) - implementation of the finalization + -- operation Finalize for any non-limited tagged type. + + -- _Disp_Asynchronous_Select (11) - used in the expansion of ATC with + -- dispatching triggers. Null implementation for limited interfaces, + -- full body generation for types that implement limited interfaces, + -- not generated for the rest of the cases. See Expand_N_Asynchronous_ + -- Select in Exp_Ch9 for more information. + + -- _Disp_Conditional_Select (12) - used in the expansion of conditional + -- selects with dispatching triggers. Null implementation for limited + -- interfaces, full body generation for types that implement limited + -- interfaces, not generated for the rest of the cases. See Expand_N_ + -- Conditional_Entry_Call in Exp_Ch9 for more information. + + -- _Disp_Get_Prim_Op_Kind (13) - helper routine used in the expansion + -- of ATC with dispatching triggers. Null implementation for limited + -- interfaces, full body generation for types that implement limited + -- interfaces, not generated for the rest of the cases. + + -- _Disp_Get_Task_Id (14) - helper routine used in the expansion of + -- Abort, attributes 'Callable and 'Terminated for task interface + -- class-wide types. Full body generation for task types, null + -- implementation for limited interfaces, not generated for the rest + -- of the cases. See Expand_N_Attribute_Reference in Exp_Attr and + -- Expand_N_Abort_Statement in Exp_Ch9 for more information. + + -- _Disp_Timed_Select (15) - used in the expansion of timed selects + -- with dispatching triggers. Null implementation for limited + -- interfaces, full body generation for types that implement limited + -- interfaces, not generated for the rest of the cases. See Expand_N_ + -- Timed_Entry_Call for more information. + + -- Lifecycle of predefined primitive operations + + -- The specifications and bodies of the PPOs are created by + -- Make_Predefined_Primitive_Specs and Predefined_Primitive_Bodies + -- in Exp_Ch3. The generated specifications are immediately analyzed, + -- while the bodies are left as freeze actions to the tagged type for + -- which they are created. + + -- PPOs are collected and added to the Primitive_Operations list of + -- a type by the regular analysis mechanism. + + -- PPOs are frozen in Predefined_Primitive_Freeze in Exp_Ch3. + + -- Thunks for PPOs are created in Freeze_Subprogram in Exp_Ch6, by a + -- call to Register_Predefined_DT_Entry, also in Exp_Ch6. + + -- Dispatch table positions of PPOs are set in Set_All_DT_Position in + -- Exp_Disp. + + -- Calls to PPOs procede as regular dispatching calls. If the PPO + -- has a thunk, a call procedes as a regular dispatching call with + -- a thunk. + + -- Guidelines for addition of new predefined primitive operations + + -- Update the value of constant Default_Prim_Op_Count in Exp_Disp.ads + -- to reflect the new number of PPOs. + + -- Update the value of constant Default_Prim_Op_Count in A-Tags.ads + -- to reflect the new number of PPOs. This value should be the same + -- as the one in Exp_Disp.ads. + + -- Introduce a new predefined name for the new PPO in Snames.ads and + -- Snames.adb. + + -- Categorize the new PPO name as predefined by adding an entry in + -- Is_Predefined_Dispatching_Operation in Exp_Util.adb. + + -- Reserve a dispatch table position for the new PPO by adding an entry + -- in Default_Prim_Op_Position in Exp_Disp.adb. + + -- Generate the specification of the new PPO in Make_Predefined_ + -- Primitive_Spec in Exp_Ch3.adb. The Is_Internal flag of the defining + -- identifier of the specification must be set to True. + + -- Generate the body of the new PPO in Predefined_Primitive_Bodies in + -- Exp_Ch3.adb. The Is_Internal flag of the defining identifier of the + -- specification must be set to True. + + -- If the new PPO requires a thunk, add an entry in Freeze_Subprogram + -- in Exp_Ch6.adb. + + -- When generating calls to a PPO, use Find_Prim_Op from Exp_Util.ads + -- to retrieve the entity of the operation directly. + -- Number of predefined primitive operations added by the Expander -- for a tagged type. If more predefined primitive operations are -- added, the following items must be changed: @@ -38,7 +174,7 @@ package Exp_Disp is -- Exp_Disp.Default_Prim_Op_Position - indirect use -- Exp_Disp.Set_All_DT_Position - direct use - Default_Prim_Op_Count : constant Int := 14; + Default_Prim_Op_Count : constant Int := 15; type DT_Access_Action is (CW_Membership, @@ -48,6 +184,7 @@ package Exp_Disp is Get_Access_Level, Get_Entry_Index, Get_External_Tag, + Get_Offset_Index, Get_Prim_Op_Address, Get_Prim_Op_Kind, Get_RC_Offset, @@ -60,10 +197,13 @@ package Exp_Disp is Set_Entry_Index, Set_Expanded_Name, Set_External_Tag, + Set_Offset_Index, + Set_OSD, Set_Prim_Op_Address, Set_Prim_Op_Kind, Set_RC_Offset, Set_Remotely_Callable, + Set_SSD, Set_TSD, TSD_Entry_Size, TSD_Prologue_Size); @@ -117,16 +257,6 @@ package Exp_Disp is -- Ada 2005 (AI-251): Initialize the entries associated with predefined -- primitives in all the secondary dispatch tables of Typ. - procedure Make_Abstract_Interface_DT - (AI_Tag : Entity_Id; - Acc_Disp_Tables : in out Elist_Id; - Result : out List_Id); - -- Ada 2005 (AI-251): Expand the declarations for the secondary Dispatch - -- Tables corresponding with an abstract interface. The reference to the - -- dispatch table is appended at the end of Acc_Disp_Tables; it will be - -- are later used to generate the corresponding initialization statement - -- (see Exp_Ch3.Build_Init_Procedure). - function Make_DT_Access_Action (Typ : Entity_Id; Action : DT_Access_Action; @@ -141,7 +271,8 @@ package Exp_Disp is function Make_Disp_Asynchronous_Select_Body (Typ : Entity_Id) return Node_Id; -- Ada 2005 (AI-345): Generate the body of the primitive operation of type - -- Typ used for dispatching in asynchronous selects. + -- Typ used for dispatching in asynchronous selects. Generate a null body + -- if Typ is an interface type. function Make_Disp_Asynchronous_Select_Spec (Typ : Entity_Id) return Node_Id; @@ -151,7 +282,8 @@ package Exp_Disp is function Make_Disp_Conditional_Select_Body (Typ : Entity_Id) return Node_Id; -- Ada 2005 (AI-345): Generate the body of the primitive operation of type - -- Typ used for dispatching in conditional selects. + -- Typ used for dispatching in conditional selects. Generate a null body + -- if Typ is an interface type. function Make_Disp_Conditional_Select_Spec (Typ : Entity_Id) return Node_Id; @@ -162,7 +294,7 @@ package Exp_Disp is (Typ : Entity_Id) return Node_Id; -- Ada 2005 (AI-345): Generate the body of the primitive operation of type -- Typ used for retrieving the callable entity kind during dispatching in - -- asynchronous selects. + -- asynchronous selects. Generate a null body if Typ is an interface type. function Make_Disp_Get_Prim_Op_Kind_Spec (Typ : Entity_Id) return Node_Id; @@ -170,23 +302,52 @@ package Exp_Disp is -- of the type Typ use for retrieving the callable entity kind during -- dispatching in asynchronous selects. - function Make_Disp_Select_Tables - (Typ : Entity_Id) return List_Id; - -- Ada 2005 (AI-345): Populate the two auxiliary tables in the TSD of Typ - -- used for dispatching in asynchronous, conditional and timed selects. - -- Generate code to set the primitive operation kinds and entry indices - -- of primitive operations and primitive wrappers. + function Make_Disp_Get_Task_Id_Body + (Typ : Entity_Id) return Node_Id; + -- Ada 2005 (AI-345): Generate the body of the primitive operation of type + -- Typ used for retrieving the _task_id field of a task interface class- + -- wide type. Generate a null body if Typ is an interface or a non-task + -- type. + + function Make_Disp_Get_Task_Id_Spec + (Typ : Entity_Id) return Node_Id; + -- Ada 2005 (AI-345): Generate the specification of the primitive operation + -- of type Typ used for retrieving the _task_id field of a task interface + -- class-wide type. function Make_Disp_Timed_Select_Body (Typ : Entity_Id) return Node_Id; -- Ada 2005 (AI-345): Generate the body of the primitive operation of type - -- Typ used for dispatching in timed selects. + -- Typ used for dispatching in timed selects. Generate a null body if Nul + -- is an interface type. function Make_Disp_Timed_Select_Spec (Typ : Entity_Id) return Node_Id; -- Ada 2005 (AI-345): Generate the specification of the primitive operation -- of type Typ used for dispatching in timed selects. + function Make_Select_Specific_Data_Table + (Typ : Entity_Id) return List_Id; + -- Ada 2005 (AI-345): Create and populate the auxiliary table in the TSD + -- of Typ used for dispatching in asynchronous, conditional and timed + -- selects. Generate code to set the primitive operation kinds and entry + -- indices of primitive operations and primitive wrappers. + + procedure Make_Secondary_DT + (Typ : Entity_Id; + Ancestor_Typ : Entity_Id; + Suffix_Index : Int; + Iface : Entity_Id; + AI_Tag : Entity_Id; + Acc_Disp_Tables : in out Elist_Id; + Result : out List_Id); + -- Ada 2005 (AI-251): Expand the declarations for the Secondary Dispatch + -- Table of Typ associated with Iface (each abstract interface implemented + -- by Typ has a secondary dispatch table). The arguments Typ, Ancestor_Typ + -- and Suffix_Index are used to generate an unique external name which + -- is added at the end of Acc_Disp_Tables; this external name will be + -- used later by the subprogram Exp_Ch3.Build_Init_Procedure. + procedure Set_All_DT_Position (Typ : Entity_Id); -- Set the DT_Position field for each primitive operation. In the CPP -- Class case check that no pragma CPP_Virtual is missing and that the diff --git a/gcc/ada/exp_dist.adb b/gcc/ada/exp_dist.adb index d0e016d6898..4be4c869c80 100644 --- a/gcc/ada/exp_dist.adb +++ b/gcc/ada/exp_dist.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -97,7 +97,7 @@ package body Exp_Dist is -- DSA expansion associates stubs to distributed object types using -- a hash table on entity ids. - function Hash (F : Name_Id) return Hash_Index; + function Hash (F : Name_Id) return Hash_Index; -- The generation of subprogram identifiers requires an overload counter -- to be associated with each remote subprogram names. These counters -- are maintained in a hash table on name ids. @@ -270,7 +270,8 @@ package body Exp_Dist is -- its constrained status. function Is_RACW_Controlling_Formal - (Parameter : Node_Id; Stub_Type : Entity_Id) return Boolean; + (Parameter : Node_Id; + Stub_Type : Entity_Id) return Boolean; -- Return True if the current parameter is a controlling formal argument -- of type Stub_Type or access to Stub_Type. @@ -10177,8 +10178,8 @@ package body Exp_Dist is -- Find_Numeric_Representation -- --------------------------------- - function Find_Numeric_Representation (Typ : Entity_Id) - return Entity_Id + function Find_Numeric_Representation + (Typ : Entity_Id) return Entity_Id is FST : constant Entity_Id := First_Subtype (Typ); P_Size : constant Uint := Esize (FST); @@ -10286,26 +10287,38 @@ package body Exp_Dist is Append_To (Indices, Make_Identifier (Loc, New_External_Name ('L', Depth))); - if Constrained then - Inner_Any := Any; - Inner_Counter := Counter; - else + if not Constrained or else Depth > 1 then Inner_Any := Make_Defining_Identifier (Loc, - New_External_Name ('A', Depth)); + New_External_Name ('A', Depth)); Set_Etype (Inner_Any, RTE (RE_Any)); + else + Inner_Any := Empty; + end if; - if Present (Counter) then - Inner_Counter := Make_Defining_Identifier (Loc, - New_External_Name ('J', Depth)); - else - Inner_Counter := Empty; - end if; + if Present (Counter) then + Inner_Counter := Make_Defining_Identifier (Loc, + New_External_Name ('J', Depth)); + else + Inner_Counter := Empty; end if; - Append_Array_Traversal (Inner_Stmts, - Any => Inner_Any, - Counter => Inner_Counter, - Depth => Depth + 1); + declare + Loop_Any : Node_Id := Inner_Any; + begin + + -- For the first dimension of a constrained array, we add + -- elements directly in the corresponding Any; there is no + -- intervening inner Any. + + if No (Loop_Any) then + Loop_Any := Any; + end if; + + Append_Array_Traversal (Inner_Stmts, + Any => Loop_Any, + Counter => Inner_Counter, + Depth => Depth + 1); + end; Loop_Stm := Make_Implicit_Loop_Statement (Subprogram, @@ -10326,11 +10339,6 @@ package body Exp_Dist is Make_Integer_Literal (Loc, Depth))))), Statements => Inner_Stmts); - if Constrained then - Append_To (Stmts, Loop_Stm); - return; - end if; - declare Decls : constant List_Id := New_List; Dimen_Stmts : constant List_Id := New_List; @@ -10344,13 +10352,22 @@ package body Exp_Dist is begin if Depth = 1 then - Inner_Any_TypeCode_Expr := - Make_Function_Call (Loc, - Name => - New_Occurrence_Of (RTE (RE_Any_Member_Type), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (Any, Loc), - Make_Integer_Literal (Loc, Ndim))); + if Constrained then + Inner_Any_TypeCode_Expr := + Make_Function_Call (Loc, + Name => + New_Occurrence_Of (RTE (RE_Get_TC), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (Any, Loc))); + else + Inner_Any_TypeCode_Expr := + Make_Function_Call (Loc, + Name => + New_Occurrence_Of (RTE (RE_Any_Member_Type), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (Any, Loc), + Make_Integer_Literal (Loc, Ndim))); + end if; else Inner_Any_TypeCode_Expr := Make_Function_Call (Loc, @@ -10368,18 +10385,21 @@ package body Exp_Dist is Object_Definition => New_Occurrence_Of ( RTE (RE_TypeCode), Loc), Expression => Inner_Any_TypeCode_Expr)); - Append_To (Decls, - Make_Object_Declaration (Loc, - Defining_Identifier => Inner_Any, - Object_Definition => - New_Occurrence_Of (RTE (RE_Any), Loc), - Expression => - Make_Function_Call (Loc, - Name => - New_Occurrence_Of ( - RTE (RE_Create_Any), Loc), - Parameter_Associations => New_List ( - New_Occurrence_Of (Inner_Any_TypeCode, Loc))))); + + if Present (Inner_Any) then + Append_To (Decls, + Make_Object_Declaration (Loc, + Defining_Identifier => Inner_Any, + Object_Definition => + New_Occurrence_Of (RTE (RE_Any), Loc), + Expression => + Make_Function_Call (Loc, + Name => + New_Occurrence_Of ( + RTE (RE_Create_Any), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of (Inner_Any_TypeCode, Loc))))); + end if; if Present (Inner_Counter) then Append_To (Decls, @@ -10391,17 +10411,19 @@ package body Exp_Dist is Make_Integer_Literal (Loc, 0))); end if; - Length_Node := Make_Attribute_Reference (Loc, - Prefix => New_Occurrence_Of (Arry, Loc), - Attribute_Name => Name_Length, - Expressions => - New_List (Make_Integer_Literal (Loc, Depth))); - Set_Etype (Length_Node, RTE (RE_Long_Unsigned)); - - Add_Process_Element (Dimen_Stmts, - Datum => Length_Node, - Any => Inner_Any, - Counter => Inner_Counter); + if not Constrained then + Length_Node := Make_Attribute_Reference (Loc, + Prefix => New_Occurrence_Of (Arry, Loc), + Attribute_Name => Name_Length, + Expressions => + New_List (Make_Integer_Literal (Loc, Depth))); + Set_Etype (Length_Node, RTE (RE_Long_Unsigned)); + + Add_Process_Element (Dimen_Stmts, + Datum => Length_Node, + Any => Inner_Any, + Counter => Inner_Counter); + end if; -- Loop_Stm does approrpriate processing for each element -- of Inner_Any. @@ -10410,10 +10432,12 @@ package body Exp_Dist is -- Link outer and inner any - Add_Process_Element (Dimen_Stmts, - Any => Any, - Counter => Counter, - Datum => New_Occurrence_Of (Inner_Any, Loc)); + if Present (Inner_Any) then + Add_Process_Element (Dimen_Stmts, + Any => Any, + Counter => Counter, + Datum => New_Occurrence_Of (Inner_Any, Loc)); + end if; Append_To (Stmts, Make_Block_Statement (Loc, @@ -10532,9 +10556,10 @@ package body Exp_Dist is ------------------- function Scope_Of_Spec (Spec : Node_Id) return Entity_Id is - Unit_Name : Node_Id := Defining_Unit_Name (Spec); + Unit_Name : Node_Id; begin + Unit_Name := Defining_Unit_Name (Spec); while Nkind (Unit_Name) /= N_Defining_Identifier loop Unit_Name := Defining_Identifier (Unit_Name); end loop; @@ -10757,7 +10782,8 @@ package body Exp_Dist is (Loc : Source_Ptr; Decls : List_Id; RCI_Locator : Entity_Id; - Controlling_Parameter : Entity_Id) return RPC_Target is + Controlling_Parameter : Entity_Id) return RPC_Target + is begin case Get_PCS_Name is when Name_PolyORB_DSA => @@ -10798,7 +10824,8 @@ package body Exp_Dist is Dynamically_Asynchronous : Boolean := False; Stub_Type : Entity_Id := Empty; RACW_Type : Entity_Id := Empty; - Parent_Primitive : Entity_Id := Empty) return Node_Id is + Parent_Primitive : Entity_Id := Empty) return Node_Id + is begin case Get_PCS_Name is when Name_PolyORB_DSA => diff --git a/gcc/ada/exp_fixd.adb b/gcc/ada/exp_fixd.adb index 511392d5f78..fa1f8403ac8 100644 --- a/gcc/ada/exp_fixd.adb +++ b/gcc/ada/exp_fixd.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -61,8 +61,7 @@ package body Exp_Fixd is (N : Node_Id; Typ : Entity_Id; Expr : Node_Id; - Rchk : Boolean := False) - return Node_Id; + Rchk : Boolean := False) return Node_Id; -- Build an expression that converts the expression Expr to type Typ, -- taking the source location from Sloc (N). If the conversions involve -- fixed-point types, then the Conversion_OK flag will be set so that the @@ -72,21 +71,19 @@ package body Exp_Fixd is function Build_Divide (N : Node_Id; L, R : Node_Id) return Node_Id; -- Builds an N_Op_Divide node from the given left and right operand - -- expressions, using the source location from Sloc (N). The operands - -- are either both Long_Long_Float, in which case Build_Divide differs - -- from Make_Op_Divide only in that the Etype of the resulting node is - -- set (to Long_Long_Float), or they can be integer types. In this case - -- the integer types need not be the same, and Build_Divide converts - -- the operand with the smaller sized type to match the type of the - -- other operand and sets this as the result type. The Rounded_Result - -- flag of the result in this case is set from the Rounded_Result flag - -- of node N. On return, the resulting node is analyzed, and has its - -- Etype set. + -- expressions, using the source location from Sloc (N). The operands are + -- either both Universal_Real, in which case Build_Divide differs from + -- Make_Op_Divide only in that the Etype of the resulting node is set (to + -- Universal_Real), or they can be integer types. In this case the integer + -- types need not be the same, and Build_Divide converts the operand with + -- the smaller sized type to match the type of the other operand and sets + -- this as the result type. The Rounded_Result flag of the result in this + -- case is set from the Rounded_Result flag of node N. On return, the + -- resulting node is analyzed, and has its Etype set. function Build_Double_Divide (N : Node_Id; - X, Y, Z : Node_Id) - return Node_Id; + X, Y, Z : Node_Id) return Node_Id; -- Returns a node corresponding to the value X/(Y*Z) using the source -- location from Sloc (N). The division is rounded if the Rounded_Result -- flag of N is set. The integer types of X, Y, Z may be different. On @@ -100,37 +97,35 @@ package body Exp_Fixd is -- Generates a sequence of code for determining the quotient and remainder -- of the division X/(Y*Z), using the source location from Sloc (N). -- Entities of appropriate types are allocated for the quotient and - -- remainder and returned in Qnn and Rnn. The result is rounded if - -- the Rounded_Result flag of N is set. The Etype fields of Qnn and Rnn - -- are appropriately set on return. + -- remainder and returned in Qnn and Rnn. The result is rounded if the + -- Rounded_Result flag of N is set. The Etype fields of Qnn and Rnn are + -- appropriately set on return. function Build_Multiply (N : Node_Id; L, R : Node_Id) return Node_Id; -- Builds an N_Op_Multiply node from the given left and right operand - -- expressions, using the source location from Sloc (N). The operands - -- are either both Long_Long_Float, in which case Build_Divide differs - -- from Make_Op_Multiply only in that the Etype of the resulting node is - -- set (to Long_Long_Float), or they can be integer types. In this case - -- the integer types need not be the same, and Build_Multiply chooses - -- a type long enough to hold the product (i.e. twice the size of the - -- longer of the two operand types), and both operands are converted - -- to this type. The Etype of the result is also set to this value. - -- However, the result can never overflow Integer_64, so this is the - -- largest type that is ever generated. On return, the resulting node - -- is analyzed and has its Etype set. + -- expressions, using the source location from Sloc (N). The operands are + -- either both Universal_Real, in which case Build_Divide differs from + -- Make_Op_Multiply only in that the Etype of the resulting node is set (to + -- Universal_Real), or they can be integer types. In this case the integer + -- types need not be the same, and Build_Multiply chooses a type long + -- enough to hold the product (i.e. twice the size of the longer of the two + -- operand types), and both operands are converted to this type. The Etype + -- of the result is also set to this value. However, the result can never + -- overflow Integer_64, so this is the largest type that is ever generated. + -- On return, the resulting node is analyzed and has its Etype set. function Build_Rem (N : Node_Id; L, R : Node_Id) return Node_Id; -- Builds an N_Op_Rem node from the given left and right operand - -- expressions, using the source location from Sloc (N). The operands - -- are both integer types, which need not be the same. Build_Rem - -- converts the operand with the smaller sized type to match the type - -- of the other operand and sets this as the result type. The result - -- is never rounded (rem operations cannot be rounded in any case!) - -- On return, the resulting node is analyzed and has its Etype set. + -- expressions, using the source location from Sloc (N). The operands are + -- both integer types, which need not be the same. Build_Rem converts the + -- operand with the smaller sized type to match the type of the other + -- operand and sets this as the result type. The result is never rounded + -- (rem operations cannot be rounded in any case!) On return, the resulting + -- node is analyzed and has its Etype set. function Build_Scaled_Divide (N : Node_Id; - X, Y, Z : Node_Id) - return Node_Id; + X, Y, Z : Node_Id) return Node_Id; -- Returns a node corresponding to the value X*Y/Z using the source -- location from Sloc (N). The division is rounded if the Rounded_Result -- flag of N is set. The integer types of X, Y, Z may be different. On @@ -183,10 +178,10 @@ package body Exp_Fixd is function Fpt_Value (N : Node_Id) return Node_Id; -- Given an operand of fixed-point operation, return an expression that - -- represents the corresponding Long_Long_Float value. The expression + -- represents the corresponding Universal_Real value. The expression -- can be of integer type, floating-point type, or fixed-point type. -- The expression returned is neither analyzed and resolved. The Etype - -- of the result is properly set (to Long_Long_Float). + -- of the result is properly set (to Universal_Real). function Integer_Literal (N : Node_Id; V : Uint) return Node_Id; -- Given a non-negative universal integer value, build a typed integer @@ -198,8 +193,8 @@ package body Exp_Fixd is function Real_Literal (N : Node_Id; V : Ureal) return Node_Id; -- Build a real literal node from the given value, the Etype of the - -- returned node is set to Long_Long_Float, since all floating-point - -- arithmetic operations that we construct use Long_Long_Float + -- returned node is set to Universal_Real, since all floating-point + -- arithmetic operations that we construct use Universal_Real function Rounded_Result_Set (N : Node_Id) return Boolean; -- Returns True if N is a node that contains the Rounded_Result flag @@ -224,8 +219,7 @@ package body Exp_Fixd is (N : Node_Id; Typ : Entity_Id; Expr : Node_Id; - Rchk : Boolean := False) - return Node_Id + Rchk : Boolean := False) return Node_Id is Loc : constant Source_Ptr := Sloc (N); Result : Node_Id; @@ -296,7 +290,6 @@ package body Exp_Fixd is Set_Etype (Result, Typ); return Result; - end Build_Conversion; ------------------ @@ -314,11 +307,11 @@ package body Exp_Fixd is -- Deal with floating-point case first if Is_Floating_Point_Type (Left_Type) then - pragma Assert (Left_Type = Standard_Long_Long_Float); - pragma Assert (Right_Type = Standard_Long_Long_Float); + pragma Assert (Left_Type = Universal_Real); + pragma Assert (Right_Type = Universal_Real); Rnode := Make_Op_Divide (Loc, L, R); - Result_Type := Standard_Long_Long_Float; + Result_Type := Universal_Real; -- Integer and fixed-point cases @@ -384,7 +377,6 @@ package body Exp_Fixd is end if; return Rnode; - end Build_Divide; ------------------------- @@ -393,8 +385,7 @@ package body Exp_Fixd is function Build_Double_Divide (N : Node_Id; - X, Y, Z : Node_Id) - return Node_Id + X, Y, Z : Node_Id) return Node_Id is Y_Size : constant Int := UI_To_Int (Esize (Etype (Y))); Z_Size : constant Int := UI_To_Int (Esize (Etype (Z))); @@ -582,7 +573,6 @@ package body Exp_Fixd is New_Occurrence_Of (Rnn, Loc), New_Occurrence_Of (Rnd, Loc)))); end if; - end Build_Double_Divide_Code; -------------------- @@ -603,10 +593,10 @@ package body Exp_Fixd is -- Deal with floating-point case first if Is_Floating_Point_Type (Left_Type) then - pragma Assert (Left_Type = Standard_Long_Long_Float); - pragma Assert (Right_Type = Standard_Long_Long_Float); + pragma Assert (Left_Type = Universal_Real); + pragma Assert (Right_Type = Universal_Real); - Result_Type := Standard_Long_Long_Float; + Result_Type := Universal_Real; Rnode := Make_Op_Multiply (Loc, L, R); -- Integer and fixed-point cases @@ -782,8 +772,7 @@ package body Exp_Fixd is function Build_Scaled_Divide (N : Node_Id; - X, Y, Z : Node_Id) - return Node_Id + X, Y, Z : Node_Id) return Node_Id is X_Size : constant Int := UI_To_Int (Esize (Etype (X))); Y_Size : constant Int := UI_To_Int (Esize (Etype (Y))); @@ -1060,7 +1049,6 @@ package body Exp_Fixd is Build_Multiply (N, Build_Divide (N, Fpt_Value (Left), Fpt_Value (Right)), Real_Literal (N, Frac))); - end Do_Divide_Fixed_Fixed; ------------------------------- @@ -1176,7 +1164,6 @@ package body Exp_Fixd is Set_Result (N, Build_Multiply (N, Fpt_Value (Left), Real_Literal (N, Frac))); - end Do_Divide_Fixed_Universal; ------------------------------- @@ -1295,7 +1282,6 @@ package body Exp_Fixd is Set_Result (N, Build_Divide (N, Real_Literal (N, Frac), Fpt_Value (Right))); - end Do_Divide_Universal_Fixed; ----------------------------- @@ -1380,7 +1366,6 @@ package body Exp_Fixd is Build_Multiply (N, Build_Multiply (N, Fpt_Value (Left), Fpt_Value (Right)), Real_Literal (N, Frac))); - end Do_Multiply_Fixed_Fixed; --------------------------------- @@ -1420,7 +1405,7 @@ package body Exp_Fixd is -- If denominator = 1, then for K = 1, the small ratio is an integer, and -- this is clearly the minimum K case, so set - -- K = 1, Right_Small = Lit_Value. + -- K = 1, Right_Small = Lit_Value -- If denominator > 1, then set K to the numerator of the fraction, so -- that the resulting small ratio is the reciprocal of the integer (the @@ -1498,7 +1483,6 @@ package body Exp_Fixd is Set_Result (N, Build_Multiply (N, Fpt_Value (Left), Real_Literal (N, Frac))); - end Do_Multiply_Fixed_Universal; --------------------------------- @@ -1553,7 +1537,6 @@ package body Exp_Fixd is Ratio_Den := Norm_Den (Small_Ratio); if Ratio_Den = 1 then - if Ratio_Num = 1 then Set_Result (N, Expr); return; @@ -1585,7 +1568,6 @@ package body Exp_Fixd is Fpt_Value (Expr), Real_Literal (N, Small_Ratio)), Rng_Check); - end Expand_Convert_Fixed_To_Fixed; ----------------------------------- @@ -1594,7 +1576,7 @@ package body Exp_Fixd is -- If the small of the fixed type is 1.0, then we simply convert the -- integer value directly to the target floating-point type, otherwise - -- we first have to multiply by the small, in Long_Long_Float, and then + -- we first have to multiply by the small, in Universal_Real, and then -- convert the result to the target floating-point type. procedure Expand_Convert_Fixed_To_Float (N : Node_Id) is @@ -1679,7 +1661,6 @@ package body Exp_Fixd is Fpt_Value (Expr), Real_Literal (N, Small)), Rng_Check); - end Expand_Convert_Fixed_To_Integer; ----------------------------------- @@ -1776,7 +1757,6 @@ package body Exp_Fixd is Fpt_Value (Expr), Real_Literal (N, Ureal_1 / Small)), Rng_Check); - end Expand_Convert_Integer_To_Fixed; -------------------------------- @@ -1826,7 +1806,7 @@ package body Exp_Fixd is -- division or multiplication by the appropriate power of 10. procedure Expand_Decimal_Divide_Call (N : Node_Id) is - Loc : constant Source_Ptr := Sloc (N); + Loc : constant Source_Ptr := Sloc (N); Dividend : Node_Id := First_Actual (N); Divisor : Node_Id := Next_Actual (Dividend); @@ -1971,7 +1951,6 @@ package body Exp_Fixd is Statements => Stmts))); Analyze (N); - end Expand_Decimal_Divide_Call; ----------------------------------------------- @@ -1999,14 +1978,13 @@ package body Exp_Fixd is else Do_Divide_Fixed_Fixed (N); end if; - end Expand_Divide_Fixed_By_Fixed_Giving_Fixed; ----------------------------------------------- -- Expand_Divide_Fixed_By_Fixed_Giving_Float -- ----------------------------------------------- - -- The division is done in long_long_float, and the result is multiplied + -- The division is done in Universal_Real, and the result is multiplied -- by the small ratio, which is Small (Right) / Small (Left). Special -- treatment is required for universal operands, which represent their -- own value and do not require conversion. @@ -2065,7 +2043,6 @@ package body Exp_Fixd is Real_Literal (N, Small_Value (Left_Type) / Small_Value (Right_Type)))); end if; - end Expand_Divide_Fixed_By_Fixed_Giving_Float; ------------------------------------------------- @@ -2075,18 +2052,14 @@ package body Exp_Fixd is procedure Expand_Divide_Fixed_By_Fixed_Giving_Integer (N : Node_Id) is Left : constant Node_Id := Left_Opnd (N); Right : constant Node_Id := Right_Opnd (N); - begin if Etype (Left) = Universal_Real then Do_Divide_Universal_Fixed (N); - elsif Etype (Right) = Universal_Real then Do_Divide_Fixed_Universal (N); - else Do_Divide_Fixed_Fixed (N); end if; - end Expand_Divide_Fixed_By_Fixed_Giving_Integer; ------------------------------------------------- @@ -2099,7 +2072,6 @@ package body Exp_Fixd is procedure Expand_Divide_Fixed_By_Integer_Giving_Fixed (N : Node_Id) is Left : constant Node_Id := Left_Opnd (N); Right : constant Node_Id := Right_Opnd (N); - begin Set_Result (N, Build_Divide (N, Left, Right)); end Expand_Divide_Fixed_By_Integer_Giving_Fixed; @@ -2118,9 +2090,12 @@ package body Exp_Fixd is -- as a fixed * fixed multiplication, and convert the argument to -- the target fixed type. - procedure Rewrite_Non_Static_Universal (Opnd : Node_Id) is - Loc : constant Source_Ptr := Sloc (N); + ---------------------------------- + -- Rewrite_Non_Static_Universal -- + ---------------------------------- + procedure Rewrite_Non_Static_Universal (Opnd : Node_Id) is + Loc : constant Source_Ptr := Sloc (N); begin Rewrite (Opnd, Make_Type_Conversion (Loc, @@ -2129,6 +2104,8 @@ package body Exp_Fixd is Analyze_And_Resolve (Opnd, Etype (N)); end Rewrite_Non_Static_Universal; + -- Start of processing for Expand_Multiply_Fixed_By_Fixed_Giving_Fixed + begin -- Suppress expansion of a fixed-by-fixed multiplication if the -- operation is supported directly by the target. @@ -2158,14 +2135,13 @@ package body Exp_Fixd is else Do_Multiply_Fixed_Fixed (N); end if; - end Expand_Multiply_Fixed_By_Fixed_Giving_Fixed; ------------------------------------------------- -- Expand_Multiply_Fixed_By_Fixed_Giving_Float -- ------------------------------------------------- - -- The multiply is done in long_long_float, and the result is multiplied + -- The multiply is done in Universal_Real, and the result is multiplied -- by the adjustment for the smalls which is Small (Right) * Small (Left). -- Special treatment is required for universal operands. @@ -2220,7 +2196,6 @@ package body Exp_Fixd is Real_Literal (N, Small_Value (Right_Type) * Small_Value (Left_Type)))); end if; - end Expand_Multiply_Fixed_By_Fixed_Giving_Float; --------------------------------------------------- @@ -2230,18 +2205,14 @@ package body Exp_Fixd is procedure Expand_Multiply_Fixed_By_Fixed_Giving_Integer (N : Node_Id) is Left : constant Node_Id := Left_Opnd (N); Right : constant Node_Id := Right_Opnd (N); - begin if Etype (Left) = Universal_Real then Do_Multiply_Fixed_Universal (N, Right, Left); - elsif Etype (Right) = Universal_Real then Do_Multiply_Fixed_Universal (N, Left, Right); - else Do_Multiply_Fixed_Fixed (N); end if; - end Expand_Multiply_Fixed_By_Fixed_Giving_Integer; --------------------------------------------------- @@ -2281,17 +2252,13 @@ package body Exp_Fixd is if Is_Integer_Type (Typ) or else Is_Floating_Point_Type (Typ) then - return - Build_Conversion - (N, Standard_Long_Long_Float, N); + return Build_Conversion (N, Universal_Real, N); -- Fixed-point case, must get integer value first else - return - Build_Conversion (N, Standard_Long_Long_Float, N); + return Build_Conversion (N, Universal_Real, N); end if; - end Fpt_Value; --------------------- @@ -2348,7 +2315,7 @@ package body Exp_Fixd is -- Set type of result in case used elsewhere (see note at start) - Set_Etype (L, Standard_Long_Long_Float); + Set_Etype (L, Universal_Real); return L; end Real_Literal; @@ -2358,7 +2325,6 @@ package body Exp_Fixd is function Rounded_Result_Set (N : Node_Id) return Boolean is K : constant Node_Kind := Nkind (N); - begin if (K = N_Type_Conversion or else K = N_Op_Divide or else @@ -2399,7 +2365,6 @@ package body Exp_Fixd is Rewrite (N, Cnode); Analyze_And_Resolve (N, Result_Type); - end Set_Result; end Exp_Fixd; diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb index 6e25788cfd5..1fdbced6814 100644 --- a/gcc/ada/exp_imgv.adb +++ b/gcc/ada/exp_imgv.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -831,6 +831,22 @@ package body Exp_Imgv is else pragma Assert (Is_Enumeration_Type (Rtyp)); + if Discard_Names (Rtyp) then + + -- This is a configurable run-time, or else a restriction is in + -- effect. In either case the attribute cannot be supported. Force + -- a load error from Rtsfind to generate an appropriate message, + -- as is done with other ZFP violations. + + declare + pragma Warnings (Off); -- since Discard is unreferenced + Discard : constant Entity_Id := RTE (RE_Null); + pragma Warnings (On); + begin + return; + end; + end if; + Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp))); case Attr is diff --git a/gcc/ada/exp_imgv.ads b/gcc/ada/exp_imgv.ads index f768872725d..54d4528d3d2 100644 --- a/gcc/ada/exp_imgv.ads +++ b/gcc/ada/exp_imgv.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_intr.adb b/gcc/ada/exp_intr.adb index 5a402fdeaad..6eb9bedd9b1 100644 --- a/gcc/ada/exp_intr.adb +++ b/gcc/ada/exp_intr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ with Exp_Code; use Exp_Code; with Exp_Disp; use Exp_Disp; with Exp_Fixd; use Exp_Fixd; with Exp_Util; use Exp_Util; -with Itypes; use Itypes; +with Freeze; use Freeze; with Namet; use Namet; with Nmake; use Nmake; with Nlists; use Nlists; @@ -133,13 +133,25 @@ package body Exp_Intr is Param_Arg : constant Node_Id := Next_Actual (Tag_Arg); Subp_Decl : constant Node_Id := Parent (Parent (Entity (Name (N)))); Inst_Pkg : constant Node_Id := Parent (Subp_Decl); - Act_Rename : constant Node_Id := - Next (Next (First (Visible_Declarations (Inst_Pkg)))); - Act_Constr : constant Entity_Id := Entity (Name (Act_Rename)); - Result_Typ : constant Entity_Id := Class_Wide_Type (Etype (Act_Constr)); + Act_Rename : Node_Id; + Act_Constr : Entity_Id; + Result_Typ : Entity_Id; Cnstr_Call : Node_Id; begin + -- The subprogram is the third actual in the instantiation, and is + -- retrieved from the corresponding renaming declaration. However, + -- freeze nodes may appear before, so we retrieve the declaration + -- with an explicit loop. + + Act_Rename := First (Visible_Declarations (Inst_Pkg)); + while Nkind (Act_Rename) /= N_Subprogram_Renaming_Declaration loop + Next (Act_Rename); + end loop; + + Act_Constr := Entity (Name (Act_Rename)); + Result_Typ := Class_Wide_Type (Etype (Act_Constr)); + -- Create the call to the actual Constructor function Cnstr_Call := @@ -829,6 +841,82 @@ package body Exp_Intr is Append_To (Stmts, Free_Node); Set_Storage_Pool (Free_Node, Pool); + -- Deal with storage pool + + if Present (Pool) then + + -- Freeing the secondary stack is meaningless + + if Is_RTE (Pool, RE_SS_Pool) then + null; + + elsif Is_Class_Wide_Type (Etype (Pool)) then + + -- Case of a class-wide pool type: make a dispatching call + -- to Deallocate through the class-wide Deallocate_Any. + + Set_Procedure_To_Call (Free_Node, + RTE (RE_Deallocate_Any)); + + else + -- Case of a specific pool type: make a statically bound call + + Set_Procedure_To_Call (Free_Node, + Find_Prim_Op (Etype (Pool), Name_Deallocate)); + end if; + end if; + + if Present (Procedure_To_Call (Free_Node)) then + + -- For all cases of a Deallocate call, the back-end needs to be + -- able to compute the size of the object being freed. This may + -- require some adjustments for objects of dynamic size. + -- + -- If the type is class wide, we generate an implicit type with the + -- right dynamic size, so that the deallocate call gets the right + -- size parameter computed by GIGI. Same for an access to + -- unconstrained packed array. + + if Is_Class_Wide_Type (Desig_T) + or else + (Is_Array_Type (Desig_T) + and then not Is_Constrained (Desig_T) + and then Is_Packed (Desig_T)) + then + declare + Deref : constant Node_Id := + Make_Explicit_Dereference (Loc, + Duplicate_Subexpr_No_Checks (Arg)); + D_Subtyp : Node_Id; + D_Type : Entity_Id; + + begin + Set_Etype (Deref, Typ); + Set_Parent (Deref, Free_Node); + D_Subtyp := Make_Subtype_From_Expr (Deref, Desig_T); + + if Nkind (D_Subtyp) in N_Has_Entity then + D_Type := Entity (D_Subtyp); + + else + D_Type := Make_Defining_Identifier (Loc, + New_Internal_Name ('A')); + Insert_Action (N, + Make_Subtype_Declaration (Loc, + Defining_Identifier => D_Type, + Subtype_Indication => D_Subtyp)); + Freeze_Itype (D_Type, N); + + end if; + + Set_Actual_Designated_Subtype (Free_Node, D_Type); + end; + + end if; + end if; + + Set_Expression (Free_Node, Free_Arg); + -- Make implicit if statement. We omit this if we are the then part -- of a test of the form: @@ -881,62 +969,27 @@ package body Exp_Intr is end if; end; - -- Deal with storage pool - - if Present (Pool) then - - -- Freeing the secondary stack is meaningless - - if Is_RTE (Pool, RE_SS_Pool) then - null; + -- Only remaining step is to set result to null, or generate a + -- raise of constraint error if the target object is "not null". - elsif Is_Class_Wide_Type (Etype (Pool)) then - Set_Procedure_To_Call (Free_Node, - RTE (RE_Deallocate_Any)); - else - Set_Procedure_To_Call (Free_Node, - Find_Prim_Op (Etype (Pool), Name_Deallocate)); + if Can_Never_Be_Null (Etype (Arg)) then + Append_To (Stmts, + Make_Raise_Constraint_Error (Loc, + Reason => CE_Access_Check_Failed)); - -- If the type is class wide, we generate an implicit type - -- with the right dynamic size, so that the deallocate call - -- gets the right size parameter computed by gigi - - if Is_Class_Wide_Type (Desig_T) then - declare - Acc_Type : constant Entity_Id := - Create_Itype (E_Access_Type, N); - Deref : constant Node_Id := - Make_Explicit_Dereference (Loc, - Duplicate_Subexpr_No_Checks (Arg)); - - begin - Set_Etype (Deref, Typ); - Set_Parent (Deref, Free_Node); - - Set_Etype (Acc_Type, Acc_Type); - Set_Size_Info (Acc_Type, Typ); - Set_Directly_Designated_Type - (Acc_Type, Entity (Make_Subtype_From_Expr - (Deref, Desig_T))); - - Free_Arg := Unchecked_Convert_To (Acc_Type, Free_Arg); - end; - end if; - end if; + else + declare + Lhs : constant Node_Id := Duplicate_Subexpr_No_Checks (Arg); + begin + Set_Assignment_OK (Lhs); + Append_To (Stmts, + Make_Assignment_Statement (Loc, + Name => Lhs, + Expression => Make_Null (Loc))); + end; end if; - Set_Expression (Free_Node, Free_Arg); - - declare - Lhs : constant Node_Id := Duplicate_Subexpr_No_Checks (Arg); - - begin - Set_Assignment_OK (Lhs); - Append_To (Stmts, - Make_Assignment_Statement (Loc, - Name => Lhs, - Expression => Make_Null (Loc))); - end; + -- Rewrite the call Rewrite (N, Gen_Code); Analyze (N); diff --git a/gcc/ada/exp_intr.ads b/gcc/ada/exp_intr.ads index 0d0094924bf..81821235872 100644 --- a/gcc/ada/exp_intr.ads +++ b/gcc/ada/exp_intr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index d27915db961..5b0a10a2bc6 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb index 9956ab90104..8c9bf59b340 100644 --- a/gcc/ada/exp_prag.adb +++ b/gcc/ada/exp_prag.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_prag.ads b/gcc/ada/exp_prag.ads index b3722474a93..6ab342df6c6 100644 --- a/gcc/ada/exp_prag.ads +++ b/gcc/ada/exp_prag.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_smem.adb b/gcc/ada/exp_smem.adb index 32aea3fcb18..746025d8794 100644 --- a/gcc/ada/exp_smem.adb +++ b/gcc/ada/exp_smem.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_strm.adb b/gcc/ada/exp_strm.adb index f6e5d5c61ad..84b321e924c 100644 --- a/gcc/ada/exp_strm.adb +++ b/gcc/ada/exp_strm.adb @@ -1447,11 +1447,15 @@ package body Exp_Strm is Profile : List_Id; begin + -- (Ada 2005: AI-441): Set the null-excluding attribute because it has + -- no semantic meaning in Ada 95 but it is a requirement in Ada2005. + Profile := New_List ( Make_Parameter_Specification (Loc, Defining_Identifier => Make_Defining_Identifier (Loc, Name_S), Parameter_Type => Make_Access_Definition (Loc, + Null_Exclusion_Present => True, Subtype_Mark => New_Reference_To ( Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc)))); @@ -1483,6 +1487,9 @@ package body Exp_Strm is begin -- Construct function specification + -- (Ada 2005: AI-441): Set the null-excluding attribute because it has + -- no semantic meaning in Ada 95 but it is a requirement in Ada2005. + Spec := Make_Function_Specification (Loc, Defining_Unit_Name => Fnam, @@ -1492,6 +1499,7 @@ package body Exp_Strm is Defining_Identifier => Make_Defining_Identifier (Loc, Name_S), Parameter_Type => Make_Access_Definition (Loc, + Null_Exclusion_Present => True, Subtype_Mark => New_Reference_To ( Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc)))), @@ -1523,6 +1531,9 @@ package body Exp_Strm is begin -- Construct procedure specification + -- (Ada 2005: AI-441): Set the null-excluding attribute because it has + -- no semantic meaning in Ada 95 but it is a requirement in Ada2005. + Spec := Make_Procedure_Specification (Loc, Defining_Unit_Name => Pnam, @@ -1532,6 +1543,7 @@ package body Exp_Strm is Defining_Identifier => Make_Defining_Identifier (Loc, Name_S), Parameter_Type => Make_Access_Definition (Loc, + Null_Exclusion_Present => True, Subtype_Mark => New_Reference_To ( Class_Wide_Type (RTE (RE_Root_Stream_Type)), Loc))), diff --git a/gcc/ada/exp_tss.adb b/gcc/ada/exp_tss.adb index f6c0e418b7c..78f975d3455 100644 --- a/gcc/ada/exp_tss.adb +++ b/gcc/ada/exp_tss.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_tss.ads b/gcc/ada/exp_tss.ads index cdacb322346..311997d4c99 100644 --- a/gcc/ada/exp_tss.ads +++ b/gcc/ada/exp_tss.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index ebef01d303b..c6924e97cb6 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1275,6 +1275,16 @@ package body Exp_Util is then null; + -- Nothing to be done for derived types with unknown discriminants if + -- the parent type also has unknown discriminants. + + elsif Is_Record_Type (Unc_Type) + and then not Is_Class_Wide_Type (Unc_Type) + and then Has_Unknown_Discriminants (Unc_Type) + and then Has_Unknown_Discriminants (Underlying_Type (Unc_Type)) + then + null; + -- Nothing to be done if the type of the expression is limited, because -- in this case the expression cannot be copied, and its use can only -- be by reference and there is no need for the actual subtype. @@ -1289,8 +1299,147 @@ package body Exp_Util is end if; end Expand_Subtype_From_Expr; + -------------------------------- + -- Find_Implemented_Interface -- + -------------------------------- + + -- Given the following code (XXX denotes irrelevant value): + + -- type Limd_Iface is limited interface; + -- type Prot_Iface is protected interface; + -- type Sync_Iface is synchronized interface; + + -- type Parent_Subtype is new Limd_Iface and Sync_Iface with ... + -- type Child_Subtype is new Parent_Subtype and Prot_Iface with ... + + -- The following calls will return the following values: + + -- Find_Implemented_Interface + -- (Child_Subtype, Synchronized_Interface, False) -> Empty + + -- Find_Implemented_Interface + -- (Child_Subtype, Synchronized_Interface, True) -> Sync_Iface + + -- Find_Implemented_Interface + -- (Child_Subtype, Any_Synchronized_Interface, XXX) -> Prot_Iface + + -- Find_Implemented_Interface + -- (Child_Subtype, Any_Limited_Interface, XXX) -> Prot_Iface + + function Find_Implemented_Interface + (Typ : Entity_Id; + Kind : Interface_Kind; + Check_Parent : Boolean := False) return Entity_Id + is + Iface_Elmt : Elmt_Id; + + function Interface_In_Kind + (I : Entity_Id; + Kind : Interface_Kind) return Boolean; + -- Determine whether an interface falls into a specified kind + + ----------------------- + -- Interface_In_Kind -- + ----------------------- + + function Interface_In_Kind + (I : Entity_Id; + Kind : Interface_Kind) return Boolean is + begin + if Is_Limited_Interface (I) + and then (Kind = Any_Interface + or else Kind = Any_Limited_Interface + or else Kind = Limited_Interface) + then + return True; + + elsif Is_Protected_Interface (I) + and then (Kind = Any_Interface + or else Kind = Any_Limited_Interface + or else Kind = Any_Synchronized_Interface + or else Kind = Protected_Interface) + then + return True; + + elsif Is_Synchronized_Interface (I) + and then (Kind = Any_Interface + or else Kind = Any_Limited_Interface + or else Kind = Synchronized_Interface) + then + return True; + + elsif Is_Task_Interface (I) + and then (Kind = Any_Interface + or else Kind = Any_Limited_Interface + or else Kind = Any_Synchronized_Interface + or else Kind = Task_Interface) + then + return True; + + -- Regular interface. This should be the last kind to check since + -- all of the previous cases have their Is_Interface flags set. + + elsif Is_Interface (I) + and then (Kind = Any_Interface + or else Kind = Iface) + then + return True; + + else + return False; + end if; + end Interface_In_Kind; + + -- Start of processing for Find_Implemented_Interface + + begin + if not Is_Tagged_Type (Typ) then + return Empty; + end if; + + -- Implementations of the form: + -- Typ is new Interface ... + + if Is_Interface (Etype (Typ)) + and then Interface_In_Kind (Etype (Typ), Kind) + then + return Etype (Typ); + end if; + + -- Implementations of the form: + -- Typ is new Typ_Parent and Interface ... + + if Present (Abstract_Interfaces (Typ)) then + Iface_Elmt := First_Elmt (Abstract_Interfaces (Typ)); + while Present (Iface_Elmt) loop + if Interface_In_Kind (Node (Iface_Elmt), Kind) then + return Node (Iface_Elmt); + end if; + + Iface_Elmt := Next_Elmt (Iface_Elmt); + end loop; + end if; + + -- Typ is a derived type and may implement a limited interface + -- through its parent subtype. Check the parent subtype as well + -- as any interfaces explicitly implemented at this level. + + if Check_Parent + and then Ekind (Typ) = E_Record_Type + and then Present (Parent_Subtype (Typ)) + then + return Find_Implemented_Interface ( + Parent_Subtype (Typ), Kind, Check_Parent); + end if; + + -- Typ does not implement a limited interface either at this level or + -- in any of its parent subtypes. + + return Empty; + end Find_Implemented_Interface; + ------------------------ - -- Find_Interface_Tag -- + -- Find_Interface_ADT -- ------------------------ function Find_Interface_ADT @@ -1302,7 +1451,7 @@ package body Exp_Util is Typ : Entity_Id := T; procedure Find_Secondary_Table (Typ : Entity_Id); - -- Comment required ??? + -- Internal subprogram used to recursively climb to the ancestors -------------------------- -- Find_Secondary_Table -- @@ -1313,10 +1462,23 @@ package body Exp_Util is AI : Node_Id; begin - if Etype (Typ) /= Typ then + -- Climb to the ancestor (if any) handling private types + + if Present (Full_View (Etype (Typ))) then + if Full_View (Etype (Typ)) /= Typ then + Find_Secondary_Table (Full_View (Etype (Typ))); + end if; + + elsif Etype (Typ) /= Typ then Find_Secondary_Table (Etype (Typ)); end if; + -- If we already found it there is nothing else to do + + if Found then + return; + end if; + if Present (Abstract_Interfaces (Typ)) and then not Is_Empty_Elmt_List (Abstract_Interfaces (Typ)) then @@ -1401,9 +1563,14 @@ package body Exp_Util is return; end if; - -- Climb to the root type + -- Climb to the root type handling private types + + if Present (Full_View (Etype (Typ))) then + if Full_View (Etype (Typ)) /= Typ then + Find_Tag (Full_View (Etype (Typ))); + end if; - if Etype (Typ) /= Typ then + elsif Etype (Typ) /= Typ then Find_Tag (Etype (Typ)); end if; @@ -1437,6 +1604,8 @@ package body Exp_Util is -- Start of processing for Find_Interface_Tag begin + pragma Assert (Is_Interface (Iface)); + -- Handle private types if Has_Private_Declaration (Typ) @@ -1742,67 +1911,17 @@ package body Exp_Util is return Count; end Homonym_Number; - ---------------------------------- - -- Implements_Limited_Interface -- - ---------------------------------- - - function Implements_Limited_Interface (Typ : Entity_Id) return Boolean is - function Contains_Limited_Interface - (Ifaces : Elist_Id) return Boolean; - -- Given a list of interfaces, determine whether one of them is limited - - -------------------------------- - -- Contains_Limited_Interface -- - -------------------------------- - - function Contains_Limited_Interface - (Ifaces : Elist_Id) return Boolean - is - Iface_Elmt : Elmt_Id; - - begin - if not Present (Ifaces) then - return False; - end if; - - Iface_Elmt := First_Elmt (Ifaces); - - while Present (Iface_Elmt) loop - if Is_Limited_Record (Node (Iface_Elmt)) then - return True; - end if; - - Iface_Elmt := Next_Elmt (Iface_Elmt); - end loop; - - return False; - end Contains_Limited_Interface; - - -- Start of processing for Implements_Limited_Interface + -------------------------- + -- Implements_Interface -- + -------------------------- + function Implements_Interface + (Typ : Entity_Id; + Kind : Interface_Kind; + Check_Parent : Boolean := False) return Boolean is begin - -- Typ is a derived type and may implement a limited interface - -- through its parent subtype. Check the parent subtype as well - -- as any interfaces explicitly implemented at this level. - - if Ekind (Typ) = E_Record_Type - and then Present (Parent_Subtype (Typ)) - then - return Contains_Limited_Interface (Abstract_Interfaces (Typ)) - or else Implements_Limited_Interface (Parent_Subtype (Typ)); - - -- Typ is an abstract type derived from some interface - - elsif Is_Abstract (Typ) then - return Is_Interface (Etype (Typ)) - and then Is_Limited_Record (Etype (Typ)); - - -- Typ may directly implement some interface - - else - return Contains_Limited_Interface (Abstract_Interfaces (Typ)); - end if; - end Implements_Limited_Interface; + return Find_Implemented_Interface (Typ, Kind, Check_Parent) /= Empty; + end Implements_Interface; ------------------------------ -- In_Unconditional_Context -- @@ -2436,7 +2555,6 @@ package body Exp_Util is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Insert_Actions (Assoc_Node, Ins_Actions); @@ -2446,7 +2564,6 @@ package body Exp_Util is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Insert_Actions (Assoc_Node, Ins_Actions); @@ -2557,12 +2674,12 @@ package body Exp_Util is return True; end Is_All_Null_Statements; - ------------------------ - -- Is_Default_Prim_Op -- - ------------------------ + ----------------------------------------- + -- Is_Predefined_Dispatching_Operation -- + ----------------------------------------- function Is_Predefined_Dispatching_Operation - (Subp : Entity_Id) return Boolean + (Subp : Entity_Id) return Boolean is TSS_Name : TSS_Name_Type; E : Entity_Id := Subp; @@ -2590,10 +2707,12 @@ package body Exp_Util is or else Chars (E) = Name_uAssign or else TSS_Name = TSS_Deep_Adjust or else TSS_Name = TSS_Deep_Finalize - or else Chars (E) = Name_uDisp_Asynchronous_Select - or else Chars (E) = Name_uDisp_Conditional_Select - or else Chars (E) = Name_uDisp_Get_Prim_Op_Kind - or else Chars (E) = Name_uDisp_Timed_Select + or else (Ada_Version >= Ada_05 + and then (Chars (E) = Name_uDisp_Asynchronous_Select + or else Chars (E) = Name_uDisp_Conditional_Select + or else Chars (E) = Name_uDisp_Get_Prim_Op_Kind + or else Chars (E) = Name_uDisp_Get_Task_Id + or else Chars (E) = Name_uDisp_Timed_Select)) then return True; end if; @@ -3466,7 +3585,7 @@ package body Exp_Util is return New_Occurrence_Of (CW_Subtype, Loc); end; - -- Comment needed (what case is this ???) + -- Indefinite record type with discriminants. else D := First_Discriminant (Unc_Typ); diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index a63cc71c09b..2afb88f8ca6 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -33,6 +33,21 @@ with Types; use Types; package Exp_Util is + -- An enumeration type used to capture all the possible interface + -- kinds and their hierarchical relation. These values are used in + -- Find_Implemented_Interface and Implements_Interface. + + type Interface_Kind is ( + Any_Interface, -- Any interface + Any_Limited_Interface, -- Only limited interfaces + Any_Synchronized_Interface, -- Only synchronized interfaces + + Iface, -- Individual kinds + Limited_Interface, + Protected_Interface, + Synchronized_Interface, + Task_Interface); + ----------------------------------------------- -- Handling of Actions Associated with Nodes -- ----------------------------------------------- @@ -325,17 +340,27 @@ package Exp_Util is -- class-wide). function Find_Interface_ADT - (T : Entity_Id; - Iface : Entity_Id) return Entity_Id; + (T : Entity_Id; + Iface : Entity_Id) return Entity_Id; -- Ada 2005 (AI-251): Given a type T implementing the interface Iface, -- return the Access_Disp_Table value of the interface. function Find_Interface_Tag - (T : Entity_Id; - Iface : Entity_Id) return Entity_Id; + (T : Entity_Id; + Iface : Entity_Id) return Entity_Id; -- Ada 2005 (AI-251): Given a type T implementing the interface Iface, -- return the record component containing the tag of Iface. + function Find_Implemented_Interface + (Typ : Entity_Id; + Kind : Interface_Kind; + Check_Parent : Boolean := False) return Entity_Id; + -- Ada 2005 (AI-345): Find a designated kind of interface implemented by + -- Typ or any parent subtype. Return the first encountered interface that + -- correspond to the selected class. Return Empty if no such interface is + -- found. Use Check_Parent to climb a potential derivation chain and + -- examine the parent subtypes for any implementation. + function Find_Prim_Op (T : Entity_Id; Name : Name_Id) return Entity_Id; -- Find the first primitive operation of type T whose name is 'Name'. -- This function allows the use of a primitive operation which is not @@ -410,11 +435,13 @@ package Exp_Util is -- chain, counting only entries in the curren scope. If an entity is not -- overloaded, the returned number will be one. - function Implements_Limited_Interface (Typ : Entity_Id) return Boolean; - -- Ada 2005 (AI-345): Determine whether Typ implements some limited - -- interface. The interface may be of limited, protected, synchronized - -- or taks kind. Typ may also be derived from a type that implements a - -- limited interface. + function Implements_Interface + (Typ : Entity_Id; + Kind : Interface_Kind; + Check_Parent : Boolean := False) return Boolean; + -- Ada 2005 (AI-345): Determine whether Typ implements a designated kind + -- of interface. Use Check_Parent to climb a potential derivation chain + -- and examine the parent subtypes for any implementation. function Inside_Init_Proc return Boolean; -- Returns True if current scope is within an init proc diff --git a/gcc/ada/exp_vfpt.adb b/gcc/ada/exp_vfpt.adb index 98b2b075ce0..de2fae10459 100644 --- a/gcc/ada/exp_vfpt.adb +++ b/gcc/ada/exp_vfpt.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -196,6 +196,13 @@ package body Exp_VFpt is Func := RE_Lt_G; end if; + when N_Op_Ne => + if Typc = 'F' then + Func := RE_Ne_F; + else + Func := RE_Ne_G; + end if; + when others => Func := RE_Null; raise Program_Error; @@ -295,14 +302,16 @@ package body Exp_VFpt is end if; end Call_Type; + ------------------------------------------------- + -- Expand_Multiply_Fixed_By_Fixed_Giving_Fixed -- + ------------------------------------------------- + function Equivalent_Integer_Type (T : Entity_Id) return Entity_Id is begin if Esize (T) = Esize (Standard_Long_Long_Integer) then return Standard_Long_Long_Integer; - elsif Esize (T) = Esize (Standard_Long_Integer) then return Standard_Long_Integer; - else return Standard_Integer; end if; @@ -320,38 +329,62 @@ package body Exp_VFpt is Rewrite (N, Unchecked_Convert_To (T_Typ, Expr)); + -- Case of conversion of fixed-point type to Vax_Float type + elsif Is_Fixed_Point_Type (S_Typ) then - -- convert the scaled integer value to the target type, and multiply - -- by 'Small of type. + -- If Conversion_OK set, then we introduce an intermediate IEEE + -- target type since we are expecting the code generator to handle + -- the case of integer to IEEE float. - Rewrite (N, - Make_Op_Multiply (Loc, - Left_Opnd => - Make_Type_Conversion (Loc, - Subtype_Mark => New_Occurrence_Of (T_Typ, Loc), - Expression => - Unchecked_Convert_To ( - Equivalent_Integer_Type (S_Typ), Expr)), - Right_Opnd => - Make_Real_Literal (Loc, Realval => Small_Value (S_Typ)))); + if Conversion_OK (N) then + Rewrite (N, + Convert_To (T_Typ, OK_Convert_To (Universal_Real, Expr))); + + -- Otherwise, convert the scaled integer value to the target type, + -- and multiply by 'Small of type. + + else + Rewrite (N, + Make_Op_Multiply (Loc, + Left_Opnd => + Make_Type_Conversion (Loc, + Subtype_Mark => New_Occurrence_Of (T_Typ, Loc), + Expression => + Unchecked_Convert_To ( + Equivalent_Integer_Type (S_Typ), Expr)), + Right_Opnd => + Make_Real_Literal (Loc, Realval => Small_Value (S_Typ)))); + end if; + + -- Case of conversion of Vax_Float type to fixed-point type elsif Is_Fixed_Point_Type (T_Typ) then - -- multiply value by 'small of type, and convert to the corresponding - -- integer type. + -- If Conversion_OK set, then we introduce an intermediate IEEE + -- target type, since we are expecting the code generator to handle + -- the case of IEEE float to integer. - Rewrite (N, - Unchecked_Convert_To (T_Typ, - Make_Type_Conversion (Loc, - Subtype_Mark => - New_Occurrence_Of (Equivalent_Integer_Type (T_Typ), Loc), - Expression => - Make_Op_Multiply (Loc, - Left_Opnd => Expr, - Right_Opnd => - Make_Real_Literal (Loc, - Realval => Ureal_1 / Small_Value (T_Typ)))))); + if Conversion_OK (N) then + Rewrite (N, + OK_Convert_To (T_Typ, Convert_To (Universal_Real, Expr))); + + -- Otherwise, multiply value by 'small of type, and convert to the + -- corresponding integer type. + + else + Rewrite (N, + Unchecked_Convert_To (T_Typ, + Make_Type_Conversion (Loc, + Subtype_Mark => + New_Occurrence_Of (Equivalent_Integer_Type (T_Typ), Loc), + Expression => + Make_Op_Multiply (Loc, + Left_Opnd => Expr, + Right_Opnd => + Make_Real_Literal (Loc, + Realval => Ureal_1 / Small_Value (T_Typ)))))); + end if; -- All other cases diff --git a/gcc/ada/exp_vfpt.ads b/gcc/ada/exp_vfpt.ads index fb33b795db9..f90c64a3613 100644 --- a/gcc/ada/exp_vfpt.ads +++ b/gcc/ada/exp_vfpt.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/expander.adb b/gcc/ada/expander.adb index feb2d8205e6..1c75aa09dee 100644 --- a/gcc/ada/expander.adb +++ b/gcc/ada/expander.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/expander.ads b/gcc/ada/expander.ads index 4756bd20de2..0f085fe2227 100644 --- a/gcc/ada/expander.ads +++ b/gcc/ada/expander.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/expect.c b/gcc/ada/expect.c index 69a3364b6d3..dd03b1ca1f8 100644 --- a/gcc/ada/expect.c +++ b/gcc/ada/expect.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2001-2005 Ada Core Technologies, Inc. * + * Copyright (C) 2001-2005, AdaCore * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -76,17 +76,15 @@ #include void -__gnat_kill (int pid, int sig) +__gnat_kill (int pid, int sig, int close) { - HANDLE process_handle; - if (sig == 9) { - process_handle = OpenProcess (PROCESS_TERMINATE, FALSE, pid); - if (process_handle != NULL) + if ((HANDLE)pid != NULL) { - TerminateProcess (process_handle, 0); - CloseHandle (process_handle); + TerminateProcess ((HANDLE)pid, 0); + if (close) + CloseHandle ((HANDLE)pid); } } } @@ -94,17 +92,14 @@ __gnat_kill (int pid, int sig) int __gnat_waitpid (int pid) { - HANDLE process_handle; DWORD exitcode = 1; DWORD res; - process_handle = OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, pid); - - if (process_handle != NULL) + if ((HANDLE)pid != NULL) { - res = WaitForSingleObject (process_handle, INFINITE); - GetExitCodeProcess (process_handle, &exitcode); - CloseHandle (process_handle); + res = WaitForSingleObject ((HANDLE)pid, INFINITE); + GetExitCodeProcess ((HANDLE)pid, &exitcode); + CloseHandle ((HANDLE)pid); } return (int) exitcode; @@ -337,7 +332,7 @@ typedef long fd_mask; #endif /* !NO_FD_SET */ void -__gnat_kill (int pid, int sig) +__gnat_kill (int pid, int sig, int close) { kill (pid, sig); } @@ -456,7 +451,7 @@ __gnat_expect_poll (int *fd, int num_fd, int timeout, int *is_set) #else void -__gnat_kill (int pid, int sig) +__gnat_kill (int pid, int sig, int close) { } diff --git a/gcc/ada/fe.h b/gcc/ada/fe.h index 5e49ab9c6e7..4706d4c9ec1 100644 --- a/gcc/ada/fe.h +++ b/gcc/ada/fe.h @@ -6,7 +6,7 @@ * * * C Header File * * * - * Copyright (C) 1992-2005 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * diff --git a/gcc/ada/fmap.adb b/gcc/ada/fmap.adb index 34a092db56f..e8284e78560 100644 --- a/gcc/ada/fmap.adb +++ b/gcc/ada/fmap.adb @@ -62,7 +62,7 @@ package body Fmap is Table_Initial => 1_000, Table_Increment => 1_000, Table_Name => "Fmap.File_Mapping"); - -- Mapping table to map unit names to file names. + -- Mapping table to map unit names to file names package Path_Mapping is new Table.Table ( Table_Component_Type => Mapping, diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 31f5bb1f34a..6252fe887f4 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -2257,6 +2257,9 @@ package body Freeze is Error_Msg_N ("(Ada 2005): invalid use of unconstrained tagged" & " incomplete type", E); + + elsif Ekind (F_Type) = E_Subprogram_Type then + Freeze_And_Append (F_Type, Loc, Result); end if; end if; @@ -3001,7 +3004,7 @@ package body Freeze is end if; -- For access to a protected subprogram, freeze the equivalent - -- type (however this is not set if we are not generating code) + -- type (however this is not set if we are not generating code -- or if this is an anonymous type used just for resolution). elsif Ekind (E) = E_Access_Protected_Subprogram_Type then @@ -3031,9 +3034,7 @@ package body Freeze is end if; end; - if Operating_Mode = Generate_Code - and then Present (Equivalent_Type (E)) - then + if Present (Equivalent_Type (E)) then Freeze_And_Append (Equivalent_Type (E), Loc, Result); end if; end if; diff --git a/gcc/ada/freeze.ads b/gcc/ada/freeze.ads index 46baa6aeb78..491f866ecdc 100644 --- a/gcc/ada/freeze.ads +++ b/gcc/ada/freeze.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -199,7 +199,7 @@ package Freeze is -- frozen entities. procedure Freeze_Before (N : Node_Id; T : Entity_Id); - -- Freeze T then Insert the generated Freeze nodes before the node N. + -- Freeze T then Insert the generated Freeze nodes before the node N procedure Freeze_Expression (N : Node_Id); -- Freezes the required entities when the Expression N causes freezing. diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb index 51112c57834..49b8dd729ac 100644 --- a/gcc/ada/frontend.adb +++ b/gcc/ada/frontend.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/frontend.ads b/gcc/ada/frontend.ads index 7201bcf3373..69a0cdc68f0 100644 --- a/gcc/ada/frontend.ads +++ b/gcc/ada/frontend.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-arrspl.adb b/gcc/ada/g-arrspl.adb index 0d0366484f7..571388ac294 100644 --- a/gcc/ada/g-arrspl.adb +++ b/gcc/ada/g-arrspl.adb @@ -2,11 +2,11 @@ -- -- -- GNAT COMPILER COMPONENTS -- -- -- --- G N A T . A R R A Y _ S P I T -- +-- G N A T . A R R A Y _ S P L I T -- -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-arrspl.ads b/gcc/ada/g-arrspl.ads index 5c8051250a9..d35059c1b64 100644 --- a/gcc/ada/g-arrspl.ads +++ b/gcc/ada/g-arrspl.ads @@ -2,11 +2,11 @@ -- -- -- GNAT COMPILER COMPONENTS -- -- -- --- G N A T . A R R A Y _ S P L T -- +-- G N A T . A R R A Y _ S P L I T -- -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-awk.adb b/gcc/ada/g-awk.adb index 2aa712aef3f..d39ef846291 100644 --- a/gcc/ada/g-awk.adb +++ b/gcc/ada/g-awk.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005 AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -266,7 +266,7 @@ package body GNAT.AWK is NR : Natural := 0; FNR : Natural := 0; Matches : Regpat.Match_Array (0 .. 100); - -- latest matches for the regexp pattern + -- Latest matches for the regexp pattern end record; procedure Free is @@ -377,7 +377,6 @@ package body GNAT.AWK is Session : Session_Type) is pragma Unreferenced (Session); - begin A.Proc.all; end Call; @@ -423,7 +422,6 @@ package body GNAT.AWK is Session : Session_Type) return Boolean is use type Regpat.Match_Location; - begin Regpat.Match (P.Regx.all, Field (P.Rank, Session), Session.Data.Matches); @@ -439,7 +437,6 @@ package body GNAT.AWK is Session : Session_Type) return Boolean is pragma Unreferenced (Session); - begin return P.Pattern.all; end Match; @@ -450,7 +447,6 @@ package body GNAT.AWK is procedure Release (P : in out Pattern) is pragma Unreferenced (P); - begin null; end Release; @@ -462,7 +458,6 @@ package body GNAT.AWK is procedure Release (P : in out Regexp_Pattern) is procedure Free is new Unchecked_Deallocation (Regpat.Pattern_Matcher, Pattern_Matcher_Access); - begin Free (P.Regx); end Release; @@ -950,7 +945,6 @@ package body GNAT.AWK is (Session : Session_Type := Current_Session) return Natural is Files : File_Table.Instance renames Session.Data.Files; - begin return File_Table.Last (Files); end Number_Of_Files; @@ -1258,8 +1252,8 @@ package body GNAT.AWK is procedure Set_Field_Widths (Field_Widths : Widths_Set; - Session : Session_Type := Current_Session) is - + Session : Session_Type := Current_Session) + is begin Free (Session.Data.Separators); @@ -1280,10 +1274,8 @@ package body GNAT.AWK is procedure Split_Line (Session : Session_Type) is Fields : Field_Table.Instance renames Session.Data.Fields; - begin Field_Table.Init (Fields); - Split.Current_Line (Session.Data.Separators.all, Session); end Split_Line; diff --git a/gcc/ada/g-awk.ads b/gcc/ada/g-awk.ads index 4d7c65f8605..346da5e0dd6 100644 --- a/gcc/ada/g-awk.ads +++ b/gcc/ada/g-awk.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-boumai.ads b/gcc/ada/g-boumai.ads index c5c69794af8..c3a0db5c265 100644 --- a/gcc/ada/g-boumai.ads +++ b/gcc/ada/g-boumai.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2003-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-calend.adb b/gcc/ada/g-calend.adb index e73b10364f5..ea8f28a3a68 100644 --- a/gcc/ada/g-calend.adb +++ b/gcc/ada/g-calend.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-calend.ads b/gcc/ada/g-calend.ads index 5cbff83ef3b..8288635da74 100644 --- a/gcc/ada/g-calend.ads +++ b/gcc/ada/g-calend.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-catiio.adb b/gcc/ada/g-catiio.adb index 147601dcb70..fe996be4328 100644 --- a/gcc/ada/g-catiio.adb +++ b/gcc/ada/g-catiio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -124,7 +124,6 @@ package body GNAT.Calendar.Time_IO is use Ada.Characters.Handling; Local : constant String := To_Upper (Str (1)) & To_Lower (Str (2 .. Str'Last)); - begin if Length = 0 then return Local; @@ -174,7 +173,6 @@ package body GNAT.Calendar.Time_IO is begin if Length = 0 or else Padding = None then return NI (2 .. NI'Last); - else return NIP (NIP'Last - Length + 1 .. NIP'Last); end if; diff --git a/gcc/ada/g-comlin.adb b/gcc/ada/g-comlin.adb index c6142bddbfa..e1ff2434c96 100644 --- a/gcc/ada/g-comlin.adb +++ b/gcc/ada/g-comlin.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-comlin.ads b/gcc/ada/g-comlin.ads index de3d45a14f1..447e617c28e 100644 --- a/gcc/ada/g-comlin.ads +++ b/gcc/ada/g-comlin.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -72,7 +72,7 @@ -- A more complicated example would involve the use of sections for the -- switches, as for instance in gnatmake. These sections are separated by --- special switches, chosen by the programer. Each section act as a +-- special switches chosen by the programer. Each section acts as a -- command line of its own. -- begin @@ -104,24 +104,24 @@ package GNAT.Command_Line is Stop_At_First_Non_Switch : Boolean := False; Section_Delimiters : String := ""); -- This procedure resets the internal state of the package to prepare - -- to rescan the parameters. It need not (but may be) called before the - -- first use of Getopt, but it must be called if you want to start - -- rescanning the command line parameters from the start. The optional - -- parameter Switch_Char can be used to reset the switch character, - -- e.g. to '/' for use in DOS-like systems. The optional parameter - -- Stop_At_First_Non_Switch indicates if Getopt is to look for switches - -- on the whole command line, or if it has to stop as soon as a + -- to rescan the parameters. It does not need to be called before the + -- first use of Getopt (but it could be), but it must be called if you want + -- to start rescanning the command line parameters from the start. The + -- optional parameter Switch_Char can be used to reset the switch + -- character, e.g. to '/' for use in DOS-like systems. The optional + -- parameter Stop_At_First_Non_Switch indicates if Getopt is to look for + -- switches on the whole command line, or if it has to stop as soon as a -- non-switch argument is found. -- -- Example: -- -- Arguments: my_application file1 -c -- - -- if Stop_At_First_Non_Switch is False, then -c will be considered + -- If Stop_At_First_Non_Switch is False, then -c will be considered -- as a switch (returned by getopt), otherwise it will be considered -- as a normal argument (returned by Get_Argument). -- - -- if SECTION_DELIMITERS is set, then every following subprogram + -- If SECTION_DELIMITERS is set, then every following subprogram -- (Getopt and Get_Argument) will only operate within a section, which -- is delimited by any of these delimiters or the end of the command line. -- @@ -134,11 +134,11 @@ package GNAT.Command_Line is -- and -largs and includes '-d -e' and the last one includes '-f' procedure Goto_Section (Name : String := ""); - -- Change the current section. The next Getopt of Get_Argument will - -- start looking at the beginning of the section. An empty name ("") - -- refers to the first section between the program name and the first - -- section delimiter. - -- If the section does not exist, then Invalid_Section is raised. + -- Change the current section. The next Getopt of Get_Argument will start + -- looking at the beginning of the section. An empty name ("") refers to + -- the first section between the program name and the first section + -- delimiter. If the section does not exist, then Invalid_Section is + -- raised. function Full_Switch return String; -- Returns the full name of the last switch found (Getopt only returns @@ -147,34 +147,40 @@ package GNAT.Command_Line is function Getopt (Switches : String; Concatenate : Boolean := True) return Character; - -- This function moves to the next switch on the command line (defined - -- as a switch character followed by a character within Switches, - -- casing being significant). The result returned is the first - -- character of the particular switch located. If there are no more - -- switches in the current section, returns ASCII.NUL. If Concatenate is - -- True (by default), the switches need not be separated by spaces (they - -- can be concatenated if they do not require an argument, e.g. -ab is the - -- same as two separate arguments -a -b). + -- This function moves to the next switch on the command line (defined as + -- switch character followed by a character within Switches, casing being + -- significant). The result returned is the first character of the switch + -- that is located. If there are no more switches in the current section, + -- returns ASCII.NUL. If Concatenate is True (by default), the switches + -- does not need to be separated by spaces (they can be concatenated if + -- they do not require an argument, e.g. -ab is the ame as two separate + -- arguments -a -b). -- -- Switches is a string of all the possible switches, separated by a - -- space. A switch can be followed by one of the following characters : + -- space. A switch can be followed by one of the following characters: -- -- ':' The switch requires a parameter. There can optionally be a space - -- on the command line between the switch and its parameter + -- on the command line between the switch and its parameter. + -- -- '=' The switch requires a parameter. There can either be a '=' or a - -- space on the command line between the switch and its parameter + -- space on the command line between the switch and its parameter. + -- -- '!' The switch requires a parameter, but there can be no space on the - -- command line between the switch and its parameter + -- command line between the switch and its parameter. + -- -- '?' The switch may have an optional parameter. There can be no space - -- between the switch and its argument - -- ex/ if Switches has the following value : "a? b" - -- The command line can be : + -- between the switch and its argument. + -- + -- e.g. if Switches has the following value : "a? b", + -- The command line can be: + -- -- -afoo : -a switch with 'foo' parameter -- -a foo : -a switch and another element on the -- command line 'foo', returned by Get_Argument -- -- Example: if Switches is "-a: -aO:", you can have the following - -- command lines : + -- command lines: + -- -- -aarg : 'a' switch with 'arg' parameter -- -a arg : 'a' switch with 'arg' parameter -- -aOarg : 'aO' switch with 'arg' parameter @@ -194,14 +200,14 @@ package GNAT.Command_Line is -- -- Example -- Getopt ("* a b") - -- If the command line is '-a -c toto.o -b', GetOpt will return - -- successively 'a', '*', '*' and 'b'. When '*' is returnd, + -- If the command line is '-a -c toto.o -b', Getopt will return + -- successively 'a', '*', '*' and 'b'. When '*' is returned, -- Full_Switch returns the corresponding item on the command line. -- -- -- When Getopt encounters an invalid switch, it raises the exception -- Invalid_Switch and sets Full_Switch to return the invalid switch. - -- When Getopt can not find the parameter associated with a switch, it + -- When Getopt cannot find the parameter associated with a switch, it -- raises Invalid_Parameter, and sets Full_Switch to return the invalid -- switch character. -- @@ -221,24 +227,24 @@ package GNAT.Command_Line is -- raised and Full_Switch will return "ab". function Get_Argument (Do_Expansion : Boolean := False) return String; - -- Returns the next element in the command line which is not a switch. + -- Returns the next element on the command line which is not a switch. -- This function should not be called before Getopt has returned -- ASCII.NUL. -- - -- If Expansion is True, then the parameter on the command - -- line will considered as filename with wild cards, and will be - -- expanded. The matching file names will be returned one at a time. - -- When there are no more arguments on the command line, this function - -- returns an empty string. This is useful in non-Unix systems for - -- obtaining normal expansion of wild card references. + -- If Expansion is True, then the parameter on the command line will be + -- considered as a filename with wild cards, and will be expanded. The + -- matching file names will be returned one at a time. When there are no + -- more arguments on the command line, this function returns an empty + -- string. This is useful in non-Unix systems for obtaining normal + -- expansion of wild card references. function Parameter return String; - -- Returns parameter associated with the last switch returned by Getopt. - -- If no parameter was associated with the last switch, or no previous - -- call has been made to Get_Argument, raises Invalid_Parameter. + -- Returns the parameter associated with the last switch returned by + -- Getopt. If no parameter was associated with the last switch, or no + -- previous call has been made to Get_Argument, raises Invalid_Parameter. -- If the last switch was associated with an optional argument and this -- argument was not found on the command line, Parameter returns an empty - -- string + -- string. type Expansion_Iterator is limited private; -- Type used during expansion of file names @@ -254,19 +260,19 @@ package GNAT.Command_Line is -- Basic_Regexp is True). When Directory is an empty string, the current -- directory is searched. -- - -- Pattern may contains directory separators (as in "src/*/*.ada"). + -- Pattern may contain directory separators (as in "src/*/*.ada"). -- Subdirectories of Directory will also be searched, up to one -- hundred levels deep. -- -- When Start_Expansion has been called, function Expansion should be - -- called repetitively until it returns an empty string, before + -- called repeatedly until it returns an empty string, before -- Start_Expansion can be called again with the same Expansion_Iterator -- variable. function Expansion (Iterator : Expansion_Iterator) return String; - -- Return the next file in the directory matching the parameters given + -- Returns the next file in the directory matching the parameters given -- to Start_Expansion and updates Iterator to point to the next entry. - -- Returns an empty string when there are no more files in the directory + -- Returns an empty string when there is no more file in the directory -- and its subdirectories. -- -- If Expansion is called again after an empty string has been returned, @@ -279,8 +285,8 @@ package GNAT.Command_Line is -- Raised when an invalid switch is detected in the command line Invalid_Parameter : exception; - -- Raised when a parameter is missing, or an attempt is made to obtain - -- a parameter for a switch that does not allow a parameter + -- Raised when a parameter is missing, or an attempt is made to obtain a + -- parameter for a switch that does not allow a parameter private @@ -301,8 +307,8 @@ private type Expansion_Iterator is limited record Start : Positive := 1; - -- Position of the first character of the relative path to check - -- against the pattern. + -- Position of the first character of the relative path to check against + -- the pattern. Dir_Name : String (1 .. Max_Path_Length); @@ -314,8 +320,8 @@ private -- Regular expression built with the pattern Maximum_Depth : Depth := 1; - -- The maximum depth of directories, reflecting the number of - -- directory separators in the pattern. + -- The maximum depth of directories, reflecting the number of directory + -- separators in the pattern. end record; diff --git a/gcc/ada/g-comver.adb b/gcc/ada/g-comver.adb index 0068e2af686..2a0d120d832 100644 --- a/gcc/ada/g-comver.adb +++ b/gcc/ada/g-comver.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002 Ada Core Technologies -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-crc32.adb b/gcc/ada/g-crc32.adb index 76b40e802dd..1015103b275 100644 --- a/gcc/ada/g-crc32.adb +++ b/gcc/ada/g-crc32.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2002 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -49,9 +49,7 @@ package body GNAT.CRC32 is procedure Update (C : in out CRC32; Value : Ada.Streams.Stream_Element) is function To_Char is new Unchecked_Conversion (Ada.Streams.Stream_Element, Character); - V : constant Character := To_Char (Value); - begin Update (C, V); end Update; @@ -73,9 +71,7 @@ package body GNAT.CRC32 is procedure Wide_Update (C : in out CRC32; Value : Wide_Character) is subtype S2 is String (1 .. 2); function To_S2 is new Unchecked_Conversion (Wide_Character, S2); - VS : constant S2 := To_S2 (Value); - begin Update (C, VS (1)); Update (C, VS (2)); diff --git a/gcc/ada/g-crc32.ads b/gcc/ada/g-crc32.ads index 867c07f4afd..dac4c427812 100644 --- a/gcc/ada/g-crc32.ads +++ b/gcc/ada/g-crc32.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 2004-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ -- called CRC-32. This is a checksum based on treating the binary data -- as a polynomial over a binary field, and the exact specifications of -- the CRC-32 algorithm are as follows: --- + -- Name : "CRC-32" -- Width : 32 -- Poly : 04C11DB7 @@ -44,15 +44,15 @@ -- RefOut : True -- XorOut : FFFFFFFF -- Check : CBF43926 --- --- Note that this is the algorithm used by PKZip, Ethernet and FDDI. --- + +-- Note that this is the algorithm used by PKZip, Ethernet and FDDI + -- For more information about this algorithm see: --- --- ftp://ftp.rocksoft.com/papers/crc_v3.txt + +-- ftp://ftp.rocksoft.com/papers/crc_v3.txt -- "A Painless Guide to CRC Error Detection Algorithms", Ross N. Williams --- + -- "Computation of Cyclic Redundancy Checks via Table Look-Up", Communications -- of the ACM, Vol. 31 No. 8, pp.1008-1013 Aug. 1988. Sarwate, D.V. diff --git a/gcc/ada/g-ctrl_c.ads b/gcc/ada/g-ctrl_c.ads index af88ebfdb14..8a9c84058c9 100644 --- a/gcc/ada/g-ctrl_c.ads +++ b/gcc/ada/g-ctrl_c.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -34,9 +34,9 @@ -- This package may be used to intercept the interruption of a running -- program by the operator typing Control-C, without having to use an Ada -- interrupt handler protected object. --- --- This package is currently implemented under Windows and Unix platforms. --- + +-- This package is currently implemented under Windows and Unix platforms + -- Note concerning Unix systems: -- The behavior of this package when using tasking depends on the interaction @@ -55,7 +55,7 @@ package GNAT.Ctrl_C is -- Handler_Type should not propagate exceptions. procedure Install_Handler (Handler : Handler_Type); - -- Set up Handler to be called if the operator hits Ctrl-C. + -- Set up Handler to be called if the operator hits Ctrl-C procedure Uninstall_Handler; -- Reinstall the standard Control-C handler. diff --git a/gcc/ada/g-curexc.ads b/gcc/ada/g-curexc.ads index 7fff4f303b1..783a6489096 100644 --- a/gcc/ada/g-curexc.ads +++ b/gcc/ada/g-curexc.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1996-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -50,7 +50,7 @@ package GNAT.Current_Exception is -- Subprograms -- ----------------- - -- Note: the lower bound of returnd String values is always one. + -- Note: the lower bound of returnd String values is always one function Exception_Information return String; -- Returns the result of calling Ada.Exceptions.Exception_Information diff --git a/gcc/ada/g-debpoo.adb b/gcc/ada/g-debpoo.adb index eeb36a2d5dd..1854623da34 100644 --- a/gcc/ada/g-debpoo.adb +++ b/gcc/ada/g-debpoo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -47,7 +47,7 @@ with Ada.Unchecked_Conversion; package body GNAT.Debug_Pools is - Default_Alignment : constant Storage_Offset := Standard'Maximum_Alignment; + Default_Alignment : constant := Standard'Maximum_Alignment; -- Alignment used for the memory chunks returned by Allocate. Using this -- value garantees that this alignment will be compatible with all types -- and at the same time makes it easy to find the location of the extra @@ -63,14 +63,15 @@ package body GNAT.Debug_Pools is -- Maximum number of levels that will be ignored in backtraces. This is so -- that we still have enough significant levels in the tracebacks returned -- to the user. + -- -- The value 10 is chosen as being greater than the maximum callgraph -- in this package. Its actual value is not really relevant, as long as it -- is high enough to make sure we still have enough frames to return to -- the user after we have hidden the frames internal to this package. - ----------------------- - -- Tracebacks_Htable -- - ----------------------- + --------------------------- + -- Back Trace Hash Table -- + --------------------------- -- This package needs to store one set of tracebacks for each allocation -- point (when was it allocated or deallocated). This would use too much @@ -103,19 +104,28 @@ package body GNAT.Debug_Pools is Next : Traceback_Htable_Elem_Ptr; end record; + -- Subprograms used for the Backtrace_Htable instantiation + procedure Set_Next (E : Traceback_Htable_Elem_Ptr; Next : Traceback_Htable_Elem_Ptr); + pragma Inline (Set_Next); + function Next - (E : Traceback_Htable_Elem_Ptr) - return Traceback_Htable_Elem_Ptr; + (E : Traceback_Htable_Elem_Ptr) return Traceback_Htable_Elem_Ptr; + pragma Inline (Next); + function Get_Key - (E : Traceback_Htable_Elem_Ptr) - return Tracebacks_Array_Access; + (E : Traceback_Htable_Elem_Ptr) return Tracebacks_Array_Access; + pragma Inline (Get_Key); + function Hash (T : Tracebacks_Array_Access) return Header; + pragma Inline (Hash); + function Equal (K1, K2 : Tracebacks_Array_Access) return Boolean; - pragma Inline (Set_Next, Next, Get_Key, Hash); - -- Subprograms required for instantiation of the htable. See GNAT.HTable. + -- Why is this not inlined??? + + -- The hash table for back traces package Backtrace_Htable is new GNAT.HTable.Static_HTable (Header_Num => Header, @@ -136,24 +146,26 @@ package body GNAT.Debug_Pools is type Allocation_Header; type Allocation_Header_Access is access Allocation_Header; - -- The following record stores extra information that needs to be - -- memorized for each block allocated with the special debug pool. - type Traceback_Ptr_Or_Address is new System.Address; -- A type that acts as a C union, and is either a System.Address or a -- Traceback_Htable_Elem_Ptr. + -- The following record stores extra information that needs to be + -- memorized for each block allocated with the special debug pool. + type Allocation_Header is record Allocation_Address : System.Address; - -- Address of the block returned by malloc, possibly unaligned. + -- Address of the block returned by malloc, possibly unaligned - Block_Size : Storage_Offset; + Block_Size : Storage_Offset; -- Needed only for advanced freeing algorithms (traverse all allocated -- blocks for potential references). This value is negated when the -- chunk of memory has been logically freed by the application. This -- chunk has not been physically released yet. - Alloc_Traceback : Traceback_Htable_Elem_Ptr; + Alloc_Traceback : Traceback_Htable_Elem_Ptr; + -- ??? comment required + Dealloc_Traceback : Traceback_Ptr_Or_Address; -- Pointer to the traceback for the allocation (if the memory chunk is -- still valid), or to the first deallocation otherwise. Make sure this @@ -177,22 +189,24 @@ package body GNAT.Debug_Pools is function To_Address is new Ada.Unchecked_Conversion (Traceback_Ptr_Or_Address, System.Address); + function To_Address is new Ada.Unchecked_Conversion (System.Address, Traceback_Ptr_Or_Address); + function To_Traceback is new Ada.Unchecked_Conversion (Traceback_Ptr_Or_Address, Traceback_Htable_Elem_Ptr); + function To_Traceback is new Ada.Unchecked_Conversion (Traceback_Htable_Elem_Ptr, Traceback_Ptr_Or_Address); - Header_Offset : constant Storage_Count - := Default_Alignment * - ((Allocation_Header'Size / System.Storage_Unit + Default_Alignment - 1) - / Default_Alignment); - -- Offset of user data after allocation header. + Header_Offset : constant Storage_Count := + Default_Alignment * + ((Allocation_Header'Size / System.Storage_Unit + + Default_Alignment - 1) / Default_Alignment); + -- Offset of user data after allocation header Minimum_Allocation : constant Storage_Count := - Default_Alignment - 1 - + Header_Offset; + Default_Alignment - 1 + Header_Offset; -- Minimal allocation: size of allocation_header rounded up to next -- multiple of default alignment + worst-case padding. @@ -200,14 +214,14 @@ package body GNAT.Debug_Pools is -- Allocations table -- ----------------------- - -- This table is indexed on addresses modulo Default_Alignment, and - -- for each index it indicates whether that memory block is valid. - -- Its behavior is similar to GNAT.Table, except that we need to pack - -- the table to save space, so we cannot reuse GNAT.Table as is. + -- This table is indexed on addresses modulo Default_Alignment, and for + -- each index it indicates whether that memory block is valid. Its behavior + -- is similar to GNAT.Table, except that we need to pack the table to save + -- space, so we cannot reuse GNAT.Table as is. - -- This table is the reason why all alignments have to be forced to a - -- common value (Default_Alignment), so that this table can be - -- kept to a reasonnable size. + -- This table is the reason why all alignments have to be forced to common + -- value (Default_Alignment), so that this table can be kept to a + -- reasonnable size. type Byte is mod 2 ** System.Storage_Unit; @@ -242,18 +256,17 @@ package body GNAT.Debug_Pools is -- These two variables represents a mapping of the currently allocated -- memory. Every time the pool works on an address, we first check that the -- index Address / Default_Alignment is True. If not, this means that this - -- address is not under control of the debug pool, and thus this is - -- probably an invalid memory access (it could also be a general access - -- type). + -- address is not under control of the debug pool and thus this is probably + -- an invalid memory access (it could also be a general access type). -- -- Note that in fact we never allocate the full size of Big_Table, only a -- slice big enough to manage the currently allocated memory. - Edata : System.Address := System.Null_Address; + Edata : System.Address := System.Null_Address; -- Address in memory that matches the index 0 in Valid_Blocks. It is named -- after the symbol _edata, which, on most systems, indicate the lowest - -- possible address returned by malloc. Unfortunately, this symbol - -- doesn't exist on windows, so we cannot use it instead of this variable. + -- possible address returned by malloc. Unfortunately, this symbol doesn't + -- exist on windows, so we cannot use it instead of this variable. ----------------------- -- Local subprograms -- @@ -264,16 +277,15 @@ package body GNAT.Debug_Pools is Kind : Traceback_Kind; Size : Storage_Count; Ignored_Frame_Start : System.Address; - Ignored_Frame_End : System.Address) - return Traceback_Htable_Elem_Ptr; + Ignored_Frame_End : System.Address) return Traceback_Htable_Elem_Ptr; -- Return an element matching the current traceback (omitting the frames -- that are in the current package). If this traceback already existed in -- the htable, a pointer to this is returned to spare memory. Null is -- returned if the pool is set not to store tracebacks. If the traceback -- already existed in the table, the count is incremented so that - -- Dump_Tracebacks returns useful results. - -- All addresses up to, and including, an address between - -- Ignored_Frame_Start .. Ignored_Frame_End are ignored. + -- Dump_Tracebacks returns useful results. All addresses up to, and + -- including, an address between Ignored_Frame_Start .. Ignored_Frame_End + -- are ignored. procedure Put_Line (Depth : Natural; @@ -364,9 +376,7 @@ package body GNAT.Debug_Pools is ---------- function Next - (E : Traceback_Htable_Elem_Ptr) - return Traceback_Htable_Elem_Ptr - is + (E : Traceback_Htable_Elem_Ptr) return Traceback_Htable_Elem_Ptr is begin return E.Next; end Next; @@ -386,8 +396,7 @@ package body GNAT.Debug_Pools is ------------- function Get_Key - (E : Traceback_Htable_Elem_Ptr) - return Tracebacks_Array_Access + (E : Traceback_Htable_Elem_Ptr) return Tracebacks_Array_Access is begin return E.Traceback; @@ -399,10 +408,12 @@ package body GNAT.Debug_Pools is function Hash (T : Tracebacks_Array_Access) return Header is Result : Integer_Address := 0; + begin for X in T'Range loop Result := Result + To_Integer (PC_For (T (X))); end loop; + return Header (1 + Result mod Integer_Address (Header'Last)); end Hash; @@ -496,8 +507,7 @@ package body GNAT.Debug_Pools is Kind : Traceback_Kind; Size : Storage_Count; Ignored_Frame_Start : System.Address; - Ignored_Frame_End : System.Address) - return Traceback_Htable_Elem_Ptr + Ignored_Frame_End : System.Address) return Traceback_Htable_Elem_Ptr is begin if Pool.Stack_Trace_Depth = 0 then @@ -515,7 +525,7 @@ package body GNAT.Debug_Pools is Skip_Levels (Pool.Stack_Trace_Depth, Trace, Start, Len, Ignored_Frame_Start, Ignored_Frame_End); - -- Check if the traceback is already in the table. + -- Check if the traceback is already in the table Elem := Backtrace_Htable.Get (Trace (Start .. Len)'Unrestricted_Access); @@ -547,9 +557,7 @@ package body GNAT.Debug_Pools is function Is_Valid (Storage : System.Address) return Boolean is Offset : constant Storage_Offset := (Storage - Edata) / Default_Alignment; - Bit : constant Byte := 2 ** Natural (Offset mod System.Storage_Unit); - begin return (Storage mod Default_Alignment) = 0 and then Offset >= 0 @@ -621,13 +629,27 @@ package body GNAT.Debug_Pools is Valid_Blocks_Size := Valid_Blocks_Size + Bytes; -- Take into the account the new start address + Edata := Storage - Edata_Align + (Edata - Storage) mod Edata_Align; end if; -- Second case : the new address is outside of the current scope of - -- Valid_Blocks, so we have to grow the table as appropriate + -- Valid_Blocks, so we have to grow the table as appropriate. - Offset := (Storage - Edata) / Default_Alignment; + -- Note: it might seem more natural for the following statement to + -- be written: + + -- Offset := (Storage - Edata) / Default_Alignment; + + -- but that won't work since Storage_Offset is signed, and it is + -- possible to subtract a small address from a large address and + -- get a negative value. This may seem strange, but it is quite + -- specifically allowed in the RM, and is what most implementations + -- including GNAT actually do. Hence the conversion to Integer_Address + -- which is a full range modular type, not subject to this glitch. + + Offset := Storage_Offset ((To_Integer (Storage) - To_Integer (Edata)) / + Default_Alignment); if Offset >= Valid_Blocks_Size * System.Storage_Unit then Bytes := Valid_Blocks_Size; @@ -717,10 +739,12 @@ package body GNAT.Debug_Pools is P := new Local_Storage_Array; end; - Storage_Address := System.Null_Address + Default_Alignment - * (((P.all'Address + Default_Alignment - 1) - System.Null_Address) - / Default_Alignment) + Storage_Address := + System.Null_Address + Default_Alignment + * (((P.all'Address + Default_Alignment - 1) - System.Null_Address) + / Default_Alignment) + Header_Offset; + pragma Assert ((Storage_Address - System.Null_Address) mod Default_Alignment = 0); pragma Assert (Storage_Address + Size_In_Storage_Elements @@ -940,7 +964,7 @@ package body GNAT.Debug_Pools is System.Memory.Free (Header.Allocation_Address); Set_Valid (Tmp, False); - -- Remove this block from the list. + -- Remove this block from the list if Previous = System.Null_Address then Pool.First_Free_Block := Next; @@ -1038,7 +1062,6 @@ package body GNAT.Debug_Pools is procedure Reset_Marks is Current : System.Address := Pool.First_Free_Block; Header : Allocation_Header_Access; - begin while Current /= System.Null_Address loop Header := Header_Of (Current); @@ -1126,7 +1149,7 @@ package body GNAT.Debug_Pools is end if; else - -- Remove this block from the list of used blocks. + -- Remove this block from the list of used blocks Previous := To_Address (Header_Of (Storage_Address).Dealloc_Traceback); @@ -1459,7 +1482,6 @@ package body GNAT.Debug_Pools is function Storage_Size (Pool : Debug_Pool) return Storage_Count is pragma Unreferenced (Pool); - begin return Storage_Count'Last; end Storage_Size; @@ -1535,7 +1557,6 @@ package body GNAT.Debug_Pools is procedure Internal is new Print_Info (Put_Line => GNAT.IO.Put_Line, Put => GNAT.IO.Put); - begin Internal (Pool, Cumulate, Display_Slots, Display_Leaks); end Print_Info_Stdout; @@ -1594,9 +1615,10 @@ package body GNAT.Debug_Pools is Tracebk := Header.Alloc_Traceback.Traceback; Num_Calls := Tracebk'Length; - -- Code taken from memtrack.adb in GNAT's sources - -- Logs allocation call - -- format is: + -- (Code taken from memtrack.adb in GNAT's sources) + + -- Logs allocation call using the format: + -- 'A' ... fputc (Character'Pos ('A'), File); diff --git a/gcc/ada/g-debpoo.ads b/gcc/ada/g-debpoo.ads index 87d2ba781d8..3d558a8f269 100644 --- a/gcc/ada/g-debpoo.ads +++ b/gcc/ada/g-debpoo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,7 +31,7 @@ -- -- ------------------------------------------------------------------------------ --- This packages provides a special implementation of the Ada95 storage pools. +-- This packages provides a special implementation of the Ada95 storage pools -- The goal of this debug pool is to detect incorrect uses of memory -- (multiple deallocations, access to invalid memory,...). Errors are reported @@ -70,7 +70,7 @@ -- of memory that was allocated. The pool is also designed to work correctly -- in conjunction with gnatmem. --- Finally, a subprogram Print_Pool is provided for use from the debugger. +-- Finally, a subprogram Print_Pool is provided for use from the debugger -- Limitations -- =========== @@ -300,7 +300,7 @@ private -- accesed to deallocated memory. Physically_Deallocated : Byte_Count := 0; - -- Total number of bytes that were free()-ed. + -- Total number of bytes that were free()-ed Marked_Blocks_Deallocated : Boolean := False; -- Set to true if some mark blocks had to be deallocated in the advanced @@ -313,7 +313,7 @@ private First_Free_Block : System.Address := System.Null_Address; Last_Free_Block : System.Address := System.Null_Address; - -- Pointers to the first and last logically freed blocks. + -- Pointers to the first and last logically freed blocks First_Used_Block : System.Address := System.Null_Address; -- Pointer to the list of currently allocated blocks. This list is diff --git a/gcc/ada/g-debuti.adb b/gcc/ada/g-debuti.adb index f059bf6d41c..560f79f96d8 100644 --- a/gcc/ada/g-debuti.adb +++ b/gcc/ada/g-debuti.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -47,13 +47,14 @@ package body GNAT.Debug_Utilities is function Image (A : Address) return Image_String is S : Image_String; - P : Natural := Address_Image_Length - 1; - N : Integer_Address := To_Integer (A); + P : Natural; + N : Integer_Address; U : Natural := 0; begin S (S'Last) := '#'; - + P := Address_Image_Length - 1; + N := To_Integer (A); while P > 3 loop if U = 4 then S (P) := '_'; diff --git a/gcc/ada/g-diopit.adb b/gcc/ada/g-diopit.adb index c3a19e3a479..92c7be128be 100644 --- a/gcc/ada/g-diopit.adb +++ b/gcc/ada/g-diopit.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Adacore, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -57,7 +57,7 @@ package body GNAT.Directory_Operations.Iteration is -- recursively for each sub-directories. function Make_Pathname (Dir, File : String) return String; - -- Returns the pathname for File by adding Dir as prefix. + -- Returns the pathname for File by adding Dir as prefix ------------------- -- Make_Pathname -- @@ -379,6 +379,8 @@ package body GNAT.Directory_Operations.Iteration is end if; end Read; + -- Start of processing for Wildcard_Iterator + begin if Path = "" then return; diff --git a/gcc/ada/g-diopit.ads b/gcc/ada/g-diopit.ads index 278aed05216..42afcd1ee7c 100644 --- a/gcc/ada/g-diopit.ads +++ b/gcc/ada/g-diopit.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-dirope.adb b/gcc/ada/g-dirope.adb index d9b2c0b0d04..dc6977596a5 100644 --- a/gcc/ada/g-dirope.adb +++ b/gcc/ada/g-dirope.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-dirope.ads b/gcc/ada/g-dirope.ads index 226c593cc74..11d90704846 100644 --- a/gcc/ada/g-dirope.ads +++ b/gcc/ada/g-dirope.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1998-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-dyntab.adb b/gcc/ada/g-dyntab.adb index 5f33eb0067f..19440979ab1 100644 --- a/gcc/ada/g-dyntab.adb +++ b/gcc/ada/g-dyntab.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -328,9 +328,7 @@ package body GNAT.Dynamic_Tables is -- Start of processing for Sort_Table begin - Heap_Sort.Sort (Natural (Last (Table) - First) + 1); - end Sort_Table; end GNAT.Dynamic_Tables; diff --git a/gcc/ada/g-dyntab.ads b/gcc/ada/g-dyntab.ads index 1a7f1efc6d5..3d82330dac1 100644 --- a/gcc/ada/g-dyntab.ads +++ b/gcc/ada/g-dyntab.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -101,11 +101,10 @@ package GNAT.Dynamic_Tables is -- safety is not compromised by this approach. type Table_Ptr is access all Big_Table_Type; - -- The table is actually represented as a pointer to allow - -- reallocation. + -- The table is actually represented as a pointer to allow reallocation type Table_Private is private; - -- table private data that is not exported in Instance. + -- Table private data that is not exported in Instance type Instance is record Table : aliased Table_Ptr := null; diff --git a/gcc/ada/g-eacodu-vms.adb b/gcc/ada/g-eacodu-vms.adb index 7bab036648d..d2a8f3930ac 100644 --- a/gcc/ada/g-eacodu-vms.adb +++ b/gcc/ada/g-eacodu-vms.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,7 +31,7 @@ -- -- ------------------------------------------------------------------------------ --- This is the VMS version. +-- This is the VMS version with System; with System.Aux_DEC; diff --git a/gcc/ada/g-enblsp-vms-alpha.adb b/gcc/ada/g-enblsp-vms-alpha.adb index 4410a114ea9..97af39864c7 100644 --- a/gcc/ada/g-enblsp-vms-alpha.adb +++ b/gcc/ada/g-enblsp-vms-alpha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ -- for use by the VMS GNAT.Expect package (g-expect-vms.adb). This package -- should not be directly with'ed by an application program. --- This version is for Alpha/VMS. +-- This version is for Alpha/VMS separate (GNAT.Expect) procedure Non_Blocking_Spawn @@ -75,7 +75,7 @@ begin raise Invalid_Process; end if; - -- Fork a new process. It's not possible to do this in a subprogram. + -- Fork a new process (it is not possible to do this in a subprogram) if Alloc_Vfork_Blocks >= 0 then Descriptor.Pid := Get_Current_Invo_Context (Get_Vfork_Jmpbuf); @@ -83,10 +83,10 @@ begin Descriptor.Pid := -1; end if; - -- Are we now in the child (or, for Windows, still in the common - -- process). + -- Are we now in the child if Descriptor.Pid = Null_Pid then + -- Prepare an array of arguments to pass to C Arg := new String (1 .. Command_With_Path'Length + 1); diff --git a/gcc/ada/g-enblsp-vms-ia64.adb b/gcc/ada/g-enblsp-vms-ia64.adb index 0224a3decbb..2a1fee8ffbd 100644 --- a/gcc/ada/g-enblsp-vms-ia64.adb +++ b/gcc/ada/g-enblsp-vms-ia64.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ -- for use by the VMS GNAT.Expect package (g-expect-vms.adb). This package -- should not be directly with'ed by an application program. --- This version is for IA64/VMS. +-- This version is for IA64/VMS separate (GNAT.Expect) procedure Non_Blocking_Spawn @@ -73,7 +73,7 @@ begin raise Invalid_Process; end if; - -- Fork a new process. It's not possible to do this in a subprogram. + -- Fork a new process (it is not possible to do this in a subprogram) if Alloc_Vfork_Blocks >= 0 then Descriptor.Pid := Setjmp1 (Get_Vfork_Jmpbuf); @@ -81,10 +81,10 @@ begin Descriptor.Pid := -1; end if; - -- Are we now in the child (or, for Windows, still in the common - -- process). + -- Are we now in the child if Descriptor.Pid = Null_Pid then + -- Prepare an array of arguments to pass to C Arg := new String (1 .. Command_With_Path'Length + 1); diff --git a/gcc/ada/g-excact.adb b/gcc/ada/g-excact.adb index c27ab088833..bd5e4c0cafd 100644 --- a/gcc/ada/g-excact.adb +++ b/gcc/ada/g-excact.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-excact.ads b/gcc/ada/g-excact.ads index f57a5210198..09b481ba4e3 100644 --- a/gcc/ada/g-excact.ads +++ b/gcc/ada/g-excact.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,7 +31,7 @@ -- -- ------------------------------------------------------------------------------ --- This package provides support for callbacks on exceptions. +-- This package provides support for callbacks on exceptions -- These callbacks are called immediately when either a specific exception, -- or any exception, is raised, before any other actions taken by raise, in diff --git a/gcc/ada/g-except.ads b/gcc/ada/g-except.ads index 6ad0673306e..9daa08d5d56 100644 --- a/gcc/ada/g-except.ads +++ b/gcc/ada/g-except.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -46,7 +46,7 @@ package GNAT.Exceptions is pragma Pure; type Exception_Type is limited null record; - -- Type used to specify which exception to raise. + -- Type used to specify which exception to raise -- Really Exception_Type is Exception_Id, but Exception_Id can't be -- used directly since it is declared in the non-pure unit Ada.Exceptions, diff --git a/gcc/ada/g-exctra.adb b/gcc/ada/g-exctra.adb index c05f964bc0b..7d51ba4b79b 100644 --- a/gcc/ada/g-exctra.adb +++ b/gcc/ada/g-exctra.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2002 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -48,8 +48,7 @@ package body GNAT.Exception_Traces is function Decorator_Wrapper (Traceback : System.Address; - Len : Natural) - return String; + Len : Natural) return String; -- The wrapper to be called when a decorator is in place for exception -- backtraces. -- @@ -68,8 +67,7 @@ package body GNAT.Exception_Traces is function Decorator_Wrapper (Traceback : System.Address; - Len : Natural) - return String + Len : Natural) return String is Decorator_Traceback : Tracebacks_Array (1 .. Len); for Decorator_Traceback'Address use Traceback; diff --git a/gcc/ada/g-exctra.ads b/gcc/ada/g-exctra.ads index df103151719..b11a23e2e91 100644 --- a/gcc/ada/g-exctra.ads +++ b/gcc/ada/g-exctra.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -34,18 +34,18 @@ -- This package provides an interface allowing to control *automatic* output -- to standard error upon exception occurrences (as opposed to explicit -- generation of traceback information using GNAT.Traceback). --- + -- This output includes the basic information associated with the exception -- (name, message) as well as a backtrace of the call chain at the point -- where the exception occurred. This backtrace is only output if the call -- chain information is available, depending if the binder switch dedicated -- to that purpose has been used or not. --- + -- The default backtrace is in the form of absolute code locations which may -- be converted to corresponding source locations using the addr2line utility -- or from within GDB. Please refer to GNAT.Traceback for information about -- what is necessary to be able to exploit thisg possibility. --- + -- The backtrace output can also be customized by way of a "decorator" which -- may return any string output in association with a provided call chain. @@ -72,7 +72,7 @@ package GNAT.Exception_Traces is -- traces identified by the above trace kind values. procedure Trace_On (Kind : Trace_Kind); - -- Activate the traces denoted by Kind. + -- Activate the traces denoted by Kind procedure Trace_Off; -- Stop the tracing requested by the last call to Trace_On. diff --git a/gcc/ada/g-expect-vms.adb b/gcc/ada/g-expect-vms.adb index cbf8c724302..b37449f7e33 100644 --- a/gcc/ada/g-expect-vms.adb +++ b/gcc/ada/g-expect-vms.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,7 +31,7 @@ -- -- ------------------------------------------------------------------------------ --- This is the VMS version. +-- This is the VMS version with System; use System; with Ada.Calendar; use Ada.Calendar; @@ -113,7 +113,7 @@ package body GNAT.Expect is function Waitpid (Pid : Process_Id) return Integer; pragma Import (C, Waitpid, "__gnat_waitpid"); - -- Wait for a specific process id, and return its exit code. + -- Wait for a specific process id, and return its exit code --------- -- "+" -- @@ -330,7 +330,7 @@ package body GNAT.Expect is -- Calculate the timeout for the next turn. -- Note that Timeout is, from the caller's perspective, the maximum -- time until a match, not the maximum time until some output is - -- read, and thus can not be reused as is for Expect_Internal. + -- read, and thus cannot be reused as is for Expect_Internal. if Timeout /= -1 then Timeout_Tmp := Integer (Try_Until - Clock) * 1000; @@ -660,7 +660,7 @@ package body GNAT.Expect is Descriptors (J).Buffer_Size - N; end if; - -- Keep what we read in the buffer. + -- Keep what we read in the buffer Descriptors (J).Buffer (Descriptors (J).Buffer_Index + 1 .. @@ -1046,7 +1046,7 @@ package body GNAT.Expect is is begin Kill (Descriptor.Pid, Signal); - -- ??? Need to check process status here. + -- ??? Need to check process status here end Send_Signal; --------------------------------- diff --git a/gcc/ada/g-expect.adb b/gcc/ada/g-expect.adb index e94d5b657a1..1cb07881f12 100644 --- a/gcc/ada/g-expect.adb +++ b/gcc/ada/g-expect.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -89,8 +89,9 @@ package body GNAT.Expect is procedure Dup2 (Old_Fd, New_Fd : File_Descriptor); pragma Import (C, Dup2); - procedure Kill (Pid : Process_Id; Sig_Num : Integer); + procedure Kill (Pid : Process_Id; Sig_Num : Integer; Close : Integer); pragma Import (C, Kill, "__gnat_kill"); + -- if Close is set to 1 all OS resources used by the Pid must be freed function Create_Pipe (Pipe : access Pipe_Type) return Integer; pragma Import (C, Create_Pipe, "__gnat_pipe"); @@ -221,7 +222,7 @@ package body GNAT.Expect is -- ??? Should have timeouts for different signals - Kill (Descriptor.Pid, 9); + Kill (Descriptor.Pid, 9, 0); GNAT.OS_Lib.Free (Descriptor.Buffer); Descriptor.Buffer_Size := 0; @@ -339,10 +340,11 @@ package body GNAT.Expect is return; end if; - -- Calculate the timeout for the next turn. + -- Calculate the timeout for the next turn + -- Note that Timeout is, from the caller's perspective, the maximum -- time until a match, not the maximum time until some output is - -- read, and thus can not be reused as is for Expect_Internal. + -- read, and thus cannot be reused as is for Expect_Internal. if Timeout /= -1 then Timeout_Tmp := Integer (Try_Until - Clock) * 1000; @@ -1148,7 +1150,7 @@ package body GNAT.Expect is Signal : Integer) is begin - Kill (Descriptor.Pid, Signal); + Kill (Descriptor.Pid, Signal, 1); -- ??? Need to check process status here end Send_Signal; diff --git a/gcc/ada/g-expect.ads b/gcc/ada/g-expect.ads index 2a82e4dd2c5..b47a3a487d7 100644 --- a/gcc/ada/g-expect.ads +++ b/gcc/ada/g-expect.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-flocon.ads b/gcc/ada/g-flocon.ads index 20d2a9a5716..ea60768db1a 100644 --- a/gcc/ada/g-flocon.ads +++ b/gcc/ada/g-flocon.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005 AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-heasor.ads b/gcc/ada/g-heasor.ads index 67c3ebe6f30..e3b406728cb 100644 --- a/gcc/ada/g-heasor.ads +++ b/gcc/ada/g-heasor.ads @@ -37,16 +37,19 @@ -- subprogram parameters, so that it can be used with different types with -- shared sorting code. --- See also GNAT.Heap_Sort_G and GNAT.Heap_Sort_A. These are older versions --- of this routine. In some cases GNAT.Heap_Sort_G may be a little faster --- than GNAT.Heap_Sort, at the expense of generic code duplication and a --- less convenient interface. The generic version also has the advantage --- of being Pure, while this unit can only be Preelaborate. - -- This heapsort algorithm uses approximately N*log(N) compares in the -- worst case and is in place with no additional storage required. See -- the body for exact details of the algorithm used. +-- See also GNAT.Heap_Sort_G which is a generic version that will be faster +-- since the overhead of the indirect calls is avoided, at the expense of +-- generic code duplication and less convenient interface. The generic version +-- also has the advantage of being Pure, while this unit can only be +-- Preelaborate, because of the access types. + +-- Note: GNAT.Heap_Sort replaces and obsoletes GNAT.Heap_Sort_A, which is +-- retained in the GNAT library for backwards compatibility. + package GNAT.Heap_Sort is pragma Preelaborate; diff --git a/gcc/ada/g-hesorg.ads b/gcc/ada/g-hesorg.ads index 3f4d2a0721b..04f2371d5b0 100644 --- a/gcc/ada/g-hesorg.ads +++ b/gcc/ada/g-hesorg.ads @@ -58,14 +58,16 @@ generic with procedure Move (From : Natural; To : Natural); -- A procedure that moves the data item with index value From to the data -- item with index value To (the old value in To being lost). An index - -- value of zero is used for moves from and to a single temporary location + -- value of zero is used for moves from and to a single temporary location. + -- For best efficiency, this routine should be marked as inlined. with function Lt (Op1, Op2 : Natural) return Boolean; -- A function that compares two items and returns True if the item with -- index Op1 is less than the item with Index Op2, and False if the Op1 -- item is greater than the Op2 item. If the two items are equal, then -- it does not matter whether True or False is returned (it is slightly - -- more efficient to return False). + -- more efficient to return False). For best efficiency, this routine + -- should be marked as inlined. -- Note on use of temporary location diff --git a/gcc/ada/g-io.adb b/gcc/ada/g-io.adb index 4d5f4ec1c8d..c5c762bc569 100644 --- a/gcc/ada/g-io.adb +++ b/gcc/ada/g-io.adb @@ -42,19 +42,15 @@ package body GNAT.IO is --------- procedure Get (X : out Integer) is - function Get_Int return Integer; pragma Import (C, Get_Int, "get_int"); - begin X := Get_Int; end Get; procedure Get (C : out Character) is - function Get_Char return Character; pragma Import (C, Get_Char, "get_char"); - begin C := Get_Char; end Get; @@ -108,7 +104,6 @@ package body GNAT.IO is end Put; procedure Put (File : File_Type; X : Integer) is - procedure Put_Int (X : Integer); pragma Import (C, Put_Int, "put_int"); @@ -128,7 +123,6 @@ package body GNAT.IO is end Put; procedure Put (File : in File_Type; C : Character) is - procedure Put_Char (C : Character); pragma Import (C, Put_Char, "put_char"); diff --git a/gcc/ada/g-locfil.ads b/gcc/ada/g-locfil.ads index 6bc5af04da0..8bdc2be635e 100644 --- a/gcc/ada/g-locfil.ads +++ b/gcc/ada/g-locfil.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1995-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1995-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-md5.adb b/gcc/ada/g-md5.adb index e072b716c5c..2146c19773e 100644 --- a/gcc/ada/g-md5.adb +++ b/gcc/ada/g-md5.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -138,7 +138,7 @@ package body GNAT.MD5 is procedure Transform (C : in out Context; Block : String); - -- Process one block of 64 characters. + -- Process one block of 64 characters ------------ -- Decode -- @@ -148,7 +148,7 @@ package body GNAT.MD5 is (Block : String; X : out Sixteen_Words) is - Cur : Positive := Block'First; + Cur : Positive := Block'First; begin pragma Assert (Block'Length = 64); @@ -171,7 +171,7 @@ package body GNAT.MD5 is Result : Message_Digest; Cur : Natural := 1; - -- Index in Result where the next character will be placed. + -- Index in Result where the next character will be placed Last_Block : String (1 .. 64); @@ -519,7 +519,6 @@ package body GNAT.MD5 is function Wide_Digest (W : Wide_String) return Message_Digest is C : Context; - begin Wide_Update (C, W); return Digest (C); @@ -533,7 +532,6 @@ package body GNAT.MD5 is (C : in out Context; Input : Wide_String) is - String_Input : String (1 .. 2 * Input'Length); Cur : Positive := 1; diff --git a/gcc/ada/g-md5.ads b/gcc/ada/g-md5.ads index f41e7b7219c..2fff917efba 100644 --- a/gcc/ada/g-md5.ads +++ b/gcc/ada/g-md5.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -70,7 +70,7 @@ package GNAT.MD5 is -- the same final context as a call with the concatenation of the inputs. subtype Message_Digest is String (1 .. 32); - -- The string type returned by function Digest. + -- The string type returned by function Digest function Digest (C : Context) return Message_Digest; -- Extracts the Message-Digest from a context. This function should be @@ -88,6 +88,7 @@ package GNAT.MD5 is private -- Magic numbers + Initial_A : constant := 16#67452301#; Initial_B : constant := 16#EFCDAB89#; Initial_C : constant := 16#98BADCFE#; diff --git a/gcc/ada/g-moreex.adb b/gcc/ada/g-moreex.adb index 63dca44b804..46484d8406a 100644 --- a/gcc/ada/g-moreex.adb +++ b/gcc/ada/g-moreex.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-os_lib.adb b/gcc/ada/g-os_lib.adb index 825c05c5786..80db696b517 100644 --- a/gcc/ada/g-os_lib.adb +++ b/gcc/ada/g-os_lib.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1995-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1995-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -98,13 +98,14 @@ package body GNAT.OS_Lib is Blocking : Boolean); -- Internal routine to implement the two Spawn (blocking/non blocking) -- routines. If Blocking is set to True then the spawn is blocking - -- otherwise it is non blocking. In this latter case the Pid contains - -- the process id number. The first three parameters are as in Spawn. - -- Note that Spawn_Internal normalizes the argument list before calling - -- the low level system spawn routines (see Normalize_Arguments). Note - -- that Normalize_Arguments is designed to do nothing if it is called - -- more than once, so calling Normalize_Arguments before calling one - -- of the spawn routines is fine. + -- otherwise it is non blocking. In this latter case the Pid contains the + -- process id number. The first three parameters are as in Spawn. Note that + -- Spawn_Internal normalizes the argument list before calling the low level + -- system spawn routines (see Normalize_Arguments). + -- + -- Note: Normalize_Arguments is designed to do nothing if it is called more + -- than once, so calling Normalize_Arguments before calling one of the + -- spawn routines is fine. function To_Path_String_Access (Path_Addr : Address; @@ -250,10 +251,8 @@ package body GNAT.OS_Lib is --------------------- function C_String_Length (S : Address) return Integer is - function Strlen (S : Address) return Integer; pragma Import (C, Strlen, "strlen"); - begin if S = Null_Address then return 0; @@ -333,6 +332,8 @@ package body GNAT.OS_Lib is return C = Directory_Separator or else C = '/'; end Is_Dirsep; + -- Start of processing for Build_Path + begin -- Find base file name @@ -504,8 +505,7 @@ package body GNAT.OS_Lib is Dest : constant String := Build_Path (Pathname, Name); begin - -- If the target file exists, we have an error - -- otherwise do the copy. + -- If target file exists, we have an error, else do copy if Is_Regular_File (Dest) then raise Copy_Error; @@ -520,7 +520,7 @@ package body GNAT.OS_Lib is Copy_To (Pathname); end if; - -- Overwrite case, destination file may or may not exist + -- Overwrite case (destination file may or may not exist) when Overwrite => if Is_Directory (Pathname) then @@ -529,7 +529,7 @@ package body GNAT.OS_Lib is Copy_To (Pathname); end if; - -- Appending case, destination file may or may not exist + -- Append case (destination file may or may not exist) when Append => @@ -537,8 +537,8 @@ package body GNAT.OS_Lib is if Is_Regular_File (Pathname) then - -- Append mode and destination file exists, append data - -- at the end of Pathname. + -- Append mode and destination file exists, append data at the + -- end of Pathname. From := Open_Read (Name, Binary); To := Open_Read_Write (Pathname, Binary); @@ -857,7 +857,6 @@ package body GNAT.OS_Lib is function File_Time_Stamp (FD : File_Descriptor) return OS_Time is function File_Time (FD : File_Descriptor) return OS_Time; pragma Import (C, File_Time, "__gnat_file_time_fd"); - begin return File_Time (FD); end File_Time_Stamp; @@ -865,14 +864,12 @@ package body GNAT.OS_Lib is function File_Time_Stamp (Name : C_File_Name) return OS_Time is function File_Time (Name : Address) return OS_Time; pragma Import (C, File_Time, "__gnat_file_time_name"); - begin return File_Time (Name); end File_Time_Stamp; function File_Time_Stamp (Name : String) return OS_Time is F_Name : String (1 .. Name'Length + 1); - begin F_Name (1 .. Name'Length) := Name; F_Name (F_Name'Last) := ASCII.NUL; @@ -1152,7 +1149,6 @@ package body GNAT.OS_Lib is (Name : Address; Length : Integer) return Integer; pragma Import (C, Is_Absolute_Path, "__gnat_is_absolute_path"); - begin return Is_Absolute_Path (Name'Address, Name'Length) /= 0; end Is_Absolute_Path; @@ -1164,14 +1160,12 @@ package body GNAT.OS_Lib is function Is_Directory (Name : C_File_Name) return Boolean is function Is_Directory (Name : Address) return Integer; pragma Import (C, Is_Directory, "__gnat_is_directory"); - begin return Is_Directory (Name) /= 0; end Is_Directory; function Is_Directory (Name : String) return Boolean is F_Name : String (1 .. Name'Length + 1); - begin F_Name (1 .. Name'Length) := Name; F_Name (F_Name'Last) := ASCII.NUL; @@ -1185,14 +1179,12 @@ package body GNAT.OS_Lib is function Is_Regular_File (Name : C_File_Name) return Boolean is function Is_Regular_File (Name : Address) return Integer; pragma Import (C, Is_Regular_File, "__gnat_is_regular_file"); - begin return Is_Regular_File (Name) /= 0; end Is_Regular_File; function Is_Regular_File (Name : String) return Boolean is F_Name : String (1 .. Name'Length + 1); - begin F_Name (1 .. Name'Length) := Name; F_Name (F_Name'Last) := ASCII.NUL; @@ -1206,14 +1198,12 @@ package body GNAT.OS_Lib is function Is_Readable_File (Name : C_File_Name) return Boolean is function Is_Readable_File (Name : Address) return Integer; pragma Import (C, Is_Readable_File, "__gnat_is_readable_file"); - begin return Is_Readable_File (Name) /= 0; end Is_Readable_File; function Is_Readable_File (Name : String) return Boolean is F_Name : String (1 .. Name'Length + 1); - begin F_Name (1 .. Name'Length) := Name; F_Name (F_Name'Last) := ASCII.NUL; @@ -1227,14 +1217,12 @@ package body GNAT.OS_Lib is function Is_Writable_File (Name : C_File_Name) return Boolean is function Is_Writable_File (Name : Address) return Integer; pragma Import (C, Is_Writable_File, "__gnat_is_writable_file"); - begin return Is_Writable_File (Name) /= 0; end Is_Writable_File; function Is_Writable_File (Name : String) return Boolean is F_Name : String (1 .. Name'Length + 1); - begin F_Name (1 .. Name'Length) := Name; F_Name (F_Name'Last) := ASCII.NUL; @@ -1248,14 +1236,12 @@ package body GNAT.OS_Lib is function Is_Symbolic_Link (Name : C_File_Name) return Boolean is function Is_Symbolic_Link (Name : Address) return Integer; pragma Import (C, Is_Symbolic_Link, "__gnat_is_symbolic_link"); - begin return Is_Symbolic_Link (Name) /= 0; end Is_Symbolic_Link; function Is_Symbolic_Link (Name : String) return Boolean is F_Name : String (1 .. Name'Length + 1); - begin F_Name (1 .. Name'Length) := Name; F_Name (F_Name'Last) := ASCII.NUL; @@ -1370,18 +1356,15 @@ package body GNAT.OS_Lib is return Process_Id is Saved_Output : File_Descriptor; - Saved_Error : File_Descriptor := Invalid_FD; - -- We need to initialize Saved_Error to Invalid_FD to avoid - -- a compiler warning that this variable may be used before - -- it is initialized (which can not happen, but the compiler - -- is not smart enough to figure this out). - Pid : Process_Id; + Saved_Error : File_Descriptor := Invalid_FD; -- prevent warning + Pid : Process_Id; begin if Output_File_Descriptor = Invalid_FD then return Invalid_Pid; end if; -- Set standard output and, if specified, error to the temporary file + Saved_Output := Dup (Standout); Dup2 (Output_File_Descriptor, Standout); @@ -1417,11 +1400,10 @@ package body GNAT.OS_Lib is (Program_Name : String; Args : Argument_List; Output_File : String; - Err_To_Out : Boolean := True) - return Process_Id + Err_To_Out : Boolean := True) return Process_Id is Output_File_Descriptor : constant File_Descriptor := - Create_Output_Text_File (Output_File); + Create_Output_Text_File (Output_File); Result : Process_Id; begin @@ -1531,6 +1513,8 @@ package body GNAT.OS_Lib is end if; end Quote_Argument; + -- Start of processing for Normalize_Arguments + begin if Argument_Needs_Quote then for K in Args'Range loop @@ -1857,6 +1841,7 @@ package body GNAT.OS_Lib is end if; -- Add the ASCII.NUL to be able to call the C function chdir + Path (Pos + 1) := ASCII.NUL; Status := Change_Dir (Path (1 .. Pos + 1)); @@ -1890,13 +1875,13 @@ package body GNAT.OS_Lib is -- Start the conversions - -- If this is not finished after Max_Iterations, give up and - -- return an empty string. + -- If this is not finished after Max_Iterations, give up and return an + -- empty string. for J in 1 .. Max_Iterations loop - -- If we don't have an absolute pathname, prepend - -- the directory Reference_Dir. + -- If we don't have an absolute pathname, prepend the directory + -- Reference_Dir. if Last = 1 and then not Is_Absolute_Path (Path_Buffer (1 .. End_Path)) @@ -1946,8 +1931,8 @@ package body GNAT.OS_Lib is end if; end loop; - -- Find the end of the current field: last character - -- or the one preceding the next directory separator. + -- Find the end of the current field: last character or the one + -- preceding the next directory separator. while Finish < End_Path and then Path_Buffer (Finish + 1) /= Directory_Separator @@ -2058,11 +2043,10 @@ package body GNAT.OS_Lib is -- Too many iterations: give up - -- This can happen when there is a circularity in the symbolic links: - -- A is a symbolic link for B, which itself is a symbolic link, and - -- the target of B or of another symbolic link target of B is A. - -- In this case, we return an empty string to indicate failure to - -- resolve. + -- This can happen when there is a circularity in the symbolic links: A + -- is a symbolic link for B, which itself is a symbolic link, and the + -- target of B or of another symbolic link target of B is A. In this + -- case, we return an empty string to indicate failure to resolve. return ""; end Normalize_Pathname; @@ -2126,9 +2110,9 @@ package body GNAT.OS_Lib is ---------- function Read - (FD : File_Descriptor; - A : System.Address; - N : Integer) return Integer + (FD : File_Descriptor; + A : System.Address; + N : Integer) return Integer is begin return Integer (System.CRTL.read @@ -2279,11 +2263,7 @@ package body GNAT.OS_Lib is Err_To_Out : Boolean := True) is Saved_Output : File_Descriptor; - Saved_Error : File_Descriptor := Invalid_FD; - -- We need to initialize Saved_Error to Invalid_FD to avoid - -- a compiler warning that this variable may be used before - -- it is initialized (which can not happen, but the compiler - -- is not smart enough to figure this out). + Saved_Error : File_Descriptor := Invalid_FD; -- prevent compiler warning begin -- Set standard output and error to the temporary file @@ -2373,15 +2353,15 @@ package body GNAT.OS_Lib is + Args_Length (Args); Command_Last : Natural := 0; Command : aliased Chars (1 .. Command_Len); - -- Command contains all characters of the Program_Name and Args, - -- all terminated by ASCII.NUL characters + -- Command contains all characters of the Program_Name and Args, all + -- terminated by ASCII.NUL characters Arg_List_Len : constant Positive := Args'Length + 2; Arg_List_Last : Natural := 0; Arg_List : aliased array (1 .. Arg_List_Len) of Char_Ptr; - -- List with pointers to NUL-terminated strings of the - -- Program_Name and the Args and terminated with a null pointer. - -- We rely on the default initialization for the last null pointer. + -- List with pointers to NUL-terminated strings of the Program_Name + -- and the Args and terminated with a null pointer. We rely on the + -- default initialization for the last null pointer. procedure Add_To_Command (S : String); -- Add S and a NUL character to Command, updating Last @@ -2403,8 +2383,10 @@ package body GNAT.OS_Lib is begin Command_Last := Command_Last + S'Length; - -- Move characters one at a time, because Command has - -- aliased components. + -- Move characters one at a time, because Command has aliased + -- components. + + -- But not volatile, so why is this necessary ??? for J in S'Range loop Command (First + J - S'First) := S (J); @@ -2509,9 +2491,9 @@ package body GNAT.OS_Lib is ----------- function Write - (FD : File_Descriptor; - A : System.Address; - N : Integer) return Integer + (FD : File_Descriptor; + A : System.Address; + N : Integer) return Integer is begin return Integer (System.CRTL.write diff --git a/gcc/ada/g-os_lib.ads b/gcc/ada/g-os_lib.ads index 17102ac22cb..6c09b607252 100644 --- a/gcc/ada/g-os_lib.ads +++ b/gcc/ada/g-os_lib.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1995-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -349,16 +349,16 @@ package GNAT.OS_Lib is -- platforms, Success is always set to False. function Read - (FD : File_Descriptor; - A : System.Address; - N : Integer) return Integer; + (FD : File_Descriptor; + A : System.Address; + N : Integer) return Integer; -- Read N bytes to address A from file referenced by FD. Returned value is -- count of bytes actually read, which can be less than N at EOF. function Write - (FD : File_Descriptor; - A : System.Address; - N : Integer) return Integer; + (FD : File_Descriptor; + A : System.Address; + N : Integer) return Integer; -- Write N bytes from address A to file referenced by FD. The returned -- value is the number of bytes written, which can be less than N if a -- disk full condition was detected. @@ -718,8 +718,7 @@ package GNAT.OS_Lib is (Program_Name : String; Args : Argument_List; Output_File_Descriptor : File_Descriptor; - Err_To_Out : Boolean := True) - return Process_Id; + Err_To_Out : Boolean := True) return Process_Id; -- Similar to the procedure above, but redirects the output to the file -- designated by Output_File_Descriptor. If Err_To_Out is True, then the -- Standard Error output is also redirected. Invalid_Id is returned @@ -764,8 +763,7 @@ package GNAT.OS_Lib is -- there is no notion of executables under this OS. function Argument_String_To_List - (Arg_String : String) - return Argument_List_Access; + (Arg_String : String) return Argument_List_Access; -- Take a string that is a program and its arguments and parse it into an -- Argument_List. Note that the result is allocated on the heap, and must -- be freed by the programmer (when it is no longer needed) to avoid diff --git a/gcc/ada/g-pehage.adb b/gcc/ada/g-pehage.adb index a7826484615..b2fb8fa544d 100644 --- a/gcc/ada/g-pehage.adb +++ b/gcc/ada/g-pehage.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -309,7 +309,7 @@ package body GNAT.Perfect_Hash_Generators is -- Internal Table Management -- ------------------------------- - function Allocate (N : Natural; S : Natural := 1) return Table_Id; + function Allocate (N : Natural; S : Natural := 1) return Table_Id; -- Allocate N * S ints from IT table procedure Free_Tmp_Tables; diff --git a/gcc/ada/g-pehage.ads b/gcc/ada/g-pehage.ads index 5cff8c53dcc..5ba3fc5d58c 100644 --- a/gcc/ada/g-pehage.ads +++ b/gcc/ada/g-pehage.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-regexp.adb b/gcc/ada/g-regexp.adb index 22275a5f4f5..b89129014c1 100644 --- a/gcc/ada/g-regexp.adb +++ b/gcc/ada/g-regexp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -180,7 +180,7 @@ package body GNAT.Regexp is (M : String; Index : Integer); pragma No_Return (Raise_Exception); - -- Raise an exception, indicating an error at character Index in S. + -- Raise an exception, indicating an error at character Index in S -------------------- -- Create_Mapping -- @@ -330,7 +330,7 @@ package body GNAT.Regexp is if not Glob then if J = S'First then Raise_Exception - ("'*', '+', '?' and '|' operators can not be in " + ("'*', '+', '?' and '|' operators cannot be in " & "first position in regular expression", J); end if; end if; @@ -343,7 +343,7 @@ package body GNAT.Regexp is -- and cannot be found at the beginning of the line Raise_Exception - ("'*', '+', '?' and '|' operators can not be in " + ("'*', '+', '?' and '|' operators cannot be in " & "first position in regular expression", J); end if; @@ -389,7 +389,7 @@ package body GNAT.Regexp is procedure Add_Empty_Char (State : State_Index; To_State : State_Index); - -- Add a empty-character transition from State to To_State. + -- Add a empty-character transition from State to To_State procedure Create_Repetition (Repetition : Character; @@ -461,7 +461,7 @@ package body GNAT.Regexp is End_Index : Integer) return Integer; -- Returns the index of the last character of the next sub-expression - -- in Simple. Index can not be greater than End_Index + -- in Simple. Index cannot be greater than End_Index. -------------------- -- Add_Empty_Char -- @@ -829,7 +829,7 @@ package body GNAT.Regexp is procedure Add_Empty_Char (State : State_Index; To_State : State_Index); - -- Add a empty-character transition from State to To_State. + -- Add a empty-character transition from State to To_State procedure Create_Simple (Start_Index : Integer; @@ -1088,8 +1088,7 @@ package body GNAT.Regexp is (First_Table : Regexp_Array_Access; Num_States : State_Index; Start_State : State_Index; - End_State : State_Index) - return Regexp + End_State : State_Index) return Regexp is pragma Warnings (Off, Num_States); @@ -1301,8 +1300,7 @@ package body GNAT.Regexp is function Get (Table : Regexp_Array_Access; State : State_Index; - Column : Column_Index) - return State_Index + Column : Column_Index) return State_Index is begin if State <= Table'Last (1) diff --git a/gcc/ada/g-regexp.ads b/gcc/ada/g-regexp.ads index 188369e8532..7dada9c29cc 100644 --- a/gcc/ada/g-regexp.ads +++ b/gcc/ada/g-regexp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1998-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -131,8 +131,7 @@ package GNAT.Regexp is function Compile (Pattern : String; Glob : Boolean := False; - Case_Sensitive : Boolean := True) - return Regexp; + Case_Sensitive : Boolean := True) return Regexp; -- Compiles a regular expression S. If the syntax of the given -- expression is invalid (does not match above grammar, Error_In_Regexp -- is raised. If Glob is True, the pattern is considered as a 'globbing diff --git a/gcc/ada/g-regist.adb b/gcc/ada/g-regist.adb index c809b91d391..86d359853bd 100644 --- a/gcc/ada/g-regist.adb +++ b/gcc/ada/g-regist.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -81,14 +81,12 @@ package body GNAT.Registry is function RegDeleteKey (Key : HKEY; - lpSubKey : Address) - return LONG; + lpSubKey : Address) return LONG; pragma Import (Stdcall, RegDeleteKey, "RegDeleteKeyA"); function RegDeleteValue (Key : HKEY; - lpValueName : Address) - return LONG; + lpValueName : Address) return LONG; pragma Import (Stdcall, RegDeleteValue, "RegDeleteValueA"); function RegEnumValue @@ -99,8 +97,7 @@ package body GNAT.Registry is lpReserved : LPDWORD; lpType : LPDWORD; lpData : Address; - lpcbData : LPDWORD) - return LONG; + lpcbData : LPDWORD) return LONG; pragma Import (Stdcall, RegEnumValue, "RegEnumValueA"); function RegOpenKeyEx @@ -108,8 +105,7 @@ package body GNAT.Registry is lpSubKey : Address; ulOptions : DWORD; samDesired : REGSAM; - phkResult : PHKEY) - return LONG; + phkResult : PHKEY) return LONG; pragma Import (Stdcall, RegOpenKeyEx, "RegOpenKeyExA"); function RegQueryValueEx @@ -118,8 +114,7 @@ package body GNAT.Registry is lpReserved : LPDWORD; lpType : LPDWORD; lpData : Address; - lpcbData : LPDWORD) - return LONG; + lpcbData : LPDWORD) return LONG; pragma Import (Stdcall, RegQueryValueEx, "RegQueryValueExA"); function RegSetValueEx @@ -128,15 +123,14 @@ package body GNAT.Registry is Reserved : DWORD; dwType : DWORD; lpData : Address; - cbData : DWORD) - return LONG; + cbData : DWORD) return LONG; pragma Import (Stdcall, RegSetValueEx, "RegSetValueExA"); --------------------- -- Local Constants -- --------------------- - Max_Key_Size : constant := 1_024; + Max_Key_Size : constant := 1_024; -- Maximum number of characters for a registry key Max_Value_Size : constant := 2_048; @@ -147,7 +141,7 @@ package body GNAT.Registry is ----------------------- function To_C_Mode (Mode : Key_Mode) return REGSAM; - -- Returns the Win32 mode value for the Key_Mode value. + -- Returns the Win32 mode value for the Key_Mode value procedure Check_Result (Result : LONG; Message : String); -- Checks value Result and raise the exception Registry_Error if it is not @@ -188,8 +182,7 @@ package body GNAT.Registry is function Create_Key (From_Key : HKEY; Sub_Key : String; - Mode : Key_Mode := Read_Write) - return HKEY + Mode : Key_Mode := Read_Write) return HKEY is use type REGSAM; use type DWORD; @@ -318,8 +311,7 @@ package body GNAT.Registry is function Key_Exists (From_Key : HKEY; - Sub_Key : String) - return Boolean + Sub_Key : String) return Boolean is New_Key : HKEY; @@ -346,8 +338,7 @@ package body GNAT.Registry is function Open_Key (From_Key : HKEY; Sub_Key : String; - Mode : Key_Mode := Read_Only) - return HKEY + Mode : Key_Mode := Read_Only) return HKEY is use type REGSAM; @@ -376,8 +367,7 @@ package body GNAT.Registry is function Query_Value (From_Key : HKEY; Sub_Key : String; - Expand : Boolean := False) - return String + Expand : Boolean := False) return String is use GNAT.Directory_Operations; use type LONG; diff --git a/gcc/ada/g-regist.ads b/gcc/ada/g-regist.ads index 3b4e31d85b8..054ebb8a08b 100644 --- a/gcc/ada/g-regist.ads +++ b/gcc/ada/g-regist.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -57,7 +57,7 @@ package GNAT.Registry is HKEY_PERFORMANCE_DATA : constant HKEY; type Key_Mode is (Read_Only, Read_Write); - -- Access mode for the registry key. + -- Access mode for the registry key Registry_Error : exception; -- Registry_Error is raises by all routines below if a problem occurs @@ -66,8 +66,7 @@ package GNAT.Registry is function Create_Key (From_Key : HKEY; Sub_Key : String; - Mode : Key_Mode := Read_Write) - return HKEY; + Mode : Key_Mode := Read_Write) return HKEY; -- Open or create a key (named Sub_Key) in the Windows registry database. -- The key will be created under key From_Key. It returns the key handle. -- From_Key must be a valid handle to an already opened key or one of @@ -76,36 +75,34 @@ package GNAT.Registry is function Open_Key (From_Key : HKEY; Sub_Key : String; - Mode : Key_Mode := Read_Only) - return HKEY; + Mode : Key_Mode := Read_Only) return HKEY; -- Return a registry key handle for key named Sub_Key opened under key -- From_Key. It is possible to open a key at any level in the registry -- tree in a single call to Open_Key. procedure Close_Key (Key : HKEY); - -- Close registry key handle. All resources used by Key are released. + -- Close registry key handle. All resources used by Key are released function Key_Exists (From_Key : HKEY; Sub_Key : String) return Boolean; - -- Returns True if Sub_Key is defined under From_Key in the registry. + -- Returns True if Sub_Key is defined under From_Key in the registry function Query_Value (From_Key : HKEY; Sub_Key : String; - Expand : Boolean := False) - return String; + Expand : Boolean := False) return String; -- Returns the registry key's value associated with Sub_Key in From_Key -- registry key. If Expand is set to True and the Sub_Key is a -- REG_EXPAND_SZ the returned value will have the %name% variables -- replaced by the corresponding environment variable value. procedure Set_Value (From_Key : HKEY; Sub_Key : String; Value : String); - -- Add the pair (Sub_Key, Value) into From_Key registry key. + -- Add the pair (Sub_Key, Value) into From_Key registry key procedure Delete_Key (From_Key : HKEY; Sub_Key : String); - -- Remove Sub_Key from the registry key From_Key. + -- Remove Sub_Key from the registry key From_Key procedure Delete_Value (From_Key : HKEY; Sub_Key : String); - -- Remove the named value Sub_Key from the registry key From_Key. + -- Remove the named value Sub_Key from the registry key From_Key generic with procedure Action diff --git a/gcc/ada/g-regpat.adb b/gcc/ada/g-regpat.adb index 33e22b48c8a..c52b5f2c894 100644 --- a/gcc/ada/g-regpat.adb +++ b/gcc/ada/g-regpat.adb @@ -7,7 +7,7 @@ -- B o d y -- -- -- -- Copyright (C) 1986 by University of Toronto. -- --- Copyright (C) 1996-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -129,7 +129,7 @@ package body GNAT.Regpat is -- Complex loops CURLYX, -- 2num node Match this complex thing {n,m} times - -- The nums are coded on two characters each. + -- The nums are coded on two characters each WHILEM, -- no Do curly processing and see if rest matches @@ -233,15 +233,15 @@ package body GNAT.Regpat is procedure Set_In_Class (Bitmap : in out Character_Class; C : Character); - -- Set the entry to True for C in the class Bitmap. + -- Set the entry to True for C in the class Bitmap function Get_From_Class (Bitmap : Character_Class; C : Character) return Boolean; - -- Return True if the entry is set for C in the class Bitmap. + -- Return True if the entry is set for C in the class Bitmap procedure Reset_Class (Bitmap : out Character_Class); - -- Clear all the entries in the class Bitmap. + -- Clear all the entries in the class Bitmap pragma Inline (Set_In_Class); pragma Inline (Get_From_Class); @@ -282,7 +282,7 @@ package body GNAT.Regpat is function Get_Next_Offset (Program : Program_Data; IP : Pointer) return Pointer; - -- Get the offset field of a node. Used by Get_Next. + -- Get the offset field of a node. Used by Get_Next function Get_Next (Program : Program_Data; @@ -295,7 +295,7 @@ package body GNAT.Regpat is function Read_Natural (Program : Program_Data; IP : Pointer) return Natural; - -- Return the 2-byte natural coded at position IP. + -- Return the 2-byte natural coded at position IP -- All of the subprograms above are tiny and should be inlined @@ -389,10 +389,10 @@ package body GNAT.Regpat is -- Return value is the location of new opcode, ie old Emit_Ptr. procedure Emit_Natural (IP : Pointer; N : Natural); - -- Split N on two characters at position IP. + -- Split N on two characters at position IP procedure Emit_Class (Bitmap : Character_Class); - -- Emits a character class. + -- Emits a character class procedure Case_Emit (C : Character); -- Emit C, after converting is to lower-case if the regular @@ -454,7 +454,7 @@ package body GNAT.Regpat is function Next_Instruction (P : Pointer) return Pointer; -- Dig the "next" pointer out of a node - procedure Fail (M : in String); + procedure Fail (M : String); pragma No_Return (Fail); -- Fail with a diagnostic message, if possible @@ -572,9 +572,9 @@ package body GNAT.Regpat is -- Fail -- ---------- - procedure Fail (M : in String) is + procedure Fail (M : String) is begin - raise Expression_Error; + raise Expression_Error with M; end Fail; ------------------------- @@ -845,7 +845,7 @@ package body GNAT.Regpat is -- makes it hard to avoid. procedure Parse - (Parenthesized : in Boolean; + (Parenthesized : Boolean; Flags : out Expression_Flags; IP : out Pointer) is @@ -1206,7 +1206,7 @@ package body GNAT.Regpat is Parse_Pos := Parse_Pos + 1; end if; - -- First character can be ] or -, without closing the class. + -- First character can be ] or - without closing the class if Parse_Pos <= Parse_End and then (Expression (Parse_Pos) = ']' @@ -2389,7 +2389,7 @@ package body GNAT.Regpat is type Natural_Array is array (Match_Count range <>) of Natural; Matches_Tmp : Natural_Array (Matches_Full'Range); - -- Save the opening position of parenthesis. + -- Save the opening position of parenthesis Last_Paren : Natural := 0; -- Last parenthesis seen @@ -2414,7 +2414,7 @@ package body GNAT.Regpat is -- operators for complex expressions. Current_Curly : Current_Curly_Access := null; - -- The curly currently being processed. + -- The curly currently being processed ----------------------- -- Local Subprograms -- @@ -2430,7 +2430,7 @@ package body GNAT.Regpat is -- It only matches on things of length 1. -- Starting from Input_Pos, it matches at most Max CURLY. - function Try (Pos : in Positive) return Boolean; + function Try (Pos : Positive) return Boolean; -- Try to match at specific point function Match (IP : Pointer) return Boolean; @@ -2465,7 +2465,7 @@ package body GNAT.Regpat is pragma Inline (Index); pragma Inline (Repeat); - -- These are two complex functions, but used only once. + -- These are two complex functions, but used only once pragma Inline (Match_Whilem); pragma Inline (Match_Simple_Operator); @@ -3002,10 +3002,10 @@ package body GNAT.Regpat is Ln : Natural := 0; Lastloc : constant Natural := Cc.Lastloc; - -- Detection of 0-len. + -- Detection of 0-len begin - -- If degenerate scan matches "", assume scan done. + -- If degenerate scan matches "", assume scan done if Input_Pos = Cc.Lastloc and then N >= Cc.Min @@ -3031,7 +3031,7 @@ package body GNAT.Regpat is return False; end if; - -- First, just match a string of min scans. + -- First, just match a string of min scans if N < Cc.Min then Cc.Cur := N; @@ -3046,7 +3046,7 @@ package body GNAT.Regpat is return False; end if; - -- Prefer next over scan for minimal matching. + -- Prefer next over scan for minimal matching if not Cc.Greedy then Current_Curly := Cc.Old_Cc; @@ -3240,7 +3240,7 @@ package body GNAT.Regpat is -- Try -- --------- - function Try (Pos : in Positive) return Boolean is + function Try (Pos : Positive) return Boolean is begin Input_Pos := Pos; Last_Paren := 0; diff --git a/gcc/ada/g-regpat.ads b/gcc/ada/g-regpat.ads index 132d32f945c..42dc3f46ad1 100644 --- a/gcc/ada/g-regpat.ads +++ b/gcc/ada/g-regpat.ads @@ -206,7 +206,7 @@ package GNAT.Regpat is -- first version the regular expression has in fact to be compiled twice -- (first to compute the size, then to generate the byte code). - -- Note also that you can not use the function version of Compile if you + -- Note also that you cannot use the function version of Compile if you -- specify the size of the Pattern_Matcher, since the discriminants will -- most probably be different and you will get a Constraint_Error @@ -291,20 +291,20 @@ package GNAT.Regpat is --------------- Expression_Error : exception; - -- This exception is raised when trying to compile an invalid - -- regular expression. All subprograms taking an expression - -- as parameter may raise Expression_Error. + -- This exception is raised when trying to compile an invalid regular + -- expression. All subprograms taking an expression as parameter may raise + -- Expression_Error. Max_Paren_Count : constant := 255; - -- Maximum number of parenthesis in a regular expression. - -- This is limited by the size of a Character, as found in the - -- byte-compiled version of regular expressions. + -- Maximum number of parenthesis in a regular expression. This is limited + -- by the size of a Character, as found in the byte-compiled version of + -- regular expressions. Max_Curly_Repeat : constant := 32767; - -- Maximum number of repetition for the curly operator. - -- The digits in the {n}, {n,} and {n,m } operators can not be higher - -- than this constant, since they have to fit on two characters in the - -- byte-compiled version of regular expressions. + -- Maximum number of repetition for the curly operator. The digits in the + -- {n}, {n,} and {n,m } operators cannot be higher than this constant, + -- since they have to fit on two characters in the byte-compiled version of + -- regular expressions. Max_Program_Size : constant := 2**15 - 1; -- Maximum size that can be allocated for a program @@ -318,10 +318,10 @@ package GNAT.Regpat is -- and the programmer need not be concerned about it. There are two -- exceptions to this. First in the calls to Match, it is possible to -- specify a non-zero size that is known to be large enough. This can - -- slightly increase the efficiency by avoiding a copy. Second, in the - -- case of calling compile, it is possible using the procedural form - -- of Compile to use a single Pattern_Matcher variable for several - -- different expressions by setting its size sufficiently large. + -- slightly increase the efficiency by avoiding a copy. Second, in the case + -- of calling compile, it is possible using the procedural form of Compile + -- to use a single Pattern_Matcher variable for several different + -- expressions by setting its size sufficiently large. Auto_Size : constant := 0; -- Used in calls to Match to indicate that the Size should be set to @@ -362,33 +362,28 @@ package GNAT.Regpat is end record; type Match_Array is array (Match_Count range <>) of Match_Location; - -- The substring matching a given pair of parenthesis. - -- Index 0 is the whole substring that matched the full regular - -- expression. + -- The substring matching a given pair of parenthesis. Index 0 is the whole + -- substring that matched the full regular expression. -- - -- For instance, if your regular expression is something like: - -- "a(b*)(c+)", then Match_Array(1) will be the indexes of the - -- substring that matched "b*" and Match_Array(2) will be the substring - -- that matched "c+". + -- For instance, if your regular expression is something like: "a(b*)(c+)", + -- then Match_Array(1) will be the indexes of the substring that matched + -- "b*" and Match_Array(2) will be the substring that matched "c+". -- - -- The number of parenthesis groups that can be retrieved is unlimited, - -- and all the Match subprograms below can use a Match_Array of any size. - -- Indexes that do not have any matching parenthesis are set to - -- No_Match. + -- The number of parenthesis groups that can be retrieved is unlimited, and + -- all the Match subprograms below can use a Match_Array of any size. + -- Indexes that do not have any matching parenthesis are set to No_Match. No_Match : constant Match_Location := (First => 0, Last => 0); - -- The No_Match constant is (0, 0) to differentiate between - -- matching a null string at position 1, which uses (1, 0) - -- and no match at all. + -- The No_Match constant is (0, 0) to differentiate between matching a null + -- string at position 1, which uses (1, 0) and no match at all. --------------------------------- -- Pattern_Matcher Compilation -- --------------------------------- - -- The subprograms here are used to precompile regular expressions - -- for use in subsequent Match calls. Precompilation improves - -- efficiency if the same regular expression is to be used in - -- more than one Match call. + -- The subprograms here are used to precompile regular expressions for use + -- in subsequent Match calls. Precompilation improves efficiency if the + -- same regular expression is to be used in more than one Match call. type Pattern_Matcher (Size : Program_Size) is private; -- Type used to represent a regular expression compiled into byte code @@ -419,21 +414,21 @@ package GNAT.Regpat is Flags : Regexp_Flags := No_Flags); -- Compile a regular expression into into internal code - -- This procedure is significantly faster than the Compile function - -- since it avoids the extra step of precomputing the required size. + -- This procedure is significantly faster than the Compile function since + -- it avoids the extra step of precomputing the required size. -- -- However, it requires the user to provide a Pattern_Matcher variable -- whose size is preset to a large enough value. One advantage of this -- approach, in addition to the improved efficiency, is that the same -- Pattern_Matcher variable can be used to hold the compiled code for - -- several different regular expressions by setting a size that is - -- large enough to accomodate all possibilities. + -- several different regular expressions by setting a size that is large + -- enough to accomodate all possibilities. -- - -- In this version of the procedure call, the actual required code - -- size is returned. Also if Matcher.Size is zero on entry, then the - -- resulting code is not stored. A call with Matcher.Size set to Auto_Size - -- can thus be used to determine the space required for compiling the - -- given regular expression. + -- In this version of the procedure call, the actual required code size is + -- returned. Also if Matcher.Size is zero on entry, then the resulting code + -- is not stored. A call with Matcher.Size set to Auto_Size can thus be + -- used to determine the space required for compiling the given regular + -- expression. -- -- This function raises Storage_Error if Matcher is too small to hold -- the resulting code (i.e. Matcher.Size has too small a value). @@ -448,8 +443,8 @@ package GNAT.Regpat is (Matcher : out Pattern_Matcher; Expression : String; Flags : Regexp_Flags := No_Flags); - -- Same procedure as above, expect it does not return the final - -- program size, and Matcher.Size cannot be Auto_Size. +-- -- Same procedure as above, expect it does not return the final +-- -- program size, and Matcher.Size cannot be Auto_Size. function Paren_Count (Regexp : Pattern_Matcher) return Match_Count; pragma Inline (Paren_Count); diff --git a/gcc/ada/g-semaph.adb b/gcc/ada/g-semaph.adb index 43727eb71a7..13793a8624f 100644 --- a/gcc/ada/g-semaph.adb +++ b/gcc/ada/g-semaph.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2003-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-signal.adb b/gcc/ada/g-signal.adb index 209e287d2ba..1db9f082a3c 100644 --- a/gcc/ada/g-signal.adb +++ b/gcc/ada/g-signal.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-signal.ads b/gcc/ada/g-signal.ads index cd15ba48350..79d868f8de2 100644 --- a/gcc/ada/g-signal.ads +++ b/gcc/ada/g-signal.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-soccon-aix.ads b/gcc/ada/g-soccon-aix.ads index 3b361b51a14..06773f24c08 100644 --- a/gcc/ada/g-soccon-aix.ads +++ b/gcc/ada/g-soccon-aix.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ -- by the GNAT.Sockets package (g-socket.ads). This package should not be -- directly with'ed by an applications program. --- This is the version for powerpc-ibm-aix5.1.0.0 +-- This is the version for powerpc-ibm-aix5.3.0.0 -- This file is generated automatically, do not modify it by hand! Instead, -- make changes to gen-soccon.c and re-run it on each target. @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 16; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-darwin.ads b/gcc/ada/g-soccon-darwin.ads index 3927b789798..4ae827d3574 100644 --- a/gcc/ada/g-soccon-darwin.ads +++ b/gcc/ada/g-soccon-darwin.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-freebsd.ads b/gcc/ada/g-soccon-freebsd.ads index 29319a2bc0b..964e75bc83b 100644 --- a/gcc/ada/g-soccon-freebsd.ads +++ b/gcc/ada/g-soccon-freebsd.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 1024; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-hpux-ia64.ads b/gcc/ada/g-soccon-hpux-ia64.ads new file mode 100644 index 00000000000..ea7a63d21fa --- /dev/null +++ b/gcc/ada/g-soccon-hpux-ia64.ads @@ -0,0 +1,181 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- G N A T . S O C K E T S . C O N S T A N T S -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides target dependent definitions of constant for use +-- by the GNAT.Sockets package (g-socket.ads). This package should not be +-- directly with'ed by an applications program. + +-- This is the version for ia64-hp-hpux11.23 +-- This file is generated automatically, do not modify it by hand! Instead, +-- make changes to gen-soccon.c and re-run it on each target. + +package GNAT.Sockets.Constants is + + -------------- + -- Families -- + -------------- + + AF_INET : constant := 2; -- IPv4 address family + AF_INET6 : constant := 22; -- IPv6 address family + + ----------- + -- Modes -- + ----------- + + SOCK_STREAM : constant := 1; -- Stream socket + SOCK_DGRAM : constant := 2; -- Datagram socket + + ------------------- + -- Socket errors -- + ------------------- + + EACCES : constant := 13; -- Permission denied + EADDRINUSE : constant := 226; -- Address already in use + EADDRNOTAVAIL : constant := 227; -- Cannot assign address + EAFNOSUPPORT : constant := 225; -- Addr family not supported + EALREADY : constant := 244; -- Operation in progress + EBADF : constant := 9; -- Bad file descriptor + ECONNABORTED : constant := 231; -- Connection aborted + ECONNREFUSED : constant := 239; -- Connection refused + ECONNRESET : constant := 232; -- Connection reset by peer + EDESTADDRREQ : constant := 217; -- Destination addr required + EFAULT : constant := 14; -- Bad address + EHOSTDOWN : constant := 241; -- Host is down + EHOSTUNREACH : constant := 242; -- No route to host + EINPROGRESS : constant := 245; -- Operation now in progress + EINTR : constant := 4; -- Interrupted system call + EINVAL : constant := 22; -- Invalid argument + EIO : constant := 5; -- Input output error + EISCONN : constant := 234; -- Socket already connected + ELOOP : constant := 249; -- Too many symbolic lynks + EMFILE : constant := 24; -- Too many open files + EMSGSIZE : constant := 218; -- Message too long + ENAMETOOLONG : constant := 248; -- Name too long + ENETDOWN : constant := 228; -- Network is down + ENETRESET : constant := 230; -- Disconn. on network reset + ENETUNREACH : constant := 229; -- Network is unreachable + ENOBUFS : constant := 233; -- No buffer space available + ENOPROTOOPT : constant := 220; -- Protocol not available + ENOTCONN : constant := 235; -- Socket not connected + ENOTSOCK : constant := 216; -- Operation on non socket + EOPNOTSUPP : constant := 223; -- Operation not supported + EPFNOSUPPORT : constant := 224; -- Unknown protocol family + EPROTONOSUPPORT : constant := 221; -- Unknown protocol + EPROTOTYPE : constant := 219; -- Unknown protocol type + ESHUTDOWN : constant := 236; -- Cannot send once shutdown + ESOCKTNOSUPPORT : constant := 222; -- Socket type not supported + ETIMEDOUT : constant := 238; -- Connection timed out + ETOOMANYREFS : constant := 237; -- Too many references + EWOULDBLOCK : constant := 246; -- Operation would block + + ----------------- + -- Host errors -- + ----------------- + + HOST_NOT_FOUND : constant := 1; -- Unknown host + TRY_AGAIN : constant := 2; -- Host name lookup failure + NO_DATA : constant := 4; -- No data record for name + NO_RECOVERY : constant := 3; -- Non recoverable errors + + ------------------- + -- Control flags -- + ------------------- + + FIONBIO : constant := -2147195266; -- Set/clear non-blocking io + FIONREAD : constant := 1074030207; -- How many bytes to read + + -------------------- + -- Shutdown modes -- + -------------------- + + SHUT_RD : constant := 0; -- No more recv + SHUT_WR : constant := 1; -- No more send + SHUT_RDWR : constant := 2; -- No more recv/send + + --------------------- + -- Protocol levels -- + --------------------- + + SOL_SOCKET : constant := 65535; -- Options for socket level + IPPROTO_IP : constant := 0; -- Dummy protocol for IP + IPPROTO_UDP : constant := 17; -- UDP + IPPROTO_TCP : constant := 6; -- TCP + + ------------------- + -- Request flags -- + ------------------- + + MSG_OOB : constant := 1; -- Process out-of-band data + MSG_PEEK : constant := 2; -- Peek at incoming data + MSG_EOR : constant := 8; -- Send end of record + MSG_WAITALL : constant := 64; -- Wait for full reception + MSG_NOSIGNAL : constant := -1; -- No SIGPIPE on send + MSG_Forced_Flags : constant := 0; + -- Flags set on all send(2) calls + + -------------------- + -- Socket options -- + -------------------- + + TCP_NODELAY : constant := 1; -- Do not coalesce packets + SO_REUSEADDR : constant := 4; -- Bind reuse local address + SO_KEEPALIVE : constant := 8; -- Enable keep-alive msgs + SO_LINGER : constant := 128; -- Defer close to flush data + SO_BROADCAST : constant := 32; -- Can send broadcast msgs + SO_SNDBUF : constant := 4097; -- Set/get send buffer size + SO_RCVBUF : constant := 4098; -- Set/get recv buffer size + SO_SNDTIMEO : constant := 4101; -- Emission timeout + SO_RCVTIMEO : constant := 4102; -- Reception timeout + SO_ERROR : constant := 4103; -- Get/clear error status + IP_MULTICAST_IF : constant := 2; -- Set/get mcast interface + IP_MULTICAST_TTL : constant := 3; -- Set/get multicast TTL + IP_MULTICAST_LOOP : constant := 4; -- Set/get mcast loopback + IP_ADD_MEMBERSHIP : constant := 5; -- Join a multicast group + IP_DROP_MEMBERSHIP : constant := 6; -- Leave a multicast group + + ------------------- + -- System limits -- + ------------------- + + IOV_MAX : constant := 16; -- Maximum writev iovcnt + + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 8; -- tv_sec + SIZEOF_tv_usec : constant := 8; -- tv_usec + +end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-hpux.ads b/gcc/ada/g-soccon-hpux.ads index 9145146da38..0b6012e0ee6 100644 --- a/gcc/ada/g-soccon-hpux.ads +++ b/gcc/ada/g-soccon-hpux.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 16; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-interix.ads b/gcc/ada/g-soccon-interix.ads index 630e2bf16e3..31569d12da3 100644 --- a/gcc/ada/g-soccon-interix.ads +++ b/gcc/ada/g-soccon-interix.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-soccon-irix.ads b/gcc/ada/g-soccon-irix.ads index b07191f102c..3fd365c3470 100644 --- a/gcc/ada/g-soccon-irix.ads +++ b/gcc/ada/g-soccon-irix.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-linux-64.ads b/gcc/ada/g-soccon-linux-64.ads new file mode 100644 index 00000000000..fc8c507b3a7 --- /dev/null +++ b/gcc/ada/g-soccon-linux-64.ads @@ -0,0 +1,181 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- G N A T . S O C K E T S . C O N S T A N T S -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides target dependent definitions of constant for use +-- by the GNAT.Sockets package (g-socket.ads). This package should not be +-- directly with'ed by an applications program. + +-- This is the version for ia64-hp-linux-gnu +-- This file is generated automatically, do not modify it by hand! Instead, +-- make changes to gen-soccon.c and re-run it on each target. + +package GNAT.Sockets.Constants is + + -------------- + -- Families -- + -------------- + + AF_INET : constant := 2; -- IPv4 address family + AF_INET6 : constant := 10; -- IPv6 address family + + ----------- + -- Modes -- + ----------- + + SOCK_STREAM : constant := 1; -- Stream socket + SOCK_DGRAM : constant := 2; -- Datagram socket + + ------------------- + -- Socket errors -- + ------------------- + + EACCES : constant := 13; -- Permission denied + EADDRINUSE : constant := 98; -- Address already in use + EADDRNOTAVAIL : constant := 99; -- Cannot assign address + EAFNOSUPPORT : constant := 97; -- Addr family not supported + EALREADY : constant := 114; -- Operation in progress + EBADF : constant := 9; -- Bad file descriptor + ECONNABORTED : constant := 103; -- Connection aborted + ECONNREFUSED : constant := 111; -- Connection refused + ECONNRESET : constant := 104; -- Connection reset by peer + EDESTADDRREQ : constant := 89; -- Destination addr required + EFAULT : constant := 14; -- Bad address + EHOSTDOWN : constant := 112; -- Host is down + EHOSTUNREACH : constant := 113; -- No route to host + EINPROGRESS : constant := 115; -- Operation now in progress + EINTR : constant := 4; -- Interrupted system call + EINVAL : constant := 22; -- Invalid argument + EIO : constant := 5; -- Input output error + EISCONN : constant := 106; -- Socket already connected + ELOOP : constant := 40; -- Too many symbolic lynks + EMFILE : constant := 24; -- Too many open files + EMSGSIZE : constant := 90; -- Message too long + ENAMETOOLONG : constant := 36; -- Name too long + ENETDOWN : constant := 100; -- Network is down + ENETRESET : constant := 102; -- Disconn. on network reset + ENETUNREACH : constant := 101; -- Network is unreachable + ENOBUFS : constant := 105; -- No buffer space available + ENOPROTOOPT : constant := 92; -- Protocol not available + ENOTCONN : constant := 107; -- Socket not connected + ENOTSOCK : constant := 88; -- Operation on non socket + EOPNOTSUPP : constant := 95; -- Operation not supported + EPFNOSUPPORT : constant := 96; -- Unknown protocol family + EPROTONOSUPPORT : constant := 93; -- Unknown protocol + EPROTOTYPE : constant := 91; -- Unknown protocol type + ESHUTDOWN : constant := 108; -- Cannot send once shutdown + ESOCKTNOSUPPORT : constant := 94; -- Socket type not supported + ETIMEDOUT : constant := 110; -- Connection timed out + ETOOMANYREFS : constant := 109; -- Too many references + EWOULDBLOCK : constant := 11; -- Operation would block + + ----------------- + -- Host errors -- + ----------------- + + HOST_NOT_FOUND : constant := 1; -- Unknown host + TRY_AGAIN : constant := 2; -- Host name lookup failure + NO_DATA : constant := 4; -- No data record for name + NO_RECOVERY : constant := 3; -- Non recoverable errors + + ------------------- + -- Control flags -- + ------------------- + + FIONBIO : constant := 21537; -- Set/clear non-blocking io + FIONREAD : constant := 21531; -- How many bytes to read + + -------------------- + -- Shutdown modes -- + -------------------- + + SHUT_RD : constant := 0; -- No more recv + SHUT_WR : constant := 1; -- No more send + SHUT_RDWR : constant := 2; -- No more recv/send + + --------------------- + -- Protocol levels -- + --------------------- + + SOL_SOCKET : constant := 1; -- Options for socket level + IPPROTO_IP : constant := 0; -- Dummy protocol for IP + IPPROTO_UDP : constant := 17; -- UDP + IPPROTO_TCP : constant := 6; -- TCP + + ------------------- + -- Request flags -- + ------------------- + + MSG_OOB : constant := 1; -- Process out-of-band data + MSG_PEEK : constant := 2; -- Peek at incoming data + MSG_EOR : constant := 128; -- Send end of record + MSG_WAITALL : constant := 256; -- Wait for full reception + MSG_NOSIGNAL : constant := 16384; -- No SIGPIPE on send + MSG_Forced_Flags : constant := MSG_NOSIGNAL; + -- Flags set on all send(2) calls + + -------------------- + -- Socket options -- + -------------------- + + TCP_NODELAY : constant := 1; -- Do not coalesce packets + SO_REUSEADDR : constant := 2; -- Bind reuse local address + SO_KEEPALIVE : constant := 9; -- Enable keep-alive msgs + SO_LINGER : constant := 13; -- Defer close to flush data + SO_BROADCAST : constant := 6; -- Can send broadcast msgs + SO_SNDBUF : constant := 7; -- Set/get send buffer size + SO_RCVBUF : constant := 8; -- Set/get recv buffer size + SO_SNDTIMEO : constant := 21; -- Emission timeout + SO_RCVTIMEO : constant := 20; -- Reception timeout + SO_ERROR : constant := 4; -- Get/clear error status + IP_MULTICAST_IF : constant := 32; -- Set/get mcast interface + IP_MULTICAST_TTL : constant := 33; -- Set/get multicast TTL + IP_MULTICAST_LOOP : constant := 34; -- Set/get mcast loopback + IP_ADD_MEMBERSHIP : constant := 35; -- Join a multicast group + IP_DROP_MEMBERSHIP : constant := 36; -- Leave a multicast group + + ------------------- + -- System limits -- + ------------------- + + IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 8; -- tv_sec + SIZEOF_tv_usec : constant := 8; -- tv_usec + +end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-linux-ppc.ads b/gcc/ada/g-soccon-linux-ppc.ads new file mode 100644 index 00000000000..185a8da4d24 --- /dev/null +++ b/gcc/ada/g-soccon-linux-ppc.ads @@ -0,0 +1,181 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- G N A T . S O C K E T S . C O N S T A N T S -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides target dependent definitions of constant for use +-- by the GNAT.Sockets package (g-socket.ads). This package should not be +-- directly with'ed by an applications program. + +-- This is the version for powerpc-linux +-- This file is generated automatically, do not modify it by hand! Instead, +-- make changes to gen-soccon.c and re-run it on each target. + +package GNAT.Sockets.Constants is + + -------------- + -- Families -- + -------------- + + AF_INET : constant := 2; -- IPv4 address family + AF_INET6 : constant := 10; -- IPv6 address family + + ----------- + -- Modes -- + ----------- + + SOCK_STREAM : constant := 1; -- Stream socket + SOCK_DGRAM : constant := 2; -- Datagram socket + + ------------------- + -- Socket errors -- + ------------------- + + EACCES : constant := 13; -- Permission denied + EADDRINUSE : constant := 98; -- Address already in use + EADDRNOTAVAIL : constant := 99; -- Cannot assign address + EAFNOSUPPORT : constant := 97; -- Addr family not supported + EALREADY : constant := 114; -- Operation in progress + EBADF : constant := 9; -- Bad file descriptor + ECONNABORTED : constant := 103; -- Connection aborted + ECONNREFUSED : constant := 111; -- Connection refused + ECONNRESET : constant := 104; -- Connection reset by peer + EDESTADDRREQ : constant := 89; -- Destination addr required + EFAULT : constant := 14; -- Bad address + EHOSTDOWN : constant := 112; -- Host is down + EHOSTUNREACH : constant := 113; -- No route to host + EINPROGRESS : constant := 115; -- Operation now in progress + EINTR : constant := 4; -- Interrupted system call + EINVAL : constant := 22; -- Invalid argument + EIO : constant := 5; -- Input output error + EISCONN : constant := 106; -- Socket already connected + ELOOP : constant := 40; -- Too many symbolic lynks + EMFILE : constant := 24; -- Too many open files + EMSGSIZE : constant := 90; -- Message too long + ENAMETOOLONG : constant := 36; -- Name too long + ENETDOWN : constant := 100; -- Network is down + ENETRESET : constant := 102; -- Disconn. on network reset + ENETUNREACH : constant := 101; -- Network is unreachable + ENOBUFS : constant := 105; -- No buffer space available + ENOPROTOOPT : constant := 92; -- Protocol not available + ENOTCONN : constant := 107; -- Socket not connected + ENOTSOCK : constant := 88; -- Operation on non socket + EOPNOTSUPP : constant := 95; -- Operation not supported + EPFNOSUPPORT : constant := 96; -- Unknown protocol family + EPROTONOSUPPORT : constant := 93; -- Unknown protocol + EPROTOTYPE : constant := 91; -- Unknown protocol type + ESHUTDOWN : constant := 108; -- Cannot send once shutdown + ESOCKTNOSUPPORT : constant := 94; -- Socket type not supported + ETIMEDOUT : constant := 110; -- Connection timed out + ETOOMANYREFS : constant := 109; -- Too many references + EWOULDBLOCK : constant := 11; -- Operation would block + + ----------------- + -- Host errors -- + ----------------- + + HOST_NOT_FOUND : constant := 1; -- Unknown host + TRY_AGAIN : constant := 2; -- Host name lookup failure + NO_DATA : constant := 4; -- No data record for name + NO_RECOVERY : constant := 3; -- Non recoverable errors + + ------------------- + -- Control flags -- + ------------------- + + FIONBIO : constant := -2147195266; -- Set/clear non-blocking io + FIONREAD : constant := 1074030207; -- How many bytes to read + + -------------------- + -- Shutdown modes -- + -------------------- + + SHUT_RD : constant := 0; -- No more recv + SHUT_WR : constant := 1; -- No more send + SHUT_RDWR : constant := 2; -- No more recv/send + + --------------------- + -- Protocol levels -- + --------------------- + + SOL_SOCKET : constant := 1; -- Options for socket level + IPPROTO_IP : constant := 0; -- Dummy protocol for IP + IPPROTO_UDP : constant := 17; -- UDP + IPPROTO_TCP : constant := 6; -- TCP + + ------------------- + -- Request flags -- + ------------------- + + MSG_OOB : constant := 1; -- Process out-of-band data + MSG_PEEK : constant := 2; -- Peek at incoming data + MSG_EOR : constant := 128; -- Send end of record + MSG_WAITALL : constant := 256; -- Wait for full reception + MSG_NOSIGNAL : constant := 16384; -- No SIGPIPE on send + MSG_Forced_Flags : constant := MSG_NOSIGNAL; + -- Flags set on all send(2) calls + + -------------------- + -- Socket options -- + -------------------- + + TCP_NODELAY : constant := 1; -- Do not coalesce packets + SO_REUSEADDR : constant := 2; -- Bind reuse local address + SO_KEEPALIVE : constant := 9; -- Enable keep-alive msgs + SO_LINGER : constant := 13; -- Defer close to flush data + SO_BROADCAST : constant := 6; -- Can send broadcast msgs + SO_SNDBUF : constant := 7; -- Set/get send buffer size + SO_RCVBUF : constant := 8; -- Set/get recv buffer size + SO_SNDTIMEO : constant := 19; -- Emission timeout + SO_RCVTIMEO : constant := 18; -- Reception timeout + SO_ERROR : constant := 4; -- Get/clear error status + IP_MULTICAST_IF : constant := 32; -- Set/get mcast interface + IP_MULTICAST_TTL : constant := 33; -- Set/get multicast TTL + IP_MULTICAST_LOOP : constant := 34; -- Set/get mcast loopback + IP_ADD_MEMBERSHIP : constant := 35; -- Join a multicast group + IP_DROP_MEMBERSHIP : constant := 36; -- Leave a multicast group + + ------------------- + -- System limits -- + ------------------- + + IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + +end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-linux-x86.ads b/gcc/ada/g-soccon-linux-x86.ads new file mode 100644 index 00000000000..6b0521fcc04 --- /dev/null +++ b/gcc/ada/g-soccon-linux-x86.ads @@ -0,0 +1,181 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- G N A T . S O C K E T S . C O N S T A N T S -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides target dependent definitions of constant for use +-- by the GNAT.Sockets package (g-socket.ads). This package should not be +-- directly with'ed by an applications program. + +-- This is the version for i686-pc-linux-gnu +-- This file is generated automatically, do not modify it by hand! Instead, +-- make changes to gen-soccon.c and re-run it on each target. + +package GNAT.Sockets.Constants is + + -------------- + -- Families -- + -------------- + + AF_INET : constant := 2; -- IPv4 address family + AF_INET6 : constant := 10; -- IPv6 address family + + ----------- + -- Modes -- + ----------- + + SOCK_STREAM : constant := 1; -- Stream socket + SOCK_DGRAM : constant := 2; -- Datagram socket + + ------------------- + -- Socket errors -- + ------------------- + + EACCES : constant := 13; -- Permission denied + EADDRINUSE : constant := 98; -- Address already in use + EADDRNOTAVAIL : constant := 99; -- Cannot assign address + EAFNOSUPPORT : constant := 97; -- Addr family not supported + EALREADY : constant := 114; -- Operation in progress + EBADF : constant := 9; -- Bad file descriptor + ECONNABORTED : constant := 103; -- Connection aborted + ECONNREFUSED : constant := 111; -- Connection refused + ECONNRESET : constant := 104; -- Connection reset by peer + EDESTADDRREQ : constant := 89; -- Destination addr required + EFAULT : constant := 14; -- Bad address + EHOSTDOWN : constant := 112; -- Host is down + EHOSTUNREACH : constant := 113; -- No route to host + EINPROGRESS : constant := 115; -- Operation now in progress + EINTR : constant := 4; -- Interrupted system call + EINVAL : constant := 22; -- Invalid argument + EIO : constant := 5; -- Input output error + EISCONN : constant := 106; -- Socket already connected + ELOOP : constant := 40; -- Too many symbolic lynks + EMFILE : constant := 24; -- Too many open files + EMSGSIZE : constant := 90; -- Message too long + ENAMETOOLONG : constant := 36; -- Name too long + ENETDOWN : constant := 100; -- Network is down + ENETRESET : constant := 102; -- Disconn. on network reset + ENETUNREACH : constant := 101; -- Network is unreachable + ENOBUFS : constant := 105; -- No buffer space available + ENOPROTOOPT : constant := 92; -- Protocol not available + ENOTCONN : constant := 107; -- Socket not connected + ENOTSOCK : constant := 88; -- Operation on non socket + EOPNOTSUPP : constant := 95; -- Operation not supported + EPFNOSUPPORT : constant := 96; -- Unknown protocol family + EPROTONOSUPPORT : constant := 93; -- Unknown protocol + EPROTOTYPE : constant := 91; -- Unknown protocol type + ESHUTDOWN : constant := 108; -- Cannot send once shutdown + ESOCKTNOSUPPORT : constant := 94; -- Socket type not supported + ETIMEDOUT : constant := 110; -- Connection timed out + ETOOMANYREFS : constant := 109; -- Too many references + EWOULDBLOCK : constant := 11; -- Operation would block + + ----------------- + -- Host errors -- + ----------------- + + HOST_NOT_FOUND : constant := 1; -- Unknown host + TRY_AGAIN : constant := 2; -- Host name lookup failure + NO_DATA : constant := 4; -- No data record for name + NO_RECOVERY : constant := 3; -- Non recoverable errors + + ------------------- + -- Control flags -- + ------------------- + + FIONBIO : constant := 21537; -- Set/clear non-blocking io + FIONREAD : constant := 21531; -- How many bytes to read + + -------------------- + -- Shutdown modes -- + -------------------- + + SHUT_RD : constant := 0; -- No more recv + SHUT_WR : constant := 1; -- No more send + SHUT_RDWR : constant := 2; -- No more recv/send + + --------------------- + -- Protocol levels -- + --------------------- + + SOL_SOCKET : constant := 1; -- Options for socket level + IPPROTO_IP : constant := 0; -- Dummy protocol for IP + IPPROTO_UDP : constant := 17; -- UDP + IPPROTO_TCP : constant := 6; -- TCP + + ------------------- + -- Request flags -- + ------------------- + + MSG_OOB : constant := 1; -- Process out-of-band data + MSG_PEEK : constant := 2; -- Peek at incoming data + MSG_EOR : constant := 128; -- Send end of record + MSG_WAITALL : constant := 256; -- Wait for full reception + MSG_NOSIGNAL : constant := 16384; -- No SIGPIPE on send + MSG_Forced_Flags : constant := MSG_NOSIGNAL; + -- Flags set on all send(2) calls + + -------------------- + -- Socket options -- + -------------------- + + TCP_NODELAY : constant := 1; -- Do not coalesce packets + SO_REUSEADDR : constant := 2; -- Bind reuse local address + SO_KEEPALIVE : constant := 9; -- Enable keep-alive msgs + SO_LINGER : constant := 13; -- Defer close to flush data + SO_BROADCAST : constant := 6; -- Can send broadcast msgs + SO_SNDBUF : constant := 7; -- Set/get send buffer size + SO_RCVBUF : constant := 8; -- Set/get recv buffer size + SO_SNDTIMEO : constant := 21; -- Emission timeout + SO_RCVTIMEO : constant := 20; -- Reception timeout + SO_ERROR : constant := 4; -- Get/clear error status + IP_MULTICAST_IF : constant := 32; -- Set/get mcast interface + IP_MULTICAST_TTL : constant := 33; -- Set/get multicast TTL + IP_MULTICAST_LOOP : constant := 34; -- Set/get mcast loopback + IP_ADD_MEMBERSHIP : constant := 35; -- Join a multicast group + IP_DROP_MEMBERSHIP : constant := 36; -- Leave a multicast group + + ------------------- + -- System limits -- + ------------------- + + IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + +end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-mingw.ads b/gcc/ada/g-soccon-mingw.ads index 3577c17c596..f0c25c392b5 100644 --- a/gcc/ada/g-soccon-mingw.ads +++ b/gcc/ada/g-soccon-mingw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-solaris-64.ads b/gcc/ada/g-soccon-solaris-64.ads new file mode 100644 index 00000000000..be1fc4ffea3 --- /dev/null +++ b/gcc/ada/g-soccon-solaris-64.ads @@ -0,0 +1,181 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- G N A T . S O C K E T S . C O N S T A N T S -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides target dependent definitions of constant for use +-- by the GNAT.Sockets package (g-socket.ads). This package should not be +-- directly with'ed by an applications program. + +-- This is the version for sparc-sun-solaris2.8/64 +-- This file is generated automatically, do not modify it by hand! Instead, +-- make changes to gen-soccon.c and re-run it on each target. + +package GNAT.Sockets.Constants is + + -------------- + -- Families -- + -------------- + + AF_INET : constant := 2; -- IPv4 address family + AF_INET6 : constant := 26; -- IPv6 address family + + ----------- + -- Modes -- + ----------- + + SOCK_STREAM : constant := 2; -- Stream socket + SOCK_DGRAM : constant := 1; -- Datagram socket + + ------------------- + -- Socket errors -- + ------------------- + + EACCES : constant := 13; -- Permission denied + EADDRINUSE : constant := 125; -- Address already in use + EADDRNOTAVAIL : constant := 126; -- Cannot assign address + EAFNOSUPPORT : constant := 124; -- Addr family not supported + EALREADY : constant := 149; -- Operation in progress + EBADF : constant := 9; -- Bad file descriptor + ECONNABORTED : constant := 130; -- Connection aborted + ECONNREFUSED : constant := 146; -- Connection refused + ECONNRESET : constant := 131; -- Connection reset by peer + EDESTADDRREQ : constant := 96; -- Destination addr required + EFAULT : constant := 14; -- Bad address + EHOSTDOWN : constant := 147; -- Host is down + EHOSTUNREACH : constant := 148; -- No route to host + EINPROGRESS : constant := 150; -- Operation now in progress + EINTR : constant := 4; -- Interrupted system call + EINVAL : constant := 22; -- Invalid argument + EIO : constant := 5; -- Input output error + EISCONN : constant := 133; -- Socket already connected + ELOOP : constant := 90; -- Too many symbolic lynks + EMFILE : constant := 24; -- Too many open files + EMSGSIZE : constant := 97; -- Message too long + ENAMETOOLONG : constant := 78; -- Name too long + ENETDOWN : constant := 127; -- Network is down + ENETRESET : constant := 129; -- Disconn. on network reset + ENETUNREACH : constant := 128; -- Network is unreachable + ENOBUFS : constant := 132; -- No buffer space available + ENOPROTOOPT : constant := 99; -- Protocol not available + ENOTCONN : constant := 134; -- Socket not connected + ENOTSOCK : constant := 95; -- Operation on non socket + EOPNOTSUPP : constant := 122; -- Operation not supported + EPFNOSUPPORT : constant := 123; -- Unknown protocol family + EPROTONOSUPPORT : constant := 120; -- Unknown protocol + EPROTOTYPE : constant := 98; -- Unknown protocol type + ESHUTDOWN : constant := 143; -- Cannot send once shutdown + ESOCKTNOSUPPORT : constant := 121; -- Socket type not supported + ETIMEDOUT : constant := 145; -- Connection timed out + ETOOMANYREFS : constant := 144; -- Too many references + EWOULDBLOCK : constant := 11; -- Operation would block + + ----------------- + -- Host errors -- + ----------------- + + HOST_NOT_FOUND : constant := 1; -- Unknown host + TRY_AGAIN : constant := 2; -- Host name lookup failure + NO_DATA : constant := 4; -- No data record for name + NO_RECOVERY : constant := 3; -- Non recoverable errors + + ------------------- + -- Control flags -- + ------------------- + + FIONBIO : constant := -2147195266; -- Set/clear non-blocking io + FIONREAD : constant := 1074030207; -- How many bytes to read + + -------------------- + -- Shutdown modes -- + -------------------- + + SHUT_RD : constant := 0; -- No more recv + SHUT_WR : constant := 1; -- No more send + SHUT_RDWR : constant := 2; -- No more recv/send + + --------------------- + -- Protocol levels -- + --------------------- + + SOL_SOCKET : constant := 65535; -- Options for socket level + IPPROTO_IP : constant := 0; -- Dummy protocol for IP + IPPROTO_UDP : constant := 17; -- UDP + IPPROTO_TCP : constant := 6; -- TCP + + ------------------- + -- Request flags -- + ------------------- + + MSG_OOB : constant := 1; -- Process out-of-band data + MSG_PEEK : constant := 2; -- Peek at incoming data + MSG_EOR : constant := 8; -- Send end of record + MSG_WAITALL : constant := 64; -- Wait for full reception + MSG_NOSIGNAL : constant := -1; -- No SIGPIPE on send + MSG_Forced_Flags : constant := 0; + -- Flags set on all send(2) calls + + -------------------- + -- Socket options -- + -------------------- + + TCP_NODELAY : constant := 1; -- Do not coalesce packets + SO_REUSEADDR : constant := 4; -- Bind reuse local address + SO_KEEPALIVE : constant := 8; -- Enable keep-alive msgs + SO_LINGER : constant := 128; -- Defer close to flush data + SO_BROADCAST : constant := 32; -- Can send broadcast msgs + SO_SNDBUF : constant := 4097; -- Set/get send buffer size + SO_RCVBUF : constant := 4098; -- Set/get recv buffer size + SO_SNDTIMEO : constant := 4101; -- Emission timeout + SO_RCVTIMEO : constant := 4102; -- Reception timeout + SO_ERROR : constant := 4103; -- Get/clear error status + IP_MULTICAST_IF : constant := 16; -- Set/get mcast interface + IP_MULTICAST_TTL : constant := 17; -- Set/get multicast TTL + IP_MULTICAST_LOOP : constant := 18; -- Set/get mcast loopback + IP_ADD_MEMBERSHIP : constant := 19; -- Join a multicast group + IP_DROP_MEMBERSHIP : constant := 20; -- Leave a multicast group + + ------------------- + -- System limits -- + ------------------- + + IOV_MAX : constant := 16; -- Maximum writev iovcnt + + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 8; -- tv_sec + SIZEOF_tv_usec : constant := 8; -- tv_usec + +end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-solaris.ads b/gcc/ada/g-soccon-solaris.ads index 07de5cdbc29..7204e975c51 100644 --- a/gcc/ada/g-soccon-solaris.ads +++ b/gcc/ada/g-soccon-solaris.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 16; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-tru64.ads b/gcc/ada/g-soccon-tru64.ads index be7578f3521..b6d6836452d 100644 --- a/gcc/ada/g-soccon-tru64.ads +++ b/gcc/ada/g-soccon-tru64.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 1024; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-unixware.ads b/gcc/ada/g-soccon-unixware.ads index 127cfce2a0c..148989e0325 100644 --- a/gcc/ada/g-soccon-unixware.ads +++ b/gcc/ada/g-soccon-unixware.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-soccon-vms.ads b/gcc/ada/g-soccon-vms.ads index 3b0f20fe61c..85996efa3cd 100644 --- a/gcc/ada/g-soccon-vms.ads +++ b/gcc/ada/g-soccon-vms.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 1024; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon-vxworks.ads b/gcc/ada/g-soccon-vxworks.ads index d31337f675c..1accc7cc812 100644 --- a/gcc/ada/g-soccon-vxworks.ads +++ b/gcc/ada/g-soccon-vxworks.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -169,4 +169,23 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + + -------------------------------- + -- VxWorks-specific constants -- + -------------------------------- + + -- These constants may be used only within the VxWorks version of + -- GNAT.Sockets.Thin. + + OK : constant := 0; -- VxWorks generic success + ERROR : constant := -1; -- VxWorks generic error + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-soccon.ads b/gcc/ada/g-soccon.ads index 202f442ec30..f2f00554efd 100644 --- a/gcc/ada/g-soccon.ads +++ b/gcc/ada/g-soccon.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,10 @@ -- by the GNAT.Sockets package (g-socket.ads). This package should not be -- directly with'ed by an applications program. --- This is the version for i686-pc-linux-gnu +-- WARNING! This file is a default version that must be replaced for +-- each platform. +-- The values below were computed from a i686-pc-linux-gnu environment. + -- This file is generated automatically, do not modify it by hand! Instead, -- make changes to gen-soccon.c and re-run it on each target. @@ -169,4 +172,13 @@ package GNAT.Sockets.Constants is IOV_MAX : constant := 2147483647; -- Maximum writev iovcnt + ---------------------- + -- Type definitions -- + ---------------------- + + -- Sizes (in bytes) of the components of struct timeval + + SIZEOF_tv_sec : constant := 4; -- tv_sec + SIZEOF_tv_usec : constant := 4; -- tv_usec + end GNAT.Sockets.Constants; diff --git a/gcc/ada/g-socket.adb b/gcc/ada/g-socket.adb index a7af20b87d2..163dd2d0710 100644 --- a/gcc/ada/g-socket.adb +++ b/gcc/ada/g-socket.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,8 +92,11 @@ package body GNAT.Sockets is No_Delay => Constants.TCP_NODELAY, Add_Membership => Constants.IP_ADD_MEMBERSHIP, Drop_Membership => Constants.IP_DROP_MEMBERSHIP, + Multicast_If => Constants.IP_MULTICAST_IF, Multicast_TTL => Constants.IP_MULTICAST_TTL, - Multicast_Loop => Constants.IP_MULTICAST_LOOP); + Multicast_Loop => Constants.IP_MULTICAST_LOOP, + Send_Timeout => Constants.SO_SNDTIMEO, + Receive_Timeout => Constants.SO_RCVTIMEO); Flags : constant array (0 .. 3) of C.int := (0 => Constants.MSG_OOB, -- Process_Out_Of_Band_Data @@ -110,6 +113,9 @@ package body GNAT.Sockets is function To_In_Addr is new Ada.Unchecked_Conversion (C.int, In_Addr); function To_Int is new Ada.Unchecked_Conversion (In_Addr, C.int); + function Err_Code_Image (E : Integer) return String; + -- Return the value of E surrounded with brackets + ----------------------- -- Local subprograms -- ----------------------- @@ -160,15 +166,20 @@ package body GNAT.Sockets is function To_Service_Entry (E : Servent) return Service_Entry_Type; -- Conversion function - function To_Timeval (Val : Selector_Duration) return Timeval; + function To_Timeval (Val : Timeval_Duration) return Timeval; -- Separate Val in seconds and microseconds + function To_Duration (Val : Timeval) return Timeval_Duration; + -- Reconstruct a Duration value from a Timeval record (seconds and + -- microseconds). + procedure Raise_Socket_Error (Error : Integer); -- Raise Socket_Error with an exception message describing the error code + -- from errno. - procedure Raise_Host_Error (Error : Integer); + procedure Raise_Host_Error (H_Error : Integer); -- Raise Host_Error exception with message describing error code (note - -- hstrerror seems to be obsolete). + -- hstrerror seems to be obsolete) from h_errno. procedure Narrow (Item : in out Socket_Set_Type); -- Update Last as it may be greater than the real last socket @@ -384,6 +395,7 @@ package body GNAT.Sockets is is Res : C.int; Last : C.int; + RSig : Socket_Type renames Selector.R_Sig_Socket; RSet : Socket_Set_Type; WSet : Socket_Set_Type; ESet : Socket_Set_Type; @@ -391,102 +403,116 @@ package body GNAT.Sockets is TPtr : Timeval_Access; begin - Status := Completed; + begin + Status := Completed; - -- No timeout or Forever is indicated by a null timeval pointer + -- No timeout or Forever is indicated by a null timeval pointer - if Timeout = Forever then - TPtr := null; - else - TVal := To_Timeval (Timeout); - TPtr := TVal'Unchecked_Access; - end if; + if Timeout = Forever then + TPtr := null; + else + TVal := To_Timeval (Timeout); + TPtr := TVal'Unchecked_Access; + end if; - -- Copy R_Socket_Set in RSet and add read signalling socket + -- Copy R_Socket_Set in RSet and add read signalling socket - RSet := (Set => New_Socket_Set (R_Socket_Set.Set), - Last => R_Socket_Set.Last); - Set (RSet, Selector.R_Sig_Socket); + RSet := (Set => New_Socket_Set (R_Socket_Set.Set), + Last => R_Socket_Set.Last); + Set (RSet, RSig); - -- Copy W_Socket_Set in WSet + -- Copy W_Socket_Set in WSet - WSet := (Set => New_Socket_Set (W_Socket_Set.Set), - Last => W_Socket_Set.Last); + WSet := (Set => New_Socket_Set (W_Socket_Set.Set), + Last => W_Socket_Set.Last); - -- Copy E_Socket_Set in ESet + -- Copy E_Socket_Set in ESet - ESet := (Set => New_Socket_Set (E_Socket_Set.Set), - Last => E_Socket_Set.Last); + ESet := (Set => New_Socket_Set (E_Socket_Set.Set), + Last => E_Socket_Set.Last); - Last := C.int'Max (C.int'Max (C.int (RSet.Last), - C.int (WSet.Last)), - C.int (ESet.Last)); + Last := C.int'Max (C.int'Max (C.int (RSet.Last), + C.int (WSet.Last)), + C.int (ESet.Last)); - Res := - C_Select - (Last + 1, - RSet.Set, - WSet.Set, - ESet.Set, - TPtr); + Res := + C_Select + (Last + 1, + RSet.Set, + WSet.Set, + ESet.Set, + TPtr); - if Res = Failure then - Raise_Socket_Error (Socket_Errno); - end if; + if Res = Failure then + Raise_Socket_Error (Socket_Errno); + end if; - -- If Select was resumed because of read signalling socket, read this - -- data and remove socket from set. + -- If Select was resumed because of read signalling socket, read this + -- data and remove socket from set. - if Is_Set (RSet, Selector.R_Sig_Socket) then - Clear (RSet, Selector.R_Sig_Socket); + if Is_Set (RSet, RSig) then + Clear (RSet, RSig); - declare - Buf : Character; + declare + Buf : Character; - begin - Res := C_Recv (C.int (Selector.R_Sig_Socket), Buf'Address, 1, 0); + begin + Res := C_Recv (C.int (RSig), Buf'Address, 1, 0); - if Res = Failure then - Raise_Socket_Error (Socket_Errno); - end if; - end; + if Res = Failure then + Raise_Socket_Error (Socket_Errno); + end if; + end; - Status := Aborted; + Status := Aborted; - elsif Res = 0 then - Status := Expired; - end if; + elsif Res = 0 then + Status := Expired; + end if; - -- Update RSet, WSet and ESet in regard to their new socket sets + -- Update RSet, WSet and ESet in regard to their new socket sets - Narrow (RSet); - Narrow (WSet); - Narrow (ESet); + Narrow (RSet); + Narrow (WSet); + Narrow (ESet); - -- Reset RSet as it should be if R_Sig_Socket was not added + -- Reset RSet as it should be if R_Sig_Socket was not added - if Is_Empty (RSet) then - Empty (RSet); - end if; + if Is_Empty (RSet) then + Empty (RSet); + end if; - if Is_Empty (WSet) then - Empty (WSet); - end if; + if Is_Empty (WSet) then + Empty (WSet); + end if; - if Is_Empty (ESet) then - Empty (ESet); - end if; + if Is_Empty (ESet) then + Empty (ESet); + end if; - -- Deliver RSet, WSet and ESet + -- Deliver RSet, WSet and ESet - Empty (R_Socket_Set); - R_Socket_Set := RSet; + Empty (R_Socket_Set); + R_Socket_Set := RSet; - Empty (W_Socket_Set); - W_Socket_Set := WSet; + Empty (W_Socket_Set); + W_Socket_Set := WSet; - Empty (E_Socket_Set); - E_Socket_Set := ESet; + Empty (E_Socket_Set); + E_Socket_Set := ESet; + + exception + + when Socket_Error => + + -- The local socket sets must be emptied before propagating + -- Socket_Error so the associated storage is freed. + + Empty (RSet); + Empty (WSet); + Empty (ESet); + raise; + end; end Check_Selector; ----------- @@ -510,11 +536,16 @@ package body GNAT.Sockets is -- Close_Selector -- -------------------- - -- Comments needed below ??? - -- Why are exceptions ignored ??? - procedure Close_Selector (Selector : in out Selector_Type) is begin + + -- Close the signalling sockets used internally for the implementation + -- of Abort_Selector. Exceptions are ignored because these sockets + -- are implementation artefacts of no interest to the user, and + -- there is little that can be done if either Close_Socket call fails + -- (which theoretically should not happen anyway). We also want to try + -- to perform the second Close_Socket even if the first one failed. + begin Close_Socket (Selector.R_Sig_Socket); exception @@ -772,6 +803,17 @@ package body GNAT.Sockets is Item.Last := No_Socket; end Empty; + -------------------- + -- Err_Code_Image -- + -------------------- + + function Err_Code_Image (E : Integer) return String is + Msg : String := E'Img & "] "; + begin + Msg (Msg'First) := '['; + return Msg; + end Err_Code_Image; + -------------- -- Finalize -- -------------- @@ -845,7 +887,7 @@ package body GNAT.Sockets is Res := C_Gethostbyaddr (HA'Address, HA'Size / 8, Constants.AF_INET); if Res = null then - Err := Socket_Errno; + Err := Host_Errno; Task_Lock.Unlock; Raise_Host_Error (Err); end if; @@ -884,7 +926,7 @@ package body GNAT.Sockets is Res := C_Gethostbyname (HN); if Res = null then - Err := Socket_Errno; + Err := Host_Errno; Task_Lock.Unlock; Raise_Host_Error (Err); end if; @@ -1027,6 +1069,7 @@ package body GNAT.Sockets is V8 : aliased Two_Int; V4 : aliased C.int; V1 : aliased C.unsigned_char; + VT : aliased Timeval; Len : aliased C.int; Add : System.Address; Res : C.int; @@ -1045,10 +1088,16 @@ package body GNAT.Sockets is No_Delay | Send_Buffer | Receive_Buffer | + Multicast_If | Error => Len := V4'Size / 8; Add := V4'Address; + when Send_Timeout | + Receive_Timeout => + Len := VT'Size / 8; + Add := VT'Address; + when Linger | Add_Membership | Drop_Membership => @@ -1091,12 +1140,19 @@ package body GNAT.Sockets is To_Inet_Addr (To_In_Addr (V8 (V8'First)), Opt.Multicast_Address); To_Inet_Addr (To_In_Addr (V8 (V8'Last)), Opt.Local_Interface); + when Multicast_If => + To_Inet_Addr (To_In_Addr (V4), Opt.Outgoing_If); + when Multicast_TTL => Opt.Time_To_Live := Integer (V1); when Multicast_Loop => Opt.Enabled := (V1 /= 0); + when Send_Timeout | + Receive_Timeout => + Opt.Timeout := To_Duration (VT); + end case; return Opt; @@ -1379,12 +1435,11 @@ package body GNAT.Sockets is -- Raise_Host_Error -- ---------------------- - procedure Raise_Host_Error (Error : Integer) is + procedure Raise_Host_Error (H_Error : Integer) is function Host_Error_Message return String; - -- We do not use a C function like strerror because hstrerror - -- that would correspond seems to be obsolete. Return - -- appropriate string for error value. + -- We do not use a C function like strerror because hstrerror that would + -- correspond is obsolete. Return appropriate string for error value. ------------------------ -- Host_Error_Message -- @@ -1392,7 +1447,7 @@ package body GNAT.Sockets is function Host_Error_Message return String is begin - case Error is + case H_Error is when Constants.HOST_NOT_FOUND => return "Host not found"; when Constants.TRY_AGAIN => return "Try again"; when Constants.NO_RECOVERY => return "No recovery"; @@ -1404,7 +1459,9 @@ package body GNAT.Sockets is -- Start of processing for Raise_Host_Error begin - Ada.Exceptions.Raise_Exception (Host_Error'Identity, Host_Error_Message); + Ada.Exceptions.Raise_Exception (Host_Error'Identity, + Err_Code_Image (H_Error) + & Host_Error_Message); end Raise_Host_Error; ------------------------ @@ -1413,26 +1470,10 @@ package body GNAT.Sockets is procedure Raise_Socket_Error (Error : Integer) is use type C.Strings.chars_ptr; - - function Image (E : Integer) return String; - - ----------- - -- Image -- - ----------- - - function Image (E : Integer) return String is - Msg : String := E'Img & "] "; - begin - Msg (Msg'First) := '['; - return Msg; - end Image; - - -- Start of processing for Raise_Socket_Error - begin - Ada.Exceptions.Raise_Exception - (Socket_Error'Identity, - Image (Error) & C.Strings.Value (Socket_Error_Message (Error))); + Ada.Exceptions.Raise_Exception (Socket_Error'Identity, + Err_Code_Image (Error) + & C.Strings.Value (Socket_Error_Message (Error))); end Raise_Socket_Error; ---------- @@ -1639,11 +1680,12 @@ package body GNAT.Sockets is is Id : constant Exception_Id := Exception_Identity (Occurrence); Msg : constant String := Exception_Message (Occurrence); - First : Natural := Msg'First; + First : Natural; Last : Natural; Val : Integer; begin + First := Msg'First; while First <= Msg'Last and then Msg (First) not in '0' .. '9' loop @@ -1655,7 +1697,6 @@ package body GNAT.Sockets is end if; Last := First; - while Last < Msg'Last and then Msg (Last + 1) in '0' .. '9' loop @@ -1854,7 +1895,8 @@ package body GNAT.Sockets is V8 : aliased Two_Int; V4 : aliased C.int; V1 : aliased C.unsigned_char; - Len : aliased C.int; + VT : aliased Timeval; + Len : C.int; Add : System.Address := Null_Address; Res : C.int; @@ -1892,6 +1934,11 @@ package body GNAT.Sockets is Len := V8'Size / 8; Add := V8'Address; + when Multicast_If => + V4 := To_Int (To_In_Addr (Option.Outgoing_If)); + Len := V4'Size / 8; + Add := V4'Address; + when Multicast_TTL => V1 := C.unsigned_char (Option.Time_To_Live); Len := V1'Size / 8; @@ -1902,6 +1949,12 @@ package body GNAT.Sockets is Len := V1'Size / 8; Add := V1'Address; + when Send_Timeout | + Receive_Timeout => + VT := To_Timeval (Option.Timeout); + Len := VT'Size / 8; + Add := VT'Address; + end case; Res := C_Setsockopt @@ -1999,6 +2052,15 @@ package body GNAT.Sockets is return Integer (Socket); end To_C; + ----------------- + -- To_Duration -- + ----------------- + + function To_Duration (Val : Timeval) return Timeval_Duration is + begin + return Natural (Val.Tv_Sec) * 1.0 + Natural (Val.Tv_Usec) * 1.0E-6; + end To_Duration; + ------------------- -- To_Host_Entry -- ------------------- @@ -2100,6 +2162,7 @@ package body GNAT.Sockets is if Flags (J) = -1 then Raise_Socket_Error (Constants.EOPNOTSUPP); end if; + Result := Result + Flags (J); end if; @@ -2176,25 +2239,25 @@ package body GNAT.Sockets is -- To_Timeval -- ---------------- - function To_Timeval (Val : Selector_Duration) return Timeval is - S : Timeval_Unit; - MS : Timeval_Unit; + function To_Timeval (Val : Timeval_Duration) return Timeval is + S : time_t; + uS : suseconds_t; begin -- If zero, set result as zero (otherwise it gets rounded down to -1) if Val = 0.0 then S := 0; - MS := 0; + uS := 0; -- Normal case where we do round down else - S := Timeval_Unit (Val - 0.5); - MS := Timeval_Unit (1_000_000 * (Val - Selector_Duration (S))); + S := time_t (Val - 0.5); + uS := suseconds_t (1_000_000 * (Val - Selector_Duration (S))); end if; - return (S, MS); + return (S, uS); end To_Timeval; ----------- diff --git a/gcc/ada/g-socket.ads b/gcc/ada/g-socket.ads index 7529c050892..6268545a5fa 100644 --- a/gcc/ada/g-socket.ads +++ b/gcc/ada/g-socket.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -489,7 +489,7 @@ package GNAT.Sockets is Host_Error : exception; -- Exception raised by the two following procedures. Once raised, its -- message contains a string describing the error code. This exception is - -- raised when an host entry can not be retrieved. + -- raised when an host entry cannot be retrieved. function Get_Host_By_Address (Address : Inet_Addr_Type; @@ -595,6 +595,16 @@ package GNAT.Sockets is Unknown_Server_Error, Cannot_Resolve_Error); + -- Timeval_Duration is a subtype of Standard.Duration because the full + -- range of Standard.Duration cannot be represented in the equivalent C + -- structure. Moreover, negative values are not allowed to avoid system + -- incompatibilities. + + Immediate : constant := 0.0; + Forever : constant := Duration (Integer'Last) * 1.0; + + subtype Timeval_Duration is Duration range Immediate .. Forever; + -- Get_Socket_Options and Set_Socket_Options manipulate options associated -- with a socket. Options may exist at multiple protocol levels in the -- communication stack. Socket_Level is the uppermost socket level. @@ -610,18 +620,21 @@ package GNAT.Sockets is -- a boolean to enable or disable this option. type Option_Name is ( - Keep_Alive, -- Enable sending of keep-alive messages - Reuse_Address, -- Allow bind to reuse local address - Broadcast, -- Enable datagram sockets to recv/send broadcast packets - Send_Buffer, -- Set/get the maximum socket send buffer in bytes - Receive_Buffer, -- Set/get the maximum socket recv buffer in bytes - Linger, -- Shutdown wait for msg to be sent or timeout occur - Error, -- Get and clear the pending socket error - No_Delay, -- Do not delay send to coalesce packets (TCP_NODELAY) - Add_Membership, -- Join a multicast group - Drop_Membership, -- Leave a multicast group - Multicast_TTL, -- Indicate the time-to-live of sent multicast packets - Multicast_Loop); -- Sent multicast packets are looped to the local socket + Keep_Alive, -- Enable sending of keep-alive messages + Reuse_Address, -- Allow bind to reuse local address + Broadcast, -- Enable datagram sockets to recv/send broadcasts + Send_Buffer, -- Set/get the maximum socket send buffer in bytes + Receive_Buffer, -- Set/get the maximum socket recv buffer in bytes + Linger, -- Shutdown wait for msg to be sent or timeout occur + Error, -- Get and clear the pending socket error + No_Delay, -- Do not delay send to coalesce packets (TCP_NODELAY) + Add_Membership, -- Join a multicast group + Drop_Membership, -- Leave a multicast group + Multicast_If, -- Set default outgoing interface for multicast packets + Multicast_TTL, -- Indicate the time-to-live of sent multicast packets + Multicast_Loop, -- Sent multicast packets are looped to local socket + Send_Timeout, -- Set timeout value for output + Receive_Timeout); -- Set timeout value for input type Option_Type (Name : Option_Name := Keep_Alive) is record case Name is @@ -652,9 +665,16 @@ package GNAT.Sockets is Multicast_Address : Inet_Addr_Type; Local_Interface : Inet_Addr_Type; + when Multicast_If => + Outgoing_If : Inet_Addr_Type; + when Multicast_TTL => Time_To_Live : Natural; + when Send_Timeout | + Receive_Timeout => + Timeout : Timeval_Duration; + end case; end record; @@ -935,15 +955,7 @@ package GNAT.Sockets is type Selector_Type is limited private; type Selector_Access is access all Selector_Type; - -- Selector_Duration is a subtype of Standard.Duration because the full - -- range of Standard.Duration cannot be represented in the equivalent C - -- structure. Moreover, negative values are not allowed to avoid system - -- incompatibilities. - - Immediate : constant := 0.0; - Forever : constant := Duration (Integer'Last) * 1.0; - - subtype Selector_Duration is Duration range Immediate .. Forever; + subtype Selector_Duration is Timeval_Duration; procedure Create_Selector (Selector : out Selector_Type); -- Create a new selector diff --git a/gcc/ada/g-socthi-mingw.adb b/gcc/ada/g-socthi-mingw.adb index e525cc839e3..862305dbd2e 100644 --- a/gcc/ada/g-socthi-mingw.adb +++ b/gcc/ada/g-socthi-mingw.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 AdaCore -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -59,8 +59,7 @@ package body GNAT.Sockets.Thin is function Standard_Connect (S : C.int; Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; pragma Import (Stdcall, Standard_Connect, "connect"); function Standard_Select @@ -68,8 +67,7 @@ package body GNAT.Sockets.Thin is Readfds : Fd_Set_Access; Writefds : Fd_Set_Access; Exceptfds : Fd_Set_Access; - Timeout : Timeval_Access) - return C.int; + Timeout : Timeval_Access) return C.int; pragma Import (Stdcall, Standard_Select, "select"); type Error_Type is @@ -239,8 +237,7 @@ package body GNAT.Sockets.Thin is function C_Connect (S : C.int; Name : System.Address; - Namelen : C.int) - return C.int + Namelen : C.int) return C.int is Res : C.int; @@ -263,8 +260,7 @@ package body GNAT.Sockets.Thin is function C_Readv (Socket : C.int; Iov : System.Address; - Iovcnt : C.int) - return C.int + Iovcnt : C.int) return C.int is Res : C.int; Count : C.int := 0; @@ -299,8 +295,7 @@ package body GNAT.Sockets.Thin is Readfds : Fd_Set_Access; Writefds : Fd_Set_Access; Exceptfds : Fd_Set_Access; - Timeout : Timeval_Access) - return C.int + Timeout : Timeval_Access) return C.int is pragma Warnings (Off, Exceptfds); @@ -441,8 +436,7 @@ package body GNAT.Sockets.Thin is function C_Writev (Socket : C.int; Iov : System.Address; - Iovcnt : C.int) - return C.int + Iovcnt : C.int) return C.int is Res : C.int; Count : C.int := 0; @@ -553,11 +547,8 @@ package body GNAT.Sockets.Thin is -------------------------- function Socket_Error_Message - (Errno : Integer) - return C.Strings.chars_ptr + (Errno : Integer) return C.Strings.chars_ptr is - use GNAT.Sockets.Constants; - begin case Errno is when EINTR => return Error_Messages (N_EINTR); diff --git a/gcc/ada/g-socthi-mingw.ads b/gcc/ada/g-socthi-mingw.ads index a73b0a7ce03..11509c095ea 100644 --- a/gcc/ada/g-socthi-mingw.ads +++ b/gcc/ada/g-socthi-mingw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 AdaCore -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -61,20 +61,32 @@ package GNAT.Sockets.Thin is -- Set last socket error number function Socket_Error_Message - (Errno : Integer) - return C.Strings.chars_ptr; + (Errno : Integer) return C.Strings.chars_ptr; -- Returns the error message string for the error number Errno. If -- Errno is not known it returns "Unknown system error". + function Host_Errno return Integer; + pragma Import (C, Host_Errno, "__gnat_get_h_errno"); + -- Returns last host error number + subtype Fd_Set_Access is System.Address; No_Fd_Set : constant Fd_Set_Access := System.Null_Address; - type Timeval_Unit is new C.long; - pragma Convention (C, Timeval_Unit); + type time_t is + range -(2 ** (8 * Constants.SIZEOF_tv_sec - 1)) + .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1; + for time_t'Size use 8 * Constants.SIZEOF_tv_sec; + pragma Convention (C, time_t); + + type suseconds_t is + range -(2 ** (8 * Constants.SIZEOF_tv_usec - 1)) + .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1; + for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec; + pragma Convention (C, suseconds_t); type Timeval is record - Tv_Sec : Timeval_Unit; - Tv_Usec : Timeval_Unit; + Tv_Sec : time_t; + Tv_Usec : suseconds_t; end record; pragma Convention (C, Timeval); diff --git a/gcc/ada/g-socthi-vms.adb b/gcc/ada/g-socthi-vms.adb index b8dcc2dc915..d1545e050fe 100644 --- a/gcc/ada/g-socthi-vms.adb +++ b/gcc/ada/g-socthi-vms.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,8 +40,8 @@ with Interfaces.C; use Interfaces.C; package body GNAT.Sockets.Thin is - Non_Blocking_Sockets : constant Fd_Set_Access - := New_Socket_Set (No_Socket_Set); + Non_Blocking_Sockets : constant Fd_Set_Access := + New_Socket_Set (No_Socket_Set); -- When this package is initialized with Process_Blocking_IO set -- to True, sockets are set in non-blocking mode to avoid blocking -- the whole process when a thread wants to perform a blocking IO @@ -59,7 +59,7 @@ package body GNAT.Sockets.Thin is Thread_Blocking_IO : Boolean := True; Unknown_System_Error : constant C.Strings.chars_ptr := - C.Strings.New_String ("Unknown system error"); + C.Strings.New_String ("Unknown system error"); function Syscall_Accept (S : C.int; @@ -99,8 +99,7 @@ package body GNAT.Sockets.Thin is (S : C.int; Msg : System.Address; Len : C.int; - Flags : C.int) - return C.int; + Flags : C.int) return C.int; pragma Import (C, Syscall_Send, "send"); function Syscall_Sendto @@ -109,8 +108,7 @@ package body GNAT.Sockets.Thin is Len : C.int; Flags : C.int; To : Sockaddr_In_Access; - Tolen : C.int) - return C.int; + Tolen : C.int) return C.int; pragma Import (C, Syscall_Sendto, "sendto"); function Syscall_Socket diff --git a/gcc/ada/g-socthi-vms.ads b/gcc/ada/g-socthi-vms.ads index 6a19d2dc5f4..1b05e4719bc 100644 --- a/gcc/ada/g-socthi-vms.ads +++ b/gcc/ada/g-socthi-vms.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -64,15 +64,28 @@ package GNAT.Sockets.Thin is -- Returns the error message string for the error number Errno. If -- Errno is not known it returns "Unknown system error". + function Host_Errno return Integer; + pragma Import (C, Host_Errno, "__gnat_get_h_errno"); + -- Returns last host error number + subtype Fd_Set_Access is System.Address; No_Fd_Set : constant Fd_Set_Access := System.Null_Address; - type Timeval_Unit is new C.int; - pragma Convention (C, Timeval_Unit); + type time_t is + range -2 ** (8 * Constants.SIZEOF_tv_sec - 1) + .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1; + for time_t'Size use 8 * Constants.SIZEOF_tv_sec; + pragma Convention (C, time_t); + + type suseconds_t is + range -2 ** (8 * Constants.SIZEOF_tv_usec - 1) + .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1; + for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec; + pragma Convention (C, suseconds_t); type Timeval is record - Tv_Sec : Timeval_Unit; - Tv_Usec : Timeval_Unit; + Tv_Sec : time_t; + Tv_Usec : suseconds_t; end record; pragma Convention (C, Timeval); @@ -197,94 +210,78 @@ package GNAT.Sockets.Thin is function C_Accept (S : C.int; Addr : System.Address; - Addrlen : access C.int) - return C.int; + Addrlen : access C.int) return C.int; function C_Bind (S : C.int; Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; function C_Close - (Fd : C.int) - return C.int; + (Fd : C.int) return C.int; function C_Connect (S : C.int; Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; function C_Gethostbyaddr (Addr : System.Address; Len : C.int; - Typ : C.int) - return Hostent_Access; + Typ : C.int) return Hostent_Access; function C_Gethostbyname - (Name : C.char_array) - return Hostent_Access; + (Name : C.char_array) return Hostent_Access; function C_Gethostname (Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; function C_Getpeername (S : C.int; Name : System.Address; - Namelen : access C.int) - return C.int; + Namelen : access C.int) return C.int; function C_Getservbyname (Name : C.char_array; - Proto : C.char_array) - return Servent_Access; + Proto : C.char_array) return Servent_Access; function C_Getservbyport (Port : C.int; - Proto : C.char_array) - return Servent_Access; + Proto : C.char_array) return Servent_Access; function C_Getsockname (S : C.int; Name : System.Address; - Namelen : access C.int) - return C.int; + Namelen : access C.int) return C.int; function C_Getsockopt (S : C.int; Level : C.int; Optname : C.int; Optval : System.Address; - Optlen : access C.int) - return C.int; + Optlen : access C.int) return C.int; function C_Inet_Addr - (Cp : C.Strings.chars_ptr) - return C.int; + (Cp : C.Strings.chars_ptr) return C.int; function C_Ioctl (S : C.int; Req : C.int; - Arg : Int_Access) - return C.int; + Arg : Int_Access) return C.int; function C_Listen (S, Backlog : C.int) return C.int; function C_Readv (Fd : C.int; Iov : System.Address; - Iovcnt : C.int) - return C.int; + Iovcnt : C.int) return C.int; function C_Recv (S : C.int; Msg : System.Address; Len : C.int; - Flags : C.int) - return C.int; + Flags : C.int) return C.int; function C_Recvfrom (S : C.int; @@ -292,23 +289,20 @@ package GNAT.Sockets.Thin is Len : C.int; Flags : C.int; From : Sockaddr_In_Access; - Fromlen : access C.int) - return C.int; + Fromlen : access C.int) return C.int; function C_Select (Nfds : C.int; Readfds : Fd_Set_Access; Writefds : Fd_Set_Access; Exceptfds : Fd_Set_Access; - Timeout : Timeval_Access) - return C.int; + Timeout : Timeval_Access) return C.int; function C_Send (S : C.int; Msg : System.Address; Len : C.int; - Flags : C.int) - return C.int; + Flags : C.int) return C.int; function C_Sendto (S : C.int; @@ -316,44 +310,37 @@ package GNAT.Sockets.Thin is Len : C.int; Flags : C.int; To : Sockaddr_In_Access; - Tolen : C.int) - return C.int; + Tolen : C.int) return C.int; function C_Setsockopt (S : C.int; Level : C.int; Optname : C.int; Optval : System.Address; - Optlen : C.int) - return C.int; + Optlen : C.int) return C.int; function C_Shutdown (S : C.int; - How : C.int) - return C.int; + How : C.int) return C.int; function C_Socket (Domain : C.int; Typ : C.int; - Protocol : C.int) - return C.int; + Protocol : C.int) return C.int; function C_Strerror - (Errnum : C.int) - return C.Strings.chars_ptr; + (Errnum : C.int) return C.Strings.chars_ptr; function C_System - (Command : System.Address) - return C.int; + (Command : System.Address) return C.int; function C_Writev (Fd : C.int; Iov : System.Address; - Iovcnt : C.int) - return C.int; + Iovcnt : C.int) return C.int; procedure Free_Socket_Set - (Set : Fd_Set_Access); + (Set : Fd_Set_Access); -- Free system-dependent socket set procedure Get_Socket_From_Set @@ -387,8 +374,7 @@ package GNAT.Sockets.Thin is -- set back to the real largest socket in the socket set. function New_Socket_Set - (Set : Fd_Set_Access) - return Fd_Set_Access; + (Set : Fd_Set_Access) return Fd_Set_Access; -- Allocate a new socket set which is a system-dependent structure -- and initialize by copying Set if it is non-null, by making it -- empty otherwise. diff --git a/gcc/ada/g-socthi-vxworks.adb b/gcc/ada/g-socthi-vxworks.adb index 95de193ecf7..02a0df3fe33 100644 --- a/gcc/ada/g-socthi-vxworks.adb +++ b/gcc/ada/g-socthi-vxworks.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -267,14 +267,19 @@ package body GNAT.Sockets.Thin is function To_Pointer is new Unchecked_Conversion (System.Address, int_Access); - procedure VxWorks_Gethostbyaddr - (Addr : C.int; Buf : out C.char_array); - pragma Import (C, VxWorks_Gethostbyaddr, "hostGetByAddr"); + function VxWorks_hostGetByAddr + (Addr : C.int; Buf : System.Address) return C.int; + pragma Import (C, VxWorks_hostGetByAddr, "hostGetByAddr"); - Host_Name : C.char_array (1 .. Max_Name_Length); + Host_Name : aliased C.char_array (1 .. Max_Name_Length); begin - VxWorks_Gethostbyaddr (To_Pointer (Addr).all, Host_Name); + if VxWorks_hostGetByAddr (To_Pointer (Addr).all, + Host_Name (Host_Name'First)'Address) + /= Constants.OK + then + return null; + end if; In_Addr_Access_Ptr.all.all := To_In_Addr (To_Pointer (Addr).all); Local_Hostent.all.H_Name := C.Strings.New_Char_Array (Host_Name); @@ -289,14 +294,17 @@ package body GNAT.Sockets.Thin is function C_Gethostbyname (Name : C.char_array) return Hostent_Access is - function VxWorks_Gethostbyname + function VxWorks_hostGetByName (Name : C.char_array) return C.int; - pragma Import (C, VxWorks_Gethostbyname, "hostGetByName"); + pragma Import (C, VxWorks_hostGetByName, "hostGetByName"); Addr : C.int; begin - Addr := VxWorks_Gethostbyname (Name); + Addr := VxWorks_hostGetByName (Name); + if Addr /= Constants.OK then + return null; + end if; In_Addr_Access_Ptr.all.all := To_In_Addr (Addr); Local_Hostent.all.H_Name := C.Strings.New_Char_Array (To_C (Host_Name)); @@ -515,7 +523,6 @@ package body GNAT.Sockets.Thin is function Non_Blocking_Socket (S : C.int) return Boolean is R : Boolean; - begin Task_Lock.Lock; R := (Is_Socket_In_Set (Non_Blocking_Sockets, S) /= 0); diff --git a/gcc/ada/g-socthi-vxworks.ads b/gcc/ada/g-socthi-vxworks.ads index 2d818272983..6aee25d4ef4 100644 --- a/gcc/ada/g-socthi-vxworks.ads +++ b/gcc/ada/g-socthi-vxworks.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -63,15 +63,28 @@ package GNAT.Sockets.Thin is -- Returns the error message string for the error number Errno. If Errno is -- not known it returns "Unknown system error". + function Host_Errno return Integer; + pragma Import (C, Host_Errno, "__gnat_get_h_errno"); + -- Returns last host error number + subtype Fd_Set_Access is System.Address; No_Fd_Set : constant Fd_Set_Access := System.Null_Address; - type Timeval_Unit is new C.int; - pragma Convention (C, Timeval_Unit); + type time_t is + range -2 ** (8 * Constants.SIZEOF_tv_sec - 1) + .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1; + for time_t'Size use 8 * Constants.SIZEOF_tv_sec; + pragma Convention (C, time_t); + + type suseconds_t is + range -2 ** (8 * Constants.SIZEOF_tv_usec - 1) + .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1; + for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec; + pragma Convention (C, suseconds_t); type Timeval is record - Tv_Sec : Timeval_Unit; - Tv_Usec : Timeval_Unit; + Tv_Sec : time_t; + Tv_Usec : suseconds_t; end record; pragma Convention (C, Timeval); @@ -199,94 +212,78 @@ package GNAT.Sockets.Thin is function C_Accept (S : C.int; Addr : System.Address; - Addrlen : access C.int) - return C.int; + Addrlen : access C.int) return C.int; function C_Bind (S : C.int; Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; function C_Close - (Fd : C.int) - return C.int; + (Fd : C.int) return C.int; function C_Connect (S : C.int; Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; function C_Gethostbyaddr (Addr : System.Address; Len : C.int; - Typ : C.int) - return Hostent_Access; + Typ : C.int) return Hostent_Access; function C_Gethostbyname - (Name : C.char_array) - return Hostent_Access; + (Name : C.char_array) return Hostent_Access; function C_Gethostname (Name : System.Address; - Namelen : C.int) - return C.int; + Namelen : C.int) return C.int; function C_Getpeername (S : C.int; Name : System.Address; - Namelen : access C.int) - return C.int; + Namelen : access C.int) return C.int; function C_Getservbyname (Name : C.char_array; - Proto : C.char_array) - return Servent_Access; + Proto : C.char_array) return Servent_Access; function C_Getservbyport (Port : C.int; - Proto : C.char_array) - return Servent_Access; + Proto : C.char_array) return Servent_Access; function C_Getsockname (S : C.int; Name : System.Address; - Namelen : access C.int) - return C.int; + Namelen : access C.int) return C.int; function C_Getsockopt (S : C.int; Level : C.int; Optname : C.int; Optval : System.Address; - Optlen : access C.int) - return C.int; + Optlen : access C.int) return C.int; function C_Inet_Addr - (Cp : C.Strings.chars_ptr) - return C.int; + (Cp : C.Strings.chars_ptr) return C.int; function C_Ioctl - (S : C.int; - Req : C.int; - Arg : Int_Access) - return C.int; + (S : C.int; + Req : C.int; + Arg : Int_Access) return C.int; function C_Listen (S, Backlog : C.int) return C.int; function C_Readv (Fd : C.int; Iov : System.Address; - Iovcnt : C.int) - return C.int; + Iovcnt : C.int) return C.int; function C_Recv (S : C.int; Msg : System.Address; Len : C.int; - Flags : C.int) - return C.int; + Flags : C.int) return C.int; function C_Recvfrom (S : C.int; @@ -294,23 +291,20 @@ package GNAT.Sockets.Thin is Len : C.int; Flags : C.int; From : Sockaddr_In_Access; - Fromlen : access C.int) - return C.int; + Fromlen : access C.int) return C.int; function C_Select (Nfds : C.int; Readfds : Fd_Set_Access; Writefds : Fd_Set_Access; Exceptfds : Fd_Set_Access; - Timeout : Timeval_Access) - return C.int; + Timeout : Timeval_Access) return C.int; function C_Send (S : C.int; Msg : System.Address; Len : C.int; - Flags : C.int) - return C.int; + Flags : C.int) return C.int; function C_Sendto (S : C.int; @@ -318,44 +312,37 @@ package GNAT.Sockets.Thin is Len : C.int; Flags : C.int; To : Sockaddr_In_Access; - Tolen : C.int) - return C.int; + Tolen : C.int) return C.int; function C_Setsockopt (S : C.int; Level : C.int; Optname : C.int; Optval : System.Address; - Optlen : C.int) - return C.int; + Optlen : C.int) return C.int; function C_Shutdown - (S : C.int; - How : C.int) - return C.int; + (S : C.int; + How : C.int) return C.int; function C_Socket (Domain : C.int; Typ : C.int; - Protocol : C.int) - return C.int; + Protocol : C.int) return C.int; function C_Strerror - (Errnum : C.int) - return C.Strings.chars_ptr; + (Errnum : C.int) return C.Strings.chars_ptr; function C_System - (Command : System.Address) - return C.int; + (Command : System.Address) return C.int; function C_Writev (Fd : C.int; Iov : System.Address; - Iovcnt : C.int) - return C.int; + Iovcnt : C.int) return C.int; procedure Free_Socket_Set - (Set : Fd_Set_Access); + (Set : Fd_Set_Access); -- Free system-dependent socket set procedure Get_Socket_From_Set @@ -389,8 +376,7 @@ package GNAT.Sockets.Thin is -- set back to the real largest socket in the socket set. function New_Socket_Set - (Set : Fd_Set_Access) - return Fd_Set_Access; + (Set : Fd_Set_Access) return Fd_Set_Access; -- Allocate a new socket set which is a system-dependent structure -- and initialize by copying Set if it is non-null, by making it -- empty otherwise. diff --git a/gcc/ada/g-socthi.adb b/gcc/ada/g-socthi.adb index 188912898a0..914b787a41c 100644 --- a/gcc/ada/g-socthi.adb +++ b/gcc/ada/g-socthi.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2004 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -127,7 +127,7 @@ package body GNAT.Sockets.Thin is procedure Disable_SIGPIPE (S : C.int); pragma Import (C, Disable_SIGPIPE, "__gnat_disable_sigpipe"); - function Non_Blocking_Socket (S : C.int) return Boolean; + function Non_Blocking_Socket (S : C.int) return Boolean; procedure Set_Non_Blocking_Socket (S : C.int; V : Boolean); -------------- @@ -503,7 +503,6 @@ package body GNAT.Sockets.Thin is if C_Msg = C.Strings.Null_Ptr then return Unknown_System_Error; - else return C_Msg; end if; diff --git a/gcc/ada/g-socthi.ads b/gcc/ada/g-socthi.ads index 10a9a2160e5..5d06d99bcae 100644 --- a/gcc/ada/g-socthi.ads +++ b/gcc/ada/g-socthi.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -65,15 +65,28 @@ package GNAT.Sockets.Thin is -- Returns the error message string for the error number Errno. If Errno is -- not known it returns "Unknown system error". + function Host_Errno return Integer; + pragma Import (C, Host_Errno, "__gnat_get_h_errno"); + -- Returns last host error number + subtype Fd_Set_Access is System.Address; No_Fd_Set : constant Fd_Set_Access := System.Null_Address; - type Timeval_Unit is new C.int; - pragma Convention (C, Timeval_Unit); + type time_t is + range -2 ** (8 * Constants.SIZEOF_tv_sec - 1) + .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1; + for time_t'Size use 8 * Constants.SIZEOF_tv_sec; + pragma Convention (C, time_t); + + type suseconds_t is + range -2 ** (8 * Constants.SIZEOF_tv_usec - 1) + .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1; + for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec; + pragma Convention (C, suseconds_t); type Timeval is record - Tv_Sec : Timeval_Unit; - Tv_Usec : Timeval_Unit; + Tv_Sec : time_t; + Tv_Usec : suseconds_t; end record; pragma Convention (C, Timeval); diff --git a/gcc/ada/g-soliop-mingw.ads b/gcc/ada/g-soliop-mingw.ads index 01874385123..2966df635e5 100644 --- a/gcc/ada/g-soliop-mingw.ads +++ b/gcc/ada/g-soliop-mingw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-soliop-solaris.ads b/gcc/ada/g-soliop-solaris.ads index f3b4b99c32d..9e012d61f73 100644 --- a/gcc/ada/g-soliop-solaris.ads +++ b/gcc/ada/g-soliop-solaris.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-soliop-unixware.ads b/gcc/ada/g-soliop-unixware.ads index 21727d4b762..4f42edc3be4 100644 --- a/gcc/ada/g-soliop-unixware.ads +++ b/gcc/ada/g-soliop-unixware.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-soliop.ads b/gcc/ada/g-soliop.ads index ca9aab16f24..daaa4743b4f 100644 --- a/gcc/ada/g-soliop.ads +++ b/gcc/ada/g-soliop.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-spipat.adb b/gcc/ada/g-spipat.adb index 43434738fae..ab6bdd55f33 100644 --- a/gcc/ada/g-spipat.adb +++ b/gcc/ada/g-spipat.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-spipat.ads b/gcc/ada/g-spipat.ads index 4f66b0d726a..31cbef67d6b 100644 --- a/gcc/ada/g-spipat.ads +++ b/gcc/ada/g-spipat.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-spitbo.adb b/gcc/ada/g-spitbo.adb index 7bab3f4a638..3bceb9cce85 100644 --- a/gcc/ada/g-spitbo.adb +++ b/gcc/ada/g-spitbo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -622,7 +622,7 @@ package body GNAT.Spitbol is begin for J in Str'Range loop - Result := Rotate_Left (Result, 1) + + Result := Rotate_Left (Result, 3) + Unsigned_32 (Character'Pos (Str (J))); end loop; diff --git a/gcc/ada/g-sptabo.ads b/gcc/ada/g-sptabo.ads index 1a960268ae2..659a2a1ff56 100644 --- a/gcc/ada/g-sptabo.ads +++ b/gcc/ada/g-sptabo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-1998 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-sptain.ads b/gcc/ada/g-sptain.ads index 4bd204ca518..3ac15d1a2cd 100644 --- a/gcc/ada/g-sptain.ads +++ b/gcc/ada/g-sptain.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-1998 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-sptavs.ads b/gcc/ada/g-sptavs.ads index efb3aa41b06..afa1575a27e 100644 --- a/gcc/ada/g-sptavs.ads +++ b/gcc/ada/g-sptavs.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-1998 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-string.ads b/gcc/ada/g-string.ads index f4f2e696da9..d11298c5f8b 100644 --- a/gcc/ada/g-string.ads +++ b/gcc/ada/g-string.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1995-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-tasloc.adb b/gcc/ada/g-tasloc.adb index c2acad14b0b..7667e49e14b 100644 --- a/gcc/ada/g-tasloc.adb +++ b/gcc/ada/g-tasloc.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-1999 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-tasloc.ads b/gcc/ada/g-tasloc.ads index 29fb36e3178..757d3c2df93 100644 --- a/gcc/ada/g-tasloc.ads +++ b/gcc/ada/g-tasloc.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1998-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-trasym-vms-alpha.adb b/gcc/ada/g-trasym-vms-alpha.adb index d294362c131..bb161e027ea 100644 --- a/gcc/ada/g-trasym-vms-alpha.adb +++ b/gcc/ada/g-trasym-vms-alpha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-trasym-vms-ia64.adb b/gcc/ada/g-trasym-vms-ia64.adb index 2e1834bffa0..1d82b66f67a 100644 --- a/gcc/ada/g-trasym-vms-ia64.adb +++ b/gcc/ada/g-trasym-vms-ia64.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/g-trasym.adb b/gcc/ada/g-trasym.adb index d518d70fa46..e8f91221a31 100644 --- a/gcc/ada/g-trasym.adb +++ b/gcc/ada/g-trasym.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2002 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -50,10 +50,10 @@ package body GNAT.Traceback.Symbolic is function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is procedure convert_addresses - (addrs : System.Address; - n_addr : Integer; - buf : System.Address; - len : System.Address); + (addrs : System.Address; + n_addr : Integer; + buf : System.Address; + len : System.Address); pragma Import (C, convert_addresses, "convert_addresses"); -- This is the procedure version of the Ada aware addr2line that will -- use argv[0] as the executable containing the debug information. diff --git a/gcc/ada/g-trasym.ads b/gcc/ada/g-trasym.ads index 8409732c032..626d8567269 100644 --- a/gcc/ada/g-trasym.ads +++ b/gcc/ada/g-trasym.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/gen-soccon.c b/gcc/ada/gen-soccon.c index 363416a674f..e8284335bcf 100644 --- a/gcc/ada/gen-soccon.c +++ b/gcc/ada/gen-soccon.c @@ -4,7 +4,7 @@ * * * G E N - S O C C O N * * * - * Copyright (C) 2004-2005 Free Software Foundation, Inc. * + * Copyright (C) 2004-2005, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -25,7 +25,7 @@ /* This program generates g-soccon.ads */ /* To build using DEC C: - CC/DEFINE="TARGET=OpenVMS" gen-soccon + CC/DEFINE="TARGET=""OpenVMS""" gen-soccon LINK gen-soccon RUN gen-soccon */ @@ -37,6 +37,11 @@ #include #include #include +#include + +#ifdef __MINGW32__ +#include +#endif #include "gsocket.h" @@ -55,8 +60,8 @@ struct line *first = NULL, *last = NULL; #define _NL TXT("") /* Empty line */ -#define itoad(n) f_itoa ("%d", n) -#define itoax(n) f_itoa ("16#%08x#", n) +#define itoad(n) f_itoa ("%d", (n)) +#define itoax(n) f_itoa ("16#%08x#", (n)) #define CND(name,comment) add_line(#name, itoad (name), comment); /* Constant (decimal) */ @@ -78,6 +83,10 @@ char *f_itoa (char *, int); void add_line (char *, char*, char*); +#ifdef __MINGW32__ +unsigned int _CRT_fmode = _O_BINARY; +#endif + int main (void) { @@ -89,7 +98,7 @@ TXT("-- G N A T . S O C K E T S . C O N S T A N T S TXT("-- --") TXT("-- S p e c --") TXT("-- --") -TXT("-- Copyright (C) 2000-2005 Free Software Foundation, Inc. --") +TXT("-- Copyright (C) 2000-2005, Free Software Foundation, Inc. --") TXT("-- --") TXT("-- GNAT is free software; you can redistribute it and/or modify it under --") TXT("-- terms of the GNU General Public License as published by the Free Soft- --") @@ -118,7 +127,7 @@ TXT("-- This package provides target dependent definitions of constant for use" TXT("-- by the GNAT.Sockets package (g-socket.ads). This package should not be") TXT("-- directly with'ed by an applications program.") _NL -TXT("-- This is the version for " STR (TARGET)) +TXT("-- This is the version for " TARGET) TXT("-- This file is generated automatically, do not modify it by hand! Instead,") TXT("-- make changes to gen-soccon.c and re-run it on each target.") _NL @@ -565,6 +574,36 @@ _NL CND(IOV_MAX, "Maximum writev iovcnt") _NL +TXT(" ----------------------") +TXT(" -- Type definitions --") +TXT(" ----------------------") +_NL + +{ + struct timeval tv; +TXT(" -- Sizes (in bytes) of the components of struct timeval") +_NL +#define SIZEOF_tv_sec (sizeof tv.tv_sec) +CND(SIZEOF_tv_sec, "tv_sec") +#define SIZEOF_tv_usec (sizeof tv.tv_usec) +CND(SIZEOF_tv_usec, "tv_usec") +} + +#ifdef __vxworks +_NL +TXT(" --------------------------------") +TXT(" -- VxWorks-specific constants --") +TXT(" --------------------------------") +_NL +TXT(" -- These constants may be used only within the VxWorks version of") +TXT(" -- GNAT.Sockets.Thin.") +_NL + +CND(OK, "VxWorks generic success") +CND(ERROR, "VxWorks generic error") +#endif + +_NL TXT("end GNAT.Sockets.Constants;") output (); @@ -614,6 +653,7 @@ f_itoa (char *fmt, int n) { void add_line (char *_text, char *_value, char *_comment) { struct line *l = (struct line *) malloc (sizeof (struct line)); + l->text = _text; l->value = _value; l->comment = _comment; diff --git a/gcc/ada/gigi.h b/gcc/ada/gigi.h index 9dba805530d..6dd10ff8210 100644 --- a/gcc/ada/gigi.h +++ b/gcc/ada/gigi.h @@ -248,9 +248,21 @@ extern void init_code_table (void); called. */ extern Node_Id error_gnat_node; -/* This is equivalent to stabilize_reference in GCC's tree.c, but we know - how to handle our new nodes and we take an extra argument that says - whether to force evaluation of everything. */ +/* This is equivalent to stabilize_reference in GCC's tree.c, but we know how + to handle our new nodes and we take extra arguments. + + FORCE says whether to force evaluation of everything, + + SUCCESS we set to true unless we walk through something we don't + know how to stabilize, or through something which is not an lvalue + and LVALUES_ONLY is true, in which cases we set to false. */ +extern tree maybe_stabilize_reference (tree ref, bool force, bool lvalues_only, + bool *success); + +/* Wrapper around maybe_stabilize_reference, for common uses without + lvalue restrictions and without need to examine the success + indication. */ + extern tree gnat_stabilize_reference (tree ref, bool force); /* Highest number in the front-end node table. */ @@ -612,6 +624,11 @@ extern tree build_vms_descriptor (tree type, Mechanism_Type mech, extern tree build_unc_object_type (tree template_type, tree object_type, tree name); +/* Same as build_unc_object_type, but taking a thin or fat pointer type + instead of the template type. */ +extern tree build_unc_object_type_from_ptr (tree thin_fat_ptr_type, + tree object_type, tree name); + /* Update anything previously pointing to OLD_TYPE to point to NEW_TYPE. In the normal case this is just two adjustments, but we have more to do if NEW is an UNCONSTRAINED_ARRAY_TYPE. */ diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi index 6d7da446974..c681b5286a1 100644 --- a/gcc/ada/gnat-style.texi +++ b/gcc/ada/gnat-style.texi @@ -5,9 +5,9 @@ @c o @c GNAT DOCUMENTATION o @c o -@c G N A T C O D I N G S T Y L E o +@c G N A T C O D I N G S T Y L E o @c o -@c Copyright (C) 1992-2005 Ada Core Technologies, Inc. o +@c Copyright (C) 1992-2005, AdaCore o @c o @c GNAT is free software; you can redistribute it and/or modify it under o @c terms of the GNU General Public License as published by the Free Soft- o @@ -262,7 +262,8 @@ the first letter of the comment). When declarations are commented with ``hanging'' comments, i.e.@: comments after the declaration, there is no blank line before the comment, and if it is absolutely necessary to have blank lines within -the comments these blank lines @emph{do} have a @code{--} (unlike the +the comments, e.g. to make paragraph separations within a single comment, +these blank lines @emph{do} have a @code{--} (unlike the normal rule, which is to use entirely blank lines for separating comment paragraphs). The comment starts at same level of indentation as code it is commenting. diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 7e9713f0588..9baa081a703 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -399,6 +399,7 @@ Implementation of Specific Ada Features * GNAT Implementation of Shared Passive Packages:: * Code Generation for Array Aggregates:: * The Size of Discriminated Records with Default Discriminants:: +* Strict Conformance to the Ada 95 Reference Manual:: Project File Reference @@ -2036,7 +2037,7 @@ description of the @code{GNAT LIBRARY} command in the OpenVMS version of the GNAT Users Guide for details on the use of this command. The two argument form specifies the representation to be used for -the specified floating-poin type. On all systems other than OpenVMS, +the specified floating-point type. On all systems other than OpenVMS, the argument must be @code{IEEE_Float} and the pragma has no effect. On OpenVMS, the argument may be @code{VAX_Float} to specify the use of the VAX float @@ -2597,8 +2598,7 @@ therefore cannot be @code{with}'ed by a restricted unit. This is used for a unit licensed under the GNAT modified GPL that includes a special exception paragraph that specifically permits the inclusion of the unit in programs without requiring the entire program to be released -under the GPL@. This is the license used for the GNAT run-time which ensures -that the run-time can be used freely in any program without GPL concerns. +under the GPL@. @item Restricted This is used for a unit that is restricted in that it is not permitted to @@ -2927,7 +2927,7 @@ statement sequence is a call to such a procedure. Syntax: @smallexample @c ada -ppragma No_Strict_Aliasing [([Entity =>] type_LOCAL_NAME)]; +pragma No_Strict_Aliasing [([Entity =>] type_LOCAL_NAME)]; @end smallexample @noindent @@ -2937,8 +2937,8 @@ strict aliasing optimization for the given type. The form with no arguments is a configuration pragma which applies to all access types declared in units to which the pragma applies. For a detailed description of the strict aliasing optimization, and the situations -in which it must be suppressed, see section "Optimization and Strict Aliasing" -in the @value{EDITION} User's Guide. +in which it must be suppressed, see section +``Optimization and Strict Aliasing'' in the @value{EDITION} User's Guide. @node Pragma Normalize_Scalars @unnumberedsec Pragma Normalize_Scalars @@ -3028,28 +3028,34 @@ pragma Obsolescent [(static_string_EXPRESSION [,Ada_05])]; @end smallexample @noindent -This pragma must occur immediately following a subprogram -declaration. It indicates that the associated function or procedure +This pragma can occur immediately following a subprogram +declaration and indicates that the associated function or procedure is considered obsolescent and should not be used. Typically this is used when an API must be modified by eventually removing or modifying existing subprograms. The pragma can be used at an intermediate stage when the subprogram is still present, but will be removed later. -The effect of this pragma is to output a warning message that the +The effect of this pragma is to output a warning message on +a call to a program thus marked that the subprogram is obsolescent if the appropriate warning option in the compiler is activated. If a parameter is present, then a second warning message is given containing this text. - In addition, a call to such a program is considered a violation of pragma Restrictions (No_Obsolescent_Features). +This pragma can also be used as a program unit pragma for a package, +in which case it indicates that the entire package is considered +obsolescent. In this case a client @code{with}'ing such a package +violates the restriction, and the @code{with} statement is +flagged with warnings if the warning option is set. + If the optional second parameter is present (which must be exactly the identifier Ada_05, no other argument is allowed), then the indication of obsolescence applies only when compiling in Ada 2005 mode. This is primarily intended for dealing with the situations -in the predefined library where subprograms have become defined -as obsolescent in Ada 2005 (e.g. in Ada.Characters.Handling), but -may be used anywhere. +in the predefined library where subprograms or packages +have become defined as obsolescent in Ada 2005 +(e.g. in Ada.Characters.Handling), but may be used anywhere. @node Pragma Passive @unnumberedsec Pragma Passive @@ -4273,6 +4279,7 @@ Syntax: @smallexample @c ada pragma Warnings (On | Off [, local_NAME]); +pragma Warnings (static_string_EXPRESSION); @end smallexample @noindent @@ -4290,6 +4297,66 @@ the specified entity. This suppression is effective from the point where it occurs till the end of the extended scope of the variable (similar to the scope of @code{Suppress}). +The form with a static_string_EXPRESSION argument provides more precise +control over which warnings are active. The string is a list of letters +specifying which warnings are to be activated and which deactivated. The +code for these letters is the same as the string used in the command +line switch controlling warnings. The following is a brief summary. For +full details see the GNAT Users Guide: + +@smallexample +a turn on all optional warnings (except d,h,l) +A turn off all optional warnings +b turn on warnings for bad fixed value (not multiple of small) +B turn off warnings for bad fixed value (not multiple of small) +c turn on warnings for constant conditional +C turn off warnings for constant conditional +d turn on warnings for implicit dereference +D turn off warnings for implicit dereference +e treat all warnings as errors +f turn on warnings for unreferenced formal +F turn off warnings for unreferenced formal +g turn on warnings for unrecognized pragma +G turn off warnings for unrecognized pragma +h turn on warnings for hiding variable +H turn off warnings for hiding variable +i turn on warnings for implementation unit +I turn off warnings for implementation unit +j turn on warnings for obsolescent (annex J) feature +J turn off warnings for obsolescent (annex J) feature +k turn on warnings on constant variable +K turn off warnings on constant variable +l turn on warnings for missing elaboration pragma +L turn off warnings for missing elaboration pragma +m turn on warnings for variable assigned but not read +M turn off warnings for variable assigned but not read +n normal warning mode (cancels s/e) +o turn on warnings for address clause overlay +O turn off warnings for address clause overlay +p turn on warnings for ineffective pragma Inline +P turn off warnings for ineffective pragma Inline +r turn on warnings for redundant construct +R turn off warnings for redundant construct +s suppress all warnings +u turn on warnings for unused entity +U turn off warnings for unused entity +v turn on warnings for unassigned variable +V turn off warnings for unassigned variable +x turn on warnings for export/import +X turn off warnings for export/import +y turn on warnings for Ada 2005 incompatibility +Y turn off warnings for Ada 2005 incompatibility +z turn on size/align warnings for unchecked conversion +Z turn off size/align warnings for unchecked conversion +@end smallexample + +@noindent +The specified warnings will be in effect until the end of the program +or another pragma Warnings is encountered. The effect of the pragma is +cumulative. Initially the set of warnings is the standard default set +as possibly modified by compiler switches. Then each pragma Warning +modifies this set of warnings as specified. + @node Pragma Weak_External @unnumberedsec Pragma Weak_External @findex Weak_External @@ -7475,10 +7542,28 @@ but for which no elaboration code is generated. Generally, it is the case that preelaborable units will meet the restrictions, with the exception of large aggregates initialized with an others_clause, and exception declarations (which generate calls to a run-time -registry procedure). Note that this restriction is enforced on +registry procedure). This restriction is enforced on a unit by unit basis, it need not be obeyed consistently throughout a partition. +It is not possible to precisely document +the constructs which are compatible with this restriction, since, +unlike most other restrictions, this is not a restriction on the +source code, but a restriction on the generated object code. For +example, if the source contains a declaration: + +@smallexample + Val : constant Integer := X; +@end smallexample + +@noindent +where X is not a static constant, it may be possible, depending +on complex optimization circuitry, for the compiler to figure +out the value of X at compile time, in which case this initialization +can be done by the loader, and requires no initialization code. It +is not possible to document the precise conditions under which the +optimizer can figure this out. + @item No_Entry_Queue @findex No_Entry_Queue This restriction is a declaration that any protected entry compiled in @@ -8271,9 +8356,15 @@ overflow situations, when the @code{Machine_Overflows} attribute of the result type is @code{False}. See G.2.1(13). @end cartouche @noindent -Infinite and Nan values are produced as dictated by the IEEE +Infinite and NaN values are produced as dictated by the IEEE floating-point standard. +Note that on machines that are not fully compliant with the IEEE +floating-point standard, such as Alpha, the @option{-mieee} compiler flag +must be used for achieving IEEE confirming behavior (although at the cost +of a significant performance penalty), so infinite and NaN values are +properly generated. + @sp 1 @cartouche @noindent @@ -10399,8 +10490,9 @@ purposes the description in the Ada 95 reference manual, or appropriate Ada text book, will be sufficient for making use of these facilities. -In the case of the input-output facilities, @xref{The Implementation of -Standard I/O}, gives details on exactly how GNAT interfaces to the +In the case of the input-output facilities, +@xref{The Implementation of Standard I/O}, +gives details on exactly how GNAT interfaces to the file system. For the remaining packages, the Ada 95 reference manual should be sufficient. The following is a list of the packages included, together with a brief description of the functionality that is provided. @@ -10979,10 +11071,16 @@ All input/output operations use @code{fread}/@code{fwrite}. @end itemize @noindent -There is no internal buffering of any kind at the Ada library level. The -only buffering is that provided at the system level in the -implementation of the C library routines that support streams. This -facilitates shared use of these streams by mixed language programs. +There is no internal buffering of any kind at the Ada library level. The only +buffering is that provided at the system level in the implementation of the +library routines that support streams. This facilitates shared use of these +streams by mixed language programs. Note though that system level buffering is +explictly enabled at elaboration of the standard I/O packages and that can have +an impact on mixed language programs, in particular those using I/O before +calling the Ada elaboration routine (e.g. adainit). It is recommended to call +the Ada elaboration routine before performing any I/O or when impractical, flush +the common I/O streams and in particular Standard_Output before elaborating the +Ada code. @node FORM Strings @section FORM Strings @@ -13480,6 +13578,7 @@ facilities. * GNAT Implementation of Shared Passive Packages:: * Code Generation for Array Aggregates:: * The Size of Discriminated Records with Default Discriminants:: +* Strict Conformance to the Ada 95 Reference Manual:: @end menu @node Machine Code Insertions @@ -14113,7 +14212,33 @@ aliasing all views of the object (which may be manipulated by different tasks, say) must be consistent, so it is imperative that the object, once created, remain invariant. +@node Strict Conformance to the Ada 95 Reference Manual +@section Strict Conformance to the Ada 95 Reference Manual + +@noindent +The dynamic semantics defined by the Ada 95 Reference Manual impose a set of +run-time checks to be generated. By default, the GNAT compiler will insert many +run-time checks into the compiled code, including most of those required by the +Ada 95 Reference Manual. However, there are three checks that are not enabled +in the default mode for efficiency reasons: arithmetic overflow checking for +integer operations (including division by zero), checks for access before +elaboration on subprogram calls, and stack overflow checking (most operating +systems do not perform this check by default). + +Strict conformance to the Ada 95 Reference Manual can be achieved by adding +three compiler options for overflow checking for integer operations +(@option{-gnato}), dynamic checks for access-before-elaboration on subprogram +calls and generic instantiations (@option{-gnatE}), and stack overflow +checking (@option{-fstack-check}). +Note that the result of a floating point arithmetic operation in overflow and +invalid situations, when the @code{Machine_Overflows} attribute of the result +type is @code{False}, is to generate IEEE NaN and infinite values. This is the +case for machines compliant with the IEEE floating-point standard, but on +machines that are not fully compliant with this standard, such as Alpha, the +@option{-mieee} compiler flag must be used for achieving IEEE confirming +behavior (although at the cost of a significant performance penalty), so +infinite and and NaN values are properly generated. @node Project File Reference @@ -14431,7 +14556,55 @@ for building shared libraries. Expression must be a path name. The attribute defines the directory in which the sources of the interfaces of a Stand-alone Library will be copied. The directory must exist, must be distinct from the project's -object directory and source directories, and must be writable. +object directory and source directories of all project in the project tree, +and must be writable. + +@item Library_Src_Dir +Expression must be a path name. The attribute defines the +directory in which the ALI files of a Library will +be copied. The directory must exist, must be distinct from the project's +object directory and source directoriesof all project in the project tree, +and must be writable. + +@item Library_Symbol_File +Expression must be a single string. Its value is the single file name of a +symbol file to be created when building a stand-alone library when the +symbol policy is either "compliant", "controlled" or "restricted", +on platforms that support symbol control, such as VMS. + +@item Library_Reference_Symbol_File +Expression must be a single string. Its value is the single file name of a +reference symbol file that is read when the symbol policy is either +"compliant" or "controlled", on platforms that support symbol control, +such as VMS, when building a stand-alone library. + +@item Library_Symbol_Policy +Expression must be a single string. Its case-insensitive value can only be +"autonomous", "default", "compliant", "controlled" or "restricted". + +This attribute is not taken into account on all platforms. It controls the +policy for exported symbols and, on some platforms (like VMS) that have the +notions of major and minor IDs built in the library files, it controls +the setting of these IDs. + +"autonomous" or "default": exported symbols are not controlled. + +"compliant": if attribute Library_Reference_Symbol_File is not defined, then +it is equivalent to policy "autonomous". If there are exported symbols in +the reference symbol file that are not in the object files of the interfaces, +the major ID of the library is increased. If there are symbols in the +object files of the interfaces that are not in the reference symbol file, +these symbols are put at the end of the list in the newly created symbol file +and the minor ID is increased. + +"controlled": the attribute Library_Reference_Symbol_File must be difined. +The library will fail to build if the exported symbols in the object files of +the interfaces do not match exactly the symbol in the symbol file. + +"restricted": The attribute Library_Symbol_File must be defined. The library +will fail to build if there are symbols in the symbol file that are not in +the exported symbols of the object files of the interfaces. Additional symbols +in the object files are not added to the symbol file. @item Main Expression must be a list of strings that are legal file names. @@ -14443,6 +14616,12 @@ command, one or several executables are built and placed in the Exec_Dir. If the gnatmake command does not include explicit file names, the executables that are built correspond to the files specified by this attribute. +@item Externally_Built +Expression must be a single string. Its value must be either "true" of "false", +case-insensitive. The default is "false". When the value of this attribute is +"true", no attempt is made to compile the sources or to build the library, +when the project is a library project. + @item Main_Language This is a simple attribute. Its value is a string that specifies the language of the main program. @@ -14700,27 +14879,20 @@ This is an associative array attribute. Its domain is a set of language names. Its range is a string list that specifies the compilation options to be used when compiling a component written in that language, for which no file-specific switches have been -specified.. +specified. @item Switches This is an associative array attribute. Its domain is a set of file names. Its range is a string list that specifies the compilation options to be used when compiling the named file. If a file is not specified in the Switches attribute, it is compiled with the -settings specified by Default_Switches. +options specified by Default_Switches of its language, if defined. @item Local_Configuration_Pragmas. This is a simple attribute, whose value is a path name that designates a file containing configuration pragmas to be used for all invocations of the compiler for immediate sources of the project. - -@item Executable -This is an associative array attribute. Its domain is -a set of main source file names. Its range is a simple string that specifies -the executable file name to be used when linking the specified main source. -If a main source is not specified in the Executable attribute, the executable -file name is deducted from the main source file name. @end table @subsection package Builder @@ -14732,10 +14904,18 @@ following attributes apply to package @code{Builder}: @table @code @item Default_Switches -As above. +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when building a main +written in that language, for which no file-specific switches have been +specified. @item Switches -As above. +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when building the named main file. If a main file +is not specified in the Switches attribute, it is built with the +options specified by Default_Switches of its language, if defined. @item Global_Configuration_Pragmas This is a simple attribute, whose @@ -14743,14 +14923,17 @@ value is a path name that designates a file that contains configuration pragmas to be used in every build of an executable. If both local and global configuration pragmas are specified, a compilation makes use of both sets. + @item Executable -This is an associative array attribute, defined over -compilation unit names. The image is a string that is the name of the -executable file corresponding to the main source file index. +This is an associative array attribute. Its domain is +a set of main source file names. Its range is a simple string that specifies +the executable file name to be used when linking the specified main source. +If a main source is not specified in the Executable attribute, the executable +file name is deducted from the main source file name. This attribute has no effect if its value is the empty string. @item Executable_Suffix -This is a simple attribute whose value is a suffix to be added to +This is a simple attribute whose value is the suffix to be added to the executables that don't have an attribute Executable specified. @end table @@ -14763,7 +14946,8 @@ The following attributes apply to package @code{Gnatls}: @table @code @item Switches -As above. +This is a single attribute with a string list value. Each non empty string +in the list is an option when invoking @code{gnatls}. @end table @subsection package Binder @@ -14775,9 +14959,18 @@ The following attributes apply to package @code{Binder}: @table @code @item Default_Switches -As above. -@item Switches -As above. +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when binding a main +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when binding the named main file. If a main file +is not specified in the Switches attribute, it is boundt with the +options specified by Default_Switches of its language, if defined. @end table @subsection package Linker @@ -14789,9 +14982,24 @@ The following attributes apply to package @code{Linker}: @table @code @item Default_Switches -As above -@item Switches -As above. +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when linking a main +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when linking the named main file. If a main file +is not specified in the Switches attribute, it is linked with the +options specified by Default_Switches of its language, if defined. + +@item Linker_Options +This is a string list attribute. Its value specifies additional options that +be givent to the linker when linking an executable. This attribute is not +used in the main project, only in projects imported directly or indirectly. + @end table @subsection package Cross_Reference @@ -14804,9 +15012,19 @@ The following attributes apply to package @code{Cross_Reference}: @table @code @item Default_Switches -As above. -@item Switches -As above. +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when calling @command{gnatxref} on a source +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when calling @command{gnatxref} on the named main source. +If a source is not specified in the Switches attribute, @command{gnatxref} will +be called with the options specified by Default_Switches of its language, +if defined. @end table @subsection package Finder @@ -14818,9 +15036,19 @@ The following attributes apply to package @code{Finder}: @table @code @item Default_Switches -As above. -@item Switches -As above. +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when calling @command{gnatfind} on a source +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when calling @command{gnatfind} on the named main source. +If a source is not specified in the Switches attribute, @command{gnatfind} will +be called with the options specified by Default_Switches of its language, +if defined. @end table @subsection package Pretty_Printer @@ -14833,9 +15061,94 @@ The following attributes apply to package @code{Pretty_Printer}: @table @code @item Default_switches -As above. -@item Switches -As above. +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when calling @command{gnatpp} on a source +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when calling @command{gnatpp} on the named main source. +If a source is not specified in the Switches attribute, @command{gnatpp} will +be called with the options specified by Default_Switches of its language, +if defined. +@end table + +@subsection package gnatstub + +@noindent +The attributes of package @code{gnatstub} +specify the tool options to be used +when invoking the tool @command{gnatstub}. +The following attributes apply to package @code{gnatstub}: + +@table @code +@item Default_switches +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when calling @command{gnatstub} on a source +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when calling @command{gnatstub} on the named main source. +If a source is not specified in the Switches attribute, @command{gnatpp} will +be called with the options specified by Default_Switches of its language, +if defined. +@end table + +@subsection package Eliminate + +@noindent +The attributes of package @code{Eliminate} +specify the tool options to be used +when invoking the tool @command{gnatelim}. +The following attributes apply to package @code{Eliminate}: + +@table @code +@item Default_switches +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when calling @command{gnatelim} on a source +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when calling @command{gnatelim} on the named main source. +If a source is not specified in the Switches attribute, @command{gnatelim} will +be called with the options specified by Default_Switches of its language, +if defined. +@end table + +@subsection package Metrics + +@noindent +The attributes of package @code{Metrics} +specify the tool options to be used +when invoking the tool @command{gnatmetric}. +The following attributes apply to package @code{Metrics}: + +@table @code +@item Default_switches +This is an associative array attribute. Its +domain is a set of language names. Its range is a string list that +specifies options to be used when calling @command{gnatmetric} on a source +written in that language, for which no file-specific switches have been +specified. + +@item Switches +This is an associative array attribute. Its domain is +a set of file names. Its range is a string list that specifies +options to be used when calling @command{gnatmetric} on the named main source. +If a source is not specified in the Switches attribute, @command{gnatmetric} +will be called with the options specified by Default_Switches of its language, +if defined. @end table @subsection package IDE diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 4361b013af3..4f4e5852b30 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -7,7 +7,7 @@ @c o @c G N A T _ U G N o @c o -@c Copyright (C) 1992-2005 Ada Core Technologies, Inc. o +@c Copyright (C) 1992-2005, AdaCore o @c o @c GNAT is free software; you can redistribute it and/or modify it under o @c terms of the GNU General Public License as published by the Free Soft- o @@ -195,7 +195,7 @@ AdaCore@* * Other Utility Programs:: * Running and Debugging Ada Programs:: @ifset vms -* Compatibility with DEC Ada:: +* Compatibility with HP Ada:: @end ifset * Platform-Specific Information for the Run-Time Libraries:: * Example of Binder Output File:: @@ -508,7 +508,7 @@ Running and Debugging Ada Programs @end ifset @ifset vms -Compatibility with DEC Ada +Compatibility with HP Ada * Ada 95 Compatibility:: * Differences in the Definition of Package System:: @@ -516,7 +516,7 @@ Compatibility with DEC Ada * The Package STANDARD:: * The Package SYSTEM:: * Tasking and Task-Related Features:: -* Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems:: +* Implementation of Tasks in HP Ada for OpenVMS Alpha Systems:: * Pragmas and Pragma-Related Features:: * Library of Predefined Units:: * Bindings:: @@ -526,7 +526,6 @@ Compatibility with DEC Ada * Program Compilation and Library Management:: * Input-Output:: * Implementation Limits:: -* Tools:: Language-Related Features @@ -538,7 +537,7 @@ Language-Related Features * Address Clauses:: * Other Representation Clauses:: -Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems +Implementation of Tasks in HP Ada for OpenVMS Alpha Systems * Assigning Task IDs:: * Task IDs and Delays:: @@ -604,7 +603,7 @@ Compatibility and Porting Guide * Compatibility with Ada 83:: * Implementation-dependent characteristics:: -* Compatibility with DEC Ada 83:: +* Compatibility with HP Ada 83:: * Compatibility with Other Ada 95 Systems:: * Representation Clauses:: @ifset vms @@ -798,10 +797,12 @@ Ada programs. @ifset vms @item -@ref{Compatibility with DEC Ada}, details the compatibility of GNAT with -DEC Ada 83 @footnote{``DEC Ada'' refers to the legacy product originally +@ref{Compatibility with HP Ada}, details the compatibility of GNAT with +HP Ada 83 @footnote{``HP Ada'' refers to the legacy product originally developed by Digital Equipment Corporation and currently supported by HP.} -for OpenVMS Alpha. +for OpenVMS Alpha. This product was formerly known as DEC Ada, and for +historical compatibility reasons, the relevant libraries still use the +DEC prefix. @end ifset @item @@ -2915,7 +2916,7 @@ involving variant records, access parameters, tasks, or protected types, are unlikely to be able to be passed. Note that in the case of GNAT running -on a platform that supports DEC Ada 83, a higher degree of compatibility +on a platform that supports HP Ada 83, a higher degree of compatibility can be guaranteed, and in particular records are layed out in an identical manner in the two compilers. Note also that if output from two different compilers is mixed, the program is responsible for dealing with elaboration @@ -2926,8 +2927,8 @@ elaboration of the GNAT components. Consult the documentation of the other Ada compiler for further details on elaboration. However, it is not possible to mix the tasking run time of GNAT and -DEC Ada 83, All the tasking operations must either be entirely within -GNAT compiled sections of the program, or entirely within DEC Ada 83 +HP Ada 83, All the tasking operations must either be entirely within +GNAT compiled sections of the program, or entirely within HP Ada 83 compiled sections of the program. @cindex Interfacing to Assembly @@ -3048,21 +3049,21 @@ implemented as a single machine instruction. @findex Stdcall @cindex Convention Stdcall @item Stdcall -This is relevant only to NT/Win95 implementations of GNAT, -and specifies that the Stdcall calling sequence will be used, as defined -by the NT API. Nevertheless, to ease building cross-platform bindings this -convention will be handled as a C calling convention on non Windows -platforms. +This is relevant only to Windows XP/2000/NT/95 implementations of GNAT, +and specifies that the @code{Stdcall} calling sequence will be used, +as defined by the NT API. Nevertheless, to ease building +cross-platform bindings this convention will be handled as a @code{C} calling +convention on non Windows platforms. @findex DLL @cindex Convention DLL @item DLL -This is equivalent to Stdcall. +This is equivalent to @code{Stdcall}. @findex Win32 @cindex Convention Win32 @item Win32 -This is equivalent to Stdcall. +This is equivalent to @code{Stdcall}. @end ifset @findex Stubbed @@ -3872,7 +3873,7 @@ Output full source listing with embedded error messages. Limit number of detected error or warning messages to @var{n} where @var{n} is in the range 1..999_999. The default setting if no switch is given is 9999. Compilation is terminated if this -limit is exceeded. +limit is exceeded. The equal sign here is optional. @item -gnatn @cindex @option{-gnatn} (@command{gcc}) @@ -4130,6 +4131,13 @@ Execute @var{ver} version of the compiler. This is the @command{gcc} version, not the GNAT version. @end ifclear +@item ^-w^NO_BACK_END_WARNINGS^ +@cindex @option{-w} (@command{gcc}) +Turn off warnings generated by the back end of the compiler. Use of +this switch also causes the default for front end warnings to be set +to suppress (as though @option{-gnatws} had appeared at the start of +the options. + @end table @ifclear vms @@ -4295,7 +4303,7 @@ file) as well as the verbose format message or full listing (which as usual is written to @file{stdout} (the standard output file). -@item -gnatm^^=^@var{n} +@item -gnatm=@var{n} @cindex @option{-gnatm} (@command{gcc}) @ifclear vms The @code{m} stands for maximum. @@ -4311,6 +4319,10 @@ fatal error: maximum errors reached compilation abandoned @end smallexample +@noindent +Note that the equal sign is optional, so the switches +@option{-gnatm2} and @option{-gnatm=2} are equivalent. + @item -gnatf @cindex @option{-gnatf} (@command{gcc}) @cindex Error messages, suppressing @@ -4615,6 +4627,13 @@ not get issued for the use of boolean variables or constants whose values are known at compile time, since this is a standard technique for conditional compilation in Ada, and this would generate too many ``false positive'' warnings. + +This warning option also activates a special test for comparisons using +the operators >= and <=. If the compiler can tell that only the equality +condition is posible, then it will warn that the > or < part of the test +is useless and that the operator could be replaced by =. An example would +be comparing a Natural variable <= 0. + This warning can also be turned on using @option{-gnatwa}. @item -gnatwC @@ -4767,9 +4786,9 @@ This switch disables warnings on variables that could be declared constants. @cindex @option{-gnatwl} (@command{gcc}) @cindex Elaboration, warnings This switch activates warnings on missing -@code{pragma Elaborate_All} statements. +@code{Elaborate_All} and @code{Elaborate} pragmas. See the section in this guide on elaboration checking for details on -when such pragma should be used. Warnings are also generated if you +when such pragmas should be used. Warnings are also generated if you are using the static mode of elaboration, and a @code{pragma Elaborate} is encountered. The default is that such warnings are not generated. @@ -4778,9 +4797,9 @@ This warning is not automatically turned on by the use of @option{-gnatwa}. @item -gnatwL @emph{Suppress warnings for missing elaboration pragmas.} @cindex @option{-gnatwL} (@command{gcc}) -This switch suppresses warnings on missing pragma Elaborate_All statements. +This switch suppresses warnings on missing Elaborate and Elaborate_All pragmas. See the section in this guide on elaboration checking for details on -when such pragma should be used. +when such pragmas should be used. @item -gnatwm @emph{Activate warnings on modified but unreferenced variables.} @@ -4994,9 +5013,11 @@ warnings about uninitialized variables. @item ^-w^/NO_BACK_END_WARNINGS^ @cindex @option{-w} -This switch suppresses warnings from the @option{^gcc^GCC^} back end. It may -be used in conjunction with @option{-gnatws} to ensure that all warnings -are suppressed during the entire compilation process. +This switch suppresses warnings from the @option{^gcc^GCC^} back end. The +code generator detects a number of warning situations that are missed +by the @option{GNAT} front end, and this switch can be used to suppress them. +The use of this switch also sets the default front end warning mode to +@option{-gnatws}, that is, front end warnings suppressed as well. @end table @@ -5686,15 +5707,17 @@ clears any previously set style checks. @cindex Access before elaboration @cindex Checks, division by zero @cindex Checks, access before elaboration +@cindex Checks, stack overflow checking @noindent If you compile with the default options, GNAT will insert many run-time checks into the compiled code, including code that performs range checking against constraints, but not arithmetic overflow checking for -integer operations (including division by zero) or checks for access -before elaboration on subprogram calls. All other run-time checks, as -required by the Ada 95 Reference Manual, are generated by default. -The following @command{gcc} switches refine this default behavior: +integer operations (including division by zero), checks for access +before elaboration on subprogram calls, or stack overflow checking. All +other run-time checks, as required by the Ada 95 Reference Manual, are +generated by default. The following @command{gcc} switches refine this +default behavior: @table @option @c !sort! @@ -5802,6 +5825,13 @@ Enables dynamic checks for access-before-elaboration on subprogram calls and generic instantiations. For full details of the effect and use of this switch, @xref{Compiling Using gcc}. + +@item -fstack-check +@cindex @option{-fstack-check} (@command{gcc}) +@cindex Stack Overflow Checking +@cindex Checks, stack overflow checking +Activates stack overflow checking. For full details of the effect and use of +this switch see @ref{Stack Overflow Checking}. @end table @findex Unsuppress @@ -6406,6 +6436,9 @@ If _FILE is added at the end of an option then the output is to a file with the name @file{file_REP} where file is the name of the corresponding source file. @end ifset +Note that it is possible for record components to have zero size. In +this case, the component clause uses an obvious extension of permitted +Ada syntax, for example @code{at 0 range 0 .. -1}. @item -gnatS @cindex @option{-gnatS} (@command{gcc}) @@ -6783,7 +6816,7 @@ Normally, define this value as a logical name containing a comma separated list of directory names. This variable can also be defined by means of an environment string -(an argument to the DEC C exec* set of functions). +(an argument to the HP C exec* set of functions). Logical Name: @smallexample @@ -6794,7 +6827,7 @@ DEFINE ADA_INCLUDE_PATH ANOTHER_PATH,FOO:[BAM],FOO:[BAR] By default, the path includes GNU:[LIB.OPENVMS7_x.2_8_x.DECLIB] first, followed by the standard Ada 95 libraries in GNU:[LIB.OPENVMS7_x.2_8_x.ADAINCLUDE]. -If this is not redefined, the user will obtain the DEC Ada 83 IO packages +If this is not redefined, the user will obtain the HP Ada 83 IO packages (Text_IO, Sequential_IO, etc) instead of the Ada95 packages. Thus, in order to get the Ada 95 packages by default, ADA_INCLUDE_PATH must be redefined. @@ -7448,7 +7481,7 @@ Normally it only makes sense to use the @option{^-p^/PESSIMISTIC_ELABORATION^} switch if dynamic elaboration checking is used (@option{-gnatE} switch used for compilation). This is because in the default static elaboration mode, all necessary -@code{Elaborate_All} pragmas are implicitly inserted. +@code{Elaborate} and @code{Elaborate_All} pragmas are implicitly inserted. These implicit pragmas are still respected by the binder in @option{^-p^/PESSIMISTIC_ELABORATION^} mode, so a safe elaboration order is assured. @@ -7699,7 +7732,7 @@ Normally, define this value as a logical name containing a comma separated list of directory names. This variable can also be defined by means of an environment string -(an argument to the DEC C exec* set of functions). +(an argument to the HP C exec* set of functions). Logical Name: @smallexample @@ -7710,7 +7743,7 @@ DEFINE ADA_OBJECTS_PATH ANOTHER_PATH,FOO:[BAM],FOO:[BAR] By default, the path includes GNU:[LIB.OPENVMS7_x.2_8_x.DECLIB] first, followed by the standard Ada 95 libraries in GNU:[LIB.OPENVMS7_x.2_8_x.ADALIB]. -If this is not redefined, the user will obtain the DEC Ada 83 IO packages +If this is not redefined, the user will obtain the HP Ada 83 IO packages (Text_IO, Sequential_IO, etc) instead of the Ada95 packages. Thus, in order to get the Ada 95 packages by default, ADA_OBJECTS_PATH must be redefined. @@ -8004,14 +8037,16 @@ when multiple versions of the GNAT compiler are available. See the @cindex @option{--GCC=compiler_name} (@command{gnatlink}) Program used for compiling the binder file. The default is @command{gcc}. You need to use quotes around @var{compiler_name} if -@code{compiler_name} contains spaces or other separator characters. As -an example @option{--GCC="foo -x -y"} will instruct @command{gnatlink} to use -@code{foo -x -y} as your compiler. Note that switch @option{-c} is always +@code{compiler_name} contains spaces or other separator characters. +As an example @option{--GCC="foo -x -y"} will instruct @command{gnatlink} to +use @code{foo -x -y} as your compiler. Note that switch @option{-c} is always inserted after your command name. Thus in the above example the compiler command that will be used by @command{gnatlink} will be @code{foo -c -x -y}. -If several @option{--GCC=compiler_name} are used, only the last -@var{compiler_name} is taken into account. However, all the additional -switches are also taken into account. Thus, +A limitation of this syntax is that the name and path name of the executable +itself must not include any embedded spaces. If several +@option{--GCC=compiler_name} are used, only the last @var{compiler_name} +is taken into account. However, all the additional switches are also taken +into account. Thus, @option{--GCC="foo -x -y" --GCC="bar -z -t"} is equivalent to @option{--GCC="bar -x -y -z -t"}. @@ -8047,8 +8082,8 @@ Generate the executable file even if there are linker warnings. @item /NOSTART_FILES Don't link in the object file containing the ``main'' transfer address. -Used when linking with a foreign language main program compiled with a -Digital compiler. +Used when linking with a foreign language main program compiled with an +HP compiler. @item /STATIC Prefer linking with object libraries over sharable images, even without @@ -8221,12 +8256,13 @@ Program used for compiling. The default is `@command{gcc}'. You need to use quotes around @var{compiler_name} if @code{compiler_name} contains spaces or other separator characters. As an example @option{--GCC="foo -x -y"} will instruct @command{gnatmake} to use @code{foo -x -y} as your -compiler. Note that switch @option{-c} is always inserted after your -command name. Thus in the above example the compiler command that will -be used by @command{gnatmake} will be @code{foo -c -x -y}. -If several @option{--GCC=compiler_name} are used, only the last -@var{compiler_name} is taken into account. However, all the additional -switches are also taken into account. Thus, +compiler. A limitation of this syntax is that the name and path name of +the executable itself must not include any embedded spaces. Note that +switch @option{-c} is always inserted after your command name. Thus in the +above example the compiler command that will be used by @command{gnatmake} +will be @code{foo -c -x -y}. If several @option{--GCC=compiler_name} are +used, only the last @var{compiler_name} is taken into account. However, +all the additional switches are also taken into account. Thus, @option{--GCC="foo -x -y" --GCC="bar -z -t"} is equivalent to @option{--GCC="bar -x -y -z -t"}. @@ -8236,8 +8272,10 @@ Program used for binding. The default is `@code{gnatbind}'. You need to use quotes around @var{binder_name} if @var{binder_name} contains spaces or other separator characters. As an example @option{--GNATBIND="bar -x -y"} will instruct @command{gnatmake} to use @code{bar -x -y} as your -binder. Binder switches that are normally appended by @command{gnatmake} to -`@code{gnatbind}' are now appended to the end of @code{bar -x -y}. +binder. Binder switches that are normally appended by @command{gnatmake} +to `@code{gnatbind}' are now appended to the end of @code{bar -x -y}. +A limitation of this syntax is that the name and path name of the executable +itself must not include any embedded spaces. @item --GNATLINK=@var{linker_name} @cindex @option{--GNATLINK=linker_name} (@command{gnatmake}) @@ -8247,6 +8285,8 @@ or other separator characters. As an example @option{--GNATLINK="lan -x -y"} will instruct @command{gnatmake} to use @code{lan -x -y} as your linker. Linker switches that are normally appended by @command{gnatmake} to `@command{gnatlink}' are now appended to the end of @code{lan -x -y}. +A limitation of this syntax is that the name and path name of the executable +itself must not include any embedded spaces. @end ifclear @@ -8497,7 +8537,19 @@ if not up to date, and libraries are rebuilt, if necessary. @item ^-v^/REASONS^ @cindex @option{^-v^/REASONS^} (@command{gnatmake}) Verbose. Display the reason for all recompilations @command{gnatmake} -decides are necessary. +decides are necessary, with the highest verbosity level. + +@item ^-vl^/LOW_VERBOSITY^ +@cindex @option{^-vl^/LOW_VERBOSITY^} (@command{gnatmake}) +Verbosity level Low. Display fewer lines than in verbosity Medium. + +@item ^-vm^/MEDIUM_VERBOSITY^ +@cindex @option{^-vm^/MEDIUM_VERBOSITY^} (@command{gnatmake}) +Verbosity level Medium. Potentially display fewer lines than in verbosity High. + +@item ^-vh^/HIGH_VERBOSITY^ +@cindex @option{^-vm^/HIGH_VERBOSITY^} (@command{gnatmake}) +Verbosity level High. Equivalent to ^-v^/REASONS^. @item ^-vP^/MESSAGES_PROJECT_FILE=^@emph{x} Indicate the verbosity of the parsing of GNAT project files. @@ -9315,7 +9367,7 @@ to work. Examples of switches in this category are @option{-funroll-loops} and the various target-specific @option{-m} options (in particular, it has been observed that @option{-march=pentium4} can significantly improve performance -on appropriate machines. For full details of these switches, see the +on appropriate machines). For full details of these switches, see the @code{gcc} manual. @node Optimization and Strict Aliasing @@ -9538,7 +9590,7 @@ unchecked conversion of access values. @subsection Coverage Analysis @noindent -GNAT supports the Digital Performance Coverage Analyzer (PCA), which allows +GNAT supports the HP Performance Coverage Analyzer (PCA), which allows the user to determine the distribution of execution time across a program, @pxref{Profiling} for details of usage. @end ifset @@ -10221,7 +10273,7 @@ pragma Extend_System (Aux_DEC); @noindent In the presence of this pragma, GNAT adds to the definition of the predefined package SYSTEM all the additional types and subprograms that are -defined in DEC Ada. See @ref{Compatibility with DEC Ada} for details. +defined in HP Ada. See @ref{Compatibility with HP Ada} for details. @end ifset @node Handling Arbitrary File Naming Conventions Using gnatname @@ -11608,12 +11660,10 @@ The following attributes are defined on projects (all are simple attributes): @tab string @item @code{Locally_Removed_Files} @tab string list -@item @code{Main} -@tab string list @item @code{Languages} @tab string list -@item @code{Main_Language} -@tab string +@item @code{Main} +@tab string list @item @code{Library_Dir} @tab string @item @code{Library_Name} @@ -11628,8 +11678,20 @@ The following attributes are defined on projects (all are simple attributes): @tab string @item @code{Library_Options} @tab string list +@item @code{Library_Src_Dir} +@tab string +@item @code{Library_ALI_Dir} +@tab string @item @code{Library_GCC} @tab string +@item @code{Library_Symbol_File} +@tab string +@item @code{Library_Symbol_Policy} +@tab string +@item @code{Library_Reference_Symbol_File} +@tab string +@item @code{Externally_Built} +@tab string @end multitable @noindent @@ -12531,7 +12593,7 @@ package models the Apex file naming rules: @end ifclear @ifset vms -For example, the following package models the DEC Ada file naming rules: +For example, the following package models the HP Ada file naming rules: @smallexample @c projectfile @group @@ -12651,7 +12713,7 @@ sensitive or insensitive depending on the operating system). To create a library project, you need to define in its project file two project-level attributes: @code{Library_Name} and @code{Library_Dir}. -Additionally, you may define the library-related attributes +Additionally, you may define other library-related attributes such as @code{Library_Kind}, @code{Library_Version}, @code{Library_Interface}, @code{Library_Auto_Init}, @code{Library_Options} and @code{Library_GCC}. @@ -12663,10 +12725,9 @@ to be acceptable on all platforms. The @code{Library_Dir} attribute has a string value that designates the path (absolute or relative) of the directory where the library will reside. -It must designate an existing directory, and this directory must be -different from the project's object directory. It also needs to be writable. -The directory should only be used for one library; the reason is that all -files contained in this directory may be deleted by the Project Manager. +It must designate an existing directory, and this directory must be writable, +different from the project's object directory and from any source directory +in the project tree. If both @code{Library_Name} and @code{Library_Dir} are specified and are legal, then the project file defines a library project. The optional @@ -12686,6 +12747,13 @@ be generated for the latter. For such cases, it is recommended to either use two different project files, or a single one which uses external variables to indicate what kind of library should be build. +The @code{Library_ALI_Dir} attribute may be specified to indicate the +directory where the ALI files of the libriry will be copied. When it is +not specified, the ALI files are copied ti the directory specified in +attribute @code{Library_Dir}. The directory specified by @code{Library_ALI_Dir} +must be writable and different from the project's object directory and from +any source directory in the project tree. + The @code{Library_Version} attribute has a string value whose interpretation is platform dependent. It has no effect on VMS and Windows. On Unix, it is used only for dynamic/relocatable libraries as the internal name of the @@ -15086,7 +15154,7 @@ Options @option{^-pipe^/STANDARD_OUTPUT^}, contains only one file to reformat. Option @option{^--eol^/END_OF_LINE^} -can not be used together +cannot be used together with @option{^-pipe^/STANDARD_OUTPUT^} option. @node Other gnatpp Switches @@ -15113,7 +15181,7 @@ a trace of the actions it takes to produce or obtain the ASIS tree. @item ^-w^/WARNINGS^ @cindex @option{^-w^/WARNINGS^} (@code{gnatpp}) Warning mode; -@command{gnatpp} generates a warning whenever it can not provide +@command{gnatpp} generates a warning whenever it cannot provide a required layout in the result source. @end table @@ -16402,6 +16470,16 @@ by preprocessing to be retained in the output source as comments marked with the special string @code{"--! "}. This option will result in line numbers being preserved in the output file. +@item ^-C^/REPLACE_IN_COMMENTS^ +@cindex @option{^-C^/REPLACE_IN_COMMENTS^} (@command{gnatprep}) +Causes comments to be scanned. Normally comments are ignored by gnatprep. +If this option is specified, then comments are scanned and any $symbol +substitutions performed as in program text. This is particularly useful +when structured comments are used (e.g. when writing programs in the +SPARK dialect of Ada). Note that this switch is not available when +doing integrated preprocessing (it would be useless in this context +since comments are ignored by the compiler in any case). + @item ^-Dsymbol=value^/ASSOCIATE="symbol=value"^ @cindex @option{^-D^/ASSOCIATE^} (@command{gnatprep}) Defines a new symbol, associated with value. If no value is given on the @@ -19080,7 +19158,7 @@ $ perl gnathtml.pl [switches] files @findex LSE @noindent -The GNAT distribution provides an Ada 95 template for the Digital Language +The GNAT distribution provides an Ada 95 template for the HP Language Sensitive Editor (LSE), a component of DECset. In order to access it, invoke LSE with the qualifier /ENVIRONMENT=GNU:[LIB]ADA95.ENV. @@ -19089,7 +19167,7 @@ access it, invoke LSE with the qualifier /ENVIRONMENT=GNU:[LIB]ADA95.ENV. @findex PCA @noindent -GNAT supports The Digital Performance Coverage Analyzer (PCA), a component +GNAT supports The HP Performance Coverage Analyzer (PCA), a component of DECset. To use it proceed as outlined under ``HELP PCA'', except for running the collection phase with the /DEBUG qualifier. @@ -20164,23 +20242,23 @@ end STB; @end smallexample @ifset vms -@node Compatibility with DEC Ada -@chapter Compatibility with DEC Ada +@node Compatibility with HP Ada +@chapter Compatibility with HP Ada @cindex Compatibility @noindent -This section of the manual compares DEC Ada for OpenVMS Alpha and GNAT +This section of the manual compares HP Ada for OpenVMS Alpha and GNAT OpenVMS Alpha. GNAT achieves a high level of compatibility -with DEC Ada, and it should generally be straightforward to port code -from the DEC Ada environment to GNAT. However, there are a few language +with HP Ada, and it should generally be straightforward to port code +from the HP Ada environment to GNAT. However, there are a few language and implementation differences of which the user must be aware. These differences are discussed in this section. In addition, the operating environment and command structure for the compiler are different, and these differences are also discussed. Note that this discussion addresses specifically the implementation -of Ada 83 for DIGITAL OpenVMS Alpha Systems. In cases where the implementation -of DEC Ada differs between OpenVMS Alpha Systems and OpenVMS VAX Systems, +of Ada 83 for HP OpenVMS Alpha Systems. In cases where the implementation +of HP Ada differs between OpenVMS Alpha Systems and OpenVMS VAX Systems, GNAT always follows the Alpha implementation. @menu @@ -20190,7 +20268,7 @@ GNAT always follows the Alpha implementation. * The Package STANDARD:: * The Package SYSTEM:: * Tasking and Task-Related Features:: -* Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems:: +* Implementation of Tasks in HP Ada for OpenVMS Alpha Systems:: * Pragmas and Pragma-Related Features:: * Library of Predefined Units:: * Bindings:: @@ -20200,14 +20278,13 @@ GNAT always follows the Alpha implementation. * Program Compilation and Library Management:: * Input-Output:: * Implementation Limits:: -* Tools:: @end menu @node Ada 95 Compatibility @section Ada 95 Compatibility @noindent -GNAT is an Ada 95 compiler, and DEC Ada is an Ada 83 +GNAT is an Ada 95 compiler, and HP Ada is an Ada 83 compiler. Ada 95 is almost completely upwards compatible with Ada 83, and therefore Ada 83 programs will compile and run under GNAT with @@ -20235,8 +20312,8 @@ implementation-dependent declarations to package System. In normal mode, GNAT does not take advantage of this permission, and the version of System provided by GNAT exactly matches that in the Ada 95 Reference Manual. -However, DEC Ada adds an extensive set of declarations to package System, -as fully documented in the DEC Ada manuals. To minimize changes required +However, HP Ada adds an extensive set of declarations to package System, +as fully documented in the HP Ada manuals. To minimize changes required for programs that make use of these extensions, GNAT provides the pragma Extend_System for extending the definition of package System. By using: @@ -20306,12 +20383,12 @@ related topics. @subsection Integer Types and Representations @noindent -The set of predefined integer types is identical in DEC Ada and GNAT. +The set of predefined integer types is identical in HP Ada and GNAT. Furthermore the representation of these integer types is also identical, including the capability of size clauses forcing biased representation. In addition, -DEC Ada for OpenVMS Alpha systems has defined the +HP Ada for OpenVMS Alpha systems has defined the following additional integer types in package System: @itemize @bullet @@ -20338,21 +20415,21 @@ standard Ada 95 package @code{Interfaces}. Alternatively, by use of the pragma @code{Extend_System}, identical declarations can be referenced directly in package @code{System}. -On both GNAT and DEC Ada, the maximum integer size is 64 bits. +On both GNAT and HP Ada, the maximum integer size is 64 bits. @node Floating-Point Types and Representations @subsection Floating-Point Types and Representations @cindex Floating-Point types @noindent -The set of predefined floating-point types is identical in DEC Ada and GNAT. +The set of predefined floating-point types is identical in HP Ada and GNAT. Furthermore the representation of these floating-point types is also identical. One important difference is that the default -representation for DEC Ada is VAX_Float, but the default representation +representation for HP Ada is VAX_Float, but the default representation for GNAT is IEEE. Specific types may be declared to be VAX_Float or IEEE, using the pragma -@code{Float_Representation} as described in the DEC Ada documentation. +@code{Float_Representation} as described in the HP Ada documentation. For example, the declarations: @smallexample @c ada @@ -20368,7 +20445,7 @@ pragma Float_Representation (VAX_Float, F_Float); declare a type F_Float that will be represented in VAX_Float format. This set of declarations actually appears in System.Aux_DEC, which provides the full set of additional floating-point declarations provided in -the DEC Ada version of package +the HP Ada version of package System. This and similar declarations may be accessed in a user program by using pragma @code{Extend_System}. The use of this pragma, and the related pragma @code{Long_Float} is described in further @@ -20378,7 +20455,7 @@ detail in the following section. @subsection Pragmas Float_Representation and Long_Float @noindent -DEC Ada provides the pragma @code{Float_Representation}, which +HP Ada provides the pragma @code{Float_Representation}, which acts as a program library switch to allow control over the internal representation chosen for the predefined floating-point types declared in the package @code{Standard}. @@ -20399,10 +20476,10 @@ types as follows: @itemize @bullet @item @code{VAX_Float} specifies that floating-point -types are represented by default with the VAX hardware types +types are represented by default with the VAX system hardware types F-floating, D-floating, G-floating. Note that the H-floating -type is available only on DIGITAL Vax systems, and is not available -in either DEC Ada or GNAT for Alpha systems. +type was available only on Vax systems, and is not available +in either HP Ada or GNAT for Alpha systems. @item @code{IEEE_Float} specifies that floating-point @@ -20415,10 +20492,10 @@ GNAT provides an identical implementation of the pragma @code{Float_Representation}, except that it functions as a configuration pragma, as defined by Ada 95. Note that the notion of configuration pragma corresponds closely to the -DEC Ada notion of a program library switch. +HP Ada notion of a program library switch. When no pragma is used in GNAT, the default is IEEE_Float, which is different -from DEC Ada 83, where the default is VAX_Float. In addition, the +from HP Ada 83, where the default is VAX_Float. In addition, the predefined libraries in GNAT are built using IEEE_Float, so it is not advisable to change the format of numbers passed to standard library routines, and if necessary explicit type conversions may be needed. @@ -20452,7 +20529,7 @@ and @i{directory} is the directory to be created to contain the new library. @noindent -On OpenVMS systems, DEC Ada provides the pragma @code{Long_Float} +On OpenVMS systems, HP Ada provides the pragma @code{Long_Float} to allow control over the internal representation chosen for the predefined type @code{Long_Float} and for floating-point type declarations with digits specified in the range 7 .. 15. @@ -20468,7 +20545,7 @@ pragma Long_Float (D_FLOAT | G_FLOAT); @subsection Fixed-Point Types and Representations @noindent -On DEC Ada for OpenVMS Alpha systems, rounding is +On HP Ada for OpenVMS Alpha systems, rounding is away from zero for both positive and negative numbers. Therefore, +0.5 rounds to 1 and -0.5 rounds to -1. @@ -20481,7 +20558,7 @@ fixed-point types are truncated. @subsection Record and Array Component Alignment @noindent -On DEC Ada for OpenVMS Alpha, all non composite components +On HP Ada for OpenVMS Alpha, all non composite components are aligned on natural boundaries. For example, 1-byte components are aligned on byte boundaries, 2-byte components on 2-byte boundaries, 4-byte components on 4-byte @@ -20489,13 +20566,13 @@ byte boundaries, and so on. The OpenVMS Alpha hardware runs more efficiently with naturally aligned data. ON GNAT for OpenVMS Alpha, alignment rules are compatible -with DEC Ada for OpenVMS Alpha. +with HP Ada for OpenVMS Alpha. @node Address Clauses @subsection Address Clauses @noindent -In DEC Ada and GNAT, address clauses are supported for +In HP Ada and GNAT, address clauses are supported for objects and imported subprograms. The predefined type @code{System.Address} is a private type in both compilers, with the same representation (it is simply @@ -20509,10 +20586,10 @@ Note that code that with's both this extended package @code{System} and the package @code{System.Storage_Elements} should not @code{use} both packages, or ambiguities will result. In general it is better not to mix these two sets of facilities. The Ada 95 package was -designed specifically to provide the kind of features that DEC Ada +designed specifically to provide the kind of features that HP Ada adds directly to package @code{System}. -GNAT is compatible with DEC Ada in its handling of address +GNAT is compatible with HP Ada in its handling of address clauses, except for some limitations in the form of address clauses for composite objects with initialization. Such address clauses are easily replaced @@ -20555,7 +20632,7 @@ on address specifications is found in the GNAT Reference Manual. @noindent GNAT supports in a compatible manner all the representation -clauses supported by DEC Ada. In addition, it +clauses supported by HP Ada. In addition, it supports representation clause forms that are new in Ada 95 including COMPONENT_SIZE and SIZE clauses for objects. @@ -20563,32 +20640,32 @@ including COMPONENT_SIZE and SIZE clauses for objects. @section The Package STANDARD @noindent -The package STANDARD, as implemented by DEC Ada, is fully +The package STANDARD, as implemented by HP Ada, is fully described in the Reference Manual for the Ada Programming -Language (ANSI/MIL-STD-1815A-1983) and in the DEC Ada +Language (ANSI/MIL-STD-1815A-1983) and in the HP Ada Language Reference Manual. As implemented by GNAT, the package STANDARD is described in the Ada 95 Reference Manual. -In addition, DEC Ada supports the Latin-1 character set in +In addition, HP Ada supports the Latin-1 character set in the type CHARACTER. GNAT supports the Latin-1 character set in the type CHARACTER and also Unicode (ISO 10646 BMP) in the type WIDE_CHARACTER. The floating-point types supported by GNAT are those -supported by DEC Ada, but defaults are different, and are controlled by +supported by HP Ada, but defaults are different, and are controlled by pragmas. See @ref{Floating-Point Types and Representations} for details. @node The Package SYSTEM @section The Package SYSTEM @noindent -DEC Ada provides a system-specific version of the package +HP Ada provides a system-specific version of the package SYSTEM for each platform on which the language ships. For the complete specification of the package SYSTEM, see -Appendix F of the DEC Ada Language Reference Manual. +Appendix F of the HP Ada Language Reference Manual. -On DEC Ada, the package SYSTEM includes the following conversion functions: +On HP Ada, the package SYSTEM includes the following conversion functions: @itemize @bullet @item TO_ADDRESS(INTEGER) @@ -20608,7 +20685,7 @@ On DEC Ada, the package SYSTEM includes the following conversion functions: By default, GNAT supplies a version of SYSTEM that matches the definition given in the Ada 95 Reference Manual. This -is a subset of the DIGITAL system definitions, which is as +is a subset of the HP system definitions, which is as close as possible to the original definitions. The only difference is that the definition of SYSTEM_NAME is different: @@ -20627,7 +20704,7 @@ BIT_ORDER and DEFAULT_BIT_ORDER. However, the use of the following pragma causes GNAT to extend the definition of package SYSTEM so that it -encompasses the full set of DIGITAL-specific extensions, +encompasses the full set of HP-specific extensions, including the functions listed above: @smallexample @c ada @@ -20641,8 +20718,8 @@ The pragma Extend_System is a configuration pragma that is most conveniently placed in the @file{gnat.adc} file. See the GNAT Reference Manual for further details. -DEC Ada does not allow the recompilation of the package -SYSTEM. Instead DEC Ada provides several pragmas (SYSTEM_ +HP Ada does not allow the recompilation of the package +SYSTEM. Instead HP Ada provides several pragmas (SYSTEM_ NAME, STORAGE_UNIT, and MEMORY_SIZE) to modify values in the package SYSTEM. On OpenVMS Alpha systems, the pragma SYSTEM_NAME takes the enumeration literal OPENVMS_AXP as @@ -20664,7 +20741,7 @@ pragma Extend_System (AUX_Dec); @end smallexample @noindent -are virtually identical to those provided by the DEC Ada 83 package +are virtually identical to those provided by the HP Ada 83 package System. One important difference is that the name of the TO_ADDRESS function for type UNSIGNED_LONGWORD is changed to TO_ADDRESS_LONG. See the GNAT Reference manual for a discussion of why this change was @@ -20674,7 +20751,7 @@ necessary. The version of TO_ADDRESS taking a universal integer argument is in fact an extension to Ada 83 not strictly compatible with the reference manual. In GNAT, we are constrained to be exactly compatible with the standard, -and this means we cannot provide this capability. In DEC Ada 83, the +and this means we cannot provide this capability. In HP Ada 83, the point of this definition is to deal with a call like: @smallexample @c ada @@ -20684,7 +20761,7 @@ TO_ADDRESS (16#12777#); @noindent Normally, according to the Ada 83 standard, one would expect this to be ambiguous, since it matches both the INTEGER and UNSIGNED_LONGWORD forms -of TO_ADDRESS. However, in DEC Ada 83, there is no ambiguity, since the +of TO_ADDRESS. However, in HP Ada 83, there is no ambiguity, since the definition using universal_integer takes precedence. In GNAT, since the version with universal_integer cannot be supplied, it is @@ -20710,35 +20787,28 @@ change the name to TO_ADDRESS_LONG. @noindent The concepts relevant to a comparison of tasking on GNAT -and on DEC Ada for OpenVMS Alpha systems are discussed in +and on HP Ada for OpenVMS Alpha systems are discussed in the following sections. For detailed information on concepts related to tasking in -DEC Ada, see the DEC Ada Language Reference Manual and the +HP Ada, see the HP Ada Language Reference Manual and the relevant run-time reference manual. -@node Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems -@section Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems +@node Implementation of Tasks in HP Ada for OpenVMS Alpha Systems +@section Implementation of Tasks in HP Ada for OpenVMS Alpha Systems @noindent On OpenVMS Alpha systems, each Ada task (except a passive task) is implemented as a single stream of execution that is created and managed by the kernel. On these -systems, DEC Ada tasking support is based on DECthreads, +systems, HP Ada tasking support is based on DECthreads, an implementation of the POSIX standard for threads. -Although tasks are implemented as threads, all tasks in -an Ada program are part of the same process. As a result, -resources such as open files and virtual memory can be -shared easily among tasks. Having all tasks in one process -allows better integration with the programming environment -(the shell and the debugger, for example). - -Also, on OpenVMS Alpha systems, DEC Ada tasks and foreign +Also, on OpenVMS Alpha systems, HP Ada tasks and foreign code that calls DECthreads routines can be used together. The interaction between Ada tasks and DECthreads routines can have some benefits. For example when on OpenVMS Alpha, -DEC Ada can call C code that is already threaded. +HP Ada can call C code that is already threaded. GNAT on OpenVMS Alpha uses the facilities of DECthreads, and Ada tasks are mapped to threads. @@ -20755,7 +20825,7 @@ and Ada tasks are mapped to threads. @subsection Assigning Task IDs @noindent -The DEC Ada Run-Time Library always assigns %TASK 1 to +The HP Ada Run-Time Library always assigns %TASK 1 to the environment task that executes the main program. On OpenVMS Alpha systems, %TASK 0 is often used for tasks that have been created but are not yet activated. @@ -20763,7 +20833,7 @@ that have been created but are not yet activated. On OpenVMS Alpha systems, task IDs are assigned at activation. On GNAT systems, task IDs are also assigned at task creation but do not have the same form or values as -task ID values in DEC Ada. There is no null task, and the +task ID values in HP Ada. There is no null task, and the environment task does not have a specific task ID value. @node Task IDs and Delays @@ -20802,18 +20872,18 @@ GNAT supplies the following task-related pragmas: @item TASK_STORAGE GNAT implements pragma TASK_STORAGE in the same way as - DEC Ada. - Both DEC Ada and GNAT supply the pragmas PASSIVE, + HP Ada. + Both HP Ada and GNAT supply the pragmas PASSIVE, SUPPRESS, and VOLATILE. @end itemize @node Scheduling and Task Priority @subsection Scheduling and Task Priority @noindent -DEC Ada implements the Ada language requirement that +HP Ada implements the Ada language requirement that when two tasks are eligible for execution and they have different priorities, the lower priority task does not -execute while the higher priority task is waiting. The DEC +execute while the higher priority task is waiting. The HP Ada Run-Time Library keeps a task running until either the task is suspended or a higher priority task becomes ready. @@ -20823,30 +20893,30 @@ at the processor. A task is run for a certain period of time and then placed at the rear of the ready queue for its priority level. -DEC Ada provides the implementation-defined pragma TIME_SLICE, +HP Ada provides the implementation-defined pragma TIME_SLICE, which can be used to enable or disable round-robin scheduling of tasks with the same priority. -See the relevant DEC Ada run-time reference manual for -information on using the pragmas to control DEC Ada task +See the relevant HP Ada run-time reference manual for +information on using the pragmas to control HP Ada task scheduling. GNAT follows the scheduling rules of Annex D (real-time Annex) of the Ada 95 Reference Manual. In general, this -scheduling strategy is fully compatible with DEC Ada +scheduling strategy is fully compatible with HP Ada although it provides some additional constraints (as fully documented in Annex D). GNAT implements time slicing control in a manner compatible with -DEC Ada 83, by means of the pragma Time_Slice, whose semantics are identical -to the DEC Ada 83 pragma of the same name. +HP Ada 83, by means of the pragma Time_Slice, whose semantics are identical +to the HP Ada 83 pragma of the same name. Note that it is not possible to mix GNAT tasking and -DEC Ada 83 tasking in the same program, since the two run times are +HP Ada 83 tasking in the same program, since the two run times are not compatible. @node The Task Stack @subsection The Task Stack @noindent -In DEC Ada, a task stack is allocated each time a +In HP Ada, a task stack is allocated each time a non passive task is activated. As soon as the task is terminated, the storage for the task stack is deallocated. If you specify a size of zero (bytes) with T'STORAGE_SIZE, @@ -20859,24 +20929,24 @@ GNAT handles task stacks in a similar manner. According to the Ada 95 rules, it provides the pragma STORAGE_SIZE as an alternative method for controlling the task stack size. The specification of the attribute T'STORAGE_SIZE is also -supported in a manner compatible with DEC Ada. +supported in a manner compatible with HP Ada. @node External Interrupts @subsection External Interrupts @noindent -On DEC Ada, external interrupts can be associated with task entries. -GNAT is compatible with DEC Ada in its handling of external interrupts. +On HP Ada, external interrupts can be associated with task entries. +GNAT is compatible with HP Ada in its handling of external interrupts. @node Pragmas and Pragma-Related Features @section Pragmas and Pragma-Related Features @noindent -Both DEC Ada and GNAT supply all language-defined pragmas +Both HP Ada and GNAT supply all language-defined pragmas as specified by the Ada 83 standard. GNAT also supplies all language-defined pragmas specified in the Ada 95 Reference Manual. In addition, GNAT implements the implementation-defined pragmas -from DEC Ada 83. +from HP Ada 83. @itemize @bullet @item AST_ENTRY @@ -20939,7 +21009,7 @@ recognized, but which have no effect in GNAT. The effect of @code{Passive} may be obtained by the use of protected objects in Ada 95. In GNAT, all generics are inlined. -Unlike DEC Ada, the GNAT 'EXPORT_@i{subprogram}' pragmas require +Unlike HP Ada, the GNAT 'EXPORT_@i{subprogram}' pragmas require a separate subprogram specification which must appear before the subprogram body. @@ -21016,7 +21086,7 @@ the GNAT Reference Manual. @subsection Restrictions on the Pragma INLINE @noindent -DEC Ada applies the following restrictions to the pragma INLINE: +HP Ada applies the following restrictions to the pragma INLINE: @itemize @bullet @item Parameters cannot be a task type. @@ -21059,7 +21129,7 @@ be incapable of being inlined. @noindent The following lists and describes the restrictions on the -pragma INTERFACE on DEC Ada and GNAT: +pragma INTERFACE on HP Ada and GNAT: @itemize @bullet @item Languages accepted: Ada, Bliss, C, Fortran, Default. Default is the default on OpenVMS Alpha systems. @@ -21080,14 +21150,14 @@ be a string, an array, or a record. @end itemize @noindent -GNAT is entirely upwards compatible with DEC Ada, and in addition allows +GNAT is entirely upwards compatible with HP Ada, and in addition allows record parameters for all languages. @node Restrictions on the Pragma SYSTEM_NAME @subsection Restrictions on the Pragma SYSTEM_NAME @noindent -For DEC Ada for OpenVMS Alpha, the enumeration literal +For HP Ada for OpenVMS Alpha, the enumeration literal for the type NAME is OPENVMS_AXP. In GNAT, the enumeration literal for the type NAME is SYSTEM_NAME_GNAT. @@ -21096,13 +21166,13 @@ literal for the type NAME is SYSTEM_NAME_GNAT. @noindent A library of predefined units is provided as part of the -DEC Ada and GNAT implementations. DEC Ada does not provide +HP Ada and GNAT implementations. HP Ada does not provide the package MACHINE_CODE but instead recommends importing assembler code. -The GNAT versions of the DEC Ada Run-Time Library (ADA$PREDEFINED:) +The GNAT versions of the HP Ada Run-Time Library (ADA$PREDEFINED:) units are taken from the OpenVMS Alpha version, not the OpenVMS VAX -version. During GNAT installation, the DEC Ada Predefined +version. During GNAT installation, the HP Ada Predefined Library units are copied into the GNU:[LIB.OPENVMS7_x.2_8_x.DECLIB] (aka DECLIB) directory and patched to remove Ada 95 incompatibilities and to make them interoperable with GNAT, @pxref{Changes to DECLIB} @@ -21116,9 +21186,9 @@ for example). However, it is possible to change the default so that the reverse is true, or even to mix them using child package -notation. The DEC Ada 83 units are available as DEC.xxx where xxx +notation. The HP Ada 83 units are available as DEC.xxx where xxx is the package name, and the Ada units are available in the -standard manner defined for Ada 95, that is to say as Ada.xxx. To +standard manner defined for Ada 95, that is to say as DEC.xxx. To change the default, set ADA_INCLUDE_PATH and ADA_OBJECTS_PATH appropriately. For example, to change the default to use the Ada95 versions do: @@ -21138,7 +21208,7 @@ $ DEFINE ADA_OBJECTS_PATH GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB],- @subsection Changes to DECLIB @noindent -The changes made to the DEC Ada predefined library for GNAT and Ada 95 +The changes made to the HP Ada predefined library for GNAT and Ada 95 compatibility are minor and include the following: @itemize @bullet @@ -21163,7 +21233,7 @@ None of the above changes is visible to users. @section Bindings @noindent -On OpenVMS Alpha, DEC Ada provides the following strongly-typed bindings: +On OpenVMS Alpha, HP Ada provides the following strongly-typed bindings: @itemize @bullet @item Command Language Interpreter (CLI interface) @@ -21199,10 +21269,10 @@ On OpenVMS Alpha, DEC Ada provides the following strongly-typed bindings: @end itemize @noindent -GNAT provides implementations of these DEC bindings in the DECLIB directory. +GNAT provides implementations of these HP bindings in the DECLIB directory. The X/Motif bindings used to build DECLIB are whatever versions are in the -DEC Ada @file{ADA$PREDEFINED} directory with extension @file{.ADC}. +HP Ada @file{ADA$PREDEFINED} directory with extension @file{.ADC}. The build script will automatically add a pragma Linker_Options to packages @code{Xm}, @code{Xt}, and @code{X_Lib} @@ -21225,7 +21295,7 @@ default @file{ADA$PREDEFINED} versions. @subsection Shared Libraries and Options Files @noindent -When using the DEC Ada +When using the HP Ada predefined X and Motif bindings, the linking with their sharable images is done automatically by @command{GNAT LINK}. When using other X and Motif bindings, you need @@ -21241,7 +21311,7 @@ libraries under VMS. The VMS Link command can be used in standard fashion. @subsection Interfaces to C @noindent -DEC Ada +HP Ada provides the following Ada types and operations: @itemize @bullet @@ -21254,7 +21324,7 @@ provides the following Ada types and operations: @noindent Interfacing to C with GNAT, one can use the above approach -described for DEC Ada or the facilities of Annex B of +described for HP Ada or the facilities of Annex B of the Ada 95 Reference Manual (packages INTERFACES.C, INTERFACES.C.STRINGS and INTERFACES.C.POINTERS). For more information, see the section ``Interfacing to C'' in the @@ -21270,8 +21340,8 @@ of Compaq C. The qualifier has no effect on @code{Link_Name} parameters. @noindent The following section discusses differences in the -definition of main programs on DEC Ada and GNAT. -On DEC Ada, main programs are defined to meet the +definition of main programs on HP Ada and GNAT. +On HP Ada, main programs are defined to meet the following conditions: @itemize @bullet @item Procedure with no formal parameters (returns 0 upon @@ -21307,14 +21377,14 @@ generic subprogram @section Implementation-Defined Attributes @noindent -GNAT provides all DEC Ada implementation-defined +GNAT provides all HP Ada implementation-defined attributes. @node Compiler and Run-Time Interfacing @section Compiler and Run-Time Interfacing @noindent -DEC Ada provides the following ways to pass options to the linker +HP Ada provides the following ways to pass options to the linker (ACS LINK): @itemize @bullet @item /WAIT and /SUBMIT qualifiers @@ -21343,8 +21413,8 @@ switches: @noindent For more information on these switches, see @ref{Switches for gnatlink}. -In DEC Ada, the command-line switch @option{/OPTIMIZE} is available -to control optimization. DEC Ada also supplies the +In HP Ada, the command-line switch @option{/OPTIMIZE} is available +to control optimization. HP Ada also supplies the following pragmas: @itemize @bullet @item @code{OPTIMIZE} @@ -21361,24 +21431,24 @@ following pragmas: @noindent In GNAT, optimization is controlled strictly by command line parameters, as described in the corresponding section of this guide. -The DIGITAL pragmas for control of optimization are +The HP pragmas for control of optimization are recognized but ignored. -Note that in GNAT, the default is optimization off, whereas in DEC Ada 83, +Note that in GNAT, the default is optimization off, whereas in HP Ada 83, the default is that optimization is turned on. @node Program Compilation and Library Management @section Program Compilation and Library Management @noindent -DEC Ada and GNAT provide a comparable set of commands to -build programs. DEC Ada also provides a program library, +HP Ada and GNAT provide a comparable set of commands to +build programs. HP Ada also provides a program library, which is a concept that does not exist on GNAT. Instead, GNAT provides directories of sources that are compiled as needed. The following table summarizes -the DEC Ada commands and provides +the HP Ada commands and provides equivalent GNAT commands. In this table, some GNAT equivalents reflect the fact that GNAT does not use the concept of a program library. Instead, it uses a model @@ -21387,12 +21457,12 @@ in a manner consistent with other languages like C and Fortran. Therefore, standard system file commands are used to manipulate these elements. Those GNAT commands are marked with an asterisk. -Note that, unlike DEC Ada, none of the GNAT commands accepts wild cards. +Note that, unlike HP Ada, none of the GNAT commands accepts wild cards. @need 1500 @multitable @columnfractions .35 .65 -@item @emph{DEC Ada Command} +@item @emph{HP Ada Command} @tab @emph{GNAT Equivalent / Description} @item @command{ADA} @@ -21557,14 +21627,14 @@ valid form. @section Input-Output @noindent -On OpenVMS Alpha systems, DEC Ada uses OpenVMS Record +On OpenVMS Alpha systems, HP Ada uses OpenVMS Record Management Services (RMS) to perform operations on external files. @noindent -DEC Ada and GNAT predefine an identical set of input- +HP Ada and GNAT predefine an identical set of input- output packages. To make the use of the -generic TEXT_IO operations more convenient, DEC Ada +generic TEXT_IO operations more convenient, HP Ada provides predefined library packages that instantiate the integer and floating-point operations for the predefined integer and floating-point types as shown in the following table. @@ -21589,9 +21659,9 @@ integer and floating-point types as shown in the following table. @end multitable @noindent -The DEC Ada predefined packages and their operations +The HP Ada predefined packages and their operations are implemented using OpenVMS Alpha files and input- -output facilities. DEC Ada supports asynchronous input- +output facilities. HP Ada supports asynchronous input- output on OpenVMS Alpha. Familiarity with the following is recommended: @itemize @bullet @@ -21604,10 +21674,10 @@ recommended: @noindent GNAT provides I/O facilities that are completely -compatible with DEC Ada. The distribution includes the -standard DEC Ada versions of all I/O packages, operating -in a manner compatible with DEC Ada. In particular, the -following packages are by default the DEC Ada (Ada 83) +compatible with HP Ada. The distribution includes the +standard HP Ada versions of all I/O packages, operating +in a manner compatible with HP Ada. In particular, the +following packages are by default the HP Ada (Ada 83) versions of these packages rather than the renamings suggested in annex J of the Ada 95 Reference Manual: @itemize @bullet @@ -21622,7 +21692,7 @@ suggested in annex J of the Ada 95 Reference Manual: The use of the standard Ada 95 syntax for child packages (for example, @code{ADA.TEXT_IO}) retrieves the Ada 95 versions of these packages, as defined in the Ada 95 Reference Manual. -GNAT provides DIGITAL-compatible predefined instantiations +GNAT provides HP-compatible predefined instantiations of the @code{TEXT_IO} packages, and also provides the standard predefined instantiations required by the Ada 95 Reference Manual. @@ -21660,12 +21730,12 @@ This chapter covers the following: @section Implementation Limits @noindent -The following table lists implementation limits for DEC Ada +The following table lists implementation limits for HP Ada and GNAT systems. @multitable @columnfractions .60 .20 .20 @sp 1 @item @emph{Compilation Parameter} -@tab @emph{DEC Ada} +@tab @emph{HP Ada} @tab @emph{GNAT} @sp 1 @@ -21743,9 +21813,6 @@ and GNAT systems. @tab 2**31-1 @end multitable -@node Tools -@section Tools - @end ifset @c ************************************** @@ -23305,12 +23372,19 @@ later. The rule is simple. If a unit has elaboration code that can directly or indirectly make a call to a subprogram in a @code{with}'ed unit, or instantiate -a generic unit in a @code{with}'ed unit, +a generic package in a @code{with}'ed unit, then if the @code{with}'ed unit does not have pragma @code{Pure} or @code{Preelaborate}, then the client should have a pragma @code{Elaborate_All} for the @code{with}'ed unit. By following this rule a client is assured that calls can be made without risk of an exception. + +For generic subprogram instantiations, the rule can be relaxed to +require only a pragma @code{Elaborate} since elaborating the body +of a subprogram cannot cause any transitive elaboration (we are +not calling the subprogram in this case, just elaborating its +declaration). + If this rule is not followed, then a program may be in one of four states: @@ -23345,10 +23419,11 @@ may be true even if the rule is not followed. @end table @noindent -Note that one additional advantage of following our Elaborate_All rule +Note that one additional advantage of following our rules on the use +of @code{Elaborate} and @code{Elaborate_All} is that the program continues to stay in the ideal (all orders OK) state even if maintenance -changes some bodies of some subprograms. Conversely, if a program that does +changes some bodies of some units. Conversely, if a program that does not follow this rule happens to be safe at some point, this state of affairs may deteriorate silently as a result of maintenance changes. @@ -23698,11 +23773,15 @@ rule we previously described as the right approach. Let's restate it: @itemize @item @emph{If a unit has elaboration code that can directly or indirectly make a -call to a subprogram in a @code{with}'ed unit, or instantiate a generic unit -in a @code{with}'ed unit, then if the @code{with}'ed unit +call to a subprogram in a @code{with}'ed unit, or instantiate a generic +package in a @code{with}'ed unit, then if the @code{with}'ed unit does not have pragma @code{Pure} or @code{Preelaborate}, then the client should have an -@code{Elaborate_All} for the @code{with}'ed unit.} +@code{Elaborate_All} pragma for the @code{with}'ed unit.} + +@emph{In the case of instantiating a generic subprogram, it is always +sufficient to have only an @code{Elaborate} pragma for the +@code{with}'ed unit.} @end itemize @noindent @@ -23710,24 +23789,26 @@ By following this rule a client is assured that calls and instantiations can be made without risk of an exception. In this mode GNAT traces all calls that are potentially made from -elaboration code, and puts in any missing implicit @code{Elaborate_All} -pragmas. +elaboration code, and puts in any missing implicit @code{Elaborate} +and @code{Elaborate_All} pragmas. The advantage of this approach is that no elaboration problems are possible if the binder can find an elaboration order that is -consistent with these implicit @code{Elaborate_All} pragmas. The +consistent with these implicit @code{Elaborate} and +@code{Elaborate_All} pragmas. The disadvantage of this approach is that no such order may exist. -If the binder does not generate any diagnostics, then it means that it -has found an elaboration order that is guaranteed to be safe. However, -the binder may still be relying on implicitly generated -@code{Elaborate_All} pragmas so portability to other compilers than -GNAT is not guaranteed. +If the binder does not generate any diagnostics, then it means that it has +found an elaboration order that is guaranteed to be safe. However, the binder +may still be relying on implicitly generated @code{Elaborate} and +@code{Elaborate_All} pragmas so portability to other compilers than GNAT is not +guaranteed. If it is important to guarantee portability, then the compilations should use the @option{-gnatwl} (warn on elaboration problems) switch. This will cause warning messages -to be generated indicating the missing @code{Elaborate_All} pragmas. +to be generated indicating the missing @code{Elaborate} and +@code{Elaborate_All} pragmas. Consider the following source program: @smallexample @c ada @@ -23772,7 +23853,7 @@ and these warnings can be used as a guide for supplying manually the missing pragmas. It is usually a bad idea to use this warning option during development. That's because it will warn you when you need to put in a pragma, but cannot warn you when it is time -to take it out. So the use of pragma Elaborate_All may lead to +to take it out. So the use of pragma @code{Elaborate_All} may lead to unnecessary dependencies and even false circularities. This default mode is more restrictive than the Ada Reference @@ -23980,7 +24061,7 @@ must be elaborated before itself, and that's a circularity. @end enumerate @noindent -Indeed, if you add an explicit pragma Elaborate_All for @code{Utils} in +Indeed, if you add an explicit pragma @code{Elaborate_All} for @code{Utils} in the body of @code{Decls} you will get a true Ada Reference Manual circularity that makes the program illegal. @@ -24321,15 +24402,15 @@ the case of complex legacy code. @item Perform dynamic checks If the compilations are done using the @option{-gnatE} -(dynamic elaboration check) switch, then GNAT behaves in -a quite different manner. Dynamic checks are generated for all calls -that could possibly result in raising an exception. With this switch, -the compiler does not generate implicit @code{Elaborate_All} pragmas. -The behavior then is exactly as specified in the Ada 95 Reference Manual. -The binder will generate an executable program that may or may not -raise @code{Program_Error}, and then it is the programmer's job to ensure -that it does not raise an exception. Note that it is important to -compile all units with the switch, it cannot be used selectively. +(dynamic elaboration check) switch, then GNAT behaves in a quite different +manner. Dynamic checks are generated for all calls that could possibly result +in raising an exception. With this switch, the compiler does not generate +implicit @code{Elaborate} or @code{Elaborate_All} pragmas. The behavior then is +exactly as specified in the Ada 95 Reference Manual. The binder will generate +an executable program that may or may not raise @code{Program_Error}, and then +it is the programmer's job to ensure that it does not raise an exception. Note +that it is important to compile all units with the switch, it cannot be used +selectively. @item Suppress checks The drawback of dynamic checks is that they generate a @@ -24341,15 +24422,15 @@ then you can use the configuration pragma example this pragma could be placed in the @file{gnat.adc} file. @item Suppress checks selectively -When you know that certain calls in elaboration code cannot possibly -lead to an elaboration error, and the binder nevertheless generates warnings -on those calls and inserts Elaborate_All pragmas that lead to elaboration -circularities, it is possible to remove those warnings locally and obtain -a program that will bind. Clearly this can be unsafe, and it is the -responsibility of the programmer to make sure that the resulting program has -no elaboration anomalies. The pragma @code{Suppress (Elaboration_Check)} can -be used with different granularity to suppress warnings and break -elaboration circularities: +When you know that certain calls or instantiations in elaboration code cannot +possibly lead to an elaboration error, and the binder nevertheless complains +about implicit @code{Elaborate} and @code{Elaborate_All} pragmas that lead to +elaboration circularities, it is possible to remove those warnings locally and +obtain a program that will bind. Clearly this can be unsafe, and it is the +responsibility of the programmer to make sure that the resulting program has no +elaboration anomalies. The pragma @code{Suppress (Elaboration_Check)} can be +used with different granularity to suppress warnings and break elaboration +circularities: @itemize @bullet @item @@ -24560,8 +24641,8 @@ raised by the use of access-to-subprogram types and dynamic dispatching, the program is free of elaboration errors. If it is important that the program be portable, then use the @option{-gnatwl} -switch to generate warnings about missing @code{Elaborate_All} -pragmas, and supply the missing pragmas. +switch to generate warnings about missing @code{Elaborate} or +@code{Elaborate_All} pragmas, and supply the missing pragmas. If the program fails to bind using the default static elaboration handling, then you can fix the program to eliminate the binder @@ -24710,7 +24791,7 @@ It is of course quite unlikely that both these results are correct, so it is up to you in a case like this to investigate the source of the difference, by looking at the two elaboration orders that are chosen, and figuring out which is correct, and then adding the necessary -@code{Elaborate_All} pragmas to ensure the desired order. +@code{Elaborate} or @code{Elaborate_All} pragmas to ensure the desired order. @node Inline Assembler @appendix Inline Assembler @@ -25443,7 +25524,7 @@ applications developed in other Ada environments. * Implementation-dependent characteristics:: * Compatibility with Other Ada 95 Systems:: * Representation Clauses:: -* Compatibility with DEC Ada 83:: +* Compatibility with HP Ada 83:: @ifset vms * Transitioning from Alpha to Integrity OpenVMS:: @end ifset @@ -25510,7 +25591,7 @@ the item nearer to the declaration of the entity to which it refers. A particular case is that representation pragmas @ifset vms (including the -extended DEC Ada 83 compatibility pragmas such as @code{Export_Procedure}) +extended HP Ada 83 compatibility pragmas such as @code{Export_Procedure}) @end ifset cannot be applied to a subprogram body. If necessary, a separate subprogram declaration must be introduced to which the pragma can be applied. @@ -25663,7 +25744,7 @@ are described in the GNAT Reference Manual, and these include several that are specifically intended to correspond to other vendors' Ada 83 pragmas. For migrating from VADS, the pragma @code{Use_VADS_Size} may be useful. For -compatibility with DEC Ada 83, GNAT supplies the pragmas +compatibility with HP Ada 83, GNAT supplies the pragmas @code{Extend_System}, @code{Ident}, @code{Inline_Generic}, @code{Interface_Name}, @code{Passive}, @code{Suppress_All}, and @code{Volatile}. @@ -25682,7 +25763,7 @@ implementation. All GNAT-defined attributes are described in the @cite{GNAT Reference Manual}, and these include several that are specifically intended to correspond to other vendors' Ada 83 attributes. For migrating from VADS, -the attribute @code{VADS_Size} may be useful. For compatibility with DEC +the attribute @code{VADS_Size} may be useful. For compatibility with HP Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and @code{Type_Class}. @@ -25717,7 +25798,8 @@ Program_Error being raised due to an ``Access Before Elaboration'': an attempt to invoke a subprogram its body has been elaborated, or to instantiate a generic before the generic body has been elaborated. By default GNAT attempts to choose a safe order (one that will not encounter access before -elaboration problems) by implicitly inserting Elaborate_All pragmas where +elaboration problems) by implicitly inserting @code{Elaborate} or +@code{Elaborate_All} pragmas where needed. However, this can lead to the creation of elaboration circularities and a resulting rejection of the program by gnatbind. This issue is thoroughly described in @ref{Elaboration Order Handling in GNAT}. @@ -25862,36 +25944,36 @@ is to use a component size clause for the element size in an array, or a record representation clause for an access field in a record. @end table -@node Compatibility with DEC Ada 83 -@section Compatibility with DEC Ada 83 +@node Compatibility with HP Ada 83 +@section Compatibility with HP Ada 83 @noindent The VMS version of GNAT fully implements all the pragmas and attributes -provided by DEC Ada 83, as well as providing the standard DEC Ada 83 +provided by HP Ada 83, as well as providing the standard HP Ada 83 libraries, including Starlet. In addition, data layouts and parameter passing conventions are highly compatible. This means that porting -existing DEC Ada 83 code to GNAT in VMS systems should be easier than +existing HP Ada 83 code to GNAT in VMS systems should be easier than most other porting efforts. The following are some of the most -significant differences between GNAT and DEC Ada 83. +significant differences between GNAT and HP Ada 83. @table @asis @item Default floating-point representation -In GNAT, the default floating-point format is IEEE, whereas in DEC Ada 83, +In GNAT, the default floating-point format is IEEE, whereas in HP Ada 83, it is VMS format. GNAT does implement the necessary pragmas (Long_Float, Float_Representation) for changing this default. @item System The package System in GNAT exactly corresponds to the definition in the Ada 95 reference manual, which means that it excludes many of the -DEC Ada 83 extensions. However, a separate package Aux_DEC is provided +HP Ada 83 extensions. However, a separate package Aux_DEC is provided that contains the additional definitions, and a special pragma, Extend_System allows this package to be treated transparently as an extension of package System. @item To_Address The definitions provided by Aux_DEC are exactly compatible with those -in the DEC Ada 83 version of System, with one exception. -DEC Ada provides the following declarations: +in the HP Ada 83 version of System, with one exception. +HP Ada provides the following declarations: @smallexample @c ada TO_ADDRESS (INTEGER) @@ -25903,7 +25985,7 @@ TO_ADDRESS (universal_integer) The version of TO_ADDRESS taking a universal integer argument is in fact an extension to Ada 83 not strictly compatible with the reference manual. In GNAT, we are constrained to be exactly compatible with the standard, -and this means we cannot provide this capability. In DEC Ada 83, the +and this means we cannot provide this capability. In HP Ada 83, the point of this definition is to deal with a call like: @smallexample @c ada @@ -25913,7 +25995,7 @@ TO_ADDRESS (16#12777#); @noindent Normally, according to the Ada 83 standard, one would expect this to be ambiguous, since it matches both the INTEGER and UNSIGNED_LONGWORD forms -of TO_ADDRESS@. However, in DEC Ada 83, there is no ambiguity, since the +of TO_ADDRESS@. However, in HP Ada 83, there is no ambiguity, since the definition using universal_integer takes precedence. In GNAT, since the version with universal_integer cannot be supplied, it is @@ -25942,10 +26024,10 @@ which in GNAT is treated like any other declared task. @end table For full details on these and other less significant compatibility issues, -see appendix E of the Digital publication entitled @cite{DEC Ada, Technical -Overview and Comparison on DIGITAL Platforms}. +see appendix E of the HP publication entitled @cite{HP Ada, Technical +Overview and Comparison on HP Platforms}. -For GNAT running on other than VMS systems, all the DEC Ada 83 pragmas and +For GNAT running on other than VMS systems, all the HP Ada 83 pragmas and attributes are recognized, although only a subset of them can sensibly be implemented. The description of pragmas in this reference manual indicates whether or not they are applicable to non-VMS systems. @@ -26559,6 +26641,7 @@ environment to build your executable. @menu * C Calling Convention:: * Stdcall Calling Convention:: +* Win32 Calling Convention:: * DLL Calling Convention:: @end menu @@ -26579,6 +26662,9 @@ are available for Windows: @code{Stdcall} (Microsoft defined) @item +@code{Win32} (GNAT specific) + +@item @code{DLL} (GNAT specific) @end itemize @@ -26621,8 +26707,8 @@ is missing, as in the above example, this parameter is set to be the When importing a variable defined in C, you should always use the @code{C} calling convention unless the object containing the variable is part of a -DLL (in which case you should use the @code{DLL} calling convention, -@pxref{DLL Calling Convention}). +DLL (in which case you should use the @code{Stdcall} calling +convention, @pxref{Stdcall Calling Convention}). @node Stdcall Calling Convention @subsection @code{Stdcall} Calling Convention @@ -26697,14 +26783,10 @@ The @code{gnatdll} tool, which creates the import library for the DLL, is able to handle those cases (@pxref{Using gnatdll} for the description of the switches). -@node DLL Calling Convention -@subsection @code{DLL} Calling Convention - @noindent -This convention, which is GNAT-specific, must be used when you want to -import in Ada a variables defined in a DLL. For functions and procedures -this convention is equivalent to the @code{Stdcall} convention. As an -example, if a DLL contains a variable defined as: +It is also possible to import variables defined in a DLL by using an +import pragma for a variable. As an example, if a DLL contains a +variable defined as: @smallexample int my_var; @@ -26716,13 +26798,27 @@ then, to access this variable from Ada you should write: @smallexample @c ada @group My_Var : Interfaces.C.int; -pragma Import (DLL, My_Var); +pragma Import (Stdcall, My_Var); @end group @end smallexample -The remarks concerning the @code{External_Name} and @code{Link_Name} -parameters given in the previous sections equally apply to the @code{DLL} -calling convention. +@noindent +Note that to ease building cross-platform bindings this convention +will be handled as a @code{C} calling convention on non Windows platforms. + +@node Win32 Calling Convention +@subsection @code{Win32} Calling Convention + +@noindent +This convention, which is GNAT-specific is fully equivalent to the +@code{Stdcall} calling convention described above. + +@node DLL Calling Convention +@subsection @code{DLL} Calling Convention + +@noindent +This convention, which is GNAT-specific is fully equivalent to the +@code{Stdcall} calling convention described above. @node Introduction to Dynamic Link Libraries (DLLs) @section Introduction to Dynamic Link Libraries (DLLs) @@ -26907,9 +27003,9 @@ end API; @end smallexample @noindent -Note that a variable is @strong{always imported with a DLL convention}. A -function can have @code{C}, @code{Stdcall} or @code{DLL} convention. For -subprograms, the @code{DLL} convention is a synonym of @code{Stdcall} +Note that a variable is +@strong{always imported with a Stdcall convention}. A function +can have @code{C} or @code{Stdcall} convention. (@pxref{Windows Calling Conventions}). @node Creating an Import Library @@ -27218,9 +27314,11 @@ library (@pxref{Using gnatdll}). @end enumerate @noindent -Note that a relocatable DLL stripped using the @code{strip} binutils -tool will not be relocatable anymore. To build a DLL without debug -information pass @code{-largs -s} to @code{gnatdll}. +Note that a relocatable DLL stripped using the @code{strip} +binutils tool will not be relocatable anymore. To build a DLL without +debug information pass @code{-largs -s} to @code{gnatdll}. This +restriction does not apply to a DLL built using a Library Project. +@pxref{Library Projects}. @node Limitations When Using Ada DLLs from Ada @subsection Limitations When Using Ada DLLs from Ada @@ -27250,10 +27348,9 @@ Windows object handles, etc. Building a DLL is a way to encapsulate a set of services usable from any application. As a result, the Ada entities exported by a DLL should be exported with the @code{C} or @code{Stdcall} calling conventions to avoid -any Ada name mangling. Please note that the @code{Stdcall} convention -should only be used for subprograms, not for variables. As an example here -is an Ada package @code{API}, spec and body, exporting two procedures, a -function, and a variable: +any Ada name mangling. As an example here is an Ada package +@code{API}, spec and body, exporting two procedures, a function, and a +variable: @smallexample @c ada @group @@ -27944,11 +28041,10 @@ switch). Here are the step-by-step instructions for debugging it: $ gdb -nw ada_main @end smallexample -@item Break on the main procedure and run the program. +@item Start the program and stop at the beginning of the main procedure @smallexample -(gdb) break ada_main -(gdb) run +(gdb) start @end smallexample @noindent @@ -27961,7 +28057,7 @@ possible to set a breakpoint in the DLL. @smallexample (gdb) break ada_dll -(gdb) run +(gdb) cont @end smallexample @end enumerate @@ -27971,6 +28067,10 @@ At this stage a breakpoint is set inside the DLL. From there on you can use the standard approach to debug the whole program (@pxref{Running and Debugging Ada Programs}). +@ignore +@c This used to work, probably because the DLLs were non-relocatable +@c keep this section around until the problem is sorted out. + To break on the @code{DllMain} routine it is not possible to follow the procedure above. At the time the program stop on @code{ada_main} the @code{DllMain} routine as already been called. Either you can use @@ -27980,7 +28080,7 @@ the procedure below @pxref{Debugging the DLL Directly} or this procedure: @item Launch @code{GDB} on the main program. @smallexample -$ gdb -nw ada_main +$ gdb ada_main @end smallexample @item Load DLL symbols @@ -28006,6 +28106,7 @@ on the proper line (break in @file{ada_dll.adb} line 45). @end smallexample @end enumerate +@end ignore @node Program Built with Foreign Tools and DLL Built with GCC/GNAT @subsection Program Built with Foreign Tools and DLL Built with GCC/GNAT @@ -28039,34 +28140,58 @@ been built with debugging information (see GNAT -g option). @enumerate 1 @item -Launch the debugger on the DLL. +Find out the executable starting address @smallexample -$ gdb -nw test.dll +$ objdump --file-header main.exe @end smallexample -@item Set a breakpoint on a DLL subroutine. +The starting address is reported on the last line. For example: @smallexample -(gdb) break ada_dll.adb:45 +main.exe: file format pei-i386 +architecture: i386, flags 0x0000010a: +EXEC_P, HAS_DEBUG, D_PAGED +start address 0x00401010 @end smallexample -Note that at this point it is not possible to break using the routine symbol -directly as the program is not yet running. The solution is to break -on the proper line (break in @file{ada_dll.adb} line 45). +@item +Launch the debugger on the executable. + +@smallexample +$ gdb main.exe +@end smallexample @item -Specify the executable file to @code{GDB}. +Set a breakpoint at the starting address, and launch the program. @smallexample -(gdb) exec-file main.exe +$ (gdb) break *0x00401010 +$ (gdb) run @end smallexample +The program will stop at the given address. + @item -Run the program. +Set a breakpoint on a DLL subroutine. @smallexample -(gdb) run +(gdb) break ada_dll.adb:45 +@end smallexample + +Or if you want to break using a symbol on the DLL, you need first to +select the Ada language (language used by the DLL). + +@smallexample +(gdb) set language ada +(gdb) break ada_dll +@end smallexample + +@item +Continue the program. + +@smallexample +(gdb) cont @end smallexample @noindent @@ -28104,7 +28229,7 @@ that the process PID for @file{main.exe} is 208. @item Launch gdb. @smallexample -$ gdb -nw +$ gdb @end smallexample @item Attach to the running process to be debugged. @@ -28128,7 +28253,7 @@ $ gdb -nw @item Continue process execution. @smallexample -(gdb) continue +(gdb) cont @end smallexample @end enumerate diff --git a/gcc/ada/gnatbind.adb b/gcc/ada/gnatbind.adb index 270d3342810..e9222c94595 100644 --- a/gcc/ada/gnatbind.adb +++ b/gcc/ada/gnatbind.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -87,6 +87,9 @@ procedure Gnatbind is -- All the one character arguments are still handled by Switch. This -- routine handles -aO -aI and -I-. + function Is_Cross_Compiler return Boolean; + -- Returns True iff this is a cross-compiler + --------------------------------- -- Gnatbind_Supports_Auto_Init -- --------------------------------- @@ -99,6 +102,17 @@ procedure Gnatbind is return gnat_binder_supports_auto_init /= 0; end Gnatbind_Supports_Auto_Init; + ----------------------- + -- Is_Cross_Compiler -- + ----------------------- + + function Is_Cross_Compiler return Boolean is + Cross_Compiler : Integer; + pragma Import (C, Cross_Compiler, "__gnat_is_cross_compiler"); + begin + return Cross_Compiler = 1; + end Is_Cross_Compiler; + ---------------------------------- -- List_Applicable_Restrictions -- ---------------------------------- @@ -350,8 +364,12 @@ procedure Gnatbind is -- -Mname elsif Argv'Length >= 3 and then Argv (2) = 'M' then - Opt.Bind_Alternate_Main_Name := True; - Opt.Alternate_Main_Name := new String'(Argv (3 .. Argv'Last)); + if Is_Cross_Compiler then + Opt.Bind_Alternate_Main_Name := True; + Opt.Alternate_Main_Name := new String'(Argv (3 .. Argv'Last)); + else + Fail ("-M option only valid for a cross-compiler"); + end if; -- All other options are single character and are handled by -- Scan_Binder_Switches. diff --git a/gcc/ada/gnatbind.ads b/gcc/ada/gnatbind.ads index 359c513a25a..65f6f65d404 100644 --- a/gcc/ada/gnatbind.ads +++ b/gcc/ada/gnatbind.ads @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/gnatchop.adb b/gcc/ada/gnatchop.adb index 2a68776a5f8..eab7063253e 100644 --- a/gcc/ada/gnatchop.adb +++ b/gcc/ada/gnatchop.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1998-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1163,8 +1163,7 @@ procedure Gnatchop is Put (Standard_Error, "GNATCHOP "); Put_Line (Standard_Error, Gnatvsn.Gnat_Version_String); Put_Line - (Standard_Error, - "Copyright 1998-2005, Ada Core Technologies Inc."); + (Standard_Error, "Copyright 1998-2005, AdaCore"); when 'w' => Overwrite_Files := True; diff --git a/gcc/ada/gnatcmd.adb b/gcc/ada/gnatcmd.adb index c4137a95abd..3ef1ec700ad 100644 --- a/gcc/ada/gnatcmd.adb +++ b/gcc/ada/gnatcmd.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -211,7 +211,7 @@ procedure GNATCmd is -- Display usage for platforms other than VMS procedure Process_Link; - -- Process GNAT LINK, when there is a project file specified. + -- Process GNAT LINK, when there is a project file specified procedure Set_Library_For (Project : Project_Id; diff --git a/gcc/ada/gnatdll.adb b/gcc/ada/gnatdll.adb index c15154301cc..d133cf6e21e 100644 --- a/gcc/ada/gnatdll.adb +++ b/gcc/ada/gnatdll.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2004, Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -63,7 +63,7 @@ procedure Gnatdll is -- build the DLL. Help : Boolean := False; - -- Help will be set to True the usage information is to be displayed. + -- Help will be set to True the usage information is to be displayed Version : constant String := Gnatvsn.Gnat_Version_String; -- Why should it be necessary to make a copy of this @@ -166,8 +166,6 @@ procedure Gnatdll is procedure Parse_Command_Line is - use GNAT.Command_Line; - procedure Add_File (Filename : in String); -- Add one file to the list of file to handle diff --git a/gcc/ada/gnatfind.adb b/gcc/ada/gnatfind.adb index 677df83b43e..49b1e41419e 100644 --- a/gcc/ada/gnatfind.adb +++ b/gcc/ada/gnatfind.adb @@ -237,7 +237,7 @@ procedure Gnatfind is procedure Write_Usage is begin Put_Line ("GNATFIND " & Gnatvsn.Gnat_Version_String); - Put_Line ("Copyright 1998-2005, Ada Core Technologies Inc."); + Put_Line ("Copyright 1998-2005, AdaCore"); Put_Line ("Usage: gnatfind pattern[:sourcefile[:line[:column]]] " & "[file1 file2 ...]"); New_Line; diff --git a/gcc/ada/gnatlbr.adb b/gcc/ada/gnatlbr.adb index 6652c5ff26b..7054d691ce9 100644 --- a/gcc/ada/gnatlbr.adb +++ b/gcc/ada/gnatlbr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- Program to create, set, or delete an alternate runtime library. +-- Program to create, set, or delete an alternate runtime library -- Works by calling an appropriate target specific Makefile residing -- in the default library object (e.g. adalib) directory from the context @@ -222,7 +222,7 @@ begin end; end loop; - -- "Make" an alternate sublibrary for each default sublibrary. + -- "Make" an alternate sublibrary for each default sublibrary for Dirs in 1 .. Object_Dirs loop Make_Args (1) := diff --git a/gcc/ada/gnatmake.ads b/gcc/ada/gnatmake.ads index d69490d1507..15be53bd3f0 100644 --- a/gcc/ada/gnatmake.ads +++ b/gcc/ada/gnatmake.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -25,8 +25,7 @@ ------------------------------------------------------------------------------ procedure Gnatmake; --- The driver for the gnatmake tool. This utility can be used to --- automatically (re)compile a set of ada sources by giving the name --- of the root compilation unit or the source file containing it. --- For more information on gnatmake (its precise usage, flags and algorithm) --- please refer to the body of gnatmake. +-- The driver for the gnatmake tool. This utility can be used to automatically +-- (re)compile a set of ada sources by giving the name of the root compilation +-- unit or the source file containing it. For more information on gnatmake +-- (its precise usage, flags and algorithm) please refer to the gnatmake body. diff --git a/gcc/ada/gnatmem.adb b/gcc/ada/gnatmem.adb index b6a4d7e58f2..d52fe005f34 100644 --- a/gcc/ada/gnatmem.adb +++ b/gcc/ada/gnatmem.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -233,7 +233,7 @@ procedure Gnatmem is New_Line; Put ("GNATMEM "); Put_Line (Gnat_Version_String); - Put_Line ("Copyright 1997-2005 Free Software Foundation, Inc."); + Put_Line ("Copyright 1997-2005, Free Software Foundation, Inc."); New_Line; Put_Line ("Usage: gnatmem switches [depth] exename"); diff --git a/gcc/ada/gnatprep.adb b/gcc/ada/gnatprep.adb index 3e5d30b5054..47903e5954f 100644 --- a/gcc/ada/gnatprep.adb +++ b/gcc/ada/gnatprep.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2003, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -29,6 +29,7 @@ with GPrep; procedure GNATprep is pragma Ident (Gnatvsn.Gnat_Static_Version_String); + begin -- Everything is done in GPrep diff --git a/gcc/ada/gnatprep.ads b/gcc/ada/gnatprep.ads index 06ca505bacf..d991ef5cea6 100644 --- a/gcc/ada/gnatprep.ads +++ b/gcc/ada/gnatprep.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2002, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -142,9 +142,9 @@ -- may be used on a preprocessor line, but other than that, no other -- tokens may appear on a preprocessor line. --- Any number of #elsif clauses can be present, including none at all. +-- Any number of #elsif clauses can be present, including none at all --- The #else is optional, as in Ada. +-- The #else is optional, as in Ada -- The # marking the start of a preprocessor line must be the first -- non-blank character on the line, i.e. it must be preceded only by diff --git a/gcc/ada/gnatsym.adb b/gcc/ada/gnatsym.adb index 63f46e1e7f6..f723d52a088 100644 --- a/gcc/ada/gnatsym.adb +++ b/gcc/ada/gnatsym.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -78,7 +78,7 @@ procedure Gnatsym is -- The name of the reference symbol file Version_String : String_Access := Empty; - -- The version of the library. Used on VMS. + -- The version of the library (used on VMS) package Object_Files is new Table.Table (Table_Component_Type => String_Access, diff --git a/gcc/ada/gnatvsn.ads b/gcc/ada/gnatvsn.ads index 80906a2642c..1013bd70d88 100644 --- a/gcc/ada/gnatvsn.ads +++ b/gcc/ada/gnatvsn.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -74,7 +74,7 @@ package Gnatvsn is -- value should never be decreased in the future, but it would be -- OK to increase it if absolutely necessary. - Library_Version : constant String := "4.0"; + Library_Version : constant String := "4.1"; -- Library version. This value must be updated whenever any change to the -- compiler affects the library formats in such a way as to obsolete -- previously compiled library modules. diff --git a/gcc/ada/gnatxref.adb b/gcc/ada/gnatxref.adb index 12482681ad8..3d6ee75e8f6 100644 --- a/gcc/ada/gnatxref.adb +++ b/gcc/ada/gnatxref.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -210,7 +210,7 @@ procedure Gnatxref is procedure Write_Usage is begin Put_Line ("GNATXREF " & Gnatvsn.Gnat_Version_String); - Put_Line ("Copyright 1998-2004, Ada Core Technologies Inc."); + Put_Line ("Copyright 1998-2005, AdaCore"); Put_Line ("Usage: gnatxref [switches] file1 file2 ..."); New_Line; Put_Line (" file ... list of source files to xref, " & diff --git a/gcc/ada/gprep.adb b/gcc/ada/gprep.adb index 83cd12101f7..ebe5184204f 100644 --- a/gcc/ada/gprep.adb +++ b/gcc/ada/gprep.adb @@ -73,7 +73,7 @@ package body GPrep is File_Name_Buffer_Initial_Size : constant := 50; File_Name_Buffer : String_Access := new String (1 .. File_Name_Buffer_Initial_Size); - -- A buffer to build output file names from input file names. + -- A buffer to build output file names from input file names ----------------- -- Subprograms -- @@ -102,7 +102,7 @@ package body GPrep is -- True if C is in 'a' .. 'z' or in 'A' .. 'Z' procedure Double_File_Name_Buffer; - -- Double the size of the file name buffer. + -- Double the size of the file name buffer procedure Preprocess_Infile_Name; -- When the specified output is a directory, preprocess the infile name @@ -116,12 +116,12 @@ package body GPrep is -- Process a -D switch on the command line procedure Put_Char_To_Outfile (C : Character); - -- Output one character to the output file. - -- Used to initialize the preprocessor. + -- Output one character to the output file. Used to initialize the + -- preprocessor. procedure New_EOL_To_Outfile; - -- Output a new line to the output file. - -- Used to initialize the preprocessor. + -- Output a new line to the output file. Used to initialize the + -- preprocessor. procedure Scan_Command_Line; -- Scan the switches and the file names @@ -137,7 +137,7 @@ package body GPrep is begin if not Copyright_Displayed then Write_Line ("GNAT Preprocessor " & Gnatvsn.Gnat_Version_String); - Write_Line ("Copyright 1996-2004 Free Software Foundation, Inc."); + Write_Line ("Copyright 1996-2005, Free Software Foundation, Inc."); Copyright_Displayed := True; end if; end Display_Copyright; @@ -198,21 +198,23 @@ package body GPrep is -- Test we had all the arguments needed if Infile_Name = No_Name then + -- No input file specified, just output the usage and exit Usage; return; elsif Outfile_Name = No_Name then + -- No output file specified, just output the usage and exit Usage; return; end if; - -- If a pragma Source_File_Name, we need to keep line numbers. - -- So, if the deleted lines are not put as comment, we must output them - -- as blank lines. + -- If a pragma Source_File_Name, we need to keep line numbers. So, if + -- the deleted lines are not put as comment, we must output them as + -- blank lines. if Source_Ref_Pragma and (not Opt.Comment_Deleted_Lines) then Opt.Blank_Deleted_Lines := True; @@ -245,8 +247,7 @@ package body GPrep is end; end if; - -- If there are errors in the definition file, output these errors - -- and exit. + -- If there are errors in the definition file, output them and exit if Total_Errors_Detected > 0 then Errutil.Finalize (Source_Type => "definition"); @@ -281,7 +282,6 @@ package body GPrep is -- rooted at the input directory. Process_Files; - end Gnatprep; --------------------- @@ -327,7 +327,7 @@ package body GPrep is procedure Preprocess_Infile_Name is Len : Natural; - First : Positive := 1; + First : Positive; Last : Natural; Symbol : Name_Id; Data : Symbol_Data; @@ -346,6 +346,7 @@ package body GPrep is -- Look for possible symbols in the file name + First := 1; while First < Len loop -- A symbol starts with a dollar sign followed by a letter @@ -387,7 +388,7 @@ package body GPrep is declare Sym_Len : constant Positive := Last - First + 1; - Offset : constant Integer := Name_Len - Sym_Len; + Offset : constant Integer := Name_Len - Sym_Len; New_Len : constant Natural := Len + Offset; begin @@ -465,7 +466,7 @@ package body GPrep is -- Outfile_Name. procedure Recursive_Process (In_Dir : String; Out_Dir : String); - -- Process recursively files in In_Dir. Results go to Out_Dir. + -- Process recursively files in In_Dir. Results go to Out_Dir ---------------------- -- Process_One_File -- @@ -475,7 +476,7 @@ package body GPrep is Infile : Source_File_Index; begin - -- Create the output file; fails if this does not work. + -- Create the output file (fails if this does not work) begin Create (Text_Outfile, Out_File, Get_Name_String (Outfile_Name)); @@ -521,8 +522,7 @@ package body GPrep is Errutil.Finalize (Source_Type => "input"); end if; - -- If we had some errors, delete the output file, and report - -- the errors. + -- If we had some errors, delete the output file, and report them if Err_Vars.Total_Errors_Detected > 0 then if Outfile /= Standard_Output then @@ -533,7 +533,7 @@ package body GPrep is OS_Exit (0); - -- otherwise, close the output file, and we are done. + -- Otherwise, close the output file, and we are done elsif Outfile /= Standard_Output then Close (Text_Outfile); @@ -564,6 +564,8 @@ package body GPrep is Output_Directory := Out_Dir_Name; end Set_Directory_Names; + -- Start of processing for Recursive_Process + begin -- Open the current input directory @@ -645,8 +647,11 @@ package body GPrep is end loop; end Recursive_Process; + -- Start of processing for Process_Files + begin if Output_Directory = No_Name then + -- If the output is not a directory, fail if the input is -- an existing directory, to avoid possible problems. @@ -660,6 +665,7 @@ package body GPrep is Process_One_File; elsif Input_Directory = No_Name then + -- Get the output file name from the input file name, and process -- the single input file. @@ -697,7 +703,8 @@ package body GPrep is loop begin - Switch := GNAT.Command_Line.Getopt ("D: b c r s u v"); + Switch := GNAT.Command_Line.Getopt ("D: b c C r s u v"); + case Switch is when ASCII.NUL => @@ -713,6 +720,9 @@ package body GPrep is when 'c' => Opt.Comment_Deleted_Lines := True; + when 'C' => + Opt.Replace_In_Comments := True; + when 'r' => Source_Ref_Pragma := True; @@ -780,6 +790,7 @@ package body GPrep is Write_Line ("gnatprep switches:"); Write_Line (" -b Replace preprocessor lines by blank lines"); Write_Line (" -c Keep preprocessor lines as comments"); + Write_Line (" -C Do symbol replacements within comments"); Write_Line (" -D Associate symbol with value"); Write_Line (" -r Generate Source_Reference pragma"); Write_Line (" -s Print a sorted list of symbol names and values"); diff --git a/gcc/ada/gprep.ads b/gcc/ada/gprep.ads index 539d274b109..6a5a0d4153c 100644 --- a/gcc/ada/gprep.ads +++ b/gcc/ada/gprep.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002, Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- This package is the implementation of GNATPREP. +-- This package is the implementation of GNATPREP package GPrep is diff --git a/gcc/ada/gprmake.adb b/gcc/ada/gprmake.adb index 3e5b30296b5..93c20a79542 100644 --- a/gcc/ada/gprmake.adb +++ b/gcc/ada/gprmake.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- The driver for the gprmake tool. +-- The driver for the gprmake tool with Makegpr; diff --git a/gcc/ada/gsocket.h b/gcc/ada/gsocket.h index f593acfaed4..a380788995a 100644 --- a/gcc/ada/gsocket.h +++ b/gcc/ada/gsocket.h @@ -55,6 +55,8 @@ #if defined(__vxworks) #include #include +#include +#include #define SHUT_RD 0 #define SHUT_WR 1 #define SHUT_RDWR 2 @@ -131,7 +133,9 @@ #include #endif -#ifndef __vxworks +#ifdef __vxworks +#include +#else #include #endif diff --git a/gcc/ada/i-fortra.adb b/gcc/ada/i-fortra.adb index 01f16ed3f80..5b37738fa5b 100644 --- a/gcc/ada/i-fortra.adb +++ b/gcc/ada/i-fortra.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -39,14 +39,14 @@ package body Interfaces.Fortran is -- Single character case - function To_Ada (Item : in Character_Set) return Character is + function To_Ada (Item : Character_Set) return Character is begin return Character (Item); end To_Ada; -- String case (function returning converted result) - function To_Ada (Item : in Fortran_Character) return String is + function To_Ada (Item : Fortran_Character) return String is T : String (1 .. Item'Length); begin @@ -60,7 +60,7 @@ package body Interfaces.Fortran is -- String case (procedure copying converted string to given buffer) procedure To_Ada - (Item : in Fortran_Character; + (Item : Fortran_Character; Target : out String; Last : out Natural) is @@ -93,14 +93,14 @@ package body Interfaces.Fortran is -- Character case - function To_Fortran (Item : in Character) return Character_Set is + function To_Fortran (Item : Character) return Character_Set is begin return Character_Set (Item); end To_Fortran; -- String case (function returning converted result) - function To_Fortran (Item : in String) return Fortran_Character is + function To_Fortran (Item : String) return Fortran_Character is T : Fortran_Character (1 .. Item'Length); begin @@ -114,7 +114,7 @@ package body Interfaces.Fortran is -- String case (procedure copying converted string to given buffer) procedure To_Fortran - (Item : in String; + (Item : String; Target : out Fortran_Character; Last : out Natural) is diff --git a/gcc/ada/i-fortra.ads b/gcc/ada/i-fortra.ads index 78f4f71256d..da330d2a4f7 100644 --- a/gcc/ada/i-fortra.ads +++ b/gcc/ada/i-fortra.ads @@ -45,19 +45,19 @@ package Interfaces.Fortran is type Fortran_Character is array (Positive range <>) of Character_Set; - function To_Fortran (Item : in Character) return Character_Set; - function To_Ada (Item : in Character_Set) return Character; + function To_Fortran (Item : Character) return Character_Set; + function To_Ada (Item : Character_Set) return Character; - function To_Fortran (Item : in String) return Fortran_Character; - function To_Ada (Item : in Fortran_Character) return String; + function To_Fortran (Item : String) return Fortran_Character; + function To_Ada (Item : Fortran_Character) return String; procedure To_Fortran - (Item : in String; + (Item : String; Target : out Fortran_Character; Last : out Natural); procedure To_Ada - (Item : in Fortran_Character; + (Item : Fortran_Character; Target : out String; Last : out Natural); diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb index 1e859ef5fef..ff753ac0215 100644 --- a/gcc/ada/impunit.adb +++ b/gcc/ada/impunit.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -334,29 +334,19 @@ package body Impunit is "a-cgarso", -- Ada.Containers.Generic_Array_Sort "a-cgcaso", -- Ada.Containers.Generic_Constrained_Array_Sort "a-chacon", -- Ada.Characters.Conversions - "a-chtgke", -- Ada.Containers.Hash_Tables.Generic_Keys - "a-chtgop", -- Ada.Containers.Hash_Tables.Generic_Operations "a-cidlli", -- Ada.Containers.Indefinite_Doubly_Linked_Lists "a-cihama", -- Ada.Containers.Indefinite_Hashed_Maps "a-cihase", -- Ada.Containers.Indefinite_Hashed_Sets "a-ciorma", -- Ada.Containers.Indefinite_Ordered_Maps - "a-ciormu", -- Ada.Containers.Indefinite_Ordered_Multisets "a-ciorse", -- Ada.Containers.Indefinite_Ordered_Sets "a-cohama", -- Ada.Containers.Hashed_Maps "a-cohase", -- Ada.Containers.Hashed_Sets - "a-cohata", -- Ada.Containers.Hash_Tables "a-coinve", -- Ada.Containers.Indefinite_Vectors "a-contai", -- Ada.Containers "a-convec", -- Ada.Containers.Vectors "a-coorma", -- Ada.Containers.Ordered_Maps - "a-coormu", -- Ada.Containers.Ordered_Multisets "a-coorse", -- Ada.Containers.Ordered_Sets - "a-coprnu", -- Ada.Containers.Prime_Numbers - "a-crbltr", -- Ada.Containers.Red_Black_Trees - "a-crbtgk", -- Ada.Containers.Red_Black_Trees.Generic_Keys - "a-crbtgo", -- Ada.Containers.Red_Black_Trees.Generic_Operations "a-direct", -- Ada.Directories - "a-rbtgso", -- Ada.Containers.Red_Black_Trees.Generic_Set_Operations "a-secain", -- Ada.Strings.Equal_Case_Insensitive "a-shcain", -- Ada.Strings.Hash_Case_Insensitive "a-slcain", -- Ada.Strings.Less_Case_Insensitive @@ -399,6 +389,8 @@ package body Impunit is "a-chzla1", -- Ada.Characters.Wide_Wide_Latin_1 "a-chzla9", -- Ada.Characters.Wide_Wide_Latin_9 + "a-ciormu", -- Ada.Containers.Indefinite_Ordered_Multisets + "a-coormu", -- Ada.Containers.Ordered_Multisets "a-szuzti", -- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO "a-zchuni", -- Ada.Wide_Wide_Characters.Unicode diff --git a/gcc/ada/indepsw.ads b/gcc/ada/indepsw.ads index 4db3bcef90c..7296291b35d 100644 --- a/gcc/ada/indepsw.ads +++ b/gcc/ada/indepsw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -56,7 +56,7 @@ package Indepsw is -- for the platform; in this case, To is set to null. function Is_Supported (Switch : Switch_Kind) return Boolean; - -- Return True for each independent switch supported by the platform. + -- Return True for each independent switch supported by the platform private -- Default warning messages when the switches are not supported by the diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 8e2a222bf99..7baa11bdaf3 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -39,9 +39,9 @@ installed by this file are used to handle resulting signals that come from these probes failing (i.e. touching protected pages) */ -/* This file should be kept synchronized with 2sinit.ads, 2sinit.adb, and - 5zinit.adb. All these files implement the required functionality for - different targets. */ +/* This file should be kept synchronized with 2sinit.ads, 2sinit.adb, + s-init-ae653-cert.adb and s-init-xi-sparc.adb. All these files implement + the required functionality for different targets. */ /* The following include is here to meet the published VxWorks requirement that the __vxworks header appear before any other include. */ @@ -630,7 +630,8 @@ __gnat_install_handler (void) /* GNU/Linux Section */ /*********************/ -#elif defined (linux) && (defined (i386) || defined (__x86_64__)) +#elif defined (linux) && (defined (i386) || defined (__x86_64__) \ + || defined (__ia64__)) #include @@ -660,6 +661,8 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext) mcontext->gregs[REG_EIP]++; #elif defined (__x86_64__) mcontext->gregs[REG_RIP]++; +#elif defined (__ia64__) + mcontext->sc_ip++; #endif } @@ -1499,7 +1502,12 @@ __gnat_install_handler (void) /* __gnat_error_prehandler is an assembly function. */ SYS$SETEXV (1, __gnat_error_prehandler, 3, &prvhnd); #else - SYS$SETEXV (1, __gnat_error_handler, 3, &prvhnd); +#if defined (IN_RTS) && defined (__IA64) + if (getenv ("DBG$TDBG")) + printf ("DBG$TDBG defined, __gnat_error_handler not installed!\n"); + else +#endif + SYS$SETEXV (1, __gnat_error_handler, 3, &prvhnd); #endif __gnat_handler_installed = 1; diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index e5f0bf2086b..8b8004f5187 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -88,7 +88,7 @@ package body Inline is type Subp_Index is new Nat; No_Subp : constant Subp_Index := 0; - -- The subprogram entities are hashed into the Inlined table. + -- The subprogram entities are hashed into the Inlined table Num_Hash_Headers : constant := 512; @@ -182,10 +182,10 @@ package body Inline is To_Clean : Elist_Id; procedure Add_Scope_To_Clean (Inst : Entity_Id); - -- Build set of scopes on which cleanup actions must be performed. + -- Build set of scopes on which cleanup actions must be performed procedure Cleanup_Scopes; - -- Complete cleanup actions on scopes that need it. + -- Complete cleanup actions on scopes that need it -------------- -- Add_Call -- @@ -215,7 +215,7 @@ package body Inline is J := Successors.Table (J).Next; end loop; - -- On exit, make a successor entry for P2. + -- On exit, make a successor entry for P2 Successors.Increment_Last; Successors.Table (Successors.Last).Subp := P2; @@ -505,7 +505,7 @@ package body Inline is J : Subp_Index; procedure New_Entry; - -- Initialize entry in Inlined table. + -- Initialize entry in Inlined table procedure New_Entry is begin @@ -692,7 +692,8 @@ package body Inline is then Error_Msg_N ("& cannot be inlined?", Inlined.Table (Index).Name); - -- A warning on the first one might be sufficient. + + -- A warning on the first one might be sufficient ??? end if; end loop; diff --git a/gcc/ada/interfac.ads b/gcc/ada/interfac.ads index 15cfd9c87bb..38e5cdab736 100644 --- a/gcc/ada/interfac.ads +++ b/gcc/ada/interfac.ads @@ -35,11 +35,6 @@ -- -- ------------------------------------------------------------------------------ --- Assumes integer sizes of 8, 16, 32 and 64 are available, and that the --- floating-point formats are IEEE compatible. - --- Note: There is a specialized version of this package for OpenVMS - package Interfaces is pragma Pure; @@ -153,17 +148,26 @@ package Interfaces is pragma Import (Intrinsic, Rotate_Left); pragma Import (Intrinsic, Rotate_Right); - -- Floating point types. We assume that we are on an IEEE machine, and - -- that the types Short_Float and Long_Float in Standard refer to the - -- 32-bit short and 64-bit long IEEE forms. Furthermore, if there is - -- an extended float, we assume that it is available as Long_Long_Float. + -- IEEE Floating point types. Note that the form of these definitions + -- ensures that the work on VMS, even if the standard library is compiled + -- using a Float_Representation pragma for Vax_Float. + + pragma Warnings (Off); + -- Turn off warnings for targets not providing IEEE floating-point types + + type IEEE_Float_32 is digits 6; + pragma Float_Representation (IEEE_Float, IEEE_Float_32); + + type IEEE_Float_64 is digits 15; + pragma Float_Representation (IEEE_Float, IEEE_Float_64); + + -- If there is an IEEE extended float available on the machine, we assume + -- that it is available as Long_Long_Float. -- Note: it is harmless, and explicitly permitted, to include additional -- types in interfaces, so it is not wrong to have IEEE_Extended_Float -- defined even if the extended format is not available. - type IEEE_Float_32 is new Short_Float; - type IEEE_Float_64 is new Long_Float; type IEEE_Extended_Float is new Long_Long_Float; end Interfaces; diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb index 6f702c0f551..736dd0dc6b4 100644 --- a/gcc/ada/layout.adb +++ b/gcc/ada/layout.adb @@ -950,7 +950,7 @@ package body Layout is -- is the expression so far (which will be the body of the function). Size : Val_Type; - -- Value of size computed so far. See comments above. + -- Value of size computed so far. See comments above Vtyp : Entity_Id := Empty; -- Variant record type for the formal parameter of the @@ -2356,7 +2356,7 @@ package body Layout is if Is_Discrete_Type (E) then - -- If the RM_Size is not set, then here is where we set it. + -- If the RM_Size is not set, then here is where we set it -- Note: an RM_Size of zero looks like not set here, but this -- is a rare case, and we can simply reset it without any harm. diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb index 76952b5ac72..e8065b46aad 100644 --- a/gcc/ada/lib-writ.adb +++ b/gcc/ada/lib-writ.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -182,6 +182,9 @@ package body Lib.Writ is -- Array of flags to show which units have pragma Elaborate All set Elab_Des_Flags : array (Units.First .. Last_Unit) of Boolean; + -- Array of flags to show which units have Elaborate_Desirable set + + Elab_All_Des_Flags : array (Units.First .. Last_Unit) of Boolean; -- Array of flags to show which units have Elaborate_All_Desirable set Sdep_Table : Unit_Ref_Table (1 .. Pos (Last_Unit - Units.First + 2)); @@ -229,11 +232,13 @@ package body Lib.Writ is Item := First (Context_Items (Cunit)); while Present (Item) loop + -- Process with clause + -- Ada 2005 (AI-50217): limited with_clauses do not create -- dependencies if Nkind (Item) = N_With_Clause - and then not (Limited_Present (Item)) + and then not (Limited_Present (Item)) then Unum := Get_Cunit_Unit_Number (Library_Unit (Item)); With_Flags (Unum) := True; @@ -246,7 +251,11 @@ package body Lib.Writ is Elab_All_Flags (Unum) := True; end if; - if Elaborate_All_Desirable (Cunit_Entity (Unum)) then + if Elaborate_All_Desirable (Item) then + Elab_All_Des_Flags (Unum) := True; + end if; + + if Elaborate_Desirable (Item) then Elab_Des_Flags (Unum) := True; end if; end if; @@ -495,10 +504,11 @@ package body Lib.Writ is -- Generate with lines, first those that are directly with'ed for J in With_Flags'Range loop - With_Flags (J) := False; - Elab_Flags (J) := False; - Elab_All_Flags (J) := False; - Elab_Des_Flags (J) := False; + With_Flags (J) := False; + Elab_Flags (J) := False; + Elab_All_Flags (J) := False; + Elab_Des_Flags (J) := False; + Elab_All_Des_Flags (J) := False; end loop; Collect_Withs (Unode); @@ -725,6 +735,10 @@ package body Lib.Writ is if Elab_Des_Flags (Unum) then Write_Info_Str (" ED"); end if; + + if Elab_All_Des_Flags (Unum) then + Write_Info_Str (" AD"); + end if; end if; Write_Info_EOL; @@ -818,12 +832,10 @@ package body Lib.Writ is begin if Nkind (U) = N_Subprogram_Body - or else (Nkind (U) = N_Package_Body - and then - (Nkind (Original_Node (U)) = N_Function_Instantiation - or else - Nkind (Original_Node (U)) = - N_Procedure_Instantiation)) + or else + (Nkind (U) = N_Package_Body + and then + Nkind (Original_Node (U)) in N_Subprogram_Instantiation) then -- If the unit is a subprogram instance, the entity for the -- subprogram is the alias of the visible entity, which is the diff --git a/gcc/ada/lib-writ.ads b/gcc/ada/lib-writ.ads index 38124789187..90737ed1268 100644 --- a/gcc/ada/lib-writ.ads +++ b/gcc/ada/lib-writ.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -462,7 +462,7 @@ package Lib.Writ is -- Following each U line, is a series of lines of the form - -- W unit-name [source-name lib-name] [E] [EA] [ED] + -- W unit-name [source-name lib-name] [E] [EA] [ED] [AD] -- -- One of these lines is present for each unit that is mentioned in -- an explicit with clause by the current unit. The first parameter @@ -479,11 +479,17 @@ package Lib.Writ is -- -- EA pragma Elaborate_All applies to this unit -- - -- ED Elaborate_All_Desirable set for this unit, which means + -- ED Elaborate_Desirable set for this unit, which means + -- that there is no Elaborate, but the analysis suggests + -- that Program_Error may be raised if the Elaborate + -- conditions cannot be satisfied. The binder will attempt + -- to treat ED as E if it can. + -- + -- AD Elaborate_All_Desirable set for this unit, which means -- that there is no Elaborate_All, but the analysis suggests -- that Program_Error may be raised if the Elaborate_All -- conditions cannot be satisfied. The binder will attempt - -- to treat ED as EA if it can. + -- to treat AD as EA if it can. -- -- The parameter source-name and lib-name are omitted for the case -- of a generic unit compiled with earlier versions of GNAT which diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb index 7260b0cdcc4..1d0c8cbdc09 100644 --- a/gcc/ada/lib-xref.adb +++ b/gcc/ada/lib-xref.adb @@ -111,8 +111,13 @@ package body Lib.Xref is if Opt.Xref_Active -- Definition must come from source + -- We make an exception for subprogram child units that have no + -- spec. For these we generate a subprogram declaration for library + -- use, and the corresponding entity does not come from source. + -- Nevertheless, all references will be attached to it and we have + -- to treat is as coming from user code. - and then Comes_From_Source (E) + and then (Comes_From_Source (E) or else Is_Child_Unit (E)) -- And must have a reasonable source location that is not -- within an instance (all entities in instances are ignored) @@ -518,6 +523,14 @@ package body Lib.Xref is end if; end loop; + -- The internally created defining entity for a child subprogram + -- that has no previous spec has valid references. + + elsif Is_Overloadable (E) + and then Is_Child_Unit (E) + then + Ent := E; + -- Record components of discriminated subtypes or derived types -- must be treated as references to the original component. diff --git a/gcc/ada/live.adb b/gcc/ada/live.adb index 1eb73fcca0a..df92d0d6e12 100644 --- a/gcc/ada/live.adb +++ b/gcc/ada/live.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2002 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -58,7 +58,7 @@ package body Live is -- The problem of finding live entities is solved in two steps: procedure Mark (Root : Node_Id; Marks : out Name_Set); - -- Mark all live entities in Root as Marked. + -- Mark all live entities in Root as Marked procedure Sweep (Root : Node_Id; Marks : Name_Set); -- For all unmarked entities in Root set Is_Eliminated to true diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index 7e4c80c65cd..3204154947d 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -250,10 +250,9 @@ package body Make is Table_Increment => 100, Table_Name => "Make.Library_Projs"); - -- Two variables to keep the last binder and linker switch index - -- in tables Binder_Switches and Linker_Switches, before adding - -- switches from the project file (if any) and switches from the - -- command line (if any). + -- Two variables to keep the last binder and linker switch index in tables + -- Binder_Switches and Linker_Switches, before adding switches from the + -- project file (if any) and switches from the command line (if any). Last_Binder_Switch : Integer := 0; Last_Linker_Switch : Integer := 0; @@ -281,9 +280,9 @@ package body Make is -- The project id of the main project file, if any Project_Object_Directory : Project_Id := No_Project; - -- The object directory of the project for the last compilation. - -- Avoid calling Change_Dir if the current working directory is already - -- this directory + -- The object directory of the project for the last compilation. Avoid + -- calling Change_Dir if the current working directory is already this + -- directory -- Packages of project files where unknown attributes are errors @@ -303,16 +302,30 @@ package body Make is Packages_To_Check_By_Gnatmake : constant String_List_Access := Gnatmake_Packages'Access; + procedure Add_Library_Search_Dir + (Path : String; + On_Command_Line : Boolean); + -- Call Add_Lib_Search_Dir with an absolute directory path. If Path is a + -- relative path, when On_Command_Line is True, it is relative to the + -- current working directory; when On_Command_Line is False, it is relative + -- to the project directory of the main project. + + procedure Add_Source_Search_Dir + (Path : String; + On_Command_Line : Boolean); + -- Call Add_Src_Search_Dir with an absolute directory path. If Path is a + -- relative path, when On_Command_Line is True, it is relative to the + -- current working directory; when On_Command_Line is False, it is relative + -- to the project directory of the main project. + procedure Add_Source_Dir (N : String); - -- Call Add_Src_Search_Dir. - -- Output one line when in verbose mode. + -- Call Add_Src_Search_Dir (output one line when in verbose mode) procedure Add_Source_Directories is new Prj.Env.For_All_Source_Dirs (Action => Add_Source_Dir); procedure Add_Object_Dir (N : String); - -- Call Add_Lib_Search_Dir. - -- Output one line when in verbose mode. + -- Call Add_Lib_Search_Dir (output one line when in verbose mode) procedure Add_Object_Directories is new Prj.Env.For_All_Object_Dirs (Action => Add_Object_Dir); @@ -326,11 +339,10 @@ package body Make is Unit : Unit_Name_Type; Found : Boolean; end record; - -- File is the name of the file for which a compilation failed. - -- Unit is for gnatdist use in order to easily get the unit name - -- of a file when its name is krunched or declared in gnat.adc. - -- Found is False if the compilation failed because the file could - -- not be found. + -- File is the name of the file for which a compilation failed. Unit is for + -- gnatdist use in order to easily get the unit name of a file when its + -- name is krunched or declared in gnat.adc. Found is False if the + -- compilation failed because the file could not be found. package Bad_Compilation is new Table.Table ( Table_Component_Type => Bad_Compilation_Info, @@ -401,7 +413,7 @@ package body Make is -- if an executable is up to date or not. procedure Enter_Into_Obsoleted (F : Name_Id); - -- Enter a file name, without directory information, into the has table + -- Enter a file name, without directory information, into the hash table -- Obsoleted. function Is_In_Obsoleted (F : Name_Id) return Boolean; @@ -480,12 +492,14 @@ package body Make is -- Prints out the list of all files for which the compilation failed procedure Verbose_Msg - (N1 : Name_Id; - S1 : String; - N2 : Name_Id := No_Name; - S2 : String := ""; - Prefix : String := " -> "); - -- If the verbose flag (Verbose_Mode) is set then print Prefix to standard + (N1 : Name_Id; + S1 : String; + N2 : Name_Id := No_Name; + S2 : String := ""; + Prefix : String := " -> "; + Minimum_Verbosity : Verbosity_Level_Type := Opt.Low); + -- If the verbose flag (Verbose_Mode) is set and the verbosity level is + -- at least equal to Minimum_Verbosity, then print Prefix to standard -- output followed by N1 and S1. If N2 /= No_Name then N2 is printed after -- S1. S2 is printed last. Both N1 and N2 are printed in quotation marks. @@ -504,6 +518,10 @@ package body Make is Depth : Natural); -- Compute depth of Project and of the projects it depends on + procedure Compute_All_Imported_Projects (Project : Project_Id); + -- Compute, the list of the projects imported directly or indirectly by + -- project Project. + ----------------------- -- Gnatmake Routines -- ----------------------- @@ -519,19 +537,18 @@ package body Make is Ada_Lib_Dir : constant Lib_Mark_Type := 1; -- Used to mark a directory as a GNAT lib dir - -- Note that the notion of GNAT lib dir is no longer used. The code - -- related to it has not been removed to give an idea on how to use - -- the directory prefix marking mechanism. + -- Note that the notion of GNAT lib dir is no longer used. The code related + -- to it has not been removed to give an idea on how to use the directory + -- prefix marking mechanism. - -- An Ada library directory is a directory containing ali and object - -- files but no source files for the bodies (the specs can be in the - -- same or some other directory). These directories are specified - -- in the Gnatmake command line with the switch "-Adir" (to specify the - -- spec location -Idir cab be used). Gnatmake skips the missing sources - -- whose ali are in Ada library directories. For an explanation of why - -- Gnatmake behaves that way, see the spec of Make.Compile_Sources. - -- The directory lookup penalty is incurred every single time this - -- routine is called. + -- An Ada library directory is a directory containing ali and object files + -- but no source files for the bodies (the specs can be in the same or some + -- other directory). These directories are specified in the Gnatmake + -- command line with the switch "-Adir" (to specify the spec location -Idir + -- cab be used). Gnatmake skips the missing sources whose ali are in Ada + -- library directories. For an explanation of why Gnatmake behaves that + -- way, see the spec of Make.Compile_Sources. The directory lookup penalty + -- is incurred every single time this routine is called. procedure Check_Steps; -- Check what steps (Compile, Bind, Link) must be executed. @@ -542,10 +559,15 @@ package body Make is -- table for this directory. Then check if an Ada lib mark has been set. procedure Mark_Directory - (Dir : String; - Mark : Lib_Mark_Type); - -- Store Dir in name table and set lib mark as name info to identify - -- Ada libraries. + (Dir : String; + Mark : Lib_Mark_Type; + On_Command_Line : Boolean); + -- Store the absolute path from Dir in name table and set lib mark as name + -- info to identify Ada libraries. + -- + -- If Dir is a relative path, when On_Command_Line is True, it is relative + -- to the current working directory; when On_Command_Line is False, it is + -- relative to the project directory of the main project. Output_Is_Object : Boolean := True; -- Set to False when using a switch -S for the compiler @@ -561,12 +583,12 @@ package body Make is Naming : Naming_Data; In_Package : Package_Id; Allow_ALI : Boolean) return Variable_Value; - -- Return the switches for the source file in the specified package - -- of a project file. If the Source_File ends with a standard GNAT - -- extension (".ads" or ".adb"), try first the full name, then the - -- name without the extension, then, if Allow_ALI is True, the name with - -- the extension ".ali". If there is no switches for either names, try the - -- default switches for Ada. If all failed, return No_Variable_Value. + -- Return the switches for the source file in the specified package of a + -- project file. If the Source_File ends with a standard GNAT extension + -- (".ads" or ".adb"), try first the full name, then the name without the + -- extension, then, if Allow_ALI is True, the name with the extension + -- ".ali". If there is no switches for either names, try the default + -- switches for Ada. If all failed, return No_Variable_Value. function Is_In_Object_Directory (Source_File : File_Name_Type; @@ -785,6 +807,28 @@ package body Make is Dependencies.Table (Dependencies.Last) := (S, On); end Add_Dependency; + ---------------------------- + -- Add_Library_Search_Dir -- + ---------------------------- + + procedure Add_Library_Search_Dir + (Path : String; + On_Command_Line : Boolean) + is + begin + if On_Command_Line then + Add_Lib_Search_Dir + (Normalize_Pathname (Path)); + + else + Get_Name_String + (Project_Tree.Projects.Table (Main_Project).Directory); + Add_Lib_Search_Dir + (Normalize_Pathname + (Path, Name_Buffer (1 .. Name_Len))); + end if; + end Add_Library_Search_Dir; + -------------------- -- Add_Object_Dir -- -------------------- @@ -817,6 +861,28 @@ package body Make is end if; end Add_Source_Dir; + --------------------------- + -- Add_Source_Search_Dir -- + --------------------------- + + procedure Add_Source_Search_Dir + (Path : String; + On_Command_Line : Boolean) + is + begin + if On_Command_Line then + Add_Src_Search_Dir + (Normalize_Pathname (Path)); + + else + Get_Name_String + (Project_Tree.Projects.Table (Main_Project).Directory); + Add_Src_Search_Dir + (Normalize_Pathname + (Path, Name_Buffer (1 .. Name_Len))); + end if; + end Add_Source_Search_Dir; + ---------------- -- Add_Switch -- ---------------- @@ -838,7 +904,7 @@ package body Make is -- Generic_Position -- ---------------------- - procedure Generic_Position (New_Position : out Integer) is + procedure Generic_Position (New_Position : out Integer) is begin T.Increment_Last; @@ -968,8 +1034,7 @@ package body Make is if Name_Len > 0 then declare Argv : constant String := Name_Buffer (1 .. Name_Len); - -- We need a copy, because Name_Buffer may be - -- modified. + -- We need a copy, because Name_Buffer may be modified begin if Verbose_Mode then @@ -1033,8 +1098,8 @@ package body Make is Bind_Args (Args'Range) := Args; end if; - -- It is completely pointless to re-check source file time stamps. - -- This has been done already by gnatmake + -- It is completely pointless to re-check source file time stamps. This + -- has been done already by gnatmake Bind_Last := Bind_Last + 1; Bind_Args (Bind_Last) := Do_Not_Check_Flag; @@ -1142,9 +1207,9 @@ package body Make is Spec_File_Name : File_Name_Type := No_File; function New_Spec (Uname : Unit_Name_Type) return Boolean; - -- Uname is the name of the spec or body of some ada unit. - -- This function returns True if the Uname is the name of a body - -- which has a spec not mentioned inali file A. If True is returned + -- Uname is the name of the spec or body of some ada unit. This + -- function returns True if the Uname is the name of a body which has + -- a spec not mentioned inali file A. If True is returned -- Spec_File_Name above is set to the name of this spec file. -------------- @@ -1262,9 +1327,9 @@ package body Make is begin pragma Assert (Lib_File /= No_File); - -- If the ALI file is read-only, set temporarily - -- Check_Object_Consistency to False: we don't care if the object file - -- is not there; presumably, a library will be used for linking. + -- If ALI file is read-only, temporarily set Check_Object_Consistency to + -- False. We don't care if the object file is not there (presumably a + -- library will be used for linking.) if Read_Only then declare @@ -1286,9 +1351,17 @@ package body Make is Obj_Stamp := Current_Object_File_Stamp; if Full_Lib_File = No_File then - Verbose_Msg (Lib_File, "being checked ...", Prefix => " "); + Verbose_Msg + (Lib_File, + "being checked ...", + Prefix => " ", + Minimum_Verbosity => Opt.Medium); else - Verbose_Msg (Full_Lib_File, "being checked ...", Prefix => " "); + Verbose_Msg + (Full_Lib_File, + "being checked ...", + Prefix => " ", + Minimum_Verbosity => Opt.Medium); end if; ALI := No_ALI_Id; @@ -1382,13 +1455,13 @@ package body Make is for J in 1 .. Switches_To_Check.Last loop - -- Comparing switches is delicate because gcc reorders - -- a number of switches, according to lang-specs.h, but - -- gnatmake doesn't have the sufficient knowledge to - -- perform the same reordering. Instead, we ignore orders - -- between different "first letter" switches, but keep - -- orders between same switches, e.g -O -O2 is different - -- than -O2 -O, but -g -O is equivalent to -O -g. + -- Comparing switches is delicate because gcc reorders a number + -- of switches, according to lang-specs.h, but gnatmake doesn't + -- have the sufficient knowledge to perform the same + -- reordering. Instead, we ignore orders between different + -- "first letter" switches, but keep orders between same + -- switches, e.g -O -O2 is different than -O2 -O, but -g -O is + -- equivalent to -O -g. if Switches_To_Check.Table (J) (2) /= Prev_Switch (2) or else (Prev_Switch'Length >= 6 and then @@ -1561,7 +1634,7 @@ package body Make is Name_Len := Name_Len - 1; end loop; - if Name_Len <= 0 then + if Name_Len = 0 then return; elsif Name_Buffer (1) = '-' then @@ -2687,7 +2760,10 @@ package body Make is and then In_Ada_Lib_Dir (Full_Lib_File) then Verbose_Msg - (Lib_File, "is in an Ada library", Prefix => " "); + (Lib_File, + "is in an Ada library", + Prefix => " ", + Minimum_Verbosity => Opt.High); -- If the library file is a read-only library skip it, but -- only if, when using project files, this library file is @@ -2701,7 +2777,10 @@ package body Make is and then Is_In_Object_Directory (Source_File, Full_Lib_File) then Verbose_Msg - (Lib_File, "is a read-only library", Prefix => " "); + (Lib_File, + "is a read-only library", + Prefix => " ", + Minimum_Verbosity => Opt.High); -- The source file that we are checking cannot be located @@ -2724,7 +2803,10 @@ package body Make is end if; Verbose_Msg - (Lib_File, "is an internal library", Prefix => " "); + (Lib_File, + "is an internal library", + Prefix => " ", + Minimum_Verbosity => Opt.High); -- The source file that we are checking can be located @@ -2764,52 +2846,65 @@ package body Make is end if; else - -- Is this the first file we have to compile? + -- Do nothing if project of source is externally built - if First_Compiled_File = No_File then - First_Compiled_File := Full_Source_File; - Most_Recent_Obj_File := No_File; + if not Arguments_Collected then + Collect_Arguments (Source_File, Source_Index, Args); + end if; - if Do_Not_Execute then - exit Make_Loop; + if Arguments_Project = No_Project + or else not Project_Tree.Projects.Table + (Arguments_Project).Externally_Built + then + -- Is this the first file we have to compile? + + if First_Compiled_File = No_File then + First_Compiled_File := Full_Source_File; + Most_Recent_Obj_File := No_File; + + if Do_Not_Execute then + exit Make_Loop; + end if; end if; - end if; - if In_Place_Mode then + if In_Place_Mode then - -- If the library file was not found, then save the - -- library file near the source file. + -- If the library file was not found, then save + -- the library file near the source file. - if Full_Lib_File = No_File then - Lib_File := Osint.Lib_File_Name - (Full_Source_File, Source_Index); + if Full_Lib_File = No_File then + Lib_File := Osint.Lib_File_Name + (Full_Source_File, Source_Index); - -- If the library file was found, then save the - -- library file in the same place. + -- If the library file was found, then save the + -- library file in the same place. - else - Lib_File := Full_Lib_File; - end if; + else + Lib_File := Full_Lib_File; + end if; - end if; + end if; - -- Start the compilation and record it. We can do this - -- because there is at least one free process. + -- Start the compilation and record it. We can do + -- this because there is at least one free process. - Collect_Arguments_And_Compile (Source_File, Source_Index); + Collect_Arguments_And_Compile + (Source_File, Source_Index); - -- Make sure we could successfully start the compilation + -- Make sure we could successfully start + -- the Compilation. - if Process_Created then - if Pid = Invalid_Pid then - Record_Failure (Full_Source_File, Source_Unit); - else - Add_Process - (Pid, - Full_Source_File, - Lib_File, - Source_Unit, - Mfile); + if Process_Created then + if Pid = Invalid_Pid then + Record_Failure (Full_Source_File, Source_Unit); + else + Add_Process + (Pid, + Full_Source_File, + Lib_File, + Source_Unit, + Mfile); + end if; end if; end if; end if; @@ -3007,6 +3102,95 @@ package body Make is end Compile_Sources; + ----------------------------------- + -- Compute_All_Imported_Projects -- + ----------------------------------- + + procedure Compute_All_Imported_Projects (Project : Project_Id) is + procedure Add_To_List (Prj : Project_Id); + -- Add a project to the list All_Imported_Projects of project Project + + procedure Recursive_Add_Imported (Project : Project_Id); + -- Recursively add the projects imported by project Project, but not + -- those that are extended. + + ----------------- + -- Add_To_List -- + ----------------- + + procedure Add_To_List (Prj : Project_Id) is + Element : constant Project_Element := + (Prj, Project_Tree.Projects.Table (Project).All_Imported_Projects); + List : Project_List; + begin + Project_List_Table.Increment_Last (Project_Tree.Project_Lists); + List := Project_List_Table.Last (Project_Tree.Project_Lists); + Project_Tree.Project_Lists.Table (List) := Element; + Project_Tree.Projects.Table (Project).All_Imported_Projects := List; + end Add_To_List; + + ---------------------------- + -- Recursive_Add_Imported -- + ---------------------------- + + procedure Recursive_Add_Imported (Project : Project_Id) is + List : Project_List; + Element : Project_Element; + Prj : Project_Id; + + begin + if Project /= No_Project then + + -- For all the imported projects + + List := Project_Tree.Projects.Table (Project).Imported_Projects; + while List /= Empty_Project_List loop + Element := Project_Tree.Project_Lists.Table (List); + Prj := Element.Project; + + -- Get the ultimate extending project + + while + Project_Tree.Projects.Table (Prj).Extended_By /= No_Project + loop + Prj := Project_Tree.Projects.Table (Prj).Extended_By; + end loop; + + -- If project has not yet been visited, add to list and recurse + + if not Project_Tree.Projects.Table (Prj).Seen then + Project_Tree.Projects.Table (Prj).Seen := True; + Add_To_List (Prj); + Recursive_Add_Imported (Prj); + end if; + + List := Element.Next; + end loop; + + -- Recurse on projects being imported, if any + + Recursive_Add_Imported + (Project_Tree.Projects.Table (Project).Extends); + end if; + end Recursive_Add_Imported; + + begin + -- Reset the Seen flag for all projects + + for Index in 1 .. Project_Table.Last (Project_Tree.Projects) loop + Project_Tree.Projects.Table (Index).Seen := False; + end loop; + + -- Make sure the list is empty + + Project_Tree.Projects.Table (Project).All_Imported_Projects := + Empty_Project_List; + + -- Add to the list all projects imported directly or indirectly + + Recursive_Add_Imported (Project); + end Compute_All_Imported_Projects; + ---------------------------------- -- Configuration_Pragmas_Switch -- ---------------------------------- @@ -3757,17 +3941,25 @@ package body Make is exit when not OK; - -- Third line it the ALI path name, - -- concatenation of the project + -- Third line it the ALI path name, concatenation + -- of either the library directory or the object -- directory with the ALI file name. declare ALI : constant String := Get_Name_String (ALI_Name); + PD : Project_Data renames + Project_Tree.Projects.Table (ALI_Project); + begin - Get_Name_String - (Project_Tree.Projects.Table - (ALI_Project).Object_Directory); + -- For library projects, use the library directory, + -- for other projects, use the object directory. + + if PD.Library then + Get_Name_String (PD.Library_Dir); + else + Get_Name_String (PD.Object_Directory); + end if; if Name_Buffer (Name_Len) /= Directory_Separator @@ -4797,17 +4989,51 @@ package body Make is if Main_Project /= No_Project and then MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None - and then (Do_Bind_Step or Unique_Compile_All_Projects - or not Compile_Only) + and then (Do_Bind_Step + or Unique_Compile_All_Projects + or not Compile_Only) and then (Do_Link_Step or N_File = Osint.Number_Of_Files) then Library_Projs.Init; declare - Proj2 : Project_Id; Depth : Natural; Current : Natural; + procedure Add_To_Library_Projs (Proj : Project_Id); + -- Add project Project to table Library_Projs + -- in decreasing depth order. + + -------------------------- + -- Add_To_Library_Projs -- + -------------------------- + + procedure Add_To_Library_Projs (Proj : Project_Id) is + Prj : Project_Id; + + begin + Library_Projs.Increment_Last; + Depth := Project_Tree.Projects.Table (Proj).Depth; + + -- Put the projects in decreasing depth order, + -- so that if libA depends on libB, libB is first + -- in order. + + Current := Library_Projs.Last; + while Current > 1 loop + Prj := Library_Projs.Table (Current - 1); + exit when Project_Tree.Projects.Table + (Prj).Depth >= Depth; + Library_Projs.Table (Current) := Prj; + Current := Current - 1; + end loop; + + Library_Projs.Table (Current) := Proj; + end Add_To_Library_Projs; + + -- Start of processing for ??? (should name declare block + -- or probably better, break this out as a nested proc. + begin -- Put in Library_Projs table all library project -- file ids when the library need to be rebuilt. @@ -4821,40 +5047,84 @@ package body Make is There_Are_Stand_Alone_Libraries := True; end if; - if Project_Tree.Projects.Table (Proj1).Library - and then not Project_Tree.Projects.Table - (Proj1).Need_To_Build_Lib - and then not Project_Tree.Projects.Table - (Proj1).Externally_Built - then + if Project_Tree.Projects.Table (Proj1).Library then MLib.Prj.Check_Library (Proj1, Project_Tree); end if; if Project_Tree.Projects.Table (Proj1).Need_To_Build_Lib then - Library_Projs.Increment_Last; - Current := Library_Projs.Last; - Depth := Project_Tree.Projects.Table - (Proj1).Depth; + Add_To_Library_Projs (Proj1); + end if; + end loop; - -- Put the projects in decreasing depth order, - -- so that if libA depends on libB, libB is first - -- in order. + -- Check if importing libraries should be regenerated + -- because at least an imported library will be + -- regenerated or is more recent. - while Current > 1 loop - Proj2 := Library_Projs.Table (Current - 1); - exit when Project_Tree.Projects.Table - (Proj2).Depth >= Depth; - Library_Projs.Table (Current) := Proj2; - Current := Current - 1; - end loop; - - Library_Projs.Table (Current) := Proj1; - Project_Tree.Projects.Table - (Proj1).Need_To_Build_Lib := False; + for Proj1 in Project_Table.First .. + Project_Table.Last (Project_Tree.Projects) + loop + if Project_Tree.Projects.Table (Proj1).Library + and then not Project_Tree.Projects.Table + (Proj1).Need_To_Build_Lib + and then not Project_Tree.Projects.Table + (Proj1).Externally_Built + then + declare + List : Project_List; + Element : Project_Element; + Proj2 : Project_Id; + Rebuild : Boolean := False; + + Lib_Timestamp1 : constant Time_Stamp_Type := + Project_Tree.Projects.Table + (Proj1). Library_TS; + + begin + List := Project_Tree.Projects.Table (Proj1). + All_Imported_Projects; + while List /= Empty_Project_List loop + Element := + Project_Tree.Project_Lists.Table (List); + Proj2 := Element.Project; + + if + Project_Tree.Projects.Table (Proj2).Library + then + if Project_Tree.Projects.Table (Proj2). + Need_To_Build_Lib + or else + (Lib_Timestamp1 < + Project_Tree.Projects.Table + (Proj2).Library_TS) + then + Rebuild := True; + exit; + end if; + end if; + + List := Element.Next; + end loop; + + if Rebuild then + Project_Tree.Projects.Table + (Proj1).Need_To_Build_Lib := True; + Add_To_Library_Projs (Proj1); + end if; + end; end if; end loop; + + -- Reset the flags Need_To_Build_Lib for the next main, + -- to avoid rebuilding libraries uselessly. + + for Proj1 in Project_Table.First .. + Project_Table.Last (Project_Tree.Projects) + loop + Project_Tree.Projects.Table + (Proj1).Need_To_Build_Lib := False; + end loop; end; -- Build the libraries, if any need to be built @@ -5909,6 +6179,15 @@ package body Make is Recursive_Compute_Depth (Main_Project, Depth => 1); + -- For each project compute the list of the projects it imports + -- directly or indirectly. + + for Proj in Project_Table.First .. + Project_Table.Last (Project_Tree.Projects) + loop + Compute_All_Imported_Projects (Proj); + end loop; + else Osint.Add_Default_Search_Dirs; @@ -6389,17 +6668,51 @@ package body Make is -------------------- procedure Mark_Directory - (Dir : String; - Mark : Lib_Mark_Type) + (Dir : String; + Mark : Lib_Mark_Type; + On_Command_Line : Boolean) is N : Name_Id; B : Byte; begin - -- Dir last character is supposed to be a directory separator + if On_Command_Line then + declare + Real_Path : constant String := + Normalize_Pathname (Dir); + + begin + if Real_Path'Length = 0 then + Name_Len := Dir'Length; + Name_Buffer (1 .. Name_Len) := Dir; + + else + Name_Len := Real_Path'Length; + Name_Buffer (1 .. Name_Len) := Real_Path; + end if; + end; + + else + declare + Real_Path : constant String := + Normalize_Pathname + (Dir, + Get_Name_String + (Project_Tree.Projects.Table (Main_Project).Directory)); + + begin + if Real_Path'Length = 0 then + Name_Len := Dir'Length; + Name_Buffer (1 .. Name_Len) := Dir; + + else + Name_Len := Real_Path'Length; + Name_Buffer (1 .. Name_Len) := Real_Path; + end if; + end; + end if; - Name_Len := Dir'Length; - Name_Buffer (1 .. Name_Len) := Dir; + -- Last character is supposed to be a directory separator if not Is_Directory_Separator (Name_Buffer (Name_Len)) then Name_Len := Name_Len + 1; @@ -6623,11 +6936,11 @@ package body Make is elsif Program_Args = Compiler then if Argv (3 .. Argv'Last) /= "-" then - Add_Src_Search_Dir (Argv (3 .. Argv'Last)); + Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save); end if; elsif Program_Args = Binder then - Add_Lib_Search_Dir (Argv (3 .. Argv'Last)); + Add_Library_Search_Dir (Argv (3 .. Argv'Last), And_Save); end if; end if; @@ -6787,15 +7100,15 @@ package body Make is -- -Idir elsif Argv (2) = 'I' then - Add_Src_Search_Dir (Argv (3 .. Argv'Last)); - Add_Lib_Search_Dir (Argv (3 .. Argv'Last)); + Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save); + Add_Library_Search_Dir (Argv (3 .. Argv'Last), And_Save); Add_Switch (Argv, Compiler, And_Save => And_Save); Add_Switch (Argv, Binder, And_Save => And_Save); -- -aIdir (to gcc this is like a -I switch) elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aI" then - Add_Src_Search_Dir (Argv (4 .. Argv'Last)); + Add_Source_Search_Dir (Argv (4 .. Argv'Last), And_Save); Add_Switch ("-I" & Argv (4 .. Argv'Last), Compiler, And_Save => And_Save); @@ -6804,14 +7117,14 @@ package body Make is -- -aOdir elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aO" then - Add_Lib_Search_Dir (Argv (4 .. Argv'Last)); + Add_Library_Search_Dir (Argv (4 .. Argv'Last), And_Save); Add_Switch (Argv, Binder, And_Save => And_Save); -- -aLdir (to gnatbind this is like a -aO switch) elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aL" then - Mark_Directory (Argv (4 .. Argv'Last), Ada_Lib_Dir); - Add_Lib_Search_Dir (Argv (4 .. Argv'Last)); + Mark_Directory (Argv (4 .. Argv'Last), Ada_Lib_Dir, And_Save); + Add_Library_Search_Dir (Argv (4 .. Argv'Last), And_Save); Add_Switch ("-aO" & Argv (4 .. Argv'Last), Binder, And_Save => And_Save); @@ -6819,9 +7132,9 @@ package body Make is -- -Adir (to gnatbind this is like a -aO switch, to gcc like a -I) elsif Argv (2) = 'A' then - Mark_Directory (Argv (3 .. Argv'Last), Ada_Lib_Dir); - Add_Src_Search_Dir (Argv (3 .. Argv'Last)); - Add_Lib_Search_Dir (Argv (3 .. Argv'Last)); + Mark_Directory (Argv (3 .. Argv'Last), Ada_Lib_Dir, And_Save); + Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save); + Add_Library_Search_Dir (Argv (3 .. Argv'Last), And_Save); Add_Switch ("-I" & Argv (3 .. Argv'Last), Compiler, And_Save => And_Save); @@ -7041,6 +7354,9 @@ package body Make is and then Argv (2 .. Argv'Last) /= "F" and then Argv (2 .. Argv'Last) /= "M" and then Argv (2 .. Argv'Last) /= "B" + and then Argv (2 .. Argv'Last) /= "vl" + and then Argv (2 .. Argv'Last) /= "vm" + and then Argv (2 .. Argv'Last) /= "vh" and then (Argv'Length > 2 or else Argv (2) not in 'a' .. 'z') then Add_Switch (Argv, Compiler, And_Save => And_Save); @@ -7189,14 +7505,15 @@ package body Make is ----------------- procedure Verbose_Msg - (N1 : Name_Id; - S1 : String; - N2 : Name_Id := No_Name; - S2 : String := ""; - Prefix : String := " -> ") + (N1 : Name_Id; + S1 : String; + N2 : Name_Id := No_Name; + S2 : String := ""; + Prefix : String := " -> "; + Minimum_Verbosity : Verbosity_Level_Type := Opt.Low) is begin - if not Verbose_Mode then + if (not Verbose_Mode) or else (Minimum_Verbosity > Verbosity_Level) then return; end if; diff --git a/gcc/ada/make.ads b/gcc/ada/make.ads index 76b952af38e..f5c4d25d10c 100644 --- a/gcc/ada/make.ads +++ b/gcc/ada/make.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -75,13 +75,13 @@ package Make is -- is raised. These need to be handled by the calling routines. Compilation_Failed : exception; - -- Raised by Compile_Sources if a compilation failed. + -- Raised by Compile_Sources if a compilation failed Bind_Failed : exception; - -- Raised by Bind below if the bind failed. + -- Raised by Bind below if the bind failed Link_Failed : exception; - -- Raised by Link below if the link failed. + -- Raised by Link below if the link failed procedure Bind (ALI_File : File_Name_Type; Args : Argument_List); -- Binds ALI_File. Args are the arguments to pass to the binder. @@ -96,13 +96,13 @@ package Make is -- Compile_Sources can be called by an external unit. procedure Scan_Make_Arg (Argv : String; And_Save : Boolean); - -- Scan make arguments. Argv is a single argument to be processed. + -- Scan make arguments. Argv is a single argument to be processed procedure Extract_Failure (File : out File_Name_Type; Unit : out Unit_Name_Type; Found : out Boolean); - -- Extracts the first failure report from Bad_Compilation table. + -- Extracts the first failure report from Bad_Compilation table procedure Compile_Sources (Main_Source : File_Name_Type; diff --git a/gcc/ada/makegpr.adb b/gcc/ada/makegpr.adb index 951e77815fd..2e8f5c22355 100644 --- a/gcc/ada/makegpr.adb +++ b/gcc/ada/makegpr.adb @@ -129,7 +129,7 @@ package body Makegpr is -- ar commands. Archive_Indexer_Path : String_Access := null; - -- The path name of the archive indexer (ranlib), if it exists. + -- The path name of the archive indexer (ranlib), if it exists Copyright_Output : Boolean := False; Usage_Output : Boolean := False; @@ -356,7 +356,7 @@ package body Makegpr is procedure Add_Argument (Arg : String_Access; Display : Boolean); procedure Add_Argument (Arg : String; Display : Boolean); - -- Add an argument to Arguments. Reallocate if necessary. + -- Add an argument to Arguments. Reallocate if necessary procedure Add_Arguments (Args : Argument_List; Display : Boolean); -- Add a list of arguments to Arguments. Reallocate if necessary @@ -2015,7 +2015,7 @@ package body Makegpr is end if; end; - -- If the source path name ends the line, we are done. + -- If the source path name ends the line, we are done exit Line_Loop when Finish = Last; @@ -2609,7 +2609,7 @@ package body Makegpr is -- Keep_Going is True, to inhibit the building of the archive. Need_To_Compile : Boolean; - -- Set to True when a source needs to be compiled/recompiled. + -- Set to True when a source needs to be compiled/recompiled Need_To_Rebuild_Archive : Boolean := Force_Compilations; -- True when the archive needs to be built/rebuilt unconditionally @@ -3217,7 +3217,10 @@ package body Makegpr is -- If -c was not specified, link the executables, -- if there are any. - if not Compile_Only and then not Data.Library then + if not Compile_Only + and then not Data.Library + and then Data.Object_Directory /= No_Name + then Build_Global_Archive; Link_Executables; end if; @@ -3677,7 +3680,7 @@ package body Makegpr is -- project. Any main that is not a source of the other languages -- will be deemed to be an Ada main. - -- Find the mains of the other languages and the Ada mains. + -- Find the mains of the other languages and the Ada mains Mains.Reset; Ada_Mains.Set_Last (0); diff --git a/gcc/ada/makegpr.ads b/gcc/ada/makegpr.ads index 308a1928511..d9de44a5c2c 100644 --- a/gcc/ada/makegpr.ads +++ b/gcc/ada/makegpr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -30,6 +30,6 @@ package Makegpr is procedure Gprmake; - -- The driver of gprmake. + -- The driver of gprmake end Makegpr; diff --git a/gcc/ada/makeutl.adb b/gcc/ada/makeutl.adb index d65dfea5cff..f64aae3d1e9 100644 --- a/gcc/ada/makeutl.adb +++ b/gcc/ada/makeutl.adb @@ -57,7 +57,7 @@ package body Makeutl is Key => Mark_Key, Hash => Hash, Equal => "="); - -- A hash table to keep tracks of the marked units. + -- A hash table to keep tracks of the marked units type Linker_Options_Data is record Project : Project_Id; diff --git a/gcc/ada/makeutl.ads b/gcc/ada/makeutl.ads index a4c8135c89b..d69adb2f628 100644 --- a/gcc/ada/makeutl.ads +++ b/gcc/ada/makeutl.ads @@ -113,7 +113,7 @@ package Makeutl is function Is_Marked (Source_File : File_Name_Type; Index : Int := 0) return Boolean; - -- Returns True if the unit was previously marked. + -- Returns True if the unit was previously marked procedure Delete_All_Marks; -- Remove all file/index couples marked diff --git a/gcc/ada/mdll-fil.adb b/gcc/ada/mdll-fil.adb index 73de7e0981e..11f56f37653 100644 --- a/gcc/ada/mdll-fil.adb +++ b/gcc/ada/mdll-fil.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- Simple services used by GNATDLL to deal with Filename extension. +-- Simple services used by GNATDLL to deal with Filename extension with Ada.Strings.Fixed; diff --git a/gcc/ada/mdll-fil.ads b/gcc/ada/mdll-fil.ads index ed8c106c4f2..15c0678399d 100644 --- a/gcc/ada/mdll-fil.ads +++ b/gcc/ada/mdll-fil.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ package MDLL.Fil is -- Return extension of Filename function Is_Ali (Filename : String) return Boolean; - -- Test if Filename is an Ada library file (.ali). + -- Test if Filename is an Ada library file (.ali) function Is_Obj (Filename : String) return Boolean; -- Test if Filename is an object file (.o or .obj) diff --git a/gcc/ada/mdll-utl.ads b/gcc/ada/mdll-utl.ads index 9074a19141f..1d1f33a827f 100644 --- a/gcc/ada/mdll-utl.ads +++ b/gcc/ada/mdll-utl.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -44,7 +44,7 @@ package MDLL.Utl is Options : Argument_List; Base_File : String := ""; Build_Lib : Boolean := False); - -- Run gcc binary. + -- Run gcc binary procedure Gnatbind (Alis : Argument_List; diff --git a/gcc/ada/mdll.adb b/gcc/ada/mdll.adb index dde515cc6b6..a9cf026083b 100644 --- a/gcc/ada/mdll.adb +++ b/gcc/ada/mdll.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -154,18 +154,20 @@ package body MDLL is -- 5) Build the dynamic library declare - Params : OS_Lib.Argument_List := - Adr_Opt'Unchecked_Access & All_Options; + Params : constant OS_Lib.Argument_List := + Map_Opt'Unchecked_Access & + Adr_Opt'Unchecked_Access & All_Options; + First_Param : Positive := Params'First + 1; begin if Map_File then - Params := Map_Opt'Unchecked_Access & Params; + First_Param := Params'First; end if; Utl.Gcc (Output_File => Dll_File, Files => Objects_Exp_File, - Options => Params, + Options => Params (First_Param .. Params'Last), Build_Lib => True); end; @@ -252,20 +254,25 @@ package body MDLL is Utl.Gnatbind (L_Afiles, Options & Bargs_Options); declare - Params : OS_Lib.Argument_List := - Out_Opt'Unchecked_Access & - Dll_File'Unchecked_Access & - Lib_Opt'Unchecked_Access & - Exp_File'Unchecked_Access & - Adr_Opt'Unchecked_Access & - Ofiles & - All_Options; + Params : constant OS_Lib.Argument_List := + Map_Opt'Unchecked_Access & + Out_Opt'Unchecked_Access & + Dll_File'Unchecked_Access & + Lib_Opt'Unchecked_Access & + Exp_File'Unchecked_Access & + Adr_Opt'Unchecked_Access & + Ofiles & + All_Options; + First_Param : Positive := Params'First + 1; + begin if Map_File then - Params := Map_Opt'Unchecked_Access & Params; + First_Param := Params'First; end if; - Utl.Gnatlink (L_Afiles (L_Afiles'Last).all, Params); + Utl.Gnatlink + (L_Afiles (L_Afiles'Last).all, + Params (First_Param .. Params'Last)); end; OS_Lib.Delete_File (Exp_File, Success); diff --git a/gcc/ada/memroot.adb b/gcc/ada/memroot.adb index fa4819cbe83..cdd4feb0009 100644 --- a/gcc/ada/memroot.adb +++ b/gcc/ada/memroot.adb @@ -27,7 +27,6 @@ with GNAT.Table; with GNAT.HTable; use GNAT.HTable; with Ada.Text_IO; use Ada.Text_IO; -with System.Storage_Elements; use System.Storage_Elements; package body Memroot is diff --git a/gcc/ada/memroot.ads b/gcc/ada/memroot.ads index 747ccac8e29..abddc135239 100644 --- a/gcc/ada/memroot.ads +++ b/gcc/ada/memroot.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 1997-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -39,7 +39,7 @@ with System.Storage_Elements; use System.Storage_Elements; package Memroot is - -- Simple abstract type for names. A name is a sequence of letters. + -- Simple abstract type for names. A name is a sequence of letters type Name_Id is new Natural; No_Name_Id : constant Name_Id := 0; diff --git a/gcc/ada/memtrack.adb b/gcc/ada/memtrack.adb index 38649e6fc76..ce613950ba9 100644 --- a/gcc/ada/memtrack.adb +++ b/gcc/ada/memtrack.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -53,7 +53,7 @@ -- gnatmem -i gmem.out program --- See gnatmem section in the GNAT User's Guide for more details. +-- See gnatmem section in the GNAT User's Guide for more details -- NOTE: This capability is currently supported on the following targets: @@ -120,13 +120,13 @@ package body System.Memory is pragma Import (C, fclose); procedure Finalize; - -- Replace the default __gnat_finalize to properly close the log file. pragma Export (C, Finalize, "__gnat_finalize"); + -- Replace the default __gnat_finalize to properly close the log file - Address_Size : constant := System.Address'Max_Size_In_Storage_Elements; + Address_Size : constant := System.Address'Max_Size_In_Storage_Elements; -- Size in bytes of a pointer - Max_Call_Stack : constant := 200; + Max_Call_Stack : constant := 200; -- Maximum number of frames supported Tracebk : aliased array (0 .. Max_Call_Stack) of Traceback_Entry; @@ -137,7 +137,7 @@ package body System.Memory is -- ??? What about Ada.Command_Line.Command_Name & ".out" instead of static -- gmem.out - Gmemfile : File_Ptr; + Gmemfile : File_Ptr; -- Global C file pointer to the allocation log procedure Gmem_Initialize; diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c index 819e27572a9..0971808712c 100644 --- a/gcc/ada/misc.c +++ b/gcc/ada/misc.c @@ -364,12 +364,23 @@ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED) static void internal_error_function (const char *msgid, va_list *ap) { - char buffer[1000]; /* Assume this is big enough. */ + text_info tinfo; + char *buffer; char *p; String_Template temp; Fat_Pointer fp; - vsprintf (buffer, msgid, *ap); + /* Reset the pretty-printer. */ + pp_clear_output_area (global_dc->printer); + + /* Format the message into the pretty-printer. */ + tinfo.format_spec = msgid; + tinfo.args_ptr = ap; + tinfo.err_no = errno; + pp_format_verbatim (global_dc->printer, &tinfo); + + /* Extract a (writable) pointer to the formatted text. */ + buffer = (char*) pp_formatted_text (global_dc->printer); /* Go up to the first newline. */ for (p = buffer; *p; p++) @@ -379,8 +390,10 @@ internal_error_function (const char *msgid, va_list *ap) break; } - temp.Low_Bound = 1, temp.High_Bound = strlen (buffer); - fp.Array = buffer, fp.Bounds = &temp; + temp.Low_Bound = 1; + temp.High_Bound = p - buffer; + fp.Bounds = &temp; + fp.Array = buffer; Current_Error_Node = error_gnat_node; Compiler_Abort (fp, -1); diff --git a/gcc/ada/mlib-fil.adb b/gcc/ada/mlib-fil.adb index e6359b3ba52..3144451a9de 100644 --- a/gcc/ada/mlib-fil.adb +++ b/gcc/ada/mlib-fil.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/mlib-fil.ads b/gcc/ada/mlib-fil.ads index f72587bf6e5..44460ca0d9c 100644 --- a/gcc/ada/mlib-fil.ads +++ b/gcc/ada/mlib-fil.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,10 +32,10 @@ package MLib.Fil is (Filename : String; New_Ext : String := "") return String; - -- Return Filename with the extension change to New_Ext. + -- Return Filename with the extension change to New_Ext function Get_Ext (Filename : String) return String; - -- Return extension of filename. + -- Return extension of filename function Is_Archive (Filename : String) return Boolean; -- Test if filename is an archive diff --git a/gcc/ada/mlib-prj.adb b/gcc/ada/mlib-prj.adb index 2a2d858e5d1..f6e65be16f4 100644 --- a/gcc/ada/mlib-prj.adb +++ b/gcc/ada/mlib-prj.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -139,7 +139,7 @@ package body MLib.Prj is Table_Initial => 50, Table_Increment => 100); - -- List of options set in the command line. + -- List of options set in the command line Options : Argument_List_Access; @@ -182,7 +182,7 @@ package body MLib.Prj is Hash => Hash, Equal => "="); - -- The projects imported directly or indirectly. + -- The projects imported directly or indirectly package Processed_Projects is new GNAT.HTable.Simple_HTable (Header_Num => Header_Num, @@ -192,7 +192,7 @@ package body MLib.Prj is Hash => Hash, Equal => "="); - -- The library projects imported directly or indirectly. + -- The library projects imported directly or indirectly package Library_Projs is new Table.Table ( Table_Component_Type => Project_Id, @@ -205,22 +205,18 @@ package body MLib.Prj is type Build_Mode_State is (None, Static, Dynamic, Relocatable); procedure Add_Argument (S : String); - -- Add one argument to the array Arguments. - -- If Arguments is full, double its size. + -- Add one argument to Arguments array, if array is full, double its size function ALI_File_Name (Source : String) return String; - -- Return the ALI file name corresponding to a source. + -- Return the ALI file name corresponding to a source procedure Check (Filename : String); - -- Check if filename is a regular file. Fail if it is not. + -- Check if filename is a regular file. Fail if it is not procedure Check_Context; -- Check each object files in table Object_Files -- Fail if any of them is not a regular file - procedure Clean (Directory : Name_Id); - -- Attempt to delete all files in Directory, but not subdirectories - procedure Copy_Interface_Sources (For_Project : Project_Id; In_Tree : Project_Tree_Ref; @@ -244,6 +240,12 @@ package body MLib.Prj is -- Indicate if Stand-Alone Libraries are automatically initialized using -- the constructor mechanism. + function Ultimate_Extension_Of + (Project : Project_Id; + In_Tree : Project_Tree_Ref) return Project_Id; + -- Returns the Project_Id of project Project. Returns No_Project + -- if Project is No_Project. + ------------------ -- Add_Argument -- ------------------ @@ -360,9 +362,6 @@ package body MLib.Prj is -- If null, Path Option is not supported. -- Not a constant so that it can be deallocated. - Copy_Dir : Name_Id; - -- Directory where to copy ALI files and possibly interface sources - First_ALI : Name_Id := No_Name; -- Store the ALI file name of a source of the library (the first found) @@ -1395,7 +1394,7 @@ package body MLib.Prj is declare DLL_Name : aliased String := - Lib_Dirpath.all & "/lib" & + Lib_Dirpath.all & '/' & DLL_Prefix & Lib_Filename.all & "." & DLL_Ext; Archive_Name : aliased String := @@ -1477,14 +1476,120 @@ package body MLib.Prj is end; end if; - -- Clean the library directory, if it is also the directory where - -- the ALI files are copied, either because there is no interface - -- copy directory or because the interface copy directory is the - -- same as the library directory. + declare + Current_Dir : constant String := Get_Current_Dir; + Dir : Dir_Type; + + Name : String (1 .. 200); + Last : Natural; + + Disregard : Boolean; + + DLL_Name : aliased constant String := + Lib_Filename.all & "." & DLL_Ext; + + Archive_Name : aliased constant String := + Lib_Filename.all & "." & Archive_Ext; + + Delete : Boolean := False; + + begin + -- Clean the library directory: remove any file with the name of + -- the library file and any ALI file of a source of the project. + + begin + Get_Name_String + (In_Tree.Projects.Table (For_Project).Library_Dir); + Change_Dir (Name_Buffer (1 .. Name_Len)); + + exception + when others => + Com.Fail + ("unable to access library directory """, + Name_Buffer (1 .. Name_Len), + """"); + end; + + Open (Dir, "."); + + loop + Read (Dir, Name, Last); + exit when Last = 0; + + if Is_Regular_File (Name (1 .. Last)) then + Canonical_Case_File_Name (Name (1 .. Last)); + Delete := False; + + if (The_Build_Mode = Static and then + Name (1 .. Last) = Archive_Name) + or else + ((The_Build_Mode = Dynamic or else + The_Build_Mode = Relocatable) + and then + Name (1 .. Last) = DLL_Name) + then + Delete := True; + + elsif Last > 4 and then Name (Last - 3 .. Last) = ".ali" then + declare + Unit : Unit_Data; + begin + -- Compare with ALI file names of the project + + for Index in 1 .. Unit_Table.Last (In_Tree.Units) loop + Unit := In_Tree.Units.Table (Index); + + if Unit.File_Names (Body_Part).Project /= + No_Project + then + if Ultimate_Extension_Of + (Unit.File_Names (Body_Part).Project, In_Tree) + = For_Project + then + Get_Name_String + (Unit.File_Names (Body_Part).Name); + Name_Len := Name_Len - + File_Extension + (Name (1 .. Name_Len))'Length; + if Name_Buffer (1 .. Name_Len) = + Name (1 .. Last - 4) + then + Delete := True; + exit; + end if; + end if; + + elsif Ultimate_Extension_Of + (Unit.File_Names (Specification).Project, In_Tree) + = For_Project + then + Get_Name_String + (Unit.File_Names (Specification).Name); + Name_Len := Name_Len - + File_Extension (Name (1 .. Name_Len))'Length; + + if Name_Buffer (1 .. Name_Len) = + Name (1 .. Last - 4) + then + Delete := True; + exit; + end if; + end if; + end loop; + end; + end if; + + if Delete then + Set_Writable (Name (1 .. Last)); + Delete_File (Name (1 .. Last), Disregard); + end if; + end if; + end loop; - Copy_Dir := - In_Tree.Projects.Table (For_Project).Library_Dir; - Clean (Copy_Dir); + Close (Dir); + + Change_Dir (Current_Dir); + end; -- Call procedure to build the library, depending on the build mode @@ -1516,7 +1621,7 @@ package body MLib.Prj is end case; -- We need to copy the ALI files from the object directory to - -- the library directory, so that the linker find them there, + -- the library ALI directory, so that the linker find them there, -- and does not need to look in the object directory where it -- would also find the object files; and we don't want that: -- we want the linker to use the library. @@ -1526,7 +1631,7 @@ package body MLib.Prj is Copy_ALI_Files (Files => Ali_Files.all, - To => Copy_Dir, + To => In_Tree.Projects.Table (For_Project).Library_ALI_Dir, Interfaces => Arguments (1 .. Argument_Number)); -- Copy interface sources if Library_Src_Dir specified @@ -1535,23 +1640,89 @@ package body MLib.Prj is and then In_Tree.Projects.Table (For_Project).Library_Src_Dir /= No_Name then - -- Clean the interface copy directory, if it is not also the - -- library directory. If it is also the library directory, it - -- has already been cleaned before generation of the library. + -- Clean the interface copy directory: remove any source that + -- could be a source of the project. - if In_Tree.Projects.Table - (For_Project).Library_Src_Dir /= Copy_Dir - then - Copy_Dir := In_Tree.Projects.Table - (For_Project).Library_Src_Dir; - Clean (Copy_Dir); - end if; + begin + Get_Name_String + (In_Tree.Projects.Table (For_Project).Library_Src_Dir); + Change_Dir (Name_Buffer (1 .. Name_Len)); + + exception + when others => + Com.Fail + ("unable to access library source copy directory """, + Name_Buffer (1 .. Name_Len), + """"); + end; + + declare + Dir : Dir_Type; + Delete : Boolean := False; + Unit : Unit_Data; + + Name : String (1 .. 200); + Last : Natural; + + Disregard : Boolean; + + begin + Open (Dir, "."); + + loop + Read (Dir, Name, Last); + exit when Last = 0; + + if Is_Regular_File (Name (1 .. Last)) then + Canonical_Case_File_Name (Name (1 .. Last)); + Delete := False; + + -- Compare with source file names of the project + + for Index in 1 .. Unit_Table.Last (In_Tree.Units) loop + Unit := In_Tree.Units.Table (Index); + + if Ultimate_Extension_Of + (Unit.File_Names (Body_Part).Project, In_Tree) = + For_Project + and then + Get_Name_String + (Unit.File_Names (Body_Part).Name) = + Name (1 .. Last) + then + Delete := True; + exit; + end if; + + if Ultimate_Extension_Of + (Unit.File_Names (Specification).Project, In_Tree) = + For_Project + and then + Get_Name_String + (Unit.File_Names (Specification).Name) = + Name (1 .. Last) + then + Delete := True; + exit; + end if; + end loop; + end if; + + if Delete then + Set_Writable (Name (1 .. Last)); + Delete_File (Name (1 .. Last), Disregard); + end if; + end loop; + + Close (Dir); + end; Copy_Interface_Sources (For_Project => For_Project, In_Tree => In_Tree, Interfaces => Arguments (1 .. Argument_Number), - To_Dir => Copy_Dir); + To_Dir => In_Tree.Projects.Table + (For_Project).Library_Src_Dir); end if; end if; @@ -1591,130 +1762,84 @@ package body MLib.Prj is procedure Check_Library (For_Project : Project_Id; In_Tree : Project_Tree_Ref) is - Data : constant Project_Data := - In_Tree.Projects.Table (For_Project); + Data : constant Project_Data := + In_Tree.Projects.Table (For_Project); + Lib_TS : Time_Stamp_Type; + Current : constant Dir_Name_Str := Get_Current_Dir; begin -- No need to build the library if there is no object directory, -- hence no object files to build the library. - if Data.Library - and then not Data.Need_To_Build_Lib - and then Data.Object_Directory /= No_Name - then + if Data.Library then declare - Current : constant Dir_Name_Str := Get_Current_Dir; Lib_Name : constant Name_Id := - Library_File_Name_For (For_Project, In_Tree); - Lib_TS : Time_Stamp_Type; - Obj_TS : Time_Stamp_Type; - - Object_Dir : Dir_Type; - + Library_File_Name_For (For_Project, In_Tree); begin - if Hostparm.OpenVMS then - B_Start (B_Start'Last) := '$'; - end if; - Change_Dir (Get_Name_String (Data.Library_Dir)); - Lib_TS := File_Stamp (Lib_Name); + In_Tree.Projects.Table (For_Project).Library_TS := Lib_TS; + end; - -- If the library file does not exist, then the time stamp will - -- be Empty_Time_Stamp, earlier than any other time stamp. - - Change_Dir (Get_Name_String (Data.Object_Directory)); - Open (Dir => Object_Dir, Dir_Name => "."); - - -- For all entries in the object directory - - loop - Read (Object_Dir, Name_Buffer, Name_Len); - exit when Name_Len = 0; - - -- Check if it is an object file, but ignore any binder - -- generated file. - - if Is_Obj (Name_Buffer (1 .. Name_Len)) - and then Name_Buffer (1 .. B_Start'Length) /= B_Start - then - -- Get the object file time stamp - - Obj_TS := File_Stamp (Name_Find); - - -- If library file time stamp is earlier, set - -- Need_To_Build_Lib and return. String comparaison is used, - -- otherwise time stamps may be too close and the - -- comparaison would return True, which would trigger - -- an unnecessary rebuild of the library. - - if String (Lib_TS) < String (Obj_TS) then - - -- Library must be rebuilt + if not Data.Externally_Built + and then not Data.Need_To_Build_Lib + and then Data.Object_Directory /= No_Name + then + declare + Obj_TS : Time_Stamp_Type; + Object_Dir : Dir_Type; - In_Tree.Projects.Table - (For_Project).Need_To_Build_Lib := True; - exit; - end if; + begin + if Hostparm.OpenVMS then + B_Start (B_Start'Last) := '$'; end if; - end loop; - Change_Dir (Current); - end; - end if; - end Check_Library; + -- If the library file does not exist, then the time stamp will + -- be Empty_Time_Stamp, earlier than any other time stamp. - ----------- - -- Clean -- - ----------- - - procedure Clean (Directory : Name_Id) is - Current : constant Dir_Name_Str := Get_Current_Dir; - - Dir : Dir_Type; + Change_Dir (Get_Name_String (Data.Object_Directory)); + Open (Dir => Object_Dir, Dir_Name => "."); - Name : String (1 .. 200); - Last : Natural; + -- For all entries in the object directory - Disregard : Boolean; + loop + Read (Object_Dir, Name_Buffer, Name_Len); + exit when Name_Len = 0; - begin - Get_Name_String (Directory); + -- Check if it is an object file, but ignore any binder + -- generated file. - -- Change the working directory to the directory to clean + if Is_Obj (Name_Buffer (1 .. Name_Len)) + and then Name_Buffer (1 .. B_Start'Length) /= B_Start + then + -- Get the object file time stamp - begin - Change_Dir (Name_Buffer (1 .. Name_Len)); + Obj_TS := File_Stamp (Name_Find); - exception - when others => - Com.Fail - ("unable to access directory """, - Name_Buffer (1 .. Name_Len), - """"); - end; + -- If library file time stamp is earlier, set + -- Need_To_Build_Lib and return. String comparaison is + -- used, otherwise time stamps may be too close and the + -- comparaison would return True, which would trigger + -- an unnecessary rebuild of the library. - Open (Dir, "."); + if String (Lib_TS) < String (Obj_TS) then - -- For each regular file in the directory, make it writable and - -- delete the file. + -- Library must be rebuilt - loop - Read (Dir, Name, Last); - exit when Last = 0; + In_Tree.Projects.Table + (For_Project).Need_To_Build_Lib := True; + exit; + end if; + end if; + end loop; - if Is_Regular_File (Name (1 .. Last)) then - Set_Writable (Name (1 .. Last)); - Delete_File (Name (1 .. Last), Disregard); + Close (Object_Dir); + end; end if; - end loop; - - Close (Dir); - -- Restore the initial working directory - - Change_Dir (Current); - end Clean; + Change_Dir (Current); + end if; + end Check_Library; ---------------------------- -- Copy_Interface_Sources -- @@ -1749,8 +1874,7 @@ package body MLib.Prj is function Is_Same_Or_Extension (Extending : Project_Id; - Extended : Project_Id) - return Boolean; + Extended : Project_Id) return Boolean; -- Return True if project Extending is equal to or extends project -- Extended. @@ -1793,8 +1917,7 @@ package body MLib.Prj is function Is_Same_Or_Extension (Extending : Project_Id; - Extended : Project_Id) - return Boolean + Extended : Project_Id) return Boolean is Ext : Project_Id := Extending; @@ -2075,4 +2198,27 @@ package body MLib.Prj is return C_SALs_Init_Using_Constructors /= 0; end SALs_Use_Constructors; + --------------------------- + -- Ultimate_Extension_Of -- + --------------------------- + + function Ultimate_Extension_Of + (Project : Project_Id; + In_Tree : Project_Tree_Ref) return Project_Id + is + Result : Project_Id := Project; + Data : Project_Data; + + begin + if Project /= No_Project then + loop + Data := In_Tree.Projects.Table (Result); + exit when Data.Extended_By = No_Project; + Result := Data.Extended_By; + end loop; + end if; + + return Result; + end Ultimate_Extension_Of; + end MLib.Prj; diff --git a/gcc/ada/mlib-prj.ads b/gcc/ada/mlib-prj.ads index 8d5383cdcea..d1c7d8cabc2 100644 --- a/gcc/ada/mlib-prj.ads +++ b/gcc/ada/mlib-prj.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/mlib-tgt-aix.adb b/gcc/ada/mlib-tgt-aix.adb index 80b3a4b7d64..86fd3934ffa 100644 --- a/gcc/ada/mlib-tgt-aix.adb +++ b/gcc/ada/mlib-tgt-aix.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2003-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,15 +28,13 @@ -- This package provides a set of target dependent routines to build -- static, dynamic or relocatable libraries. --- This is the AIX version of the body. +-- This is the AIX version of the body with Ada.Strings.Fixed; use Ada.Strings.Fixed; -with GNAT.OS_Lib; use GNAT.OS_Lib; with MLib.Fil; with MLib.Utl; with Namet; use Namet; -with Osint; use Osint; with Opt; with Output; use Output; with Prj.Com; @@ -152,7 +150,7 @@ package body MLib.Tgt is Write_Line (Lib_File); end if; - -- Look for -lgnarl in Options. If found, set the thread options. + -- Look for -lgnarl in Options. If found, set the thread options for J in Options'Range loop if Options (J).all = "-lgnarl" then @@ -219,6 +217,15 @@ package body MLib.Tgt is return "a"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-darwin.adb b/gcc/ada/mlib-tgt-darwin.adb index a152ed322a8..651f9838d39 100644 --- a/gcc/ada/mlib-tgt-darwin.adb +++ b/gcc/ada/mlib-tgt-darwin.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,7 +28,7 @@ -- This package provides a set of target dependent routines to build -- static, dynamic and shared libraries. --- This is the Darwin version of the body. +-- This is the Darwin version of the body with MLib.Fil; with MLib.Utl; @@ -199,6 +199,15 @@ package body MLib.Tgt is return "dylib"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-hpux.adb b/gcc/ada/mlib-tgt-hpux.adb index 62172c79eae..85e756ce8df 100644 --- a/gcc/ada/mlib-tgt-hpux.adb +++ b/gcc/ada/mlib-tgt-hpux.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2003-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,7 +28,7 @@ -- This package provides a set of target dependent routines to build -- libraries (static only on HP-UX). --- This is the HP-UX version of the body. +-- This is the HP-UX version of the body with MLib.Fil; with MLib.Utl; @@ -197,6 +197,15 @@ package body MLib.Tgt is return "sl"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-irix.adb b/gcc/ada/mlib-tgt-irix.adb index 7a77bff7493..d7749a9cd97 100644 --- a/gcc/ada/mlib-tgt-irix.adb +++ b/gcc/ada/mlib-tgt-irix.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2003-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,7 +28,7 @@ -- This package provides a set of target dependent routines to build -- static, dynamic and shared libraries. --- This is the IRIX version of the body. +-- This is the IRIX version of the body with MLib.Fil; with MLib.Utl; @@ -235,6 +235,15 @@ package body MLib.Tgt is return "so"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-linux.adb b/gcc/ada/mlib-tgt-linux.adb index 70fde48500c..ca205b68f65 100644 --- a/gcc/ada/mlib-tgt-linux.adb +++ b/gcc/ada/mlib-tgt-linux.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,7 +28,7 @@ -- This package provides a set of target dependent routines to build -- static, dynamic and shared libraries. --- This is the GNU/Linux version of the body. +-- This is the GNU/Linux version of the body with MLib.Fil; with MLib.Utl; @@ -194,6 +194,15 @@ package body MLib.Tgt is return "so"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-lynxos.adb b/gcc/ada/mlib-tgt-lynxos.adb index f1cab5f78ff..98fac4359bd 100644 --- a/gcc/ada/mlib-tgt-lynxos.adb +++ b/gcc/ada/mlib-tgt-lynxos.adb @@ -125,6 +125,15 @@ package body MLib.Tgt is return ""; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-mingw.adb b/gcc/ada/mlib-tgt-mingw.adb index 98a5de88012..f350d2e0153 100644 --- a/gcc/ada/mlib-tgt-mingw.adb +++ b/gcc/ada/mlib-tgt-mingw.adb @@ -31,8 +31,6 @@ -- This is the Windows version of the body. Works only with GCC versions -- supporting the "-shared" option. -with GNAT.OS_Lib; use GNAT.OS_Lib; - with Namet; use Namet; with Opt; with Output; use Output; @@ -148,6 +146,15 @@ package body MLib.Tgt is return "dll"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return ""; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-solaris.adb b/gcc/ada/mlib-tgt-solaris.adb index 40d918edd13..c97d0b15f06 100644 --- a/gcc/ada/mlib-tgt-solaris.adb +++ b/gcc/ada/mlib-tgt-solaris.adb @@ -191,6 +191,15 @@ package body MLib.Tgt is return "so"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-tru64.adb b/gcc/ada/mlib-tgt-tru64.adb index b6d954902df..33ed98b56ae 100644 --- a/gcc/ada/mlib-tgt-tru64.adb +++ b/gcc/ada/mlib-tgt-tru64.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,7 +28,7 @@ -- This package provides a set of target dependent routines to build -- static, dynamic and shared libraries. --- This is the True64 version of the body. +-- This is the True64 version of the body with MLib.Fil; with MLib.Utl; @@ -201,6 +201,15 @@ package body MLib.Tgt is return "so"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-vms-alpha.adb b/gcc/ada/mlib-tgt-vms-alpha.adb index 8c414b0a9e6..6dbc09e5e35 100644 --- a/gcc/ada/mlib-tgt-vms-alpha.adb +++ b/gcc/ada/mlib-tgt-vms-alpha.adb @@ -30,7 +30,6 @@ with Ada.Characters.Handling; use Ada.Characters.Handling; with GNAT.Directory_Operations; use GNAT.Directory_Operations; -with GNAT.OS_Lib; use GNAT.OS_Lib; with MLib.Fil; with MLib.Utl; @@ -540,6 +539,15 @@ package body MLib.Tgt is return "exe"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-vms-ia64.adb b/gcc/ada/mlib-tgt-vms-ia64.adb index 35c6c155fb9..f72b4b93e04 100644 --- a/gcc/ada/mlib-tgt-vms-ia64.adb +++ b/gcc/ada/mlib-tgt-vms-ia64.adb @@ -30,7 +30,6 @@ with Ada.Characters.Handling; use Ada.Characters.Handling; with GNAT.Directory_Operations; use GNAT.Directory_Operations; -with GNAT.OS_Lib; use GNAT.OS_Lib; with MLib.Fil; with MLib.Utl; @@ -573,6 +572,15 @@ package body MLib.Tgt is return "exe"; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt-vxworks.adb b/gcc/ada/mlib-tgt-vxworks.adb index 659349a37a6..69ed03b372c 100644 --- a/gcc/ada/mlib-tgt-vxworks.adb +++ b/gcc/ada/mlib-tgt-vxworks.adb @@ -134,6 +134,15 @@ package body MLib.Tgt is return ""; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt.adb b/gcc/ada/mlib-tgt.adb index adccc606840..c1bca97ef2b 100644 --- a/gcc/ada/mlib-tgt.adb +++ b/gcc/ada/mlib-tgt.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -120,6 +120,15 @@ package body MLib.Tgt is return ""; end DLL_Ext; + ---------------- + -- DLL_Prefix -- + ---------------- + + function DLL_Prefix return String is + begin + return "lib"; + end DLL_Prefix; + -------------------- -- Dynamic_Option -- -------------------- diff --git a/gcc/ada/mlib-tgt.ads b/gcc/ada/mlib-tgt.ads index 4ae46ce62d6..5bc175e94a7 100644 --- a/gcc/ada/mlib-tgt.ads +++ b/gcc/ada/mlib-tgt.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -82,6 +82,10 @@ package MLib.Tgt is -- System dependent object extension, without leadien dot. -- On Unix, returns "o". + function DLL_Prefix return String; + -- System dependent dynamic library prefix. + -- On Windows, returns "". On other platforms, returns "lib". + function DLL_Ext return String; -- System dependent dynamic library extension, without leading dot. -- On Windows, returns "dll". On Unix, usually returns "so", but not diff --git a/gcc/ada/mlib-utl.adb b/gcc/ada/mlib-utl.adb index 794d2861d58..f6512b494bf 100644 --- a/gcc/ada/mlib-utl.adb +++ b/gcc/ada/mlib-utl.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2004, Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/mlib-utl.ads b/gcc/ada/mlib-utl.ads index bbc895d7e69..bb38c8018b2 100644 --- a/gcc/ada/mlib-utl.ads +++ b/gcc/ada/mlib-utl.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005, Ada Core Technologies, Inc -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/mlib.adb b/gcc/ada/mlib.adb index 338a304ab12..549578a25b2 100644 --- a/gcc/ada/mlib.adb +++ b/gcc/ada/mlib.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005, Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -34,6 +34,8 @@ with Namet; use Namet; with MLib.Utl; use MLib.Utl; +with Prj.Com; + with GNAT.Directory_Operations; use GNAT.Directory_Operations; package body MLib is @@ -67,24 +69,24 @@ package body MLib is procedure Check_Library_Name (Name : String) is begin if Name'Length = 0 then - Fail ("library name cannot be empty"); + Prj.Com.Fail ("library name cannot be empty"); end if; if Name'Length > Max_Characters_In_Library_Name then - Fail ("illegal library name """, Name, """: too long"); + Prj.Com.Fail ("illegal library name """, Name, """: too long"); end if; if not Is_Letter (Name (Name'First)) then - Fail ("illegal library name """, - Name, - """: should start with a letter"); + Prj.Com.Fail ("illegal library name """, + Name, + """: should start with a letter"); end if; for Index in Name'Range loop if not Is_Alphanumeric (Name (Index)) then - Fail ("illegal library name """, - Name, - """: should include only letters and digits"); + Prj.Com.Fail ("illegal library name """, + Name, + """: should include only letters and digits"); end if; end loop; end Check_Library_Name; @@ -273,7 +275,7 @@ package body MLib is end; if not Success then - Fail ("could not copy ALI files to library dir"); + Prj.Com.Fail ("could not copy ALI files to library dir"); end if; end loop; end if; diff --git a/gcc/ada/mlib.ads b/gcc/ada/mlib.ads index d93a8140785..c993d8e9539 100644 --- a/gcc/ada/mlib.ads +++ b/gcc/ada/mlib.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2004, Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/namet.h b/gcc/ada/namet.h index 15bf1d6a564..59be47af6a7 100644 --- a/gcc/ada/namet.h +++ b/gcc/ada/namet.h @@ -6,7 +6,7 @@ * * * C Header File * * * - * Copyright (C) 1992-2003 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005 Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -111,15 +111,20 @@ extern Boolean Is_Non_Ada_Error (Entity_Id); /* Here are some functions in sinput.adb we call from a-trans.c. */ typedef Nat Source_File_Index; typedef Int Logical_Line_Number; +typedef Int Column_Number; #define Debug_Source_Name sinput__debug_source_name #define Full_Debug_Name sinput__full_debug_name #define Reference_Name sinput__reference_name #define Get_Source_File_Index sinput__get_source_file_index #define Get_Logical_Line_Number sinput__get_logical_line_number +#define Get_Column_Number sinput__get_column_number +#define Instantiation sinput__instantiation extern File_Name_Type Debug_Source_Name (Source_File_Index); extern File_Name_Type Full_Debug_Name (Source_File_Index); extern File_Name_Type Reference_Name (Source_File_Index); extern Source_File_Index Get_Source_File_Index (Source_Ptr); extern Logical_Line_Number Get_Logical_Line_Number (Source_Ptr); +extern Column_Number Get_Column_Number (Source_Ptr); +extern Source_Ptr Instantiation (Source_File_Index); diff --git a/gcc/ada/nlists.adb b/gcc/ada/nlists.adb index 577b668870d..5d4ef38e83f 100644 --- a/gcc/ada/nlists.adb +++ b/gcc/ada/nlists.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/nlists.ads b/gcc/ada/nlists.ads index 25fe4334f1b..533b5a8be8c 100644 --- a/gcc/ada/nlists.ads +++ b/gcc/ada/nlists.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index d0b1d431bfa..69cd038e124 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -34,7 +34,7 @@ -- This package contains global flags set by the initialization routine from -- the command line and referenced throughout the compiler, the binder, or -- other GNAT tools. The comments indicate which options are used by which --- programs (GNAT, GNATBIND, GNATMAKE, etc). +-- programs (GNAT, GNATBIND, GNATLINK, GNATMAKE, GPRMAKE, etc). with Gnatvsn; use Gnatvsn; with Hostparm; use Hostparm; @@ -61,8 +61,12 @@ package Opt is -- Set True if binder file to be generated in Ada rather than C type Ada_Version_Type is (Ada_83, Ada_95, Ada_05); + pragma Warnings (Off, Ada_Version_Type); -- Versions of Ada for Ada_Version below. Note that these are ordered, -- so that tests like Ada_Version >= Ada_95 are legitimate and useful. + -- The Warnings_Off pragma stops warnings for Ada_Version >= Ada_05, + -- which we want to allow, so that things work OK when Ada_15 is added! + -- This warning is now removed, so this pragma can be removed some time??? Ada_Version_Default : Ada_Version_Type := Ada_95; -- GNAT @@ -148,7 +152,7 @@ package Opt is -- it ON. It is set ON when Tree_Output is set ON, it can also be set ON -- from the code of GNSA-based tool (a client may need to set ON the -- Back_Annotate_Rep_Info flag in this case. At the moment this does not - -- make very much sense, because GNSA can not do back annotation). + -- make very much sense, because GNSA cannot do back annotation). Back_Annotate_Rep_Info : Boolean := False; -- GNAT @@ -173,7 +177,7 @@ package Opt is -- building a library. May be set to True by Gnatbind.Scan_Bind_Arg. Bind_Only : Boolean := False; - -- GNATMAKE + -- GNATMAKE, GPRMAKE -- Set to True to skip compile and link steps -- (except when Compile_Only and/or Link_Only are True). @@ -218,7 +222,7 @@ package Opt is -- directly modified by gnatmake, to affect the shared binder routines. Check_Switches : Boolean := False; - -- GNATMAKE + -- GNATMAKE, GPRMAKE -- Set to True to check compiler options during the make process Check_Unreferenced : Boolean := False; @@ -242,9 +246,9 @@ package Opt is -- in the output file. Compile_Only : Boolean := False; - -- GNATMAKE, GNATCLEAN - -- GNATMAKE: set to True to skip bind and link steps (except when - -- Bind_Only is True). + -- GNATMAKE, GNATCLEAN, GPRMAKE + -- GNATMAKE, GPRMAKE: set to True to skip bind and link steps (except when + -- Bind_Only is True). -- GNATCLEAN: set to True to only the files produced by the compiler are to -- be deleted, but not the library files or executable files. @@ -268,9 +272,9 @@ package Opt is -- Set to True to activate warnings on constant conditions Create_Mapping_File : Boolean := False; - -- GNATMAKE - -- Set to True (-C switch) to indicate that gnatmake will invoke - -- the compiler with a mapping file (-gnatem compiler switch). + -- GNATMAKE, GPRMAKE + -- Set to True (-C switch) to indicate that the compiler will be invoked + -- with a mapping file (-gnatem compiler switch). Debug_Pragmas_Enabled : Boolean := False; -- GNAT @@ -309,7 +313,7 @@ package Opt is -- potentially blocking operations are detected from protected actions. Display_Compilation_Progress : Boolean := False; - -- GNATMAKE + -- GNATMAKE, GPRMAKE -- Set True (-d switch) to display information on progress while compiling -- files. Internal flag to be used in conjunction with an IDE (e.g GPS). @@ -451,11 +455,11 @@ package Opt is -- (-F switch set). Force_Compilations : Boolean := False; - -- GNATMAKE + -- GNATMAKE, GPRMAKE -- Set to force recompilations even when the objects are up-to-date. Full_Path_Name_For_Brief_Errors : Boolean := False; - -- GNAT, GNATMAKE, GNATCLEAN + -- GNAT, GNATMAKE, GNATCLEAN, GPRMAKE -- When True, in Brief_Output mode, each error message line -- will start with the full path name of the source. -- When False, only the file name without directory information @@ -566,8 +570,8 @@ package Opt is -- if not. Keep_Going : Boolean := False; - -- GNATMAKE - -- When True signals gnatmake to ignore compilation errors and keep + -- GNATMAKE, GPRMAKE + -- When True signals to ignore compilation errors and keep -- processing sources until there is no more work. Keep_Temporary_Files : Boolean := False; @@ -576,7 +580,7 @@ package Opt is -- deleted. Set by switch -dn or qualifier /KEEP_TEMPORARY_FILES. Link_Only : Boolean := False; - -- GNATMAKE + -- GNATMAKE, GPRMAKE -- Set to True to skip compile and bind steps -- (except when Bind_Only is set to True). @@ -693,7 +697,7 @@ package Opt is -- Column_Number'Last during scanning of configuration pragma files. Maximum_Processes : Positive := 1; - -- GNATMAKE + -- GNATMAKE, GPRMAKE -- Maximum number of processes that should be spawned to carry out -- compilations. @@ -762,11 +766,11 @@ package Opt is -- This constant reflects the optimization level (0,1,2 for -O0,-O1,-O2) Output_File_Name_Present : Boolean := False; - -- GNATBIND, GNAT, GNATMAKE + -- GNATBIND, GNAT, GNATMAKE, GPRMAKE -- Set to True when the output C file name is given with option -o -- for GNATBIND, when the object file name is given with option -- -gnatO for GNAT or when the executable is given with option -o - -- for GNATMAKE. + -- for GNATMAKE or GPRMAKE. Output_Linker_Option_List : Boolean := False; -- GNATBIND @@ -829,10 +833,14 @@ package Opt is -- used if the policy is set in package System. Quiet_Output : Boolean := False; - -- GNATMAKE, GNATCLEAN, GPR2MAKE + -- GNATMAKE, GNATCLEAN, GPRMAKE -- Set to True if the tool should not have any output if there are no -- errors or warnings. + Replace_In_Comments : Boolean := False; + -- GNATPREP + -- Set to True if -C switch used + RTS_Lib_Path_Name : String_Ptr := null; RTS_Src_Path_Name : String_Ptr := null; -- GNAT @@ -1017,17 +1025,33 @@ package Opt is -- This flag determines if validity checking is on or off. The initial -- state is on, and the required default validity checks are active. The -- actual set of checks that is performed if Validity_Checks_On is set is - -- defined by the switches in package Sem_Val. The Validity_Checks_On flag + -- defined by the switches in package Validsw. The Validity_Checks_On flag -- is controlled by pragma Validity_Checks (On | Off), and also some -- generated compiler code (typically code that has to do with validity -- check generation) is compiled with this flag set to False. This flag is -- set to False by the -gnatp switch. Verbose_Mode : Boolean := False; - -- GNAT, GNATBIND, GNATMAKE, GNATLINK, GNATLS, GNATNAME, GNATCLEAN + -- GNAT, GNATBIND, GNATMAKE, GNATLINK, GNATLS, GNATNAME, GNATCLEAN, + -- GPRMAKE -- Set to True to get verbose mode (full error message text and location -- information sent to standard output, also header, copyright and summary) + type Verbosity_Level_Type is (None, Low, Medium, High); + Verbosity_Level : Verbosity_Level_Type := High; + -- GNATMAKE, GPRMAKE + -- Modified by gnatmake or gprmake switches -v, -vl, -vm, -vh. Indicates + -- the level of verbosity of informational messages: + -- + -- In Low Verbosity, the reasons why a source is recompiled, the name + -- of the executable and the reason it must be rebuilt is output. + -- + -- In Medium Verbosity, additional lines are output for each ALI file + -- that is checked. + -- + -- In High Verbosity, additional lines are output when the ALI file + -- is part of an Ada library, is read-only or is part of the runtime. + Warn_On_Ada_2005_Compatibility : Boolean := True; -- GNAT -- Set to True to active all warnings on Ada 2005 compatibility issues, diff --git a/gcc/ada/osint-c.adb b/gcc/ada/osint-c.adb index dfb439d965e..648a4b24e16 100644 --- a/gcc/ada/osint-c.adb +++ b/gcc/ada/osint-c.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,14 +32,13 @@ with Tree_IO; use Tree_IO; package body Osint.C is Output_Object_File_Name : String_Ptr; - -- Argument of -o compiler option, if given. This is needed to - -- verify consistency with the ALI file name. + -- Argument of -o compiler option, if given. This is needed to verify + -- consistency with the ALI file name. procedure Adjust_OS_Resource_Limits; pragma Import (C, Adjust_OS_Resource_Limits, "__gnat_adjust_os_resource_limits"); - -- Procedure to make system specific adjustments to make GNAT - -- run better. + -- Procedure to make system specific adjustments to make GNAT run better function Create_Auxiliary_File (Src : File_Name_Type; @@ -325,7 +324,7 @@ package body Osint.C is EL : constant Natural := Ext'Length; begin - -- Make sure that the object file has the expected extension. + -- Make sure that the object file has the expected extension if NL <= EL or else diff --git a/gcc/ada/osint-l.adb b/gcc/ada/osint-l.adb index 95a29491410..144fde459f6 100644 --- a/gcc/ada/osint-l.adb +++ b/gcc/ada/osint-l.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/osint-l.ads b/gcc/ada/osint-l.ads index 51aebb19840..170e2763616 100644 --- a/gcc/ada/osint-l.ads +++ b/gcc/ada/osint-l.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/osint-m.adb b/gcc/ada/osint-m.adb index 3138d6f74da..964edf33227 100644 --- a/gcc/ada/osint-m.adb +++ b/gcc/ada/osint-m.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,6 +24,17 @@ -- -- ------------------------------------------------------------------------------ +with Osint; + +pragma Elaborate_All (Osint); +-- This pragma is needed because of the call to Set_Program in the +-- elaboration of the package. We cannot rely on the static model +-- of elaboration since the compiler is routinely compiled with +-- checks off (-gnatp), and with older versions of the compiler +-- (up to and including most 5.04 wavefronts), -gnatp suppresses +-- the static elaboration check mechanisms. It could be removed +-- one day, but there really is no need to do so. + package body Osint.M is ----------------------- diff --git a/gcc/ada/osint-m.ads b/gcc/ada/osint-m.ads index 65ee1540a38..904385df257 100644 --- a/gcc/ada/osint-m.ads +++ b/gcc/ada/osint-m.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb index 8a9e81a2136..d14ad276fbe 100644 --- a/gcc/ada/osint.adb +++ b/gcc/ada/osint.adb @@ -76,7 +76,7 @@ package body Osint is function Append_Suffix_To_File_Name (Name : Name_Id; Suffix : String) return Name_Id; - -- Appends Suffix to Name and returns the new name. + -- Appends Suffix to Name and returns the new name function OS_Time_To_GNAT_Time (T : OS_Time) return Time_Stamp_Type; -- Convert OS format time to GNAT format time stamp @@ -115,7 +115,7 @@ package body Osint is -- full file name if file found, or No_File if not found. function C_String_Length (S : Address) return Integer; - -- Returns length of a C string. Returns zero for a null address. + -- Returns length of a C string. Returns zero for a null address function To_Path_String_Access (Path_Addr : Address; @@ -200,7 +200,7 @@ package body Osint is -- time stamp. File_Cache_Enabled : Boolean := False; - -- Set to true if you want the enable the file data caching mechanism. + -- Set to true if you want the enable the file data caching mechanism type File_Hash_Num is range 0 .. 1020; diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads index 108cafaea9a..fab994e76dc 100644 --- a/gcc/ada/osint.ads +++ b/gcc/ada/osint.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -90,29 +90,27 @@ package Osint is -- so that two file names compare equal if they refer to the same file. function Number_Of_Files return Int; - -- gives the total number of filenames found on the command line. + -- Gives the total number of filenames found on the command line No_Index : constant := -1; - -- Value used in Add_File to indicate that no index is specified - -- for a main. + -- Value used in Add_File to indicate no index is specified for main procedure Add_File (File_Name : String; Index : Int := No_Index); - -- Called by the subprogram processing the command line for each - -- file name found. The index, when not defaulted to No_Index - -- is the index of the subprogram in its source, zero indicating - -- that the source is not multi-unit. + -- Called by the subprogram processing the command line for each file name + -- found. The index, when not defaulted to No_Index is the index of the + -- subprogram in its source, zero indicating that the source is not + -- multi-unit. procedure Find_Program_Name; -- Put simple name of current program being run (excluding the directory -- path) in Name_Buffer, with the length in Name_Len. function Program_Name (Nam : String) return String_Access; - -- In the native compilation case, Create a string containing Nam. In - -- the cross compilation case, looks at the prefix of the current - -- program being run and prepend it to Nam. For instance if the program - -- being run is -gnatmake and Nam is "gcc", the returned value - -- will be a pointer to "-gcc". This function clobbers - -- Name_Buffer and Name_Len. + -- In the native compilation case, Create a string containing Nam. In the + -- cross compilation case, looks at the prefix of the current program being + -- run and prepend it to Nam. For instance if the program being run is + -- -gnatmake and Nam is "gcc", the returned value will be a pointer + -- to "-gcc". This function clobbers Name_Buffer and Name_Len. procedure Write_Program_Name; -- Writes name of program as invoked to the current output @@ -121,8 +119,8 @@ package Osint is procedure Fail (S1 : String; S2 : String := ""; S3 : String := ""); pragma No_Return (Fail); -- Outputs error messages S1 & S2 & S3 preceded by the name of the - -- executing program and exits with E_Fatal. The output goes to - -- standard error, except if special output is in effect (see Output). + -- executing program and exits with E_Fatal. The output goes to standard + -- error, except if special output is in effect (see Output). function Is_Directory_Separator (C : Character) return Boolean; -- Returns True if C is a directory separator @@ -133,7 +131,7 @@ package Osint is -- directory part in the name. function Is_Readonly_Library (File : File_Name_Type) return Boolean; - -- Check if this library file is a read-only file. + -- Check if this library file is a read-only file function Strip_Directory (Name : File_Name_Type) return File_Name_Type; -- Strips the prefix directory name (if any) from Name. Returns the @@ -177,11 +175,11 @@ package Osint is Prefix_Style : Boolean) return String_Access; -- Convert a host syntax directory specification (e.g. on a VMS host: -- "SYS$DEVICE:[DIR]") to canonical (Unix) syntax (e.g. "/sys$device/dir"). - -- If Prefix_Style then make it a valid file specification prefix. - -- A file specification prefix is a directory specification that - -- can be appended with a simple file specification to yield a valid - -- absolute or relative path to a file. On a conversion to Unix syntax - -- this simply means the spec has a trailing slash ("/"). + -- If Prefix_Style then make it a valid file specification prefix. A file + -- specification prefix is a directory specification that can be appended + -- with a simple file specification to yield a valid absolute or relative + -- path to a file. On a conversion to Unix syntax this simply means the + -- spec has a trailing slash ("/"). function To_Canonical_File_Spec (Host_File : String) return String_Access; @@ -204,7 +202,7 @@ package Osint is function To_Host_File_Spec (Canonical_File : String) return String_Access; - -- Convert a canonical syntax file specification to host syntax. + -- Convert a canonical syntax file specification to host syntax function Relocate_Path (Prefix : String; @@ -552,7 +550,7 @@ package Osint is private ALI_Suffix : constant String_Ptr := new String'("ali"); - -- The suffix used for the library files (also known as ALI files). + -- The suffix used for the library files (also known as ALI files) Current_Main : File_Name_Type := No_File; -- Used to save a simple file name between calls to Next_Main_Source and @@ -561,7 +559,7 @@ private -- last call to Next_Main_Source (and stored here) is to be read. Object_Suffix : constant String := Get_Object_Suffix.all; - -- The suffix used for the object files. + -- The suffix used for the object files Output_FD : File_Descriptor; -- The file descriptor for the current library info, tree or binder output @@ -609,10 +607,10 @@ private -- A check is made that this procedure is not called several times. function More_Files return Boolean; - -- Implements More_Source_Files and More_Lib_Files. + -- Implements More_Source_Files and More_Lib_Files function Next_Main_File return File_Name_Type; - -- Implements Next_Main_Source and Next_Main_Lib_File. + -- Implements Next_Main_Source and Next_Main_Lib_File function Object_File_Name (N : File_Name_Type) return File_Name_Type; -- Constructs the name of the object file corresponding to library diff --git a/gcc/ada/output.adb b/gcc/ada/output.adb index f4cec924b7e..0985743c8e3 100644 --- a/gcc/ada/output.adb +++ b/gcc/ada/output.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2003, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -63,7 +63,7 @@ package body Output is -- will be silently ignored. Next_Column : Pos range 1 .. Buffer'Length + 1 := 1; - -- Column about to be written. + -- Column about to be written ----------------------- -- Local_Subprograms -- diff --git a/gcc/ada/par-ch10.adb b/gcc/ada/par-ch10.adb index 13d0fbd1f00..bedb679081a 100644 --- a/gcc/ada/par-ch10.adb +++ b/gcc/ada/par-ch10.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -405,9 +405,7 @@ package body Ch10 is elsif Private_Sloc /= No_Location and then - Nkind (Unit (Comp_Unit_Node)) /= N_Function_Instantiation - and then - Nkind (Unit (Comp_Unit_Node)) /= N_Procedure_Instantiation + Nkind (Unit (Comp_Unit_Node)) not in N_Subprogram_Instantiation and then Nkind (Unit (Comp_Unit_Node)) /= N_Subprogram_Renaming_Declaration then @@ -529,8 +527,25 @@ package body Ch10 is or else Nkind (Unit_Node) = N_Single_Protected_Declaration then Name_Node := Defining_Identifier (Unit_Node); - else + + elsif Nkind (Unit_Node) = N_Function_Instantiation + or else Nkind (Unit_Node) = N_Function_Specification + or else Nkind (Unit_Node) = N_Generic_Function_Renaming_Declaration + or else Nkind (Unit_Node) = N_Generic_Package_Renaming_Declaration + or else Nkind (Unit_Node) = N_Generic_Procedure_Renaming_Declaration + or else Nkind (Unit_Node) = N_Package_Body + or else Nkind (Unit_Node) = N_Package_Instantiation + or else Nkind (Unit_Node) = N_Package_Renaming_Declaration + or else Nkind (Unit_Node) = N_Package_Specification + or else Nkind (Unit_Node) = N_Procedure_Instantiation + or else Nkind (Unit_Node) = N_Procedure_Specification + then Name_Node := Defining_Unit_Name (Unit_Node); + + -- Anything else is a serious error, abandon scan + + else + raise Error_Resync; end if; Set_Sloc (Comp_Unit_Node, Sloc (Name_Node)); diff --git a/gcc/ada/par-ch11.adb b/gcc/ada/par-ch11.adb index 418e9d9cdbb..1dfbfdb36f9 100644 --- a/gcc/ada/par-ch11.adb +++ b/gcc/ada/par-ch11.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb index 410ce9a1f0a..49e18de7e52 100644 --- a/gcc/ada/par-ch12.adb +++ b/gcc/ada/par-ch12.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -903,7 +903,7 @@ package body Ch12 is -- The caller has checked that the initial tokens are WITH FUNCTION or -- WITH PROCEDURE, and the initial WITH has been scanned out. - -- A null default is an Ada 2005 feature. + -- A null default is an Ada 2005 feature -- Error recovery: cannot raise Error_Resync diff --git a/gcc/ada/par-ch2.adb b/gcc/ada/par-ch2.adb index b552f811900..e2863bf332a 100644 --- a/gcc/ada/par-ch2.adb +++ b/gcc/ada/par-ch2.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb index d4e84a5da31..037b4e6439d 100644 --- a/gcc/ada/par-ch3.adb +++ b/gcc/ada/par-ch3.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -914,10 +914,13 @@ package body Ch3 is return False; else + -- Ada 2005 (AI-441): The qualifier has no semantic meaning in Ada 95 + -- (all access Parameters Are "not null" in Ada 95). + if Ada_Version < Ada_05 then Error_Msg_SP - ("null-excluding access is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); + ("null-excluding access is an Ada 2005 extension?"); + Error_Msg_SP ("\unit should be compiled with -gnat05 switch?"); end if; Scan; -- past NOT @@ -3813,11 +3816,6 @@ package body Ch3 is -- Ada 95 else - -- Ada 2005 (AI-254): The null-exclusion present is never present - -- in Ada 83 and Ada 95 - - pragma Assert (Null_Exclusion_Present = False); - Set_Null_Exclusion_Present (Def_Node, False); Set_Subtype_Mark (Def_Node, P_Subtype_Mark); No_Constraint; diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index 5d1d4edcecf..d9cc0bf21e4 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -507,7 +507,7 @@ package body Ch4 is -- (discrete_range) - -- This is a slice. This case is handled in LP_State_Init. + -- This is a slice. This case is handled in LP_State_Init -- (expression, expression, ..) diff --git a/gcc/ada/par-ch5.adb b/gcc/ada/par-ch5.adb index d84e37735bc..17c546de144 100644 --- a/gcc/ada/par-ch5.adb +++ b/gcc/ada/par-ch5.adb @@ -1671,7 +1671,7 @@ package body Ch5 is -- This function parses a block statement with DECLARE present - -- The caller has checked that the initial token is DECLARE. + -- The caller has checked that the initial token is DECLARE -- Error recovery: cannot raise Error_Resync diff --git a/gcc/ada/par-ch6.adb b/gcc/ada/par-ch6.adb index 69960071e85..72855f90e7a 100644 --- a/gcc/ada/par-ch6.adb +++ b/gcc/ada/par-ch6.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -171,7 +171,7 @@ package body Ch6 is Scope.Table (Scope.Last).Ecol := Start_Column; Scope.Table (Scope.Last).Lreq := False; - -- Ada2005: scan leading overriding indicator. + -- Ada2005: scan leading overriding indicator if Token = Tok_Not then Scan; -- past NOT diff --git a/gcc/ada/par-ch9.adb b/gcc/ada/par-ch9.adb index 57ba12402ba..0edc4449f26 100644 --- a/gcc/ada/par-ch9.adb +++ b/gcc/ada/par-ch9.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -25,8 +25,8 @@ ------------------------------------------------------------------------------ pragma Style_Checks (All_Checks); --- Turn off subprogram body ordering check. Subprograms are in order --- by RM section rather than alphabetical +-- Turn off subprogram body ordering check. Subprograms are in order by RM +-- section rather than alphabetical. separate (Par) package body Ch9 is @@ -768,7 +768,7 @@ package body Ch9 is Not_Overriding : Boolean := False; begin - -- Ada 2005 (AI-397): Scan leading overriding indicator. + -- Ada 2005 (AI-397): Scan leading overriding indicator if Token = Tok_Not then Scan; -- past NOT @@ -1357,7 +1357,7 @@ package body Ch9 is elsif Nkind (Ecall_Node) = N_Identifier or else Nkind (Ecall_Node) = N_Selected_Component then - -- Case of a call to a parameterless entry. + -- Case of a call to a parameterless entry declare C_Node : constant Node_Id := diff --git a/gcc/ada/par-endh.adb b/gcc/ada/par-endh.adb index be508c7fbe9..c58b0d2e0a7 100644 --- a/gcc/ada/par-endh.adb +++ b/gcc/ada/par-endh.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2002, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -87,7 +87,7 @@ package body Endh is -- child unit or a node with a Chars field identifying the actual label. End_Labl_Present : Boolean; - -- Indicates that the value in End_Labl was for an explicit label. + -- Indicates that the value in End_Labl was for an explicit label Syntax_OK : Boolean; -- Set True if the entry is syntactically correct diff --git a/gcc/ada/par-labl.adb b/gcc/ada/par-labl.adb index 80e6292b42b..a908c8116e3 100644 --- a/gcc/ada/par-labl.adb +++ b/gcc/ada/par-labl.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,10 +42,10 @@ procedure Labl is -- Next label node to process function Find_Enclosing_Body_Or_Block (N : Node_Id) return Node_Id; - -- Find the innermost body or block that encloses N. + -- Find the innermost body or block that encloses N function Find_Enclosing_Body (N : Node_Id) return Node_Id; - -- Find the innermost body that encloses N. + -- Find the innermost body that encloses N procedure Check_Distinct_Labels; -- Checks the rule in RM-5.1(11), which requires distinct identifiers @@ -134,7 +134,7 @@ procedure Labl is Result : Node_Id := Parent (N); begin - -- Climb up the parent chain until we find a body or block. + -- Climb up the parent chain until we find a body or block while Present (Result) and then Nkind (Result) /= N_Accept_Statement @@ -160,7 +160,7 @@ procedure Labl is Succ : Elmt_Id; function Goto_Id (Goto_Node : Node_Id) return Name_Id; - -- Find Name_Id of goto statement, which may be an expanded name. + -- Find Name_Id of goto statement, which may be an expanded name function Matches (Label_Node : Node_Id; diff --git a/gcc/ada/par-load.adb b/gcc/ada/par-load.adb index 0f5674b70d9..13c66a78be6 100644 --- a/gcc/ada/par-load.adb +++ b/gcc/ada/par-load.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 097ddd0caf3..5c87fa92a3b 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -233,7 +233,7 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is elsif Id = Name_No_Dependence then Set_Restriction_No_Dependence (Unit => Expr, - Warn => Prag_Id = Pragma_Restriction_Warnings); + Warn => Prag_Id = Pragma_Restriction_Warnings); end if; Next (Arg); @@ -963,22 +963,28 @@ begin --------------------- -- pragma Warnings (On | Off, [LOCAL_NAME]) + -- pragma Warnings (static_string_EXPRESSION); - -- The one argument case is processed by the parser, since it may - -- control parser warnings as well as semantic warnings, and in any - -- case we want to be absolutely sure that the range in the warnings - -- table is set well before any semantic analysis is performed. + -- The one argument ON/OFF case is processed by the parser, since it may + -- control parser warnings as well as semantic warnings, and in any case + -- we want to be absolutely sure that the range in the warnings table is + -- set well before any semantic analysis is performed. when Pragma_Warnings => if Arg_Count = 1 then Check_No_Identifier (Arg1); - Check_Arg_Is_On_Or_Off (Arg1); - if Chars (Expression (Arg1)) = Name_On then - Set_Warnings_Mode_On (Pragma_Sloc); - else - Set_Warnings_Mode_Off (Pragma_Sloc); - end if; + declare + Argx : constant Node_Id := Expression (Arg1); + begin + if Nkind (Argx) = N_Identifier then + if Chars (Argx) = Name_On then + Set_Warnings_Mode_On (Pragma_Sloc); + elsif Chars (Argx) = Name_Off then + Set_Warnings_Mode_Off (Pragma_Sloc); + end if; + end if; + end; end if; ----------------------- diff --git a/gcc/ada/par-tchk.adb b/gcc/ada/par-tchk.adb index 94447fb078d..ab87e88f800 100644 --- a/gcc/ada/par-tchk.adb +++ b/gcc/ada/par-tchk.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- Token scan routines. +-- Token scan routines -- Error recovery: none of the T_xxx or TF_xxx routines raise Error_Resync @@ -801,7 +801,7 @@ package body Tchk is M : String (1 .. Missing'Length + Tok_Name'Length); begin - -- Set M to Missing & Tok_Name. + -- Set M to Missing & Tok_Name M (1 .. Missing'Length) := Missing; M (Missing'Length + 1 .. M'Last) := Tok_Name; diff --git a/gcc/ada/par.adb b/gcc/ada/par.adb index 86fa50fe8c1..ddaae254f83 100644 --- a/gcc/ada/par.adb +++ b/gcc/ada/par.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -94,7 +94,7 @@ is -- an entry in the scope stack, invalidating the contents of the stack. Error_Resync : exception; - -- Exception raised on error that is not handled locally, see above. + -- Exception raised on error that is not handled locally, see above Last_Resync_Point : Source_Ptr; -- The resynchronization routines in Par.Sync run a risk of getting diff --git a/gcc/ada/par.ads b/gcc/ada/par.ads index 36e265aa3f0..f610ef0caef 100644 --- a/gcc/ada/par.ads +++ b/gcc/ada/par.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prep.adb b/gcc/ada/prep.adb index bbfb5b723e5..b2ec857b96d 100644 --- a/gcc/ada/prep.adb +++ b/gcc/ada/prep.adb @@ -128,7 +128,7 @@ package body Prep is -- Behaviour -- --------------- - -- Accesses to procedure specified by procedure Initialize. + -- Accesses to procedure specified by procedure Initialize Error_Msg : Error_Msg_Proc; -- Report an error @@ -159,7 +159,7 @@ package body Prep is -- Used to detect multiple #else. Deleting : Boolean; - -- Set to True when the code should be deleted or commented out. + -- Set to True when the code should be deleted or commented out Match_Seen : Boolean; -- Set to True when a condition in an #if or an #elsif is True. @@ -276,8 +276,7 @@ package body Prep is then for J in Index + 1 .. Definition'Last loop case Definition (J) is - when '_' | '.' | '0' .. '9' | - 'a' .. 'z' | 'A' .. 'Z' => + when '_' | '.' | '0' .. '9' | 'a' .. 'z' | 'A' .. 'Z' => null; when others => @@ -336,8 +335,7 @@ package body Prep is -- Put the symbol name in the result declare - Sym : constant String := - Name_Buffer (1 .. Name_Len); + Sym : constant String := Name_Buffer (1 .. Name_Len); begin for Index in 1 .. Name_Len loop @@ -374,13 +372,13 @@ package body Prep is ---------------- function Expression (Evaluate_It : Boolean) return Boolean is - Evaluation : Boolean := Evaluate_It; + Evaluation : Boolean := Evaluate_It; -- Is set to False after an "or else" when left term is True and -- after an "and then" when left term is False. - Final_Result : Boolean := False; + Final_Result : Boolean := False; - Current_Result : Boolean := False; + Current_Result : Boolean := False; -- Value of a term Current_Operator : Operator := None; @@ -430,6 +428,7 @@ package body Prep is Scan.all; if Token = Tok_Apostrophe then + -- symbol'Defined Scan.all; @@ -690,9 +689,9 @@ package body Prep is procedure Output_Line (From, To : Source_Ptr); -- Output a line or the end of a line from the buffer to the output - -- file, followed by an end of line terminator. - -- Depending on the value of Deleting and the switches, the line - -- may be commented out, blank or not output at all. + -- file, followed by an end of line terminator. Depending on the value + -- of Deleting and the switches, the line may be commented out, blank or + -- not output at all. ------------ -- Output -- @@ -739,13 +738,12 @@ package body Prep is begin Start_Of_Processing := Scan_Ptr; - -- We need to call Scan for the first time, because Initialyze_Scanner + -- We need to call Scan for the first time, because Initialize_Scanner -- is no longer doing it. Scan.all; - Input_Line_Loop : - loop + Input_Line_Loop : loop exit Input_Line_Loop when Token = Tok_EOF; Preprocessor_Line := False; @@ -760,9 +758,9 @@ package body Prep is case Token is - when Tok_If => - -- #if + -- #if + when Tok_If => declare If_Ptr : constant Source_Ptr := Token_Ptr; @@ -806,9 +804,9 @@ package body Prep is end; end; - when Tok_Elsif => - -- #elsif + -- #elsif + when Tok_Elsif => Cond := False; if Pp_States.Last = 0 @@ -860,9 +858,9 @@ package body Prep is end if; end if; - when Tok_Else => - -- #else + -- #else + when Tok_Else => if Pp_States.Last = 0 then Error_Msg ("no IF for this ELSE", Token_Ptr); @@ -906,9 +904,9 @@ package body Prep is Go_To_End_Of_Line; end if; - when Tok_End => - -- #end if; + -- #end if; + when Tok_End => if Pp_States.Last = 0 then Error_Msg ("no IF for this END", Token_Ptr); end if; @@ -944,15 +942,15 @@ package body Prep is Go_To_End_Of_Line; - -- Decrement the depth of the #if stack. + -- Decrement the depth of the #if stack if Pp_States.Last > 0 then Pp_States.Decrement_Last; end if; - when others => - -- Illegal preprocessor line + -- Illegal preprocessor line + when others => if Pp_States.Last = 0 then Error_Msg ("IF expected", Token_Ptr); @@ -990,8 +988,8 @@ package body Prep is and then Special_Character = '$' then declare - Dollar_Ptr : constant Source_Ptr := Token_Ptr; - Symbol : Symbol_Id; + Dollar_Ptr : constant Source_Ptr := Token_Ptr; + Symbol : Symbol_Id; begin Scan.all; @@ -1004,8 +1002,7 @@ package body Prep is Symbol := Index_Of (Token_Name); - -- If there is such a symbol, replace it by its - -- value. + -- If symbol exists, replace by its value if Symbol /= No_Symbol then Output (Start_Of_Processing, Dollar_Ptr - 1); @@ -1070,15 +1067,13 @@ package body Prep is and then Sinput.Source (Token_Ptr + 1) = ASCII.LF) then Start_Of_Processing := Token_Ptr + 2; - else Start_Of_Processing := Token_Ptr + 1; end if; end if; - -- Now, we scan the first token of the next line. - -- If the token is EOF, the scan ponter will not move, and the token - -- will still be EOF. + -- Now, scan the first token of the next line. If the token is EOF, + -- the scan ponter will not move, and the token will still be EOF. Set_Ignore_Errors (To => True); Scan.all; diff --git a/gcc/ada/prepcomp.adb b/gcc/ada/prepcomp.adb index 05773daa66c..e81c9763648 100644 --- a/gcc/ada/prepcomp.adb +++ b/gcc/ada/prepcomp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -135,6 +135,7 @@ package body Prepcomp is procedure Add_Command_Line_Symbols is Symbol_Id : Prep.Symbol_Id; + begin for J in 1 .. Symbol_Table.Last (Command_Line_Symbols) loop Symbol_Id := Prep.Index_Of (Command_Line_Symbols.Table (J).Symbol); @@ -225,11 +226,11 @@ package body Prepcomp is ------------------------------ procedure Parse_Preprocessing_Data_File (N : File_Name_Type) is - OK : Boolean := False; + OK : Boolean := False; Dash_Location : Source_Ptr; - Symbol_Data : Prep.Symbol_Data; - Symbol_Id : Prep.Symbol_Id; - T : constant Nat := Total_Errors_Detected; + Symbol_Data : Prep.Symbol_Data; + Symbol_Id : Prep.Symbol_Id; + T : constant Nat := Total_Errors_Detected; begin -- Load the preprocessing data file @@ -246,13 +247,13 @@ package body Prepcomp is end if; -- Initialize the sanner and set its behavior for a processing data file + Scn.Scanner.Initialize_Scanner (No_Unit, Source_Index_Of_Preproc_Data_File); Scn.Scanner.Set_End_Of_Line_As_Token (True); Scn.Scanner.Reset_Special_Characters; - For_Each_Line : - loop + For_Each_Line : loop <> Scan; @@ -340,7 +341,6 @@ package body Prepcomp is -- Check the switches that may follow while Token /= Tok_End_Of_Line and then Token /= Tok_EOF loop - if Token /= Tok_Minus then Error_Msg ("`'-` expected", Token_Ptr); Skip_To_End_Of_Line; @@ -508,7 +508,7 @@ package body Prepcomp is Symbol_Id := Prep.Index_Of (Symbol_Data.Symbol); - -- Otherwise, add a new entry in the table. + -- Otherwise, add a new entry in the table if Symbol_Id = No_Symbol then Symbol_Table.Increment_Last (Prep.Mapping); @@ -635,6 +635,7 @@ package body Prepcomp is -- If not already done it, process the definition file if Current_Data.Processed then + -- Set Prep.Mapping Prep.Mapping := Current_Data.Mapping; diff --git a/gcc/ada/prepcomp.ads b/gcc/ada/prepcomp.ads index 3e53e0dee27..9c74df8c592 100644 --- a/gcc/ada/prepcomp.ads +++ b/gcc/ada/prepcomp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2003, Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -46,7 +46,7 @@ package Prepcomp is -- Parse_Preprocessing_Data_File should be called instead. procedure Parse_Preprocessing_Data_File (N : File_Name_Type); - -- Parse a preprocessing data file, specified with a -gnatep= switch. + -- Parse a preprocessing data file, specified with a -gnatep= switch procedure Prepare_To_Preprocess (Source : File_Name_Type; diff --git a/gcc/ada/prj-attr-pm.ads b/gcc/ada/prj-attr-pm.ads index 695e17fed24..36ad40f7052 100644 --- a/gcc/ada/prj-attr-pm.ads +++ b/gcc/ada/prj-attr-pm.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,9 +24,15 @@ -- -- ------------------------------------------------------------------------------ +-- This package contains insecure procedures that are intended to be used +-- only inside the Prj and MLib hierarchies. It should not be imported by +-- other tools, such as GPS. + package Prj.Attr.PM is + -- The following procedures are not secure and should only be used by the -- Project Manager, that is the packages of the Prj or MLib hierarchies. + -- What does "not secure" mean??? procedure Add_Unknown_Package (Name : Name_Id; Id : out Package_Node_Id); -- Add a new unknown package. The Name cannot be the name of a predefined diff --git a/gcc/ada/prj-attr.adb b/gcc/ada/prj-attr.adb index b49c51134d9..b43fe801bc3 100644 --- a/gcc/ada/prj-attr.adb +++ b/gcc/ada/prj-attr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -55,7 +55,7 @@ package body Prj.Attr is -- insensitive -- 'c' same as 'b', with optional index - -- End is indicated by two consecutive '#'. + -- End is indicated by two consecutive '#' Initialization_Data : constant String := @@ -75,6 +75,7 @@ package body Prj.Attr is "SVlibrary_auto_init#" & "LVlibrary_options#" & "SVlibrary_src_dir#" & + "SVlibrary_ali_dir#" & "SVlibrary_gcc#" & "SVlibrary_symbol_file#" & "SVlibrary_symbol_policy#" & diff --git a/gcc/ada/prj-attr.ads b/gcc/ada/prj-attr.ads index 142be80fd97..df964044ea8 100644 --- a/gcc/ada/prj-attr.ads +++ b/gcc/ada/prj-attr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -26,7 +26,8 @@ -- This package defines packages and attributes in GNAT project files. -- There are predefined packages and attributes. --- It is also possible to define new packages with their attributes. + +-- It is also possible to define new packages with their attributes with Table; diff --git a/gcc/ada/prj-com.ads b/gcc/ada/prj-com.ads index 7cf50116d62..c7a96aa04c6 100644 --- a/gcc/ada/prj-com.ads +++ b/gcc/ada/prj-com.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -27,6 +27,8 @@ -- The following package declares data types for GNAT project. -- These data types are used in the bodies of the Prj hierarchy. +-- Above comment seems *far* too general ??? + with Osint; package Prj.Com is diff --git a/gcc/ada/prj-dect.adb b/gcc/ada/prj-dect.adb index 00922b31b9f..162db134807 100644 --- a/gcc/ada/prj-dect.adb +++ b/gcc/ada/prj-dect.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -49,7 +49,7 @@ package body Prj.Dect is Current_Project : Project_Node_Id; Current_Package : Project_Node_Id; Packages_To_Check : String_List_Access); - -- Parse an attribute declaration. + -- Parse an attribute declaration procedure Parse_Case_Construction (In_Tree : Project_Node_Tree_Ref; diff --git a/gcc/ada/prj-dect.ads b/gcc/ada/prj-dect.ads index e8233e34ade..4cffb574939 100644 --- a/gcc/ada/prj-dect.ads +++ b/gcc/ada/prj-dect.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb index 26fd99b7c94..c20be6dd739 100644 --- a/gcc/ada/prj-env.adb +++ b/gcc/ada/prj-env.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -48,7 +48,7 @@ package body Prj.Env is -- and ADA_OBJECTS_PATH are stored. Ada_Path_Length : Natural := 0; - -- Index of the last valid character in Ada_Path_Buffer. + -- Index of the last valid character in Ada_Path_Buffer Ada_Prj_Include_File_Set : Boolean := False; Ada_Prj_Objects_File_Set : Boolean := False; @@ -270,9 +270,9 @@ package body Prj.Env is if Data.Library then if Data.Object_Directory = No_Name or else - Contains_ALI_Files (Data.Library_Dir) + Contains_ALI_Files (Data.Library_ALI_Dir) then - Add_To_Path (Get_Name_String (Data.Library_Dir)); + Add_To_Path (Get_Name_String (Data.Library_ALI_Dir)); else Add_To_Path (Get_Name_String (Data.Object_Directory)); end if; @@ -2121,16 +2121,17 @@ package body Prj.Env is and then (not Including_Libraries or else not Data.Library)) then - -- For a library project, add the library directory - -- if there is no object directory or if the library - -- directory contains ALI files; otherwise add the - -- object directory. + -- For a library project, add the library ALI + -- directory if there is no object directory or + -- if the library ALI directory contains ALI files; + -- otherwise add the object directory. if Data.Library then if Data.Object_Directory = No_Name - or else Contains_ALI_Files (Data.Library_Dir) + or else Contains_ALI_Files (Data.Library_ALI_Dir) then - Add_To_Object_Path (Data.Library_Dir, In_Tree); + Add_To_Object_Path + (Data.Library_ALI_Dir, In_Tree); else Add_To_Object_Path (Data.Object_Directory, In_Tree); @@ -2138,13 +2139,18 @@ package body Prj.Env is -- For a non-library project, add the object -- directory, if it is not a virtual project, and - -- if there are Ada sources. If there are no Ada - -- sources, adding the object directory could - -- disrupt the order of the object dirs in the path. + -- if there are Ada sources or if the project is an + -- extending project. if There Are No Ada sources, + -- adding the object directory could disrupt + -- the order of the object dirs in the path. elsif not Data.Virtual - and then In_Tree.Projects.Table - (Project).Ada_Sources_Present + and then (In_Tree.Projects.Table + (Project).Ada_Sources_Present + or else + (Data.Extends /= No_Project + and then + Data.Object_Directory /= No_Name)) then Add_To_Object_Path (Data.Object_Directory, In_Tree); @@ -2230,7 +2236,7 @@ package body Prj.Env is Add (Project); end if; - -- Write and close any file that has been created. + -- Write and close any file that has been created if Source_FD /= Invalid_FD then for Index in Source_Path_Table.First .. diff --git a/gcc/ada/prj-env.ads b/gcc/ada/prj-env.ads index 76e85aeceea..59d2cfc0f67 100644 --- a/gcc/ada/prj-env.ads +++ b/gcc/ada/prj-env.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-err.ads b/gcc/ada/prj-err.ads index 57d33f9be66..ba528f1f99a 100644 --- a/gcc/ada/prj-err.ads +++ b/gcc/ada/prj-err.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,12 +24,11 @@ -- -- ------------------------------------------------------------------------------ --- This package contains the routines to output error messages and the --- scanner for the project files. It replaces Errout and Scn. --- It is not dependent on the GNAT tree packages (Atree, Sinfo, ...). --- It uses the same global variables as Errout, located in package --- Err_Vars. Like Errout, it also uses the common variables and routines --- in package Erroutc. +-- This package contains the routines to output error messages and the scanner +-- for the project files. It replaces Errout and Scn. It is not dependent on +-- the GNAT tree packages (Atree, Sinfo, ...). It uses exactly the same global +-- variables as Errout, located in package Err_Vars. Like Errout, it also uses +-- the common variables and routines in package Erroutc. with Scng; with Errutil; @@ -63,10 +62,10 @@ package Prj.Err is procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr) renames Errutil.Error_Msg; - -- Output a message at specified location. + -- Output a message at specified location procedure Error_Msg_S (Msg : String) renames Errutil.Error_Msg_S; - -- Output a message at current scan pointer location. + -- Output a message at current scan pointer location procedure Error_Msg_SC (Msg : String) renames Errutil.Error_Msg_SC; -- Output a message at the start of the current token, unless we are at @@ -74,7 +73,7 @@ package Prj.Err is -- last real token in the file. procedure Error_Msg_SP (Msg : String) renames Errutil.Error_Msg_SP; - -- Output a message at the start of the previous token. + -- Output a message at the start of the previous token ------------- -- Scanner -- diff --git a/gcc/ada/prj-ext.adb b/gcc/ada/prj-ext.adb index 53d47cd3365..c92ca9ffa20 100644 --- a/gcc/ada/prj-ext.adb +++ b/gcc/ada/prj-ext.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -25,25 +25,30 @@ ------------------------------------------------------------------------------ with Namet; use Namet; +with Output; use Output; with Osint; use Osint; with Sdefault; + with GNAT.HTable; package body Prj.Ext is + Gpr_Project_Path : constant String := "GPR_PROJECT_PATH"; Ada_Project_Path : constant String := "ADA_PROJECT_PATH"; - -- Name of the env. variable that contains path name(s) of directories - -- where project files may reside. + -- Name of the env. variables that contain path name(s) of directories + -- where project files may reside. GPR_PROJECT_PATH has precedence over + -- ADA_PROJECT_PATH. - Prj_Path : constant String_Access := Getenv (Ada_Project_Path); + Gpr_Prj_Path : constant String_Access := Getenv (Gpr_Project_Path); + Ada_Prj_Path : constant String_Access := Getenv (Ada_Project_Path); -- The path name(s) of directories where project files may reside. -- May be empty. No_Project_Default_Dir : constant String := "-"; Current_Project_Path : String_Access; - -- The project path; initialized during elaboration of package - -- Contains at least the current working directory. + -- The project path. Initialized during elaboration of package Contains at + -- least the current working directory. package Htable is new GNAT.HTable.Simple_HTable (Header_Num => Header_Num, @@ -152,8 +157,7 @@ package body Prj.Ext is return The_Value; end if; - -- Find if it is an environment. - -- If it is, put the value in the hash table. + -- Find if it is an environment, if it is, put value in the hash table declare Env_Value : String_Access := Getenv (Name); @@ -181,14 +185,30 @@ begin Add_Default_Dir : Boolean := True; First : Positive; Last : Positive; + New_Len : Positive; + New_Last : Positive; + Prj_Path : String_Access := Gpr_Prj_Path; begin + if Gpr_Prj_Path.all /= "" then + + -- Warn if both environment variables are defined + + if Ada_Prj_Path.all /= "" then + Write_Line ("Warning: ADA_PROJECT_PATH is not taken into account"); + Write_Line (" when GPR_PROJECT_PATH is defined"); + end if; + + else + Prj_Path := Ada_Prj_Path; + end if; + -- The current directory is always first Name_Len := 1; Name_Buffer (Name_Len) := '.'; - -- If env. var. is defined and not empty, add its content + -- If environment variable is defined and not empty, add its content if Prj_Path.all /= "" then Name_Len := Name_Len + 1; @@ -198,6 +218,7 @@ begin -- Scan the directory path to see if "-" is one of the directories. -- Remove each occurence of "-" and set Add_Default_Dir to False. + -- Also resolve relative paths and symbolic links. First := 3; loop @@ -229,6 +250,27 @@ begin end loop; Name_Len := Name_Len - No_Project_Default_Dir'Length - 1; + + else + declare + New_Dir : constant String := + Normalize_Pathname (Name_Buffer (First .. Last)); + begin + -- If the absolute path was resolved and is different from + -- the original, replace original with the resolved path. + + if New_Dir /= Name_Buffer (First .. Last) + and then New_Dir'Length /= 0 + then + New_Len := Name_Len + New_Dir'Length - (Last - First + 1); + New_Last := First + New_Dir'Length - 1; + Name_Buffer (New_Last + 1 .. New_Len) := + Name_Buffer (Last + 1 .. Name_Len); + Name_Buffer (First .. New_Last) := New_Dir; + Name_Len := New_Len; + Last := New_Last; + end if; + end; end if; First := Last + 1; diff --git a/gcc/ada/prj-ext.ads b/gcc/ada/prj-ext.ads index e6e7188dfad..c0114ce2e08 100644 --- a/gcc/ada/prj-ext.ads +++ b/gcc/ada/prj-ext.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,13 +42,13 @@ package Prj.Ext is procedure Add (External_Name : String; Value : String); - -- Add an external reference (or modify an existing one). + -- Add an external reference (or modify an existing one) function Value_Of (External_Name : Name_Id; With_Default : Name_Id := No_Name) return Name_Id; - -- Get the value of an external reference, and cache it for future uses. + -- Get the value of an external reference, and cache it for future uses function Check (Declaration : String) return Boolean; -- Check that an external declaration = is correct. diff --git a/gcc/ada/prj-makr.adb b/gcc/ada/prj-makr.adb index 569c85dcceb..57334e40056 100644 --- a/gcc/ada/prj-makr.adb +++ b/gcc/ada/prj-makr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-makr.ads b/gcc/ada/prj-makr.ads index 3947e891819..4bb0ead30c4 100644 --- a/gcc/ada/prj-makr.ads +++ b/gcc/ada/prj-makr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- Support for procedure Gnatname. +-- Support for procedure Gnatname -- For arbitrary naming schemes, create or update a project file, -- or create a configuration pragmas file. diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb index bc7adfa375a..959294405d0 100644 --- a/gcc/ada/prj-nmsc.adb +++ b/gcc/ada/prj-nmsc.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1383,12 +1383,16 @@ package body Prj.Nmsc is Lib_Name : constant Prj.Variable_Value := Prj.Util.Value_Of - (Snames.Name_Library_Name, Attributes, In_Tree); + (Snames.Name_Library_Name, Attributes, In_Tree); Lib_Version : constant Prj.Variable_Value := Prj.Util.Value_Of (Snames.Name_Library_Version, Attributes, In_Tree); + Lib_ALI_Dir : constant Prj.Variable_Value := + Prj.Util.Value_Of + (Snames.Name_Library_Ali_Dir, Attributes, In_Tree); + The_Lib_Kind : constant Prj.Variable_Value := Prj.Util.Value_Of (Snames.Name_Library_Kind, Attributes, In_Tree); @@ -1488,14 +1492,78 @@ package body Prj.Nmsc is Data.Library_Dir := No_Name; Data.Display_Library_Dir := No_Name; - -- Display the Library directory in high verbosity - else - if Current_Verbosity = High then - Write_Str ("Library directory ="""); - Write_Str (Get_Name_String (Data.Display_Library_Dir)); - Write_Line (""""); - end if; + declare + OK : Boolean := True; + Dirs_Id : String_List_Id; + Dir_Elem : String_Element; + + begin + -- The library directory cannot be the same as a source + -- directory of the current project. + + Dirs_Id := Data.Source_Dirs; + while Dirs_Id /= Nil_String loop + Dir_Elem := In_Tree.String_Elements.Table (Dirs_Id); + Dirs_Id := Dir_Elem.Next; + + if Data.Library_Dir = Dir_Elem.Value then + Err_Vars.Error_Msg_Name_1 := Dir_Elem.Value; + Error_Msg + (Project, In_Tree, + "library directory cannot be the same " & + "as source directory {", + Lib_Dir.Location); + OK := False; + exit; + end if; + end loop; + + if OK then + + -- The library directory cannot be the same as a source + -- directory of another project either. + + Project_Loop : + for Pid in 1 .. Project_Table.Last (In_Tree.Projects) loop + if Pid /= Project then + Dirs_Id := In_Tree.Projects.Table (Pid).Source_Dirs; + + Dir_Loop : while Dirs_Id /= Nil_String loop + Dir_Elem := In_Tree.String_Elements.Table (Dirs_Id); + Dirs_Id := Dir_Elem.Next; + + if Data.Library_Dir = Dir_Elem.Value then + Err_Vars.Error_Msg_Name_1 := Dir_Elem.Value; + Err_Vars.Error_Msg_Name_2 := + In_Tree.Projects.Table (Pid).Name; + + Error_Msg + (Project, In_Tree, + "library directory cannot be the same " & + "as source directory { of project {", + Lib_Dir.Location); + OK := False; + exit Project_Loop; + end if; + end loop Dir_Loop; + end if; + end loop Project_Loop; + end if; + + if not OK then + Data.Library_Dir := No_Name; + Data.Display_Library_Dir := No_Name; + + elsif Current_Verbosity = High then + + -- Display the Library directory in high verbosity + + Write_Str ("Library directory ="""); + Write_Str (Get_Name_String (Data.Display_Library_Dir)); + Write_Line (""""); + end if; + end; end if; end if; @@ -1536,6 +1604,158 @@ package body Prj.Nmsc is Data.Library := False; else + if Lib_ALI_Dir.Value = Empty_String then + if Current_Verbosity = High then + Write_Line ("No library 'A'L'I directory specified"); + end if; + Data.Library_ALI_Dir := Data.Library_Dir; + Data.Display_Library_ALI_Dir := Data.Display_Library_Dir; + + else + -- Find path name, check that it is a directory + + Locate_Directory + (Lib_ALI_Dir.Value, Data.Display_Directory, + Data.Library_ALI_Dir, Data.Display_Library_ALI_Dir); + + if Data.Library_ALI_Dir = No_Name then + + -- Get the absolute name of the library ALI directory that + -- does not exist, to report an error. + + declare + Dir_Name : constant String := + Get_Name_String (Lib_ALI_Dir.Value); + + begin + if Is_Absolute_Path (Dir_Name) then + Err_Vars.Error_Msg_Name_1 := Lib_Dir.Value; + + else + Get_Name_String (Data.Display_Directory); + + if Name_Buffer (Name_Len) /= Directory_Separator then + Name_Len := Name_Len + 1; + Name_Buffer (Name_Len) := Directory_Separator; + end if; + + Name_Buffer + (Name_Len + 1 .. Name_Len + Dir_Name'Length) := + Dir_Name; + Name_Len := Name_Len + Dir_Name'Length; + Err_Vars.Error_Msg_Name_1 := Name_Find; + end if; + + -- Report the error + + Error_Msg + (Project, In_Tree, + "library 'A'L'I directory { does not exist", + Lib_ALI_Dir.Location); + end; + end if; + + if Data.Library_ALI_Dir /= Data.Library_Dir then + + -- The library ALI directory cannot be the same as the + -- Object directory. + + if Data.Library_ALI_Dir = Data.Object_Directory then + Error_Msg + (Project, In_Tree, + "library 'A'L'I directory cannot be the same " & + "as object directory", + Lib_ALI_Dir.Location); + Data.Library_ALI_Dir := No_Name; + Data.Display_Library_ALI_Dir := No_Name; + + else + declare + OK : Boolean := True; + Dirs_Id : String_List_Id; + Dir_Elem : String_Element; + + begin + -- The library ALI directory cannot be the same as + -- a source directory of the current project. + + Dirs_Id := Data.Source_Dirs; + while Dirs_Id /= Nil_String loop + Dir_Elem := In_Tree.String_Elements.Table (Dirs_Id); + Dirs_Id := Dir_Elem.Next; + + if Data.Library_ALI_Dir = Dir_Elem.Value then + Err_Vars.Error_Msg_Name_1 := Dir_Elem.Value; + Error_Msg + (Project, In_Tree, + "library 'A'L'I directory cannot be " & + "the same as source directory {", + Lib_ALI_Dir.Location); + OK := False; + exit; + end if; + end loop; + + if OK then + + -- The library ALI directory cannot be the same as + -- a source directory of another project either. + + ALI_Project_Loop : + for + Pid in 1 .. Project_Table.Last (In_Tree.Projects) + loop + if Pid /= Project then + Dirs_Id := + In_Tree.Projects.Table (Pid).Source_Dirs; + + ALI_Dir_Loop : + while Dirs_Id /= Nil_String loop + Dir_Elem := + In_Tree.String_Elements.Table (Dirs_Id); + Dirs_Id := Dir_Elem.Next; + + if + Data.Library_ALI_Dir = Dir_Elem.Value + then + Err_Vars.Error_Msg_Name_1 := + Dir_Elem.Value; + Err_Vars.Error_Msg_Name_2 := + In_Tree.Projects.Table (Pid).Name; + + Error_Msg + (Project, In_Tree, + "library 'A'L'I directory cannot " & + "be the same as source directory " & + "{ of project {", + Lib_ALI_Dir.Location); + OK := False; + exit ALI_Project_Loop; + end if; + end loop ALI_Dir_Loop; + end if; + end loop ALI_Project_Loop; + end if; + + if not OK then + Data.Library_ALI_Dir := No_Name; + Data.Display_Library_ALI_Dir := No_Name; + + elsif Current_Verbosity = High then + + -- Display the Library ALI directory in high + -- verbosity. + + Write_Str ("Library ALI directory ="""); + Write_Str + (Get_Name_String (Data.Display_Library_ALI_Dir)); + Write_Line (""""); + end if; + end; + end if; + end if; + end if; + pragma Assert (Lib_Version.Kind = Single); if Lib_Version.Value = Empty_String then @@ -2279,18 +2499,19 @@ package body Prj.Nmsc is Lib_Src_Dir.Location); Data.Library_Src_Dir := No_Name; - -- Check if it is same as one of the source directories - else declare - Src_Dirs : String_List_Id := Data.Source_Dirs; + Src_Dirs : String_List_Id; Src_Dir : String_Element; begin + -- Interface copy directory cannot be one of the source + -- directory of the current project. + + Src_Dirs := Data.Source_Dirs; while Src_Dirs /= Nil_String loop Src_Dir := In_Tree.String_Elements.Table (Src_Dirs); - Src_Dirs := Src_Dir.Next; -- Report error if it is one of the source directories @@ -2303,7 +2524,45 @@ package body Prj.Nmsc is Data.Library_Src_Dir := No_Name; exit; end if; + + Src_Dirs := Src_Dir.Next; end loop; + + if Data.Library_Src_Dir /= No_Name then + + -- It cannot be a source directory of any other + -- project either. + + Project_Loop : for Pid in 1 .. + Project_Table.Last (In_Tree.Projects) + loop + Src_Dirs := + In_Tree.Projects.Table (Pid).Source_Dirs; + Dir_Loop : while Src_Dirs /= Nil_String loop + Src_Dir := + In_Tree.String_Elements.Table (Src_Dirs); + + -- Report error if it is one of the source + -- directories + + if Data.Library_Src_Dir = Src_Dir.Value then + Error_Msg_Name_1 := Src_Dir.Value; + Error_Msg_Name_2 := + In_Tree.Projects.Table (Pid).Name; + Error_Msg + (Project, In_Tree, + "directory to copy interfaces cannot " & + "be the same as source directory { of " & + "project {", + Lib_Src_Dir.Location); + Data.Library_Src_Dir := No_Name; + exit Project_Loop; + end if; + + Src_Dirs := Src_Dir.Next; + end loop Dir_Loop; + end loop Project_Loop; + end if; end; -- In high verbosity, if there is a valid Library_Src_Dir, diff --git a/gcc/ada/prj-nmsc.ads b/gcc/ada/prj-nmsc.ads index 8298bb63545..ae05c5f0174 100644 --- a/gcc/ada/prj-nmsc.ads +++ b/gcc/ada/prj-nmsc.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- Check the Naming Scheme of a project file, find the source files. +-- Check the Naming Scheme of a project file, find the source files private package Prj.Nmsc is diff --git a/gcc/ada/prj-pars.adb b/gcc/ada/prj-pars.adb index b0b52d65f34..4f4b9043c57 100644 --- a/gcc/ada/prj-pars.adb +++ b/gcc/ada/prj-pars.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-pars.ads b/gcc/ada/prj-pars.ads index 15a17be3b45..d94b0720f24 100644 --- a/gcc/ada/prj-pars.ads +++ b/gcc/ada/prj-pars.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-part.adb b/gcc/ada/prj-part.adb index 1e711f813d7..f39bd486b77 100644 --- a/gcc/ada/prj-part.adb +++ b/gcc/ada/prj-part.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -129,6 +129,10 @@ package body Prj.Part is In_Tree : Project_Node_Tree_Ref); -- Create a virtual extending project of For_Project. Main_Project is -- the extending all project. + -- + -- The String_Value_Of is not set for the automatically added with + -- clause and keeps the default value of No_Name. This enables Prj.PP + -- to skip these automatically added with clauses to be processed. procedure Look_For_Virtual_Projects_For (Proj : Project_Node_Id; @@ -328,6 +332,15 @@ package body Prj.Part is -- Source_Dirs empty list: nothing to do + -- Put virtual project into Projects_Htable + + Prj.Tree.Tree_Private_Part.Projects_Htable.Set + (T => In_Tree.Projects_HT, + K => Virtual_Name_Id, + E => (Name => Virtual_Name_Id, + Node => Virtual_Project, + Canonical_Path => No_Name, + Extended => False)); end Create_Virtual_Extending_Project; ---------------------------- diff --git a/gcc/ada/prj-part.ads b/gcc/ada/prj-part.ads index 861ec3ca37a..38f8d8130a2 100644 --- a/gcc/ada/prj-part.ads +++ b/gcc/ada/prj-part.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- Implements the parsing of project files into a tree. +-- Implements the parsing of project files into a tree with Prj.Tree; use Prj.Tree; diff --git a/gcc/ada/prj-pp.adb b/gcc/ada/prj-pp.adb index 597c0dddcae..bf9305966d9 100644 --- a/gcc/ada/prj-pp.adb +++ b/gcc/ada/prj-pp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -38,7 +38,7 @@ package body Prj.PP is Not_Tested : array (Project_Node_Kind) of Boolean := (others => True); Max_Line_Length : constant := Hostparm.Max_Line_Length - 5; - -- Maximum length of a line. + -- Maximum length of a line Column : Natural := 0; -- Column number of the last character in the line. Used to avoid @@ -91,7 +91,7 @@ package body Prj.PP is -- Outputs a name procedure Start_Line (Indent : Natural); - -- Outputs the indentation at the beginning of the line. + -- Outputs the indentation at the beginning of the line procedure Output_String (S : Name_Id); -- Outputs a string using the default output procedures @@ -114,10 +114,10 @@ package body Prj.PP is Write_Char : Write_Char_Ap := Output.Write_Char'Access; Write_Eol : Write_Eol_Ap := Output.Write_Eol'Access; Write_Str : Write_Str_Ap := Output.Write_Str'Access; - -- These three access to procedure values are used for the output. + -- These three access to procedure values are used for the output Last_Line_Is_Empty : Boolean := False; - -- Used to avoid two consecutive empty lines. + -- Used to avoid two consecutive empty lines --------------------------- -- Output_Attribute_Name -- @@ -337,6 +337,11 @@ package body Prj.PP is if Extended_Project_Path_Of (Node, In_Tree) /= No_Name then Write_String (" extends "); + + if Is_Extending_All (Node, In_Tree) then + Write_String ("all "); + end if; + Output_String (Extended_Project_Path_Of (Node, In_Tree)); end if; @@ -361,7 +366,14 @@ package body Prj.PP is when N_With_Clause => pragma Debug (Indicate_Tested (N_With_Clause)); - if Name_Of (Node, In_Tree) /= No_Name then + -- The with clause will sometimes contain an invalid name + -- when we are importing a virtual project from an + -- extending all project. Do not output anything in this + -- case + + if Name_Of (Node, In_Tree) /= No_Name + and then String_Value_Of (Node, In_Tree) /= No_Name + then if First_With_In_List then Print (First_Comment_Before (Node, In_Tree), Indent); Start_Line (Indent); diff --git a/gcc/ada/prj-pp.ads b/gcc/ada/prj-pp.ads index 7c4a4acafde..806eb9c6ea3 100644 --- a/gcc/ada/prj-pp.ads +++ b/gcc/ada/prj-pp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,19 +24,19 @@ -- -- ------------------------------------------------------------------------------ --- This package is the Project File Pretty Printer. --- It is used to output a project file from a project file tree. --- It is used by gnatname to update or create project files. --- It is also used GPS to display project file trees. --- It can also be used for debugging purposes for tools that create project --- file trees. +-- This package is the Project File Pretty Printer + +-- Used to output a project file from a project file tree. +-- Used by gnatname to update or create project files. +-- Also used GPS to display project file trees. +-- Also be used for debugging tools that create project file trees. with Prj.Tree; package Prj.PP is - -- The following access to procedure types are used - -- to redirect output when calling Pretty_Print. + -- The following access to procedure types are used to redirect output when + -- calling Pretty_Print. type Write_Char_Ap is access procedure (C : Character); @@ -54,8 +54,8 @@ package Prj.PP is W_Eol : Write_Eol_Ap := null; W_Str : Write_Str_Ap := null; Backward_Compatibility : Boolean); - -- Output a project file, using either the default output - -- routines, or the ones specified by W_Char, W_Eol and W_Str. + -- Output a project file, using either the default output routines, or the + -- ones specified by W_Char, W_Eol and W_Str. -- -- Increment is the number of spaces for each indentation level. -- @@ -65,10 +65,10 @@ package Prj.PP is -- If Eliminate_Empty_Case_Constructions is True, then case constructions -- and case items that do not include any declarations will not be output. -- - -- If Minimize_Empty_Lines is True, empty lines will be output only - -- after the last with clause, after the line declaring the project name, - -- after the last declarative item of the project and before each - -- package declaration. Otherwise, more empty lines are output. + -- If Minimize_Empty_Lines is True, empty lines will be output only after + -- the last with clause, after the line declaring the project name, after + -- the last declarative item of the project and before each package + -- declaration. Otherwise, more empty lines are output. -- -- If Backward_Compatibility is True, then new attributes (Spec, -- Spec_Suffix, Body, Body_Suffix) will be replaced by obsolete ones @@ -78,8 +78,8 @@ package Prj.PP is private procedure Output_Statistics; - -- This procedure can be used after one or more calls to Pretty_Print - -- to display what Project_Node_Kinds have not been exercised by the - -- call(s) to Pretty_Print. It is used only for testing purposes. + -- This procedure can be used after one or more calls to Pretty_Print to + -- display what Project_Node_Kinds have not been exercised by the call(s) + -- to Pretty_Print. It is used only for testing purposes. end Prj.PP; diff --git a/gcc/ada/prj-proc.adb b/gcc/ada/prj-proc.adb index da23ec7b10c..f9b5619c5bc 100644 --- a/gcc/ada/prj-proc.adb +++ b/gcc/ada/prj-proc.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1129,7 +1129,7 @@ package body Prj.Proc is end loop; end if; - Success := Total_Errors_Detected <= 0; + Success := Total_Errors_Detected = 0; end Process; ------------------------------- diff --git a/gcc/ada/prj-proc.ads b/gcc/ada/prj-proc.ads index e0ab87dd4ad..a94137542e2 100644 --- a/gcc/ada/prj-proc.ads +++ b/gcc/ada/prj-proc.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -25,8 +25,8 @@ ------------------------------------------------------------------------------ -- This package is used to convert a project file tree (see prj-tree.ads) to --- project file data structures (see prj.ads), taking into account --- the environment (external references). +-- project file data structures (see prj.ads), taking into account the +-- environment (external references). with Prj.Tree; use Prj.Tree; @@ -40,9 +40,9 @@ package Prj.Proc is From_Project_Node_Tree : Project_Node_Tree_Ref; Report_Error : Put_Line_Access; Follow_Links : Boolean := True); - -- Process a project file tree into project file data structures. - -- If Report_Error is null, use the error reporting mechanism. - -- Otherwise, report errors using Report_Error. + -- Process a project file tree into project file data structures. If + -- Report_Error is null, use the error reporting mechanism. Otherwise, + -- report errors using Report_Error. -- -- If Follow_Links is False, it is assumed that the project doesn't contain -- any file duplicated through symbolic links (although the latter are diff --git a/gcc/ada/prj-strt.adb b/gcc/ada/prj-strt.adb index d3615d14480..b1388079719 100644 --- a/gcc/ada/prj-strt.adb +++ b/gcc/ada/prj-strt.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,13 +24,13 @@ -- -- ------------------------------------------------------------------------------ -with Err_Vars; use Err_Vars; -with Namet; use Namet; -with Prj.Attr; use Prj.Attr; -with Prj.Err; use Prj.Err; +with Err_Vars; use Err_Vars; +with Namet; use Namet; +with Prj.Attr; use Prj.Attr; +with Prj.Err; use Prj.Err; with Snames; with Table; -with Uintp; use Uintp; +with Uintp; use Uintp; package body Prj.Strt is @@ -64,7 +64,7 @@ package body Prj.Strt is Table_Initial => Choices_Initial, Table_Increment => Choices_Increment, Table_Name => "Prj.Strt.Choices"); - -- Used to store the case labels and check that there is no duplicate. + -- Used to store the case labels and check that there is no duplicate package Choice_Lasts is new Table.Table (Table_Component_Type => Choice_Node_Id, @@ -107,7 +107,7 @@ package body Prj.Strt is Current_Project : Project_Node_Id; Current_Package : Project_Node_Id; External_Value : out Project_Node_Id); - -- Parse an external reference. Current token is "external". + -- Parse an external reference. Current token is "external" procedure Attribute_Reference (In_Tree : Project_Node_Tree_Ref; @@ -115,7 +115,7 @@ package body Prj.Strt is First_Attribute : Attribute_Node_Id; Current_Project : Project_Node_Id; Current_Package : Project_Node_Id); - -- Parse an attribute reference. Current token is an apostrophe. + -- Parse an attribute reference. Current token is an apostrophe procedure Terms (In_Tree : Project_Node_Tree_Ref; diff --git a/gcc/ada/prj-strt.ads b/gcc/ada/prj-strt.ads index a1575b807ce..74dc37457fe 100644 --- a/gcc/ada/prj-strt.ads +++ b/gcc/ada/prj-strt.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,7 +24,7 @@ -- -- ------------------------------------------------------------------------------ --- This package implements parsing of string expressions in project files. +-- This package implements parsing of string expressions in project files with Prj.Tree; use Prj.Tree; diff --git a/gcc/ada/prj-tree.adb b/gcc/ada/prj-tree.adb index 6077d95037d..016568c749d 100644 --- a/gcc/ada/prj-tree.adb +++ b/gcc/ada/prj-tree.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-tree.ads b/gcc/ada/prj-tree.ads index 3a7decf49ec..d5784c09e2b 100644 --- a/gcc/ada/prj-tree.ads +++ b/gcc/ada/prj-tree.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -85,9 +85,9 @@ package Prj.Tree is N_Case_Item, N_Comment_Zones, N_Comment); - -- Each node in the tree is of a Project_Node_Kind - -- For the signification of the fields in each node of a - -- Project_Node_Kind, look at package Tree_Private_Part. + -- Each node in the tree is of a Project_Node_Kind. For the signification + -- of the fields in each node of Project_Node_Kind, look at package + -- Tree_Private_Part. procedure Initialize (Tree : Project_Node_Tree_Ref); -- Initialize the Project File tree: empty the Project_Nodes table @@ -97,8 +97,8 @@ package Prj.Tree is (In_Tree : Project_Node_Tree_Ref; Of_Kind : Project_Node_Kind; And_Expr_Kind : Variable_Kind := Undefined) return Project_Node_Id; - -- Returns a Project_Node_Record with the specified Kind and - -- Expr_Kind; all the other components have default nil values. + -- Returns a Project_Node_Record with the specified Kind and Expr_Kind. All + -- the other components have default nil values. function Hash (N : Project_Node_Id) return Header_Num; -- Used for hash tables where the key is a Project_Node_Id @@ -149,10 +149,9 @@ package Prj.Tree is -- comment, then it should be associated with this node. procedure Set_Next_End_Node (To : Project_Node_Id); - -- Put node To on the top of the end node stack. When an "end" line - -- is found with this node on the top of the end node stack, the comments, - -- if any, immediately preceding this "end" line will be associated with - -- this node. + -- Put node To on the top of the end node stack. When an END line is found + -- with this node on the top of the end node stack, the comments, if any, + -- immediately preceding this "end" line will be associated with this node. procedure Remove_Next_End_Node; -- Remove the top of the end node stack @@ -166,6 +165,7 @@ package Prj.Tree is Follows_Empty_Line : Boolean := False; Is_Followed_By_Empty_Line : Boolean := False; end record; + -- Component type for Comments Table below package Comments is new Table.Table (Table_Component_Type => Comment_Data, @@ -181,6 +181,7 @@ package Prj.Tree is type Comment_Location is (Before, After, Before_End, After_End, End_Of_Line); + -- Used in call to Add_Comments below procedure Add_Comments (To : Project_Node_Id; @@ -193,7 +194,10 @@ package Prj.Tree is ---------------------- -- The following query functions are part of the abstract interface - -- of the Project File tree + -- of the Project File tree. They provide access to fields of a project. + + -- In the following, there are "valid if" comments, but no indication + -- of what happens if they are called with invalid arguments ??? function Name_Of (Node : Project_Node_Id; @@ -314,7 +318,9 @@ package Prj.Tree is (Node : Project_Node_Id; In_Tree : Project_Node_Tree_Ref) return Name_Id; pragma Inline (String_Value_Of); - -- Only valid for N_With_Clause, N_Literal_String nodes or N_Comment + -- Only valid for N_With_Clause, N_Literal_String nodes or N_Comment. + -- For a N_With_Clause created automatically for a virtual extending + -- project, No_Name is returned. function Source_Index_Of (Node : Project_Node_Id; diff --git a/gcc/ada/prj-util.adb b/gcc/ada/prj-util.adb index 1de7acb4035..716817d4ef0 100644 --- a/gcc/ada/prj-util.adb +++ b/gcc/ada/prj-util.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/prj-util.ads b/gcc/ada/prj-util.ads index 667fb993c8e..5d77678af89 100644 --- a/gcc/ada/prj-util.ads +++ b/gcc/ada/prj-util.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -67,9 +67,9 @@ package Prj.Util is -- or if In_Array is null. -- -- Depending on the attribute (only attributes may be associative arrays) - -- the index may or may not be case sensitive. If the index is not - -- case sensitive, it is first set to lower case before the search - -- in the associative array. + -- the index may or may not be case sensitive. If the index is not case + -- sensitive, it is first set to lower case before the search in the + -- associative array. function Value_Of (Name : Name_Id; @@ -78,10 +78,9 @@ package Prj.Util is In_Package : Package_Id; In_Tree : Project_Tree_Ref) return Variable_Value; -- In a specific package, - -- - if there exists an array Attribute_Or_Array_Name with an index - -- Name, returns the corresponding component (depending on the - -- attribute, the index may or may not be case sensitive, see previous - -- function), + -- - if there exists an array Attribute_Or_Array_Name with an index Name, + -- returns the corresponding component (depending on the attribute, the + -- index may or may not be case sensitive, see previous function), -- - otherwise if there is a single attribute Attribute_Or_Array_Name, -- returns this attribute, -- - otherwise, returns Nil_Variable_Value. @@ -92,8 +91,8 @@ package Prj.Util is In_Array : Name_Id; In_Arrays : Array_Id; In_Tree : Project_Tree_Ref) return Name_Id; - -- Get a string array component in an array of an array list. - -- Returns No_Name if there is no component Index, if In_Arrays is null, if + -- Get a string array component in an array of an array list. Returns + -- No_Name if there is no component Index, if In_Arrays is null, if -- In_Array is not found in In_Arrays or if the component is a String list. function Value_Of @@ -108,8 +107,8 @@ package Prj.Util is (Name : Name_Id; In_Packages : Package_Id; In_Tree : Project_Tree_Ref) return Package_Id; - -- Returns a specified package in a package list. Returns No_Package - -- if In_Packages is null or if Name is not the name of a package in + -- Returns a specified package in a package list. Returns No_Package if + -- In_Packages is null or if Name is not the name of a package in -- Package_List. The caller must ensure that Name is in lower case. function Value_Of @@ -129,28 +128,28 @@ package Prj.Util is -- the last character of each line, if possible. type Text_File is limited private; - -- Represents a text file. Default is invalid text file. + -- Represents a text file. Default is invalid text file function Is_Valid (File : Text_File) return Boolean; -- Returns True if File designates an open text file that -- has not yet been closed. procedure Open (File : out Text_File; Name : String); - -- Open a text file. If this procedure fails, File is invalid. + -- Open a text file. If this procedure fails, File is invalid function End_Of_File (File : Text_File) return Boolean; - -- Returns True if the end of the text file File has been - -- reached. Fails if File is invalid. + -- Returns True if the end of the text file File has been reached. Fails if + -- File is invalid. procedure Get_Line (File : Text_File; Line : out String; Last : out Natural); - -- Reads a line from an open text file. Fails if File is invalid. + -- Reads a line from an open text file. Fails if File is invalid procedure Close (File : in out Text_File); - -- Close an open text file. File becomes invalid. - -- Fails if File is already invalid. + -- Close an open text file. File becomes invalid. Fails if File is already + -- invalid. private diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb index 5a8c2996e83..4f689adc555 100644 --- a/gcc/ada/prj.adb +++ b/gcc/ada/prj.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -102,6 +102,8 @@ package body Prj is Display_Library_Dir => No_Name, Library_Src_Dir => No_Name, Display_Library_Src_Dir => No_Name, + Library_ALI_Dir => No_Name, + Display_Library_ALI_Dir => No_Name, Library_Name => No_Name, Library_Kind => Static, Lib_Internal_Name => No_Name, @@ -121,6 +123,7 @@ package body Prj is Known_Order_Of_Source_Dirs => True, Object_Directory => No_Name, Display_Object_Dir => No_Name, + Library_TS => Empty_Time_Stamp, Exec_Directory => No_Name, Display_Exec_Dir => No_Name, Extends => No_Project, @@ -132,6 +135,7 @@ package body Prj is Default_Linker_Path => No_Name, Decl => No_Declarations, Imported_Projects => Empty_Project_List, + All_Imported_Projects => Empty_Project_List, Ada_Include_Path => null, Ada_Objects_Path => null, Include_Path_File => No_Name, @@ -485,7 +489,7 @@ package body Prj is end if; end loop; - -- If none can be found, create a new one. + -- If none can be found, create a new one if not Found then Element := @@ -526,7 +530,7 @@ package body Prj is end if; end loop; - -- If none can be found, create a new one. + -- If none can be found, create a new one if not Found then Element := diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads index 0f3429c09ba..e360bddb410 100644 --- a/gcc/ada/prj.ads +++ b/gcc/ada/prj.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -73,9 +73,11 @@ package Prj is -- Canonical_Case_File_Name is called on this variable in the body of Prj. ----------------------------------------------------- - -- Multi-language stuff that will be modified soon -- + -- Multi-language Stuff That Will be Modified Soon -- ----------------------------------------------------- + -- Still should be properly commented ??? + type Language_Index is new Nat; No_Language_Index : constant Language_Index := 0; @@ -232,6 +234,7 @@ package Prj is type Other_Source_Id is new Nat; No_Other_Source : constant Other_Source_Id := 0; + type Other_Source is record Language : Language_Index; -- language of the source File_Name : Name_Id; -- source file simple name @@ -273,10 +276,10 @@ package Prj is type Policy is (Autonomous, Compliant, Controlled, Restricted); -- Type to specify the symbol policy, when symbol control is supported. -- See full explanation about this type in package Symbols. - -- Autonomous: Create a symbol file without considering any reference - -- Compliant: Try to be as compatible as possible with an existing ref - -- Controlled: Fail if symbols are not the same as those in the reference - -- Restricted: Restrict the symbols to those in the symbol file + -- Autonomous: Create a symbol file without considering any reference + -- Compliant: Try to be as compatible as possible with an existing ref + -- Controlled: Fail if symbols are not the same as those in the reference + -- Restricted: Restrict the symbols to those in the symbol file type Symbol_Record is record Symbol_File : Name_Id := No_Name; @@ -301,12 +304,12 @@ package Prj is type String_List_Id is new Nat; Nil_String : constant String_List_Id := 0; type String_Element is record - Value : Name_Id := No_Name; - Index : Int := 0; + Value : Name_Id := No_Name; + Index : Int := 0; Display_Value : Name_Id := No_Name; - Location : Source_Ptr := No_Location; - Flag : Boolean := False; - Next : String_List_Id := Nil_String; + Location : Source_Ptr := No_Location; + Flag : Boolean := False; + Next : String_List_Id := Nil_String; end record; -- To hold values for string list variables and array elements. -- Component Flag may be used for various purposes. For source @@ -353,9 +356,9 @@ package Prj is type Variable_Id is new Nat; No_Variable : constant Variable_Id := 0; type Variable is record - Next : Variable_Id := No_Variable; - Name : Name_Id; - Value : Variable_Value; + Next : Variable_Id := No_Variable; + Name : Name_Id; + Value : Variable_Value; end record; -- To hold the list of variables in a project file and in packages @@ -430,7 +433,7 @@ package Prj is Parent : Package_Id := No_Package; Next : Package_Id := No_Package; end record; - -- A package. Includes declarations that may include other packages + -- A package (includes declarations that may include other packages) package Package_Table is new GNAT.Dynamic_Tables (Table_Component_Type => Package_Element, @@ -473,8 +476,8 @@ package Prj is -- The position in the project file source where -- Ada_Spec_Suffix is defined. - Impl_Suffixes : Impl_Suffix_Array := No_Impl_Suffixes; - Supp_Suffixes : Supp_Language_Index := No_Supp_Language_Index; + Impl_Suffixes : Impl_Suffix_Array := No_Impl_Suffixes; + Supp_Suffixes : Supp_Language_Index := No_Supp_Language_Index; -- The source suffixes of the different languages Body_Suffix : Array_Element_Id := No_Array_Element; @@ -553,7 +556,7 @@ package Prj is Supp_Languages : Supp_Language_Index := No_Supp_Language_Index; -- Indicate the different languages of the source of this project - First_Referred_By : Project_Id := No_Project; + First_Referred_By : Project_Id := No_Project; -- The project, if any, that was the first to be known as importing or -- extending this project. Set by Prj.Proc.Process. @@ -585,6 +588,7 @@ package Prj is -- Directory where the project file resides. Set by Prj.Proc.Process Display_Directory : Name_Id := No_Name; + -- comment ??? Dir_Path : String_Access; -- Same as Directory, but as an access to String. Set by @@ -603,18 +607,31 @@ package Prj is -- different from Library_Dir for platforms where the file names are -- case-insensitive. + Library_TS : Time_Stamp_Type := Empty_Time_Stamp; + -- The timestamp of a library file in a library project. + -- Set by MLib.Prj.Check_Library. + Library_Src_Dir : Name_Id := No_Name; - -- If a library project, directory where the sources and the ALI files - -- of the library are copied. By default, if attribute Library_Src_Dir - -- is not specified, sources are not copied anywhere and ALI files are - -- copied in the Library Directory. Set by - -- Prj.Nmsc.Language_Independent_Check. + -- If a Stand-Alone Library project, directory where the sources + -- of the interfaces of the library are copied. By default, if + -- attribute Library_Src_Dir is not specified, sources of the interfaces + -- are not copied anywhere. Set by Prj.Nmsc.Check_Stand_Alone_Library. Display_Library_Src_Dir : Name_Id := No_Name; -- The name of the library source directory, for display purposes. -- May be different from Library_Src_Dir for platforms where the file -- names are case-insensitive. + Library_ALI_Dir : Name_Id := No_Name; + -- In a library project, directory where the ALI files are copied. + -- If attribute Library_ALI_Dir is not specified, ALI files are + -- copied in the Library_Dir. Set by Prj.Nmsc.Check_Library_Attributes. + + Display_Library_ALI_Dir : Name_Id := No_Name; + -- The name of the library ALI directory, for display purposes. May be + -- different from Library_ALI_Dir for platforms where the file names are + -- case-insensitive. + Library_Name : Name_Id := No_Name; -- If a library project, name of the library -- Set by Prj.Nmsc.Language_Independent_Check. @@ -653,8 +670,8 @@ package Prj is -- A flag that indicates that there are non-Ada sources in this project Sources : String_List_Id := Nil_String; - -- The list of all the source file names. Set by - -- Prj.Nmsc.Check_Ada_Naming_Scheme. + -- The list of all the source file names. + -- Set by Prj.Nmsc.Check_Ada_Naming_Scheme. First_Other_Source : Other_Source_Id := No_Other_Source; Last_Other_Source : Other_Source_Id := No_Other_Source; @@ -711,13 +728,14 @@ package Prj is -- Set by Prj.Nmsc.Check_Naming_Scheme. First_Language_Processing : First_Language_Processing_Data := - Default_First_Language_Processing_Data; + Default_First_Language_Processing_Data; + -- Comment needed ??? - Supp_Language_Processing : Supp_Language_Index := - No_Supp_Language_Index; + Supp_Language_Processing : Supp_Language_Index := No_Supp_Language_Index; + -- Comment needed - Default_Linker : Name_Id := No_Name; - Default_Linker_Path : Name_Id := No_Name; + Default_Linker : Name_Id := No_Name; + Default_Linker_Path : Name_Id := No_Name; Decl : Declarations := No_Declarations; -- The declarations (variables, attributes and packages) of this @@ -727,6 +745,10 @@ package Prj is -- The list of all directly imported projects, if any. Set by -- Prj.Proc.Process. + All_Imported_Projects : Project_List := Empty_Project_List; + -- The list of all projects imported directly or indirectly, if any. + -- Set by Make.Initialize. + Ada_Include_Path : String_Access := null; -- The cached value of ADA_INCLUDE_PATH for this project file. Do not -- use this field directly outside of the compiler, use @@ -771,7 +793,7 @@ package Prj is -- A flag to avoid checking repetitively the naming scheme of -- this project file. Set by Prj.Nmsc.Check_Ada_Naming_Scheme. - Seen : Boolean := False; + Seen : Boolean := False; -- A flag to mark a project as "visited" to avoid processing the same -- project several time. @@ -943,14 +965,14 @@ package Prj is In_Project : Project_Data; In_Tree : Project_Tree_Ref) return Boolean; -- Return True when Language is one of the languages used in - -- project Project. + -- project In_Project. procedure Set (Language : Language_Index; Present : Boolean; In_Project : in out Project_Data; In_Tree : Project_Tree_Ref); - -- Indicate if Language is or not a language used in project Project + -- Indicate if Language is or not a language used in project In_Project function Language_Processing_Data_Of (Language : Language_Index; @@ -1018,6 +1040,7 @@ private Table_Low_Bound => 1, Table_Initial => 5, Table_Increment => 100); + -- Comment ??? package Path_File_Table is new GNAT.Dynamic_Tables (Table_Component_Type => Name_Id, @@ -1045,10 +1068,11 @@ private -- A table to store the object dirs, before creating the object path file type Private_Project_Tree_Data is record - Namings : Naming_Table.Instance; - Path_Files : Path_File_Table.Instance; - Source_Paths : Source_Path_Table.Instance; - Object_Paths : Object_Path_Table.Instance; - Default_Naming : Naming_Data; + Namings : Naming_Table.Instance; + Path_Files : Path_File_Table.Instance; + Source_Paths : Source_Path_Table.Instance; + Object_Paths : Object_Path_Table.Instance; + Default_Naming : Naming_Data; end record; + -- Comment ??? end Prj; diff --git a/gcc/ada/raise-gcc.c b/gcc/ada/raise-gcc.c new file mode 100644 index 00000000000..49b1791577c --- /dev/null +++ b/gcc/ada/raise-gcc.c @@ -0,0 +1,1151 @@ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * R A I S E - G C C * + * * + * C Implementation File * + * * + * Copyright (C) 1992-2005, Free Software Foundation, Inc. * + * * + * GNAT is free software; you can redistribute it and/or modify it under * + * terms of the GNU General Public License as published by the Free Soft- * + * ware Foundation; either version 2, or (at your option) any later ver- * + * sion. GNAT is distributed in the hope that it will be useful, but WITH- * + * OUT 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 distributed with GNAT; see file COPYING. If not, write * + * to the Free Software Foundation, 51 Franklin Street, Fifth Floor, * + * Boston, MA 02110-1301, USA. * + * * + * As a special exception, if you link this file with other files to * + * produce an executable, this file does not by itself cause the resulting * + * executable to be covered by the GNU General Public License. This except- * + * ion does not however invalidate any other reasons why the executable * + * file might be covered by the GNU Public License. * + * * + * GNAT was originally developed by the GNAT team at New York University. * + * Extensive contributions were provided by Ada Core Technologies Inc. * + * * + ****************************************************************************/ + +/* Code related to the integration of the GCC mechanism for exception + handling. */ + +#ifdef IN_RTS +#include "tconfig.h" +/* In the top-of-tree GCC, tconfig does not include tm.h, but in GCC 3.2 + it does. To avoid branching raise.c just for that purpose, we kludge by + looking for a symbol always defined by tm.h and if it's not defined, + we include it. */ +#ifndef FIRST_PSEUDO_REGISTER +#include "coretypes.h" +#include "tm.h" +#endif +#include "tsystem.h" +#include +#include +typedef char bool; +# define true 1 +# define false 0 +#else +#include "config.h" +#include "system.h" +#endif + +#include "adaint.h" +#include "raise.h" + +/* The names of a couple of "standard" routines for unwinding/propagation + actually vary depending on the underlying GCC scheme for exception handling + (SJLJ or DWARF). We need a consistently named interface to import from + a-except, so wrappers are defined here. + + Besides, eventhough the compiler is never setup to use the GCC propagation + circuitry, it still relies on exceptions internally and part of the sources + to handle to exceptions are shared with the run-time library. We need + dummy definitions for the wrappers to satisfy the linker in this case. + + The types to be used by those wrappers in the run-time library are target + types exported by unwind.h. We used to piggyback on them for the compiler + stubs, but there is no guarantee that unwind.h is always in sight so we + define our own set below. These are dummy types as the wrappers are never + called in the compiler case. */ + +#ifdef IN_RTS + +#include "unwind.h" + +typedef struct _Unwind_Context _Unwind_Context; +typedef struct _Unwind_Exception _Unwind_Exception; + +#else + +typedef void _Unwind_Context; +typedef void _Unwind_Exception; +typedef int _Unwind_Reason_Code; + +#endif + +_Unwind_Reason_Code +__gnat_Unwind_RaiseException (_Unwind_Exception *); + +_Unwind_Reason_Code +__gnat_Unwind_ForcedUnwind (_Unwind_Exception *, void *, void *); + + +#ifdef IN_RTS /* For eh personality routine */ + +#include "dwarf2.h" +#include "unwind-dw2-fde.h" +#include "unwind-pe.h" + + +/* -------------------------------------------------------------- + -- The DB stuff below is there for debugging purposes only. -- + -------------------------------------------------------------- */ + +#define DB_PHASES 0x1 +#define DB_CSITE 0x2 +#define DB_ACTIONS 0x4 +#define DB_REGIONS 0x8 + +#define DB_ERR 0x1000 + +/* The "action" stuff below is also there for debugging purposes only. */ + +typedef struct +{ + _Unwind_Action phase; + char * description; +} phase_descriptor; + +static phase_descriptor phase_descriptors[] + = {{ _UA_SEARCH_PHASE, "SEARCH_PHASE" }, + { _UA_CLEANUP_PHASE, "CLEANUP_PHASE" }, + { _UA_HANDLER_FRAME, "HANDLER_FRAME" }, + { _UA_FORCE_UNWIND, "FORCE_UNWIND" }, + { -1, 0}}; + +static int +db_accepted_codes (void) +{ + static int accepted_codes = -1; + + if (accepted_codes == -1) + { + char * db_env = (char *) getenv ("EH_DEBUG"); + + accepted_codes = db_env ? (atoi (db_env) | DB_ERR) : 0; + /* Arranged for ERR stuff to always be visible when the variable + is defined. One may just set the variable to 0 to see the ERR + stuff only. */ + } + + return accepted_codes; +} + +#define DB_INDENT_INCREASE 0x01 +#define DB_INDENT_DECREASE 0x02 +#define DB_INDENT_OUTPUT 0x04 +#define DB_INDENT_NEWLINE 0x08 +#define DB_INDENT_RESET 0x10 + +#define DB_INDENT_UNIT 8 + +static void +db_indent (int requests) +{ + static int current_indentation_level = 0; + + if (requests & DB_INDENT_RESET) + { + current_indentation_level = 0; + } + + if (requests & DB_INDENT_INCREASE) + { + current_indentation_level ++; + } + + if (requests & DB_INDENT_DECREASE) + { + current_indentation_level --; + } + + if (requests & DB_INDENT_NEWLINE) + { + fprintf (stderr, "\n"); + } + + if (requests & DB_INDENT_OUTPUT) + { + fprintf (stderr, "%*s", + current_indentation_level * DB_INDENT_UNIT, " "); + } + +} + +static void ATTRIBUTE_PRINTF_2 +db (int db_code, char * msg_format, ...) +{ + if (db_accepted_codes () & db_code) + { + va_list msg_args; + + db_indent (DB_INDENT_OUTPUT); + + va_start (msg_args, msg_format); + vfprintf (stderr, msg_format, msg_args); + va_end (msg_args); + } +} + +static void +db_phases (int phases) +{ + phase_descriptor *a = phase_descriptors; + + if (! (db_accepted_codes() & DB_PHASES)) + return; + + db (DB_PHASES, "\n"); + + for (; a->description != 0; a++) + if (phases & a->phase) + db (DB_PHASES, "%s ", a->description); + + db (DB_PHASES, " :\n"); +} + + +/* --------------------------------------------------------------- + -- Now come a set of useful structures and helper routines. -- + --------------------------------------------------------------- */ + +/* There are three major runtime tables involved, generated by the + GCC back-end. Contents slightly vary depending on the underlying + implementation scheme (dwarf zero cost / sjlj). + + ======================================= + * Tables for the dwarf zero cost case * + ======================================= + + call_site [] + ------------------------------------------------------------------- + * region-start | region-length | landing-pad | first-action-index * + ------------------------------------------------------------------- + + Identify possible actions to be taken and where to resume control + for that when an exception propagates through a pc inside the region + delimited by start and length. + + A null landing-pad indicates that nothing is to be done. + + Otherwise, first-action-index provides an entry into the action[] + table which heads a list of possible actions to be taken (see below). + + If it is determined that indeed an action should be taken, that + is, if one action filter matches the exception being propagated, + then control should be transfered to landing-pad. + + A null first-action-index indicates that there are only cleanups + to run there. + + action [] + ------------------------------- + * action-filter | next-action * + ------------------------------- + + This table contains lists (called action chains) of possible actions + associated with call-site entries described in the call-site [] table. + There is at most one action list per call-site entry. + + A null action-filter indicates a cleanup. + + Non null action-filters provide an index into the ttypes [] table + (see below), from which information may be retrieved to check if it + matches the exception being propagated. + + action-filter > 0 means there is a regular handler to be run, + + action-filter < 0 means there is a some "exception_specification" + data to retrieve, which is only relevant for C++ + and should never show up for Ada. + + next-action indexes the next entry in the list. 0 indicates there is + no other entry. + + ttypes [] + --------------- + * ttype-value * + --------------- + + A null value indicates a catch-all handler in C++, and an "others" + handler in Ada. + + Non null values are used to match the exception being propagated: + In C++ this is a pointer to some rtti data, while in Ada this is an + exception id. + + The special id value 1 indicates an "all_others" handler. + + For C++, this table is actually also used to store "exception + specification" data. The differentiation between the two kinds + of entries is made by the sign of the associated action filter, + which translates into positive or negative offsets from the + so called base of the table: + + Exception Specification data is stored at positive offsets from + the ttypes table base, which Exception Type data is stored at + negative offsets: + + --------------------------------------------------------------------------- + + Here is a quick summary of the tables organization: + + +-- Unwind_Context (pc, ...) + | + |(pc) + | + | CALL-SITE[] + | + | +=============================================================+ + | | region-start + length | landing-pad | first-action-index | + | +=============================================================+ + +-> | pc range 0 => no-action 0 => cleanups only | + | !0 => jump @ N --+ | + +====================================================== | ====+ + | + | + ACTION [] | + | + +==========================================================+ | + | action-filter | next-action | | + +==========================================================+ | + | 0 => cleanup | | + | >0 => ttype index for handler ------+ 0 => end of chain | <-+ + | <0 => ttype index for spec data | | + +==================================== | ===================+ + | + | + TTYPES [] | + | Offset negated from + +=====================+ | the actual base. + | ttype-value | | + +============+=====================+ | + | | 0 => "others" | | + | ... | 1 => "all others" | <---+ + | | X => exception id | + | handlers +---------------------+ + | | ... | + | ... | ... | + | | ... | + +============+=====================+ <<------ Table base + | ... | ... | + | specs | ... | (should not see negative filter + | ... | ... | values for Ada). + +============+=====================+ + + + ============================ + * Tables for the sjlj case * + ============================ + + So called "function contexts" are pushed on a context stack by calls to + _Unwind_SjLj_Register on function entry, and popped off at exit points by + calls to _Unwind_SjLj_Unregister. The current call_site for a function is + updated in the function context as the function's code runs along. + + The generic unwinding engine in _Unwind_RaiseException walks the function + context stack and not the actual call chain. + + The ACTION and TTYPES tables remain unchanged, which allows to search them + during the propagation phase to determine wether or not the propagated + exception is handled somewhere. When it is, we only "jump" up once directly + to the context where the handler will be found. Besides, this allows "break + exception unhandled" to work also + + The CALL-SITE table is setup differently, though: the pc attached to the + unwind context is a direct index into the table, so the entries in this + table do not hold region bounds any more. + + A special index (-1) is used to indicate that no action is possibly + connected with the context at hand, so null landing pads cannot appear + in the table. + + Additionally, landing pad values in the table do not represent code address + to jump at, but so called "dispatch" indices used by a common landing pad + for the function to switch to the appropriate post-landing-pad. + + +-- Unwind_Context (pc, ...) + | + | pc = call-site index + | 0 => terminate (should not see this for Ada) + | -1 => no-action + | + | CALL-SITE[] + | + | +=====================================+ + | | landing-pad | first-action-index | + | +=====================================+ + +-> | 0 => cleanups only | + | dispatch index N | + +=====================================+ + + + =================================== + * Basic organization of this unit * + =================================== + + The major point of this unit is to provide an exception propagation + personality routine for Ada. This is __gnat_eh_personality. + + It is provided with a pointer to the propagated exception, an unwind + context describing a location the propagation is going through, and a + couple of other arguments including a description of the current + propagation phase. + + It shall return to the generic propagation engine what is to be performed + next, after possible context adjustments, depending on what it finds in the + traversed context (a handler for the exception, a cleanup, nothing, ...), + and on the propagation phase. + + A number of structures and subroutines are used for this purpose, as + sketched below: + + o region_descriptor: General data associated with the context (base pc, + call-site table, action table, ttypes table, ...) + + o action_descriptor: Data describing the action to be taken for the + propagated exception in the provided context (kind of action: nothing, + handler, cleanup; pointer to the action table entry, ...). + + raise + | + ... (a-except.adb) + | + Propagate_Exception (a-exexpr.adb) + | + | + _Unwind_RaiseException (libgcc) + | + | (Ada frame) + | + +--> __gnat_eh_personality (context, exception) + | + +--> get_region_descriptor_for (context) + | + +--> get_action_descriptor_for (context, exception, region) + | | + | +--> get_call_site_action_for (context, region) + | (one version for each underlying scheme) + | + +--> setup_to_install (context) + + This unit is inspired from the C++ version found in eh_personality.cc, + part of libstdc++-v3. + +*/ + + +/* This is an incomplete "proxy" of the structure of exception objects as + built by the GNAT runtime library. Accesses to other fields than the common + header are performed through subprogram calls to alleviate the need of an + exact counterpart here and potential alignment/size issues for the common + header. See a-exexpr.adb. */ + +typedef struct +{ + _Unwind_Exception common; + /* ABI header, maximally aligned. */ +} _GNAT_Exception; + +/* The two constants below are specific ttype identifiers for special + exception ids. Their type should match what a-exexpr exports. */ + +extern const int __gnat_others_value; +#define GNAT_OTHERS ((_Unwind_Ptr) &__gnat_others_value) + +extern const int __gnat_all_others_value; +#define GNAT_ALL_OTHERS ((_Unwind_Ptr) &__gnat_all_others_value) + +/* Describe the useful region data associated with an unwind context. */ + +typedef struct +{ + /* The base pc of the region. */ + _Unwind_Ptr base; + + /* Pointer to the Language Specific Data for the region. */ + _Unwind_Ptr lsda; + + /* Call-Site data associated with this region. */ + unsigned char call_site_encoding; + const unsigned char *call_site_table; + + /* The base to which are relative landing pad offsets inside the call-site + entries . */ + _Unwind_Ptr lp_base; + + /* Action-Table associated with this region. */ + const unsigned char *action_table; + + /* Ttype data associated with this region. */ + unsigned char ttype_encoding; + const unsigned char *ttype_table; + _Unwind_Ptr ttype_base; + +} region_descriptor; + +static void +db_region_for (region_descriptor *region, _Unwind_Context *uw_context) +{ + _Unwind_Ptr ip = _Unwind_GetIP (uw_context) - 1; + + if (! (db_accepted_codes () & DB_REGIONS)) + return; + + db (DB_REGIONS, "For ip @ 0x%08x => ", ip); + + if (region->lsda) + db (DB_REGIONS, "lsda @ 0x%x", region->lsda); + else + db (DB_REGIONS, "no lsda"); + + db (DB_REGIONS, "\n"); +} + +/* Retrieve the ttype entry associated with FILTER in the REGION's + ttype table. */ + +static const _Unwind_Ptr +get_ttype_entry_for (region_descriptor *region, long filter) +{ + _Unwind_Ptr ttype_entry; + + filter *= size_of_encoded_value (region->ttype_encoding); + read_encoded_value_with_base + (region->ttype_encoding, region->ttype_base, + region->ttype_table - filter, &ttype_entry); + + return ttype_entry; +} + +/* Fill out the REGION descriptor for the provided UW_CONTEXT. */ + +static void +get_region_description_for (_Unwind_Context *uw_context, + region_descriptor *region) +{ + const unsigned char * p; + _Unwind_Word tmp; + unsigned char lpbase_encoding; + + /* Get the base address of the lsda information. If the provided context + is null or if there is no associated language specific data, there's + nothing we can/should do. */ + region->lsda + = (_Unwind_Ptr) (uw_context + ? _Unwind_GetLanguageSpecificData (uw_context) : 0); + + if (! region->lsda) + return; + + /* Parse the lsda and fill the region descriptor. */ + p = (char *)region->lsda; + + region->base = _Unwind_GetRegionStart (uw_context); + + /* Find @LPStart, the base to which landing pad offsets are relative. */ + lpbase_encoding = *p++; + if (lpbase_encoding != DW_EH_PE_omit) + p = read_encoded_value + (uw_context, lpbase_encoding, p, ®ion->lp_base); + else + region->lp_base = region->base; + + /* Find @TType, the base of the handler and exception spec type data. */ + region->ttype_encoding = *p++; + if (region->ttype_encoding != DW_EH_PE_omit) + { + p = read_uleb128 (p, &tmp); + region->ttype_table = p + tmp; + } + else + region->ttype_table = 0; + + region->ttype_base + = base_of_encoded_value (region->ttype_encoding, uw_context); + + /* Get the encoding and length of the call-site table; the action table + immediately follows. */ + region->call_site_encoding = *p++; + region->call_site_table = read_uleb128 (p, &tmp); + + region->action_table = region->call_site_table + tmp; +} + + +/* Describe an action to be taken when propagating an exception up to + some context. */ + +typedef enum +{ + /* Found some call site base data, but need to analyze further + before being able to decide. */ + unknown, + + /* There is nothing relevant in the context at hand. */ + nothing, + + /* There are only cleanups to run in this context. */ + cleanup, + + /* There is a handler for the exception in this context. */ + handler +} action_kind; + +/* filter value for cleanup actions. */ +const int cleanup_filter = 0; + +typedef struct +{ + /* The kind of action to be taken. */ + action_kind kind; + + /* A pointer to the action record entry. */ + const unsigned char *table_entry; + + /* Where we should jump to actually take an action (trigger a cleanup or an + exception handler). */ + _Unwind_Ptr landing_pad; + + /* If we have a handler matching our exception, these are the filter to + trigger it and the corresponding id. */ + _Unwind_Sword ttype_filter; + _Unwind_Ptr ttype_entry; + +} action_descriptor; + +static void +db_action_for (action_descriptor *action, _Unwind_Context *uw_context) +{ + _Unwind_Ptr ip = _Unwind_GetIP (uw_context) - 1; + + db (DB_ACTIONS, "For ip @ 0x%08x => ", ip); + + switch (action->kind) + { + case unknown: + db (DB_ACTIONS, "lpad @ 0x%x, record @ 0x%x\n", + action->landing_pad, action->table_entry); + break; + + case nothing: + db (DB_ACTIONS, "Nothing\n"); + break; + + case cleanup: + db (DB_ACTIONS, "Cleanup\n"); + break; + + case handler: + db (DB_ACTIONS, "Handler, filter = %d\n", action->ttype_filter); + break; + + default: + db (DB_ACTIONS, "Err? Unexpected action kind !\n"); + break; + } + + return; +} + + +/* Search the call_site_table of REGION for an entry appropriate for the + UW_CONTEXT's ip. If one is found, store the associated landing_pad and + action_table entry, and set the ACTION kind to unknown for further + analysis. Otherwise, set the ACTION kind to nothing. + + There are two variants of this routine, depending on the underlying + mechanism (dwarf/sjlj), which account for differences in the tables + organization. +*/ + +#ifdef __USING_SJLJ_EXCEPTIONS__ + +#define __builtin_eh_return_data_regno(x) x + +static void +get_call_site_action_for (_Unwind_Context *uw_context, + region_descriptor *region, + action_descriptor *action) +{ + _Unwind_Ptr call_site + = _Unwind_GetIP (uw_context) - 1; + /* Subtract 1 because GetIP returns the actual call_site value + 1. */ + + /* call_site is a direct index into the call-site table, with two special + values : -1 for no-action and 0 for "terminate". The latter should never + show up for Ada. To test for the former, beware that _Unwind_Ptr might be + unsigned. */ + + if ((int)call_site < 0) + { + action->kind = nothing; + return; + } + else if (call_site == 0) + { + db (DB_ERR, "========> Err, null call_site for Ada/sjlj\n"); + action->kind = nothing; + return; + } + else + { + _Unwind_Word cs_lp, cs_action; + + /* Let the caller know there may be an action to take, but let it + determine the kind. */ + action->kind = unknown; + + /* We have a direct index into the call-site table, but this table is + made of leb128 values, the encoding length of which is variable. We + can't merely compute an offset from the index, then, but have to read + all the entries before the one of interest. */ + + const unsigned char * p = region->call_site_table; + + do { + p = read_uleb128 (p, &cs_lp); + p = read_uleb128 (p, &cs_action); + } while (--call_site); + + + action->landing_pad = cs_lp + 1; + + if (cs_action) + action->table_entry = region->action_table + cs_action - 1; + else + action->table_entry = 0; + + return; + } +} + +#else +/* ! __USING_SJLJ_EXCEPTIONS__ */ + +static void +get_call_site_action_for (_Unwind_Context *uw_context, + region_descriptor *region, + action_descriptor *action) +{ + _Unwind_Ptr ip + = _Unwind_GetIP (uw_context) - 1; + /* Subtract 1 because GetIP yields a call return address while we are + interested in information for the call point. This does not always yield + the exact call instruction address but always brings the ip back within + the corresponding region. + + ??? When unwinding up from a signal handler triggered by a trap on some + instruction, we usually have the faulting instruction address here and + subtracting 1 might get us into the wrong region. */ + + const unsigned char * p + = region->call_site_table; + + /* Unless we are able to determine otherwise ... */ + action->kind = nothing; + + db (DB_CSITE, "\n"); + + while (p < region->action_table) + { + _Unwind_Ptr cs_start, cs_len, cs_lp; + _Unwind_Word cs_action; + + /* Note that all call-site encodings are "absolute" displacements. */ + p = read_encoded_value (0, region->call_site_encoding, p, &cs_start); + p = read_encoded_value (0, region->call_site_encoding, p, &cs_len); + p = read_encoded_value (0, region->call_site_encoding, p, &cs_lp); + p = read_uleb128 (p, &cs_action); + + db (DB_CSITE, + "c_site @ 0x%08x (+0x%03x), len = %3d, lpad @ 0x%08x (+0x%03x)\n", + region->base+cs_start, cs_start, cs_len, + region->lp_base+cs_lp, cs_lp); + + /* The table is sorted, so if we've passed the ip, stop. */ + if (ip < region->base + cs_start) + break; + + /* If we have a match, fill the ACTION fields accordingly. */ + else if (ip < region->base + cs_start + cs_len) + { + /* Let the caller know there may be an action to take, but let it + determine the kind. */ + action->kind = unknown; + + if (cs_lp) + action->landing_pad = region->lp_base + cs_lp; + else + action->landing_pad = 0; + + if (cs_action) + action->table_entry = region->action_table + cs_action - 1; + else + action->table_entry = 0; + + db (DB_CSITE, "+++\n"); + return; + } + } + + db (DB_CSITE, "---\n"); +} + +#endif + +/* With CHOICE an exception choice representing an "exception - when" + argument, and PROPAGATED_EXCEPTION a pointer to the currently propagated + occurrence, return true iif the latter matches the former, that is, if + PROPAGATED_EXCEPTION is caught by the handling code controlled by CHOICE. + This takes care of the special Non_Ada_Error case on VMS. */ + +#define Is_Handled_By_Others __gnat_is_handled_by_others +#define Language_For __gnat_language_for +#define Import_Code_For __gnat_import_code_for +#define EID_For __gnat_eid_for +#define Adjust_N_Cleanups_For __gnat_adjust_n_cleanups_for + +extern bool Is_Handled_By_Others (_Unwind_Ptr eid); +extern char Language_For (_Unwind_Ptr eid); + +extern Exception_Code Import_Code_For (_Unwind_Ptr eid); + +extern Exception_Id EID_For (_GNAT_Exception * e); +extern void Adjust_N_Cleanups_For (_GNAT_Exception * e, int n); + +static int +is_handled_by (_Unwind_Ptr choice, _GNAT_Exception * propagated_exception) +{ + /* Pointer to the GNAT exception data corresponding to the propagated + occurrence. */ + _Unwind_Ptr E = (_Unwind_Ptr) EID_For (propagated_exception); + + /* Base matching rules: An exception data (id) matches itself, "when + all_others" matches anything and "when others" matches anything unless + explicitly stated otherwise in the propagated occurrence. */ + + bool is_handled = + choice == E + || choice == GNAT_ALL_OTHERS + || (choice == GNAT_OTHERS && Is_Handled_By_Others (E)); + + /* In addition, on OpenVMS, Non_Ada_Error matches VMS exceptions, and we + may have different exception data pointers that should match for the + same condition code, if both an export and an import have been + registered. The import code for both the choice and the propagated + occurrence are expected to have been masked off regarding severity + bits already (at registration time for the former and from within the + low level exception vector for the latter). */ +#ifdef VMS + #define Non_Ada_Error system__aux_dec__non_ada_error + extern struct Exception_Data Non_Ada_Error; + + is_handled |= + (Language_For (E) == 'V' + && choice != GNAT_OTHERS && choice != GNAT_ALL_OTHERS + && ((Language_For (choice) == 'V' && Import_Code_For (choice) != 0 + && Import_Code_For (choice) == Import_Code_For (E)) + || choice == (_Unwind_Ptr)&Non_Ada_Error)); +#endif + + return is_handled; +} + +/* Fill out the ACTION to be taken from propagating UW_EXCEPTION up to + UW_CONTEXT in REGION. */ + +static void +get_action_description_for (_Unwind_Context *uw_context, + _Unwind_Exception *uw_exception, + region_descriptor *region, + action_descriptor *action) +{ + _GNAT_Exception * gnat_exception = (_GNAT_Exception *) uw_exception; + + /* Search the call site table first, which may get us a landing pad as well + as the head of an action record list. */ + get_call_site_action_for (uw_context, region, action); + db_action_for (action, uw_context); + + /* If there is not even a call_site entry, we are done. */ + if (action->kind == nothing) + return; + + /* Otherwise, check what we have at the place of the call site. */ + + /* No landing pad => no cleanups or handlers. */ + if (action->landing_pad == 0) + { + action->kind = nothing; + return; + } + + /* Landing pad + null table entry => only cleanups. */ + else if (action->table_entry == 0) + { + action->kind = cleanup; + action->ttype_filter = cleanup_filter; + /* The filter initialization is not strictly necessary, as cleanup-only + landing pads don't look at the filter value. It is there to ensure + we don't pass random values and so trigger potential confusion when + installing the context later on. */ + return; + } + + /* Landing pad + Table entry => handlers + possible cleanups. */ + else + { + const unsigned char * p = action->table_entry; + + _Unwind_Sword ar_filter, ar_disp; + + action->kind = nothing; + + while (1) + { + p = read_sleb128 (p, &ar_filter); + read_sleb128 (p, &ar_disp); + /* Don't assign p here, as it will be incremented by ar_disp + below. */ + + /* Null filters are for cleanups. */ + if (ar_filter == cleanup_filter) + { + action->kind = cleanup; + action->ttype_filter = cleanup_filter; + /* The filter initialization is required here, to ensure + the target landing pad branches to the cleanup code if + we happen not to find a matching handler. */ + } + + /* Positive filters are for regular handlers. */ + else if (ar_filter > 0) + { + /* See if the filter we have is for an exception which matches + the one we are propagating. */ + _Unwind_Ptr choice = get_ttype_entry_for (region, ar_filter); + + if (is_handled_by (choice, gnat_exception)) + { + action->kind = handler; + action->ttype_filter = ar_filter; + action->ttype_entry = choice; + return; + } + } + + /* Negative filter values are for C++ exception specifications. + Should not be there for Ada :/ */ + else + db (DB_ERR, "========> Err, filter < 0 for Ada/dwarf\n"); + + if (ar_disp == 0) + return; + + p += ar_disp; + } + } +} + +/* Setup in UW_CONTEXT the eh return target IP and data registers, which will + be restored with the others and retrieved by the landing pad once the jump + occurred. */ + +static void +setup_to_install (_Unwind_Context *uw_context, + _Unwind_Exception *uw_exception, + _Unwind_Ptr uw_landing_pad, + int uw_filter) +{ +#ifndef EH_RETURN_DATA_REGNO + /* We should not be called if the appropriate underlying support is not + there. */ + abort (); +#else + /* 1/ exception object pointer, which might be provided back to + _Unwind_Resume (and thus to this personality routine) if we are jumping + to a cleanup. */ + _Unwind_SetGR (uw_context, __builtin_eh_return_data_regno (0), + (_Unwind_Word)uw_exception); + + /* 2/ handler switch value register, which will also be used by the target + landing pad to decide what action it shall take. */ + _Unwind_SetGR (uw_context, __builtin_eh_return_data_regno (1), + (_Unwind_Word)uw_filter); + + /* Setup the address we should jump at to reach the code where there is the + "something" we found. */ + _Unwind_SetIP (uw_context, uw_landing_pad); +#endif +} + +/* The following is defined from a-except.adb. Its purpose is to enable + automatic backtraces upon exception raise, as provided through the + GNAT.Traceback facilities. */ +extern void __gnat_notify_handled_exception (void); +extern void __gnat_notify_unhandled_exception (void); + +/* Below is the eh personality routine per se. We currently assume that only + GNU-Ada exceptions are met. */ + +_Unwind_Reason_Code +__gnat_eh_personality (int uw_version, + _Unwind_Action uw_phases, + _Unwind_Exception_Class uw_exception_class, + _Unwind_Exception *uw_exception, + _Unwind_Context *uw_context) +{ + _GNAT_Exception * gnat_exception = (_GNAT_Exception *) uw_exception; + + region_descriptor region; + action_descriptor action; + + if (uw_version != 1) + return _URC_FATAL_PHASE1_ERROR; + + db_indent (DB_INDENT_RESET); + db_phases (uw_phases); + db_indent (DB_INDENT_INCREASE); + + /* Get the region description for the context we were provided with. This + will tell us if there is some lsda, call_site, action and/or ttype data + for the associated ip. */ + get_region_description_for (uw_context, ®ion); + db_region_for (®ion, uw_context); + + /* No LSDA => no handlers or cleanups => we shall unwind further up. */ + if (! region.lsda) + return _URC_CONTINUE_UNWIND; + + /* Search the call-site and action-record tables for the action associated + with this IP. */ + get_action_description_for (uw_context, uw_exception, ®ion, &action); + db_action_for (&action, uw_context); + + /* Whatever the phase, if there is nothing relevant in this frame, + unwinding should just go on. */ + if (action.kind == nothing) + return _URC_CONTINUE_UNWIND; + + /* If we found something in search phase, we should return a code indicating + what to do next depending on what we found. If we only have cleanups + around, we shall try to unwind further up to find a handler, otherwise, + tell we have a handler, which will trigger the second phase. */ + if (uw_phases & _UA_SEARCH_PHASE) + { + if (action.kind == cleanup) + { + Adjust_N_Cleanups_For (gnat_exception, 1); + return _URC_CONTINUE_UNWIND; + } + else + { + /* Trigger the appropriate notification routines before the second + phase starts, which ensures the stack is still intact. */ + __gnat_notify_handled_exception (); + + return _URC_HANDLER_FOUND; + } + } + + /* We found something in cleanup/handler phase, which might be the handler + or a cleanup for a handled occurrence, or a cleanup for an unhandled + occurrence (we are in a FORCED_UNWIND phase in this case). Install the + context to get there. */ + + /* If we are going to install a cleanup context, decrement the cleanup + count. This is required in a FORCED_UNWINDing phase (for an unhandled + exception), as this is used from the forced unwinding handler in + Ada.Exceptions.Exception_Propagation to decide wether unwinding should + proceed further or Unhandled_Exception_Terminate should be called. */ + if (action.kind == cleanup) + Adjust_N_Cleanups_For (gnat_exception, -1); + + setup_to_install + (uw_context, uw_exception, action.landing_pad, action.ttype_filter); + + return _URC_INSTALL_CONTEXT; +} + +/* Define the consistently named wrappers imported by Propagate_Exception. */ + +#ifdef __USING_SJLJ_EXCEPTIONS__ + +#undef _Unwind_RaiseException + +_Unwind_Reason_Code +__gnat_Unwind_RaiseException (_Unwind_Exception *e) +{ + return _Unwind_SjLj_RaiseException (e); +} + + +#undef _Unwind_ForcedUnwind + +_Unwind_Reason_Code +__gnat_Unwind_ForcedUnwind (_Unwind_Exception *e, + void * handler, + void * argument) +{ + return _Unwind_SjLj_ForcedUnwind (e, handler, argument); +} + + +#else /* __USING_SJLJ_EXCEPTIONS__ */ + +_Unwind_Reason_Code +__gnat_Unwind_RaiseException (_Unwind_Exception *e) +{ + return _Unwind_RaiseException (e); +} + +_Unwind_Reason_Code +__gnat_Unwind_ForcedUnwind (_Unwind_Exception *e, + void * handler, + void * argument) +{ + return _Unwind_ForcedUnwind (e, handler, argument); +} + +#endif /* __USING_SJLJ_EXCEPTIONS__ */ + +#else +/* ! IN_RTS */ + +/* Define the corresponding stubs for the compiler. */ + +/* We don't want fancy_abort here. */ +#undef abort + +_Unwind_Reason_Code +__gnat_Unwind_RaiseException (_Unwind_Exception *e ATTRIBUTE_UNUSED) +{ + abort (); +} + + +_Unwind_Reason_Code +__gnat_Unwind_ForcedUnwind (_Unwind_Exception *e ATTRIBUTE_UNUSED, + void * handler ATTRIBUTE_UNUSED, + void * argument ATTRIBUTE_UNUSED) +{ + abort (); +} + +#endif /* IN_RTS */ diff --git a/gcc/ada/raise.c b/gcc/ada/raise.c dissimilarity index 91% index 48d94232a23..490c6b2ee7d 100644 --- a/gcc/ada/raise.c +++ b/gcc/ada/raise.c @@ -1,1177 +1,79 @@ -/**************************************************************************** - * * - * GNAT COMPILER COMPONENTS * - * * - * R A I S E * - * * - * C Implementation File * - * * - * Copyright (C) 1992-2005, Free Software Foundation, Inc. * - * * - * GNAT is free software; you can redistribute it and/or modify it under * - * terms of the GNU General Public License as published by the Free Soft- * - * ware Foundation; either version 2, or (at your option) any later ver- * - * sion. GNAT is distributed in the hope that it will be useful, but WITH- * - * OUT 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 distributed with GNAT; see file COPYING. If not, write * - * to the Free Software Foundation, 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301, USA. * - * * - * As a special exception, if you link this file with other files to * - * produce an executable, this file does not by itself cause the resulting * - * executable to be covered by the GNU General Public License. This except- * - * ion does not however invalidate any other reasons why the executable * - * file might be covered by the GNU Public License. * - * * - * GNAT was originally developed by the GNAT team at New York University. * - * Extensive contributions were provided by Ada Core Technologies Inc. * - * * - ****************************************************************************/ - -/* Routines to support runtime exception handling */ - -#ifdef IN_RTS -#include "tconfig.h" -/* In the top-of-tree GCC, tconfig does not include tm.h, but in GCC 3.2 - it does. To avoid branching raise.c just for that purpose, we kludge by - looking for a symbol always defined by tm.h and if it's not defined, - we include it. */ -#ifndef FIRST_PSEUDO_REGISTER -#include "coretypes.h" -#include "tm.h" -#endif -#include "tsystem.h" -#include -typedef char bool; -# define true 1 -# define false 0 -#else -#include "config.h" -#include "system.h" -#endif - -#include "adaint.h" -#include "raise.h" - -/* We have not yet figured out how to import this directly */ - -void -_gnat_builtin_longjmp (void *ptr, int flag ATTRIBUTE_UNUSED) -{ - __builtin_longjmp (ptr, 1); -} - -/* When an exception is raised for which no handler exists, the procedure - Ada.Exceptions.Unhandled_Exception is called, which performs the call to - adafinal to complete finalization, and then prints out the error messages - for the unhandled exception. The final step is to call this routine, which - performs any system dependent cleanup required. */ - -void -__gnat_unhandled_terminate (void) -{ - /* Special termination handling for VMS */ - -#ifdef VMS - { - long prvhnd; - - /* Remove the exception vector so it won't intercept any errors - in the call to exit, and go into and endless loop */ - - SYS$SETEXV (1, 0, 3, &prvhnd); - __gnat_os_exit (1); - } - -/* Termination handling for all other systems. */ - -#elif !defined (__RT__) - __gnat_os_exit (1); -#endif -} - -/* Below is the code related to the integration of the GCC mechanism for - exception handling. */ - -/* The names of a couple of "standard" routines for unwinding/propagation - actually vary depending on the underlying GCC scheme for exception handling - (SJLJ or DWARF). We need a consistently named interface to import from - a-except, so wrappers are defined here. - - Besides, eventhough the compiler is never setup to use the GCC propagation - circuitry, it still relies on exceptions internally and part of the sources - to handle to exceptions are shared with the run-time library. We need - dummy definitions for the wrappers to satisfy the linker in this case. - - The types to be used by those wrappers in the run-time library are target - types exported by unwind.h. We used to piggyback on them for the compiler - stubs, but there is no guarantee that unwind.h is always in sight so we - define our own set below. These are dummy types as the wrappers are never - called in the compiler case. */ - -#ifdef IN_RTS - -#include "unwind.h" - -typedef struct _Unwind_Context _Unwind_Context; -typedef struct _Unwind_Exception _Unwind_Exception; - -#else - -typedef void _Unwind_Context; -typedef void _Unwind_Exception; -typedef int _Unwind_Reason_Code; - -#endif - -_Unwind_Reason_Code -__gnat_Unwind_RaiseException (_Unwind_Exception *); - -_Unwind_Reason_Code -__gnat_Unwind_ForcedUnwind (_Unwind_Exception *, void *, void *); - - -#ifdef IN_RTS /* For eh personality routine */ - -#include "dwarf2.h" -#include "unwind-dw2-fde.h" -#include "unwind-pe.h" - - -/* -------------------------------------------------------------- - -- The DB stuff below is there for debugging purposes only. -- - -------------------------------------------------------------- */ - -#define DB_PHASES 0x1 -#define DB_CSITE 0x2 -#define DB_ACTIONS 0x4 -#define DB_REGIONS 0x8 - -#define DB_ERR 0x1000 - -/* The "action" stuff below is also there for debugging purposes only. */ - -typedef struct -{ - _Unwind_Action phase; - char * description; -} phase_descriptor; - -static phase_descriptor phase_descriptors[] - = {{ _UA_SEARCH_PHASE, "SEARCH_PHASE" }, - { _UA_CLEANUP_PHASE, "CLEANUP_PHASE" }, - { _UA_HANDLER_FRAME, "HANDLER_FRAME" }, - { _UA_FORCE_UNWIND, "FORCE_UNWIND" }, - { -1, 0}}; - -static int -db_accepted_codes (void) -{ - static int accepted_codes = -1; - - if (accepted_codes == -1) - { - char * db_env = (char *) getenv ("EH_DEBUG"); - - accepted_codes = db_env ? (atoi (db_env) | DB_ERR) : 0; - /* Arranged for ERR stuff to always be visible when the variable - is defined. One may just set the variable to 0 to see the ERR - stuff only. */ - } - - return accepted_codes; -} - -#define DB_INDENT_INCREASE 0x01 -#define DB_INDENT_DECREASE 0x02 -#define DB_INDENT_OUTPUT 0x04 -#define DB_INDENT_NEWLINE 0x08 -#define DB_INDENT_RESET 0x10 - -#define DB_INDENT_UNIT 8 - -static void -db_indent (int requests) -{ - static int current_indentation_level = 0; - - if (requests & DB_INDENT_RESET) - { - current_indentation_level = 0; - } - - if (requests & DB_INDENT_INCREASE) - { - current_indentation_level ++; - } - - if (requests & DB_INDENT_DECREASE) - { - current_indentation_level --; - } - - if (requests & DB_INDENT_NEWLINE) - { - fprintf (stderr, "\n"); - } - - if (requests & DB_INDENT_OUTPUT) - { - fprintf (stderr, "%*s", - current_indentation_level * DB_INDENT_UNIT, " "); - } - -} - -static void ATTRIBUTE_PRINTF_2 -db (int db_code, char * msg_format, ...) -{ - if (db_accepted_codes () & db_code) - { - va_list msg_args; - - db_indent (DB_INDENT_OUTPUT); - - va_start (msg_args, msg_format); - vfprintf (stderr, msg_format, msg_args); - va_end (msg_args); - } -} - -static void -db_phases (int phases) -{ - phase_descriptor *a = phase_descriptors; - - if (! (db_accepted_codes() & DB_PHASES)) - return; - - db (DB_PHASES, "\n"); - - for (; a->description != 0; a++) - if (phases & a->phase) - db (DB_PHASES, "%s ", a->description); - - db (DB_PHASES, " :\n"); -} - - -/* --------------------------------------------------------------- - -- Now come a set of useful structures and helper routines. -- - --------------------------------------------------------------- */ - -/* There are three major runtime tables involved, generated by the - GCC back-end. Contents slightly vary depending on the underlying - implementation scheme (dwarf zero cost / sjlj). - - ======================================= - * Tables for the dwarf zero cost case * - ======================================= - - call_site [] - ------------------------------------------------------------------- - * region-start | region-length | landing-pad | first-action-index * - ------------------------------------------------------------------- - - Identify possible actions to be taken and where to resume control - for that when an exception propagates through a pc inside the region - delimited by start and length. - - A null landing-pad indicates that nothing is to be done. - - Otherwise, first-action-index provides an entry into the action[] - table which heads a list of possible actions to be taken (see below). - - If it is determined that indeed an action should be taken, that - is, if one action filter matches the exception being propagated, - then control should be transfered to landing-pad. - - A null first-action-index indicates that there are only cleanups - to run there. - - action [] - ------------------------------- - * action-filter | next-action * - ------------------------------- - - This table contains lists (called action chains) of possible actions - associated with call-site entries described in the call-site [] table. - There is at most one action list per call-site entry. - - A null action-filter indicates a cleanup. - - Non null action-filters provide an index into the ttypes [] table - (see below), from which information may be retrieved to check if it - matches the exception being propagated. - - action-filter > 0 means there is a regular handler to be run, - - action-filter < 0 means there is a some "exception_specification" - data to retrieve, which is only relevant for C++ - and should never show up for Ada. - - next-action indexes the next entry in the list. 0 indicates there is - no other entry. - - ttypes [] - --------------- - * ttype-value * - --------------- - - A null value indicates a catch-all handler in C++, and an "others" - handler in Ada. - - Non null values are used to match the exception being propagated: - In C++ this is a pointer to some rtti data, while in Ada this is an - exception id. - - The special id value 1 indicates an "all_others" handler. - - For C++, this table is actually also used to store "exception - specification" data. The differentiation between the two kinds - of entries is made by the sign of the associated action filter, - which translates into positive or negative offsets from the - so called base of the table: - - Exception Specification data is stored at positive offsets from - the ttypes table base, which Exception Type data is stored at - negative offsets: - - --------------------------------------------------------------------------- - - Here is a quick summary of the tables organization: - - +-- Unwind_Context (pc, ...) - | - |(pc) - | - | CALL-SITE[] - | - | +=============================================================+ - | | region-start + length | landing-pad | first-action-index | - | +=============================================================+ - +-> | pc range 0 => no-action 0 => cleanups only | - | !0 => jump @ N --+ | - +====================================================== | ====+ - | - | - ACTION [] | - | - +==========================================================+ | - | action-filter | next-action | | - +==========================================================+ | - | 0 => cleanup | | - | >0 => ttype index for handler ------+ 0 => end of chain | <-+ - | <0 => ttype index for spec data | | - +==================================== | ===================+ - | - | - TTYPES [] | - | Offset negated from - +=====================+ | the actual base. - | ttype-value | | - +============+=====================+ | - | | 0 => "others" | | - | ... | 1 => "all others" | <---+ - | | X => exception id | - | handlers +---------------------+ - | | ... | - | ... | ... | - | | ... | - +============+=====================+ <<------ Table base - | ... | ... | - | specs | ... | (should not see negative filter - | ... | ... | values for Ada). - +============+=====================+ - - - ============================ - * Tables for the sjlj case * - ============================ - - So called "function contexts" are pushed on a context stack by calls to - _Unwind_SjLj_Register on function entry, and popped off at exit points by - calls to _Unwind_SjLj_Unregister. The current call_site for a function is - updated in the function context as the function's code runs along. - - The generic unwinding engine in _Unwind_RaiseException walks the function - context stack and not the actual call chain. - - The ACTION and TTYPES tables remain unchanged, which allows to search them - during the propagation phase to determine wether or not the propagated - exception is handled somewhere. When it is, we only "jump" up once directly - to the context where the handler will be found. Besides, this allows "break - exception unhandled" to work also - - The CALL-SITE table is setup differently, though: the pc attached to the - unwind context is a direct index into the table, so the entries in this - table do not hold region bounds any more. - - A special index (-1) is used to indicate that no action is possibly - connected with the context at hand, so null landing pads cannot appear - in the table. - - Additionally, landing pad values in the table do not represent code address - to jump at, but so called "dispatch" indices used by a common landing pad - for the function to switch to the appropriate post-landing-pad. - - +-- Unwind_Context (pc, ...) - | - | pc = call-site index - | 0 => terminate (should not see this for Ada) - | -1 => no-action - | - | CALL-SITE[] - | - | +=====================================+ - | | landing-pad | first-action-index | - | +=====================================+ - +-> | 0 => cleanups only | - | dispatch index N | - +=====================================+ - - - =================================== - * Basic organization of this unit * - =================================== - - The major point of this unit is to provide an exception propagation - personality routine for Ada. This is __gnat_eh_personality. - - It is provided with a pointer to the propagated exception, an unwind - context describing a location the propagation is going through, and a - couple of other arguments including a description of the current - propagation phase. - - It shall return to the generic propagation engine what is to be performed - next, after possible context adjustments, depending on what it finds in the - traversed context (a handler for the exception, a cleanup, nothing, ...), - and on the propagation phase. - - A number of structures and subroutines are used for this purpose, as - sketched below: - - o region_descriptor: General data associated with the context (base pc, - call-site table, action table, ttypes table, ...) - - o action_descriptor: Data describing the action to be taken for the - propagated exception in the provided context (kind of action: nothing, - handler, cleanup; pointer to the action table entry, ...). - - raise - | - ... (a-except.adb) - | - Propagate_Exception (a-exexpr.adb) - | - | - _Unwind_RaiseException (libgcc) - | - | (Ada frame) - | - +--> __gnat_eh_personality (context, exception) - | - +--> get_region_descriptor_for (context) - | - +--> get_action_descriptor_for (context, exception, region) - | | - | +--> get_call_site_action_for (context, region) - | (one version for each underlying scheme) - | - +--> setup_to_install (context) - - This unit is inspired from the C++ version found in eh_personality.cc, - part of libstdc++-v3. - -*/ - - -/* This is an incomplete "proxy" of the structure of exception objects as - built by the GNAT runtime library. Accesses to other fields than the common - header are performed through subprogram calls to alleviate the need of an - exact counterpart here and potential alignment/size issues for the common - header. See a-exexpr.adb. */ - -typedef struct -{ - _Unwind_Exception common; - /* ABI header, maximally aligned. */ -} _GNAT_Exception; - -/* The two constants below are specific ttype identifiers for special - exception ids. Their type should match what a-exexpr exports. */ - -extern const int __gnat_others_value; -#define GNAT_OTHERS ((_Unwind_Ptr) &__gnat_others_value) - -extern const int __gnat_all_others_value; -#define GNAT_ALL_OTHERS ((_Unwind_Ptr) &__gnat_all_others_value) - -/* Describe the useful region data associated with an unwind context. */ - -typedef struct -{ - /* The base pc of the region. */ - _Unwind_Ptr base; - - /* Pointer to the Language Specific Data for the region. */ - _Unwind_Ptr lsda; - - /* Call-Site data associated with this region. */ - unsigned char call_site_encoding; - const unsigned char *call_site_table; - - /* The base to which are relative landing pad offsets inside the call-site - entries . */ - _Unwind_Ptr lp_base; - - /* Action-Table associated with this region. */ - const unsigned char *action_table; - - /* Ttype data associated with this region. */ - unsigned char ttype_encoding; - const unsigned char *ttype_table; - _Unwind_Ptr ttype_base; - -} region_descriptor; - -static void -db_region_for (region_descriptor *region, _Unwind_Context *uw_context) -{ - _Unwind_Ptr ip = _Unwind_GetIP (uw_context) - 1; - - if (! (db_accepted_codes () & DB_REGIONS)) - return; - - db (DB_REGIONS, "For ip @ 0x%08x => ", ip); - - if (region->lsda) - db (DB_REGIONS, "lsda @ 0x%x", region->lsda); - else - db (DB_REGIONS, "no lsda"); - - db (DB_REGIONS, "\n"); -} - -/* Retrieve the ttype entry associated with FILTER in the REGION's - ttype table. */ - -static const _Unwind_Ptr -get_ttype_entry_for (region_descriptor *region, long filter) -{ - _Unwind_Ptr ttype_entry; - - filter *= size_of_encoded_value (region->ttype_encoding); - read_encoded_value_with_base - (region->ttype_encoding, region->ttype_base, - region->ttype_table - filter, &ttype_entry); - - return ttype_entry; -} - -/* Fill out the REGION descriptor for the provided UW_CONTEXT. */ - -static void -get_region_description_for (_Unwind_Context *uw_context, - region_descriptor *region) -{ - const unsigned char * p; - _Unwind_Word tmp; - unsigned char lpbase_encoding; - - /* Get the base address of the lsda information. If the provided context - is null or if there is no associated language specific data, there's - nothing we can/should do. */ - region->lsda - = (_Unwind_Ptr) (uw_context - ? _Unwind_GetLanguageSpecificData (uw_context) : 0); - - if (! region->lsda) - return; - - /* Parse the lsda and fill the region descriptor. */ - p = (char *)region->lsda; - - region->base = _Unwind_GetRegionStart (uw_context); - - /* Find @LPStart, the base to which landing pad offsets are relative. */ - lpbase_encoding = *p++; - if (lpbase_encoding != DW_EH_PE_omit) - p = read_encoded_value - (uw_context, lpbase_encoding, p, ®ion->lp_base); - else - region->lp_base = region->base; - - /* Find @TType, the base of the handler and exception spec type data. */ - region->ttype_encoding = *p++; - if (region->ttype_encoding != DW_EH_PE_omit) - { - p = read_uleb128 (p, &tmp); - region->ttype_table = p + tmp; - } - else - region->ttype_table = 0; - - region->ttype_base - = base_of_encoded_value (region->ttype_encoding, uw_context); - - /* Get the encoding and length of the call-site table; the action table - immediately follows. */ - region->call_site_encoding = *p++; - region->call_site_table = read_uleb128 (p, &tmp); - - region->action_table = region->call_site_table + tmp; -} - - -/* Describe an action to be taken when propagating an exception up to - some context. */ - -typedef enum -{ - /* Found some call site base data, but need to analyze further - before being able to decide. */ - unknown, - - /* There is nothing relevant in the context at hand. */ - nothing, - - /* There are only cleanups to run in this context. */ - cleanup, - - /* There is a handler for the exception in this context. */ - handler -} action_kind; - - -typedef struct -{ - /* The kind of action to be taken. */ - action_kind kind; - - /* A pointer to the action record entry. */ - const unsigned char *table_entry; - - /* Where we should jump to actually take an action (trigger a cleanup or an - exception handler). */ - _Unwind_Ptr landing_pad; - - /* If we have a handler matching our exception, these are the filter to - trigger it and the corresponding id. */ - _Unwind_Sword ttype_filter; - _Unwind_Ptr ttype_entry; - -} action_descriptor; - - -static void -db_action_for (action_descriptor *action, _Unwind_Context *uw_context) -{ - _Unwind_Ptr ip = _Unwind_GetIP (uw_context) - 1; - - db (DB_ACTIONS, "For ip @ 0x%08x => ", ip); - - switch (action->kind) - { - case unknown: - db (DB_ACTIONS, "lpad @ 0x%x, record @ 0x%x\n", - action->landing_pad, action->table_entry); - break; - - case nothing: - db (DB_ACTIONS, "Nothing\n"); - break; - - case cleanup: - db (DB_ACTIONS, "Cleanup\n"); - break; - - case handler: - db (DB_ACTIONS, "Handler, filter = %d\n", action->ttype_filter); - break; - - default: - db (DB_ACTIONS, "Err? Unexpected action kind !\n"); - break; - } - - return; -} - - -/* Search the call_site_table of REGION for an entry appropriate for the - UW_CONTEXT's ip. If one is found, store the associated landing_pad and - action_table entry, and set the ACTION kind to unknown for further - analysis. Otherwise, set the ACTION kind to nothing. - - There are two variants of this routine, depending on the underlying - mechanism (dwarf/sjlj), which account for differences in the tables - organization. -*/ - -#ifdef __USING_SJLJ_EXCEPTIONS__ - -#define __builtin_eh_return_data_regno(x) x - -static void -get_call_site_action_for (_Unwind_Context *uw_context, - region_descriptor *region, - action_descriptor *action) -{ - _Unwind_Ptr call_site - = _Unwind_GetIP (uw_context) - 1; - /* Subtract 1 because GetIP returns the actual call_site value + 1. */ - - /* call_site is a direct index into the call-site table, with two special - values : -1 for no-action and 0 for "terminate". The latter should never - show up for Ada. To test for the former, beware that _Unwind_Ptr might be - unsigned. */ - - if ((int)call_site < 0) - { - action->kind = nothing; - return; - } - else if (call_site == 0) - { - db (DB_ERR, "========> Err, null call_site for Ada/sjlj\n"); - action->kind = nothing; - return; - } - else - { - _Unwind_Word cs_lp, cs_action; - - /* Let the caller know there may be an action to take, but let it - determine the kind. */ - action->kind = unknown; - - /* We have a direct index into the call-site table, but this table is - made of leb128 values, the encoding length of which is variable. We - can't merely compute an offset from the index, then, but have to read - all the entries before the one of interest. */ - - const unsigned char * p = region->call_site_table; - - do { - p = read_uleb128 (p, &cs_lp); - p = read_uleb128 (p, &cs_action); - } while (--call_site); - - - action->landing_pad = cs_lp + 1; - - if (cs_action) - action->table_entry = region->action_table + cs_action - 1; - else - action->table_entry = 0; - - return; - } -} - -#else -/* ! __USING_SJLJ_EXCEPTIONS__ */ - -static void -get_call_site_action_for (_Unwind_Context *uw_context, - region_descriptor *region, - action_descriptor *action) -{ - _Unwind_Ptr ip - = _Unwind_GetIP (uw_context) - 1; - /* Subtract 1 because GetIP yields a call return address while we are - interested in information for the call point. This does not always yield - the exact call instruction address but always brings the ip back within - the corresponding region. - - ??? When unwinding up from a signal handler triggered by a trap on some - instruction, we usually have the faulting instruction address here and - subtracting 1 might get us into the wrong region. */ - - const unsigned char * p - = region->call_site_table; - - /* Unless we are able to determine otherwise ... */ - action->kind = nothing; - - db (DB_CSITE, "\n"); - - while (p < region->action_table) - { - _Unwind_Ptr cs_start, cs_len, cs_lp; - _Unwind_Word cs_action; - - /* Note that all call-site encodings are "absolute" displacements. */ - p = read_encoded_value (0, region->call_site_encoding, p, &cs_start); - p = read_encoded_value (0, region->call_site_encoding, p, &cs_len); - p = read_encoded_value (0, region->call_site_encoding, p, &cs_lp); - p = read_uleb128 (p, &cs_action); - - db (DB_CSITE, - "c_site @ 0x%08x (+0x%03x), len = %3d, lpad @ 0x%08x (+0x%03x)\n", - region->base+cs_start, cs_start, cs_len, - region->lp_base+cs_lp, cs_lp); - - /* The table is sorted, so if we've passed the ip, stop. */ - if (ip < region->base + cs_start) - break; - - /* If we have a match, fill the ACTION fields accordingly. */ - else if (ip < region->base + cs_start + cs_len) - { - /* Let the caller know there may be an action to take, but let it - determine the kind. */ - action->kind = unknown; - - if (cs_lp) - action->landing_pad = region->lp_base + cs_lp; - else - action->landing_pad = 0; - - if (cs_action) - action->table_entry = region->action_table + cs_action - 1; - else - action->table_entry = 0; - - db (DB_CSITE, "+++\n"); - return; - } - } - - db (DB_CSITE, "---\n"); -} - -#endif - -/* With CHOICE an exception choice representing an "exception - when" - argument, and PROPAGATED_EXCEPTION a pointer to the currently propagated - occurrence, return true iif the latter matches the former, that is, if - PROPAGATED_EXCEPTION is caught by the handling code controlled by CHOICE. - This takes care of the special Non_Ada_Error case on VMS. */ - -#define Is_Handled_By_Others __gnat_is_handled_by_others -#define Language_For __gnat_language_for -#define Import_Code_For __gnat_import_code_for -#define EID_For __gnat_eid_for -#define Adjust_N_Cleanups_For __gnat_adjust_n_cleanups_for - -extern bool Is_Handled_By_Others (_Unwind_Ptr eid); -extern char Language_For (_Unwind_Ptr eid); - -extern Exception_Code Import_Code_For (_Unwind_Ptr eid); - -extern Exception_Id EID_For (_GNAT_Exception * e); -extern void Adjust_N_Cleanups_For (_GNAT_Exception * e, int n); - -static int -is_handled_by (_Unwind_Ptr choice, _GNAT_Exception * propagated_exception) -{ - /* Pointer to the GNAT exception data corresponding to the propagated - occurrence. */ - _Unwind_Ptr E = (_Unwind_Ptr) EID_For (propagated_exception); - - /* Base matching rules: An exception data (id) matches itself, "when - all_others" matches anything and "when others" matches anything unless - explicitly stated otherwise in the propagated occurrence. */ - - bool is_handled = - choice == E - || choice == GNAT_ALL_OTHERS - || (choice == GNAT_OTHERS && Is_Handled_By_Others (E)); - - /* In addition, on OpenVMS, Non_Ada_Error matches VMS exceptions, and we - may have different exception data pointers that should match for the - same condition code, if both an export and an import have been - registered. The import code for both the choice and the propagated - occurrence are expected to have been masked off regarding severity - bits already (at registration time for the former and from within the - low level exception vector for the latter). */ -#ifdef VMS - #define Non_Ada_Error system__aux_dec__non_ada_error - extern struct Exception_Data Non_Ada_Error; - - is_handled |= - (Language_For (E) == 'V' - && choice != GNAT_OTHERS && choice != GNAT_ALL_OTHERS - && ((Language_For (choice) == 'V' && Import_Code_For (choice) != 0 - && Import_Code_For (choice) == Import_Code_For (E)) - || choice == (_Unwind_Ptr)&Non_Ada_Error)); -#endif - - return is_handled; -} - -/* Fill out the ACTION to be taken from propagating UW_EXCEPTION up to - UW_CONTEXT in REGION. */ - -static void -get_action_description_for (_Unwind_Context *uw_context, - _Unwind_Exception *uw_exception, - region_descriptor *region, - action_descriptor *action) -{ - _GNAT_Exception * gnat_exception = (_GNAT_Exception *) uw_exception; - - /* Search the call site table first, which may get us a landing pad as well - as the head of an action record list. */ - get_call_site_action_for (uw_context, region, action); - db_action_for (action, uw_context); - - /* If there is not even a call_site entry, we are done. */ - if (action->kind == nothing) - return; - - /* Otherwise, check what we have at the place of the call site */ - - /* No landing pad => no cleanups or handlers. */ - if (action->landing_pad == 0) - { - action->kind = nothing; - return; - } - - /* Landing pad + null table entry => only cleanups. */ - else if (action->table_entry == 0) - { - action->kind = cleanup; - return; - } - - /* Landing pad + Table entry => handlers + possible cleanups. */ - else - { - const unsigned char * p = action->table_entry; - - _Unwind_Sword ar_filter, ar_disp; - - action->kind = nothing; - - while (1) - { - p = read_sleb128 (p, &ar_filter); - read_sleb128 (p, &ar_disp); - /* Don't assign p here, as it will be incremented by ar_disp - below. */ - - /* Null filters are for cleanups. */ - if (ar_filter == 0) - action->kind = cleanup; - - /* Positive filters are for regular handlers. */ - else if (ar_filter > 0) - { - /* See if the filter we have is for an exception which matches - the one we are propagating. */ - _Unwind_Ptr choice = get_ttype_entry_for (region, ar_filter); - - if (is_handled_by (choice, gnat_exception)) - { - action->ttype_filter = ar_filter; - action->ttype_entry = choice; - action->kind = handler; - return; - } - } - - /* Negative filter values are for C++ exception specifications. - Should not be there for Ada :/ */ - else - db (DB_ERR, "========> Err, filter < 0 for Ada/dwarf\n"); - - if (ar_disp == 0) - return; - - p += ar_disp; - } - } -} - -/* Setup in UW_CONTEXT the eh return target IP and data registers, which will - be restored with the others and retrieved by the landing pad once the jump - occurred. */ - -static void -setup_to_install (_Unwind_Context *uw_context, - _Unwind_Exception *uw_exception, - _Unwind_Ptr uw_landing_pad, - int uw_filter) -{ -#ifndef EH_RETURN_DATA_REGNO - /* We should not be called if the appropriate underlying support is not - there. */ - abort (); -#else - /* 1/ exception object pointer, which might be provided back to - _Unwind_Resume (and thus to this personality routine) if we are jumping - to a cleanup. */ - _Unwind_SetGR (uw_context, __builtin_eh_return_data_regno (0), - (_Unwind_Word)uw_exception); - - /* 2/ handler switch value register, which will also be used by the target - landing pad to decide what action it shall take. */ - _Unwind_SetGR (uw_context, __builtin_eh_return_data_regno (1), - (_Unwind_Word)uw_filter); - - /* Setup the address we should jump at to reach the code where there is the - "something" we found. */ - _Unwind_SetIP (uw_context, uw_landing_pad); -#endif -} - -/* The following is defined from a-except.adb. Its purpose is to enable - automatic backtraces upon exception raise, as provided through the - GNAT.Traceback facilities. */ -extern void __gnat_notify_handled_exception (void); -extern void __gnat_notify_unhandled_exception (void); - -/* Below is the eh personality routine per se. We currently assume that only - GNU-Ada exceptions are met. */ - -_Unwind_Reason_Code -__gnat_eh_personality (int uw_version, - _Unwind_Action uw_phases, - _Unwind_Exception_Class uw_exception_class, - _Unwind_Exception *uw_exception, - _Unwind_Context *uw_context) -{ - _GNAT_Exception * gnat_exception = (_GNAT_Exception *) uw_exception; - - region_descriptor region; - action_descriptor action; - - if (uw_version != 1) - return _URC_FATAL_PHASE1_ERROR; - - db_indent (DB_INDENT_RESET); - db_phases (uw_phases); - db_indent (DB_INDENT_INCREASE); - - /* Get the region description for the context we were provided with. This - will tell us if there is some lsda, call_site, action and/or ttype data - for the associated ip. */ - get_region_description_for (uw_context, ®ion); - db_region_for (®ion, uw_context); - - /* No LSDA => no handlers or cleanups => we shall unwind further up. */ - if (! region.lsda) - return _URC_CONTINUE_UNWIND; - - /* Search the call-site and action-record tables for the action associated - with this IP. */ - get_action_description_for (uw_context, uw_exception, ®ion, &action); - db_action_for (&action, uw_context); - - /* Whatever the phase, if there is nothing relevant in this frame, - unwinding should just go on. */ - if (action.kind == nothing) - return _URC_CONTINUE_UNWIND; - - /* If we found something in search phase, we should return a code indicating - what to do next depending on what we found. If we only have cleanups - around, we shall try to unwind further up to find a handler, otherwise, - tell we have a handler, which will trigger the second phase. */ - if (uw_phases & _UA_SEARCH_PHASE) - { - if (action.kind == cleanup) - { - Adjust_N_Cleanups_For (gnat_exception, 1); - return _URC_CONTINUE_UNWIND; - } - else - { - /* Trigger the appropriate notification routines before the second - phase starts, which ensures the stack is still intact. */ - __gnat_notify_handled_exception (); - - return _URC_HANDLER_FOUND; - } - } - - /* We found something in cleanup/handler phase, which might be the handler - or a cleanup for a handled occurrence, or a cleanup for an unhandled - occurrence (we are in a FORCED_UNWIND phase in this case). Install the - context to get there. */ - - /* If we are going to install a cleanup context, decrement the cleanup - count. This is required in a FORCED_UNWINDing phase (for an unhandled - exception), as this is used from the forced unwinding handler in - Ada.Exceptions.Exception_Propagation to decide wether unwinding should - proceed further or Unhandled_Exception_Terminate should be called. */ - if (action.kind == cleanup) - Adjust_N_Cleanups_For (gnat_exception, -1); - - setup_to_install - (uw_context, uw_exception, action.landing_pad, action.ttype_filter); - - return _URC_INSTALL_CONTEXT; -} - -/* Define the consistently named wrappers imported by Propagate_Exception. */ - -#ifdef __USING_SJLJ_EXCEPTIONS__ - -#undef _Unwind_RaiseException - -_Unwind_Reason_Code -__gnat_Unwind_RaiseException (_Unwind_Exception *e) -{ - return _Unwind_SjLj_RaiseException (e); -} - - -#undef _Unwind_ForcedUnwind - -_Unwind_Reason_Code -__gnat_Unwind_ForcedUnwind (_Unwind_Exception *e, - void * handler, - void * argument) -{ - return _Unwind_SjLj_ForcedUnwind (e, handler, argument); -} - - -#else /* __USING_SJLJ_EXCEPTIONS__ */ - -_Unwind_Reason_Code -__gnat_Unwind_RaiseException (_Unwind_Exception *e) -{ - return _Unwind_RaiseException (e); -} - -_Unwind_Reason_Code -__gnat_Unwind_ForcedUnwind (_Unwind_Exception *e, - void * handler, - void * argument) -{ - return _Unwind_ForcedUnwind (e, handler, argument); -} - -#endif /* __USING_SJLJ_EXCEPTIONS__ */ - -#else -/* ! IN_RTS */ - -/* Define the corresponding stubs for the compiler. */ - -/* We don't want fancy_abort here. */ -#undef abort - -_Unwind_Reason_Code -__gnat_Unwind_RaiseException (_Unwind_Exception *e ATTRIBUTE_UNUSED) -{ - abort (); -} - - -_Unwind_Reason_Code -__gnat_Unwind_ForcedUnwind (_Unwind_Exception *e ATTRIBUTE_UNUSED, - void * handler ATTRIBUTE_UNUSED, - void * argument ATTRIBUTE_UNUSED) -{ - abort (); -} - -#endif /* IN_RTS */ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * R A I S E * + * * + * C Implementation File * + * * + * Copyright (C) 1992-2005, Free Software Foundation, Inc. * + * * + * GNAT is free software; you can redistribute it and/or modify it under * + * terms of the GNU General Public License as published by the Free Soft- * + * ware Foundation; either version 2, or (at your option) any later ver- * + * sion. GNAT is distributed in the hope that it will be useful, but WITH- * + * OUT 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 distributed with GNAT; see file COPYING. If not, write * + * to the Free Software Foundation, 51 Franklin Street, Fifth Floor, * + * Boston, MA 02110-1301, USA. * + * * + * As a special exception, if you link this file with other files to * + * produce an executable, this file does not by itself cause the resulting * + * executable to be covered by the GNU General Public License. This except- * + * ion does not however invalidate any other reasons why the executable * + * file might be covered by the GNU Public License. * + * * + * GNAT was originally developed by the GNAT team at New York University. * + * Extensive contributions were provided by Ada Core Technologies Inc. * + * * + ****************************************************************************/ + +/* Shared routines to support exception handling. + Note that _gnat_builtin_longjmp should disappear at some point, replaced + by direct call to __builtin_longjmp from Ada code. + __gnat_unhandled_terminate is code shared between all exception handling + mechanisms */ + +#ifdef IN_RTS +#include "tconfig.h" +#include "tsystem.h" +#else +#include "config.h" +#include "system.h" +#endif + +#include "adaint.h" +#include "raise.h" + +/* We have not yet figured out how to import this directly */ + +void +_gnat_builtin_longjmp (void *ptr, int flag ATTRIBUTE_UNUSED) +{ + __builtin_longjmp (ptr, 1); +} + +/* When an exception is raised for which no handler exists, the procedure + Ada.Exceptions.Unhandled_Exception is called, which performs the call to + adafinal to complete finalization, and then prints out the error messages + for the unhandled exception. The final step is to call this routine, which + performs any system dependent cleanup required. */ + +void +__gnat_unhandled_terminate (void) +{ +#ifdef VMS + /* Special termination handling for VMS */ + long prvhnd; + + /* Remove the exception vector so it won't intercept any errors + in the call to exit, and go into and endless loop */ + + SYS$SETEXV (1, 0, 3, &prvhnd); +#endif + + /* Default termination handling */ + __gnat_os_exit (1); +} diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb index a3e9e8ac350..ba1646bfad9 100644 --- a/gcc/ada/repinfo.adb +++ b/gcc/ada/repinfo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -48,6 +48,8 @@ with Table; use Table; with Uname; use Uname; with Urealp; use Urealp; +with Ada.Unchecked_Conversion; + package body Repinfo is SSU : constant := 8; @@ -61,17 +63,16 @@ package body Repinfo is -- Representation of gcc Expressions -- --------------------------------------- - -- This table is used only if Frontend_Layout_On_Target is False, - -- so that gigi lays out dynamic size/offset fields using encoded - -- gcc expressions. + -- This table is used only if Frontend_Layout_On_Target is False, so that + -- gigi lays out dynamic size/offset fields using encoded gcc + -- expressions. - -- A table internal to this unit is used to hold the values of - -- back annotated expressions. This table is written out by -gnatt - -- and read back in for ASIS processing. + -- A table internal to this unit is used to hold the values of back + -- annotated expressions. This table is written out by -gnatt and read + -- back in for ASIS processing. - -- Node values are stored as Uint values which are the negative of - -- the node index in this table. Constants appear as non-negative - -- Uint values. + -- Node values are stored as Uint values using the negative of the node + -- index in this table. Constants appear as non-negative Uint values. type Exp_Node is record Expr : TCode; @@ -104,28 +105,27 @@ package body Repinfo is -- Identifier casing for current unit Need_Blank_Line : Boolean; - -- Set True if a blank line is needed before outputting any - -- information for the current entity. Set True when a new - -- entity is processed, and false when the blank line is output. + -- Set True if a blank line is needed before outputting any information for + -- the current entity. Set True when a new entity is processed, and false + -- when the blank line is output. ----------------------- -- Local Subprograms -- ----------------------- function Back_End_Layout return Boolean; - -- Test for layout mode, True = back end, False = front end. This - -- function is used rather than checking the configuration parameter - -- because we do not want Repinfo to depend on Targparm (for ASIS) + -- Test for layout mode, True = back end, False = front end. This function + -- is used rather than checking the configuration parameter because we do + -- not want Repinfo to depend on Targparm (for ASIS) procedure Blank_Line; -- Called before outputting anything for an entity. Ensures that -- a blank line precedes the output for a particular entity. procedure List_Entities (Ent : Entity_Id); - -- This procedure lists the entities associated with the entity E, - -- starting with the First_Entity and using the Next_Entity link. - -- If a nested package is found, entities within the package are - -- recursively processed. + -- This procedure lists the entities associated with the entity E, starting + -- with the First_Entity and using the Next_Entity link. If a nested + -- package is found, entities within the package are recursively processed. procedure List_Name (Ent : Entity_Id); -- List name of entity Ent in appropriate case. The name is listed with @@ -135,8 +135,8 @@ package body Repinfo is -- List representation info for array type Ent procedure List_Mechanisms (Ent : Entity_Id); - -- List mechanism information for parameters of Ent, which is a - -- subprogram, subprogram type, or an entry or entry family. + -- List mechanism information for parameters of Ent, which is subprogram, + -- subprogram type, or an entry or entry family. procedure List_Object_Info (Ent : Entity_Id); -- List representation info for object Ent @@ -155,12 +155,11 @@ package body Repinfo is -- Output given number of spaces procedure Write_Info_Line (S : String); - -- Routine to write a line to Repinfo output file. This routine is - -- passed as a special output procedure to Output.Set_Special_Output. - -- Note that Write_Info_Line is called with an EOL character at the - -- end of each line, as per the Output spec, but the internal call - -- to the appropriate routine in Osint requires that the end of line - -- sequence be stripped off. + -- Routine to write a line to Repinfo output file. This routine is passed + -- as a special output procedure to Output.Set_Special_Output. Note that + -- Write_Info_Line is called with an EOL character at the end of each line, + -- as per the Output spec, but the internal call to the appropriate routine + -- in Osint requires that the end of line sequence be stripped off. procedure Write_Mechanism (M : Mechanism_Type); -- Writes symbolic string for mechanism represented by M @@ -168,8 +167,8 @@ package body Repinfo is procedure Write_Val (Val : Node_Ref_Or_Val; Paren : Boolean := False); -- Given a representation value, write it out. No_Uint values or values -- dependent on discriminants are written as two question marks. If the - -- flag Paren is set, then the output is surrounded in parentheses if - -- it is other than a simple value. + -- flag Paren is set, then the output is surrounded in parentheses if it is + -- other than a simple value. --------------------- -- Back_End_Layout -- @@ -177,8 +176,8 @@ package body Repinfo is function Back_End_Layout return Boolean is begin - -- We have back end layout if the back end has made any entries in - -- the table of GCC expressions, otherwise we have front end layout. + -- We have back end layout if the back end has made any entries in the + -- table of GCC expressions, otherwise we have front end layout. return Rep_Table.Last > 0; end Back_End_Layout; @@ -350,10 +349,10 @@ package body Repinfo is while Present (E) loop Need_Blank_Line := True; - -- We list entities that come from source (excluding private - -- or incomplete types or deferred constants, where we will - -- list the info for the full view). If debug flag A is set, - -- then all entities are listed + -- We list entities that come from source (excluding private or + -- incomplete types or deferred constants, where we will list the + -- info for the full view). If debug flag A is set, then all + -- entities are listed if (Comes_From_Source (E) and then not Is_Incomplete_Or_Private_Type (E) @@ -402,10 +401,9 @@ package body Repinfo is end if; - -- Recurse into nested package, but not if they are - -- package renamings (in particular renamings of the - -- enclosing package, as for some Java bindings and - -- for generic instances). + -- Recurse into nested package, but not if they are package + -- renamings (in particular renamings of the enclosing package, + -- as for some Java bindings and for generic instances). if Ekind (E) = E_Package then if No (Renamed_Object (E)) then @@ -438,10 +436,10 @@ package body Repinfo is E := Next_Entity (E); end loop; - -- For a package body, the entities of the visible subprograms - -- are declared in the corresponding spec. Iterate over its - -- entities in order to handle properly the subprogram bodies. - -- Skip bodies in subunits, which are listed independently. + -- For a package body, the entities of the visible subprograms are + -- declared in the corresponding spec. Iterate over its entities in + -- order to handle properly the subprogram bodies. Skip bodies in + -- subunits, which are listed independently. if Ekind (Ent) = E_Package_Body and then Present (Corresponding_Spec (Find_Declaration (Ent))) @@ -583,6 +581,9 @@ package body Repinfo is Write_Str ("not "); Print_Expr (Node.Op1); + when Bit_And_Expr => + Binop (" & "); + when Lt_Expr => Binop (" < "); @@ -801,9 +802,9 @@ package body Repinfo is UI_Image (Sunit); end if; - -- If the record is not packed, then we know that all - -- fields whose position is not specified have a starting - -- normalized bit position of zero + -- If the record is not packed, then we know that all fields whose + -- position is not specified have a starting normalized bit + -- position of zero if Unknown_Normalized_First_Bit (Comp) and then not Is_Packed (Ent) @@ -885,11 +886,11 @@ package body Repinfo is UI_Write (Fbit); Write_Str (" .. "); - -- Allowing Uint_0 here is a kludge, really this should be - -- a fine Esize value but currently it means unknown, except - -- that we know after gigi has back annotated that a size of - -- zero is real, since otherwise gigi back annotates using - -- No_Uint as the value to indicate unknown). + -- Allowing Uint_0 here is a kludge, really this should be a + -- fine Esize value but currently it means unknown, except that + -- we know after gigi has back annotated that a size of zero is + -- real, since otherwise gigi back annotates using No_Uint as + -- the value to indicate unknown). if (Esize (Comp) = Uint_0 or else Known_Static_Esize (Comp)) and then Known_Static_Normalized_First_Bit (Comp) @@ -916,8 +917,8 @@ package body Repinfo is Write_Val (Esiz, Paren => True); - -- If in front end layout mode, then dynamic size is - -- stored in storage units, so renormalize for output + -- If in front end layout mode, then dynamic size is stored + -- in storage units, so renormalize for output if not Back_End_Layout then Write_Str (" * "); @@ -1019,8 +1020,8 @@ package body Repinfo is Write_Line (";"); -- For now, temporary case, to be removed when gigi properly back - -- annotates RM_Size, if RM_Size is not set, then list Esize as - -- Size. This avoids odd Object_Size output till we fix things??? + -- annotates RM_Size, if RM_Size is not set, then list Esize as Size. + -- This avoids odd Object_Size output till we fix things??? elsif Unknown_RM_Size (Ent) then Write_Str ("for "); @@ -1086,6 +1087,14 @@ package body Repinfo is function V (Val : Node_Ref_Or_Val) return Uint; -- Internal recursive routine to evaluate tree + function W (Val : Uint) return Word; + -- Convert Val to Word, assuming Val is always in the Int range. This is + -- a helper function for the evaluation of bitwise expressions like + -- Bit_And_Expr, for which there is no direct support in uintp. Uint + -- values out of the Int range are expected to be seen in such + -- expressions only with overflowing byte sizes around, introducing + -- inherent unreliabilties in computations anyway. + ------- -- B -- ------- @@ -1113,6 +1122,23 @@ package body Repinfo is end T; ------- + -- W -- + ------- + + -- We use an unchecked conversion to map Int values to their Word + -- bitwise equivalent, which we could not achieve with a normal type + -- conversion for negative Ints. We want bitwise equivalents because W + -- is used as a helper for bit operators like Bit_And_Expr, and can be + -- called for negative Ints in the context of aligning expressions like + -- X+Align & -Align. + + function W (Val : Uint) return Word is + function To_Word is new Ada.Unchecked_Conversion (Int, Word); + begin + return To_Word (UI_To_Int (Val)); + end W; + + ------- -- V -- ------- @@ -1203,6 +1229,11 @@ package body Repinfo is when Truth_Not_Expr => return B (not T (Node.Op1)); + when Bit_And_Expr => + L := V (Node.Op1); + R := V (Node.Op2); + return UI_From_Int (Int (W (L) and W (R))); + when Lt_Expr => return B (V (Node.Op1) < V (Node.Op2)); diff --git a/gcc/ada/repinfo.ads b/gcc/ada/repinfo.ads index 2af09cb0355..9fc16c2c581 100644 --- a/gcc/ada/repinfo.ads +++ b/gcc/ada/repinfo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ -- tree to fill in representation information, and also the routine used -- by -gnatR to print this information. This unit is used both in the -- compiler and in ASIS (it is used in ASIS as part of the implementation --- of the data decomposition annex. +-- of the data decomposition annex). with Types; use Types; with Uintp; use Uintp; @@ -128,7 +128,7 @@ package Repinfo is -- Subtype used for values that can either be a Node_Ref (negative) -- or a value (non-negative) - type TCode is range 0 .. 27; + type TCode is range 0 .. 28; -- Type used on Ada side to represent DEFTREECODE values defined in -- tree.def. Only a subset of these tree codes can actually appear. -- The names are the names from tree.def in Ada casing. @@ -162,6 +162,7 @@ package Repinfo is Ge_Expr : constant TCode := 25; -- comparision >= 2 Eq_Expr : constant TCode := 26; -- comparision = 2 Ne_Expr : constant TCode := 27; -- comparision /= 2 + Bit_And_Expr : constant TCode := 28; -- Binary and 2 -- The following entry is used to represent a discriminant value in -- the tree. It has a special tree code that does not correspond diff --git a/gcc/ada/repinfo.h b/gcc/ada/repinfo.h index 672ff29e1c2..ec5452dafb6 100644 --- a/gcc/ada/repinfo.h +++ b/gcc/ada/repinfo.h @@ -6,7 +6,7 @@ * * * C Header File * * * - * Copyright (C) 1999-2002 Free Software Foundation, Inc. * + * Copyright (C) 1999-2005 Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -67,6 +67,7 @@ typedef char TCode; #define Ge_Expr 25 #define Eq_Expr 26 #define Ne_Expr 27 +#define Bit_And_Expr 28 /* Creates a node using the tree code defined by Expr and from 1-3 operands as required (unused operands set as shown to No_Uint) Note diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb index 494adc8771c..f2dd0393b35 100644 --- a/gcc/ada/rtsfind.adb +++ b/gcc/ada/rtsfind.adb @@ -171,7 +171,7 @@ package body Rtsfind is -- is only effective in All_Errors mode. function RE_Chars (E : RE_Id) return Name_Id; - -- Given a RE_Id value returns the Chars of the corresponding entity. + -- Given a RE_Id value returns the Chars of the corresponding entity procedure RTE_Error_Msg (Msg : String); -- Generates a message by calling Error_Msg_N specifying Current_Error_Node @@ -518,7 +518,7 @@ package body Rtsfind is -- Indicate those that must be restored. procedure Restore_Private_Visibility; - -- Restore the visibility of ancestors after compiling RTU. + -- Restore the visibility of ancestors after compiling RTU -------------------------------- -- Restore_Private_Visibility -- diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index 07adc39757a..8b19055fef9 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -209,9 +209,14 @@ package Rtsfind is System_Exp_Mod, System_Exp_Uns, System_Fat_Flt, + System_Fat_IEEE_Long_Float, + System_Fat_IEEE_Short_Float, System_Fat_LFlt, System_Fat_LLF, System_Fat_SFlt, + System_Fat_VAX_D_Float, + System_Fat_VAX_F_Float, + System_Fat_VAX_G_Float, System_Finalization_Implementation, System_Finalization_Root, System_Fore, @@ -493,6 +498,7 @@ package Rtsfind is RE_Get_Access_Level, -- Ada.Tags RE_Get_Entry_Index, -- Ada.Tags RE_Get_External_Tag, -- Ada.Tags + RE_Get_Offset_Index, -- Ada.Tags RE_Get_Prim_Op_Address, -- Ada.Tags RE_Get_Prim_Op_Kind, -- Ada.Tags RE_Get_RC_Offset, -- Ada.Tags @@ -501,25 +507,32 @@ package Rtsfind is RE_Inherit_TSD, -- Ada.Tags RE_Internal_Tag, -- Ada.Tags RE_Is_Descendant_At_Same_Level, -- Ada.Tags + RE_Object_Specific_Data, -- Ada.Tags RE_POK_Function, -- Ada.Tags RE_POK_Procedure, -- Ada.Tags RE_POK_Protected_Entry, -- Ada.Tags RE_POK_Protected_Function, -- Ada.Tags RE_POK_Protected_Procedure, -- Ada.Tags RE_POK_Task_Entry, -- Ada.Tags + RE_POK_Task_Function, -- Ada.Tags RE_POK_Task_Procedure, -- Ada.Tags RE_Prim_Op_Kind, -- Ada.Tags RE_Register_Interface_Tag, -- Ada.Tags RE_Register_Tag, -- Ada.Tags + RE_Select_Specific_Data, -- Ada.Tags RE_Set_Access_Level, -- Ada.Tags RE_Set_Entry_Index, -- Ada.Tags RE_Set_Expanded_Name, -- Ada.Tags RE_Set_External_Tag, -- Ada.Tags + RE_Set_Num_Prim_Ops, -- Ada.Tags + RE_Set_Offset_Index, -- Ada.Tags RE_Set_Offset_To_Top, -- Ada.Tags + RE_Set_OSD, -- Ada.Tags RE_Set_Prim_Op_Address, -- Ada.Tags RE_Set_Prim_Op_Kind, -- Ada.Tags RE_Set_RC_Offset, -- Ada.Tags RE_Set_Remotely_Callable, -- Ada.Tags + RE_Set_SSD, -- Ada.Tags RE_Set_TSD, -- Ada.Tags RE_Tag_Error, -- Ada.Tags RE_TSD_Entry_Size, -- Ada.Tags @@ -527,6 +540,10 @@ package Rtsfind is RE_Interface_Tag, -- Ada.Tags RE_Tag, -- Ada.Tags RE_Address_Array, -- Ada.Tags + RE_Valid_Signature, -- Ada.Tags + RE_Primary_DT, -- Ada.Tags + RE_Secondary_DT, -- Ada.Tags + RE_Abstract_Interface, -- Ada.Tags RE_Abort_Task, -- Ada.Task_Identification RE_Current_Task, -- Ada.Task_Identification @@ -666,13 +683,28 @@ package Rtsfind is RE_Exp_Unsigned, -- System.Exp_Uns - RE_Fat_Float, -- System.Fat_Flt + RE_Attr_Float, -- System.Fat_Flt - RE_Fat_Long_Float, -- System.Fat_LFlt + RE_Attr_IEEE_Long, -- System.Fat_IEEE_Long_Float + RE_Fat_IEEE_Long, -- System.Fat_IEEE_Long_Float - RE_Fat_Long_Long_Float, -- System.Fat_LLF + RE_Attr_IEEE_Short, -- System.Fat_IEEE_Short_Float + RE_Fat_IEEE_Short, -- System.Fat_IEEE_Short_Float - RE_Fat_Short_Float, -- System.Fat_SFlt + RE_Attr_Long_Float, -- System.Fat_LFlt + + RE_Attr_Long_Long_Float, -- System.Fat_LLF + + RE_Attr_Short_Float, -- System.Fat_SFlt + + RE_Attr_VAX_D_Float, -- System.Fat_VAX_D_Float + RE_Fat_VAX_D, -- System.Fat_VAX_D_Float + + RE_Attr_VAX_F_Float, -- System.Fat_VAX_F_Float + RE_Fat_VAX_F, -- System.Fat_VAX_F_Float + + RE_Attr_VAX_G_Float, -- System.Fat_VAX_G_Float + RE_Fat_VAX_G, -- System.Fat_VAX_G_Float RE_Attach_To_Final_List, -- System.Finalization_Implementation RE_Finalize_List, -- System.Finalization_Implementation @@ -1151,6 +1183,7 @@ package Rtsfind is RE_TC_Alias, -- System.PolyORB_Interface RE_TC_Build, -- System.PolyORB_Interface + RE_Get_TC, -- System.PolyORB_Interface RE_Set_TC, -- System.PolyORB_Interface RE_TC_Any, -- System.PolyORB_Interface RE_TC_AD, -- System.PolyORB_Interface @@ -1219,6 +1252,7 @@ package Rtsfind is RE_Integer_Address, -- System.Storage_Elements RE_Storage_Offset, -- System.Storage_Elements RE_Storage_Array, -- System.Storage_Elements + RE_Storage_Element, -- System.Storage_Elements RE_To_Address, -- System.Storage_Elements RE_Root_Storage_Pool, -- System.Storage_Pools @@ -1291,6 +1325,7 @@ package Rtsfind is RE_Task_Procedure_Access, -- System.Tasking RO_ST_Task_Id, -- System.Tasking + RO_ST_Null_Task, -- System.Tasking RE_Call_Modes, -- System.Tasking RE_Simple_Call, -- System.Tasking @@ -1417,6 +1452,8 @@ package Rtsfind is RE_Le_G, -- System.Vax_Float_Operations RE_Lt_F, -- System.Vax_Float_Operations RE_Lt_G, -- System.Vax_Float_Operations + RE_Ne_F, -- System.Vax_Float_Operations + RE_Ne_G, -- System.Vax_Float_Operations RE_Valid_D, -- System.Vax_Float_Operations RE_Valid_F, -- System.Vax_Float_Operations @@ -1602,6 +1639,7 @@ package Rtsfind is RE_Get_Access_Level => Ada_Tags, RE_Get_Entry_Index => Ada_Tags, RE_Get_External_Tag => Ada_Tags, + RE_Get_Offset_Index => Ada_Tags, RE_Get_Prim_Op_Address => Ada_Tags, RE_Get_Prim_Op_Kind => Ada_Tags, RE_Get_RC_Offset => Ada_Tags, @@ -1610,25 +1648,32 @@ package Rtsfind is RE_Inherit_TSD => Ada_Tags, RE_Internal_Tag => Ada_Tags, RE_Is_Descendant_At_Same_Level => Ada_Tags, + RE_Object_Specific_Data => Ada_Tags, RE_POK_Function => Ada_Tags, RE_POK_Procedure => Ada_Tags, RE_POK_Protected_Entry => Ada_Tags, RE_POK_Protected_Function => Ada_Tags, RE_POK_Protected_Procedure => Ada_Tags, RE_POK_Task_Entry => Ada_Tags, + RE_POK_Task_Function => Ada_Tags, RE_POK_Task_Procedure => Ada_Tags, RE_Prim_Op_Kind => Ada_Tags, RE_Register_Interface_Tag => Ada_Tags, RE_Register_Tag => Ada_Tags, + RE_Select_Specific_Data => Ada_Tags, RE_Set_Access_Level => Ada_Tags, RE_Set_Entry_Index => Ada_Tags, RE_Set_Expanded_Name => Ada_Tags, RE_Set_External_Tag => Ada_Tags, + RE_Set_Num_Prim_Ops => Ada_Tags, + RE_Set_Offset_Index => Ada_Tags, RE_Set_Offset_To_Top => Ada_Tags, + RE_Set_OSD => Ada_Tags, RE_Set_Prim_Op_Address => Ada_Tags, RE_Set_Prim_Op_Kind => Ada_Tags, RE_Set_RC_Offset => Ada_Tags, RE_Set_Remotely_Callable => Ada_Tags, + RE_Set_SSD => Ada_Tags, RE_Set_TSD => Ada_Tags, RE_Tag_Error => Ada_Tags, RE_TSD_Entry_Size => Ada_Tags, @@ -1636,6 +1681,10 @@ package Rtsfind is RE_Interface_Tag => Ada_Tags, RE_Tag => Ada_Tags, RE_Address_Array => Ada_Tags, + RE_Valid_Signature => Ada_Tags, + RE_Primary_DT => Ada_Tags, + RE_Secondary_DT => Ada_Tags, + RE_Abstract_Interface => Ada_Tags, RE_Abort_Task => Ada_Task_Identification, RE_Current_Task => Ada_Task_Identification, @@ -1773,13 +1822,28 @@ package Rtsfind is RE_Exp_Unsigned => System_Exp_Uns, - RE_Fat_Float => System_Fat_Flt, + RE_Attr_Float => System_Fat_Flt, + + RE_Attr_IEEE_Long => System_Fat_IEEE_Long_Float, + RE_Fat_IEEE_Long => System_Fat_IEEE_Long_Float, + + RE_Attr_IEEE_Short => System_Fat_IEEE_Short_Float, + RE_Fat_IEEE_Short => System_Fat_IEEE_Short_Float, + + RE_Attr_Long_Float => System_Fat_LFlt, + + RE_Attr_Long_Long_Float => System_Fat_LLF, + + RE_Attr_Short_Float => System_Fat_SFlt, - RE_Fat_Long_Float => System_Fat_LFlt, + RE_Attr_VAX_D_Float => System_Fat_VAX_D_Float, + RE_Fat_VAX_D => System_Fat_VAX_D_Float, - RE_Fat_Long_Long_Float => System_Fat_LLF, + RE_Attr_VAX_F_Float => System_Fat_VAX_F_Float, + RE_Fat_VAX_F => System_Fat_VAX_F_Float, - RE_Fat_Short_Float => System_Fat_SFlt, + RE_Attr_VAX_G_Float => System_Fat_VAX_G_Float, + RE_Fat_VAX_G => System_Fat_VAX_G_Float, RE_Attach_To_Final_List => System_Finalization_Implementation, RE_Finalize_List => System_Finalization_Implementation, @@ -2249,6 +2313,7 @@ package Rtsfind is RE_TC_Alias => System_PolyORB_Interface, RE_TC_Build => System_PolyORB_Interface, + RE_Get_TC => System_PolyORB_Interface, RE_Set_TC => System_PolyORB_Interface, RE_TC_Any => System_PolyORB_Interface, RE_TC_AD => System_PolyORB_Interface, @@ -2326,6 +2391,7 @@ package Rtsfind is RE_Integer_Address => System_Storage_Elements, RE_Storage_Offset => System_Storage_Elements, RE_Storage_Array => System_Storage_Elements, + RE_Storage_Element => System_Storage_Elements, RE_To_Address => System_Storage_Elements, RE_Root_Storage_Pool => System_Storage_Pools, @@ -2397,6 +2463,7 @@ package Rtsfind is RE_Task_Procedure_Access => System_Tasking, RO_ST_Task_Id => System_Tasking, + RO_ST_Null_Task => System_Tasking, RE_Call_Modes => System_Tasking, RE_Simple_Call => System_Tasking, @@ -2523,6 +2590,8 @@ package Rtsfind is RE_Le_G => System_Vax_Float_Operations, RE_Lt_F => System_Vax_Float_Operations, RE_Lt_G => System_Vax_Float_Operations, + RE_Ne_F => System_Vax_Float_Operations, + RE_Ne_G => System_Vax_Float_Operations, RE_Valid_D => System_Vax_Float_Operations, RE_Valid_F => System_Vax_Float_Operations, diff --git a/gcc/ada/s-auxdec-empty.adb b/gcc/ada/s-auxdec-empty.adb new file mode 100644 index 00000000000..57fa5812c1d --- /dev/null +++ b/gcc/ada/s-auxdec-empty.adb @@ -0,0 +1,36 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . A U X _ D E C -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/Or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, Or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, Or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package body System.Aux_DEC is + +end System.Aux_DEC; diff --git a/gcc/ada/s-auxdec-empty.ads b/gcc/ada/s-auxdec-empty.ads new file mode 100644 index 00000000000..289009b6b2c --- /dev/null +++ b/gcc/ada/s-auxdec-empty.ads @@ -0,0 +1,49 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . A U X _ D E C -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package is to be used when the extra definitions in package +-- System for DEC Ada implementations are not supported by the target. + +package System.Aux_DEC is + pragma Pure; + pragma Elaborate_Body; + + type AST_Handler is limited private; + No_AST_Handler : constant AST_Handler; + +private + + type AST_Handler is new Integer; + No_AST_Handler : constant AST_Handler := 0; + +end System.Aux_DEC; diff --git a/gcc/ada/s-bitops.adb b/gcc/ada/s-bitops.adb index 0ac62c32781..2224ff0a650 100644 --- a/gcc/ada/s-bitops.adb +++ b/gcc/ada/s-bitops.adb @@ -40,7 +40,7 @@ with Unchecked_Conversion; package body System.Bit_Ops is subtype Bits_Array is System.Unsigned_Types.Packed_Bytes1 (Positive); - -- Unconstrained array used to interprete the address values. We use the + -- Constrained array used to interpret the address values. We use the -- unaligned version always, since this will handle both the aligned and -- unaligned cases, and we always do these operations by bytes anyway. -- Note: we use a ones origin array here so that the computations of the diff --git a/gcc/ada/s-chepoo.ads b/gcc/ada/s-chepoo.ads index 3c4143927c5..27d840fb7a8 100644 --- a/gcc/ada/s-chepoo.ads +++ b/gcc/ada/s-chepoo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-1996, 2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,32 +41,18 @@ package System.Checked_Pools is -- called on each implicit or explicit dereference of a pointer which -- has such a storage pool - procedure Allocate - (Pool : in out Checked_Pool; - Storage_Address : out Address; - Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count; - Alignment : in System.Storage_Elements.Storage_Count) - is abstract; - - procedure Deallocate - (Pool : in out Checked_Pool; - Storage_Address : in Address; - Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count; - Alignment : in System.Storage_Elements.Storage_Count) - is abstract; - - function Storage_Size - (Pool : Checked_Pool) - return System.Storage_Elements.Storage_Count - is abstract; - procedure Dereference (Pool : in out Checked_Pool; Storage_Address : in Address; Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count; Alignment : in System.Storage_Elements.Storage_Count) is abstract; - -- Called each time a pointer to a checked pool is dereferenced + -- Called implicitly each time a pointer to a checked pool is dereferenced + -- All parameters in the profile are compatible with the profile of + -- Allocate/Deallocate: the Storage_Address corresponds to the address of + -- the dereferenced object, Size_in_Storage_Elements is its dynamic size + -- (and thus may involve an implicit dispatching call to size) and + -- Alignment is the alignment of the object. private type Checked_Pool is abstract diff --git a/gcc/ada/s-exnllf.adb b/gcc/ada/s-exnllf.adb index 518370fd7a9..ae282c8110a 100644 --- a/gcc/ada/s-exnllf.adb +++ b/gcc/ada/s-exnllf.adb @@ -49,9 +49,9 @@ package body System.Exn_LLF is begin -- We use the standard logarithmic approach, Exp gets shifted right -- testing successive low order bits and Factor is the value of the - -- base raised to the next power of 2. For positive exponents we - -- multiply the result by this factor, for negative exponents, we - -- Division by this factor. + -- base raised to the next power of 2. If the low order bit or Exp is + -- set, multiply the result by this factor. For negative exponents, + -- invert result upon return. if Exp >= 0 then loop diff --git a/gcc/ada/s-fatflt.ads b/gcc/ada/s-fatflt.ads index 92ad4499923..2ba596bc4a5 100644 --- a/gcc/ada/s-fatflt.ads +++ b/gcc/ada/s-fatflt.ads @@ -44,6 +44,6 @@ package System.Fat_Flt is -- (i.e. the individual floating-point attribute routines) are accessed -- by name using selected notation. - package Fat_Float is new System.Fat_Gen (Float); + package Attr_Float is new System.Fat_Gen (Float); end System.Fat_Flt; diff --git a/gcc/ada/s-fatgen.adb b/gcc/ada/s-fatgen.adb index 2bdb9363bc3..9d4b5042d69 100644 --- a/gcc/ada/s-fatgen.adb +++ b/gcc/ada/s-fatgen.adb @@ -99,10 +99,8 @@ package body System.Fat_Gen is begin if Towards = X then return X; - elsif Towards > X then return Succ (X); - else return Pred (X); end if; @@ -114,14 +112,11 @@ package body System.Fat_Gen is function Ceiling (X : T) return T is XT : constant T := Truncation (X); - begin if X <= 0.0 then return XT; - elsif X = XT then return X; - else return XT + 1.0; end if; @@ -175,7 +170,7 @@ package body System.Fat_Gen is -- T'Machine_Emin - T'Machine_Mantissa, which would preserve -- monotonicity of the exponent function ??? - -- Check for infinities, transfinites, whatnot. + -- Check for infinities, transfinites, whatnot elsif X > T'Safe_Last then Frac := Invrad; @@ -193,7 +188,7 @@ package body System.Fat_Gen is Ax : T := abs X; Ex : UI := 0; - -- Ax * Rad ** Ex is invariant. + -- Ax * Rad ** Ex is invariant begin if Ax >= 1.0 then @@ -256,7 +251,6 @@ package body System.Fat_Gen is function Exponent (X : T) return UI is X_Frac : T; X_Exp : UI; - begin Decompose (X, X_Frac, X_Exp); return X_Exp; @@ -268,14 +262,11 @@ package body System.Fat_Gen is function Floor (X : T) return T is XT : constant T := Truncation (X); - begin if X >= 0.0 then return XT; - elsif XT = X then return X; - else return XT - 1.0; end if; @@ -288,7 +279,6 @@ package body System.Fat_Gen is function Fraction (X : T) return T is X_Frac : T; X_Exp : UI; - begin Decompose (X, X_Frac, X_Exp); return X_Frac; @@ -366,6 +356,38 @@ package body System.Fat_Gen is return Temp; end Machine; + ---------------------- + -- Machine_Rounding -- + ---------------------- + + -- For now, the implementation is identical to that of Rounding, which is + -- a permissible behavior, but is not the most efficient possible approach. + + function Machine_Rounding (X : T) return T is + Result : T; + Tail : T; + + begin + Result := Truncation (abs X); + Tail := abs X - Result; + + if Tail >= 0.5 then + Result := Result + 1.0; + end if; + + if X > 0.0 then + return Result; + + elsif X < 0.0 then + return -Result; + + -- For zero case, make sure sign of zero is preserved + + else + return X; + end if; + end Machine_Rounding; + ----------- -- Model -- ----------- @@ -542,7 +564,7 @@ package body System.Fat_Gen is return X; end if; - -- Nonzero x. essentially, just multiply repeatedly by Rad ** (+-2**n). + -- Nonzero x. essentially, just multiply repeatedly by Rad ** (+-2**n) declare Y : T := X; @@ -587,6 +609,7 @@ package body System.Fat_Gen is end if; -- 0 <= Ex < Log_Power (N) + end loop; -- Ex = 0 @@ -652,7 +675,7 @@ package body System.Fat_Gen is -- The basic approach is to compute - -- T'Machine (RM1 + N) - RM1. + -- T'Machine (RM1 + N) - RM1 -- where N >= 0.0 and RM1 = radix ** (mantissa - 1) @@ -693,7 +716,6 @@ package body System.Fat_Gen is return X; end if; end if; - end Truncation; ----------------------- @@ -727,13 +749,16 @@ package body System.Fat_Gen is else return X; end if; - end Unbiased_Rounding; ----------- -- Valid -- ----------- + -- Note: this routine does not work for VAX float. We compensate for this + -- in Exp_Attr by using the Valid functions in Vax_Float_Operations rather + -- than the corresponding instantiation of this function. + function Valid (X : access T) return Boolean is IEEE_Emin : constant Integer := T'Machine_Emin - 1; @@ -744,17 +769,17 @@ package body System.Fat_Gen is subtype IEEE_Exponent_Range is Integer range IEEE_Emin - 1 .. IEEE_Emax + 1; - -- The implementation of this floating point attribute uses - -- a representation type Float_Rep that allows direct access to - -- the exponent and mantissa parts of a floating point number. + -- The implementation of this floating point attribute uses a + -- representation type Float_Rep that allows direct access to the + -- exponent and mantissa parts of a floating point number. -- The Float_Rep type is an array of Float_Word elements. This - -- representation is chosen to make it possible to size the - -- type based on a generic parameter. Since the array size is - -- known at compile-time, efficient code can still be generated. - -- The size of Float_Word elements should be large enough to allow - -- accessing the exponent in one read, but small enough so that all - -- floating point object sizes are a multiple of the Float_Word'Size. + -- representation is chosen to make it possible to size the type based + -- on a generic parameter. Since the array size is known at compile + -- time, efficient code can still be generated. The size of Float_Word + -- elements should be large enough to allow accessing the exponent in + -- one read, but small enough so that all floating point object sizes + -- are a multiple of the Float_Word'Size. -- The following conditions must be met for all possible -- instantiations of the attributes package: @@ -764,9 +789,9 @@ package body System.Fat_Gen is -- - The exponent and sign are completely contained in a single -- component of Float_Rep, named Most_Significant_Word (MSW). - -- - The sign occupies the most significant bit of the MSW - -- and the exponent is in the following bits. - -- Unused bits (if any) are in the least significant part. + -- - The sign occupies the most significant bit of the MSW and the + -- exponent is in the following bits. Unused bits (if any) are in + -- the least significant part. type Float_Word is mod 2**Positive'Min (System.Word_Size, 32); type Rep_Index is range 0 .. 7; @@ -775,12 +800,12 @@ package body System.Fat_Gen is (T'Size + Float_Word'Size - 1) / Float_Word'Size; Rep_Last : constant Rep_Index := Rep_Index'Min (Rep_Index (Rep_Words - 1), (T'Mantissa + 16) / Float_Word'Size); - -- Determine the number of Float_Words needed for representing - -- the entire floating-poinit value. Do not take into account - -- excessive padding, as occurs on IA-64 where 80 bits floats get - -- padded to 128 bits. In general, the exponent field cannot - -- be larger than 15 bits, even for 128-bit floating-poin t types, - -- so the final format size won't be larger than T'Mantissa + 16. + -- Determine the number of Float_Words needed for representing the + -- entire floating-point value. Do not take into account excessive + -- padding, as occurs on IA-64 where 80 bits floats get padded to 128 + -- bits. In general, the exponent field cannot be larger than 15 bits, + -- even for 128-bit floating-poin t types, so the final format size + -- won't be larger than T'Mantissa + 16. type Float_Rep is array (Rep_Index range 0 .. Rep_Index (Rep_Words - 1)) of Float_Word; @@ -794,26 +819,26 @@ package body System.Fat_Gen is Most_Significant_Word : constant Rep_Index := Rep_Last * Standard'Default_Bit_Order; - -- Finding the location of the Exponent_Word is a bit tricky. - -- In general we assume Word_Order = Bit_Order. - -- This expression needs to be refined for VMS. + -- Finding the location of the Exponent_Word is a bit tricky. In general + -- we assume Word_Order = Bit_Order. This expression needs to be refined + -- for VMS. Exponent_Factor : constant Float_Word := 2**(Float_Word'Size - 1) / Float_Word (IEEE_Emax - IEEE_Emin + 3) * Boolean'Pos (Most_Significant_Word /= 2) + Boolean'Pos (Most_Significant_Word = 2); - -- Factor that the extracted exponent needs to be divided by - -- to be in range 0 .. IEEE_Emax - IEEE_Emin + 2. - -- Special kludge: Exponent_Factor is 1 for x86/IA64 double extended - -- as GCC adds unused bits to the type. + -- Factor that the extracted exponent needs to be divided by to be in + -- range 0 .. IEEE_Emax - IEEE_Emin + 2. Special kludge: Exponent_Factor + -- is 1 for x86/IA64 double extended as GCC adds unused bits to the + -- type. Exponent_Mask : constant Float_Word := Float_Word (IEEE_Emax - IEEE_Emin + 2) * Exponent_Factor; - -- Value needed to mask out the exponent field. - -- This assumes that the range IEEE_Emin - 1 .. IEEE_Emax + 1 - -- contains 2**N values, for some N in Natural. + -- Value needed to mask out the exponent field. This assumes that the + -- range IEEE_Emin - 1 .. IEEE_Emax + contains 2**N values, for some N + -- in Natural. function To_Float is new Ada.Unchecked_Conversion (Float_Rep, T); @@ -834,8 +859,8 @@ package body System.Fat_Gen is Integer ((R (Most_Significant_Word) and Exponent_Mask) / Exponent_Factor) - IEEE_Bias; - -- Mask/Shift T to only get bits from the exponent - -- Then convert biased value to integer value. + -- Mask/Shift T to only get bits from the exponent. Then convert biased + -- value to integer value. SR : Float_Rep; -- Float_Rep representation of significant of X.all @@ -843,8 +868,8 @@ package body System.Fat_Gen is begin if T'Denorm then - -- All denormalized numbers are valid, so only invalid numbers - -- are overflows and NaN's, both with exponent = Emax + 1. + -- All denormalized numbers are valid, so only invalid numbers are + -- overflows and NaN's, both with exponent = Emax + 1. return E /= IEEE_Emax + 1; diff --git a/gcc/ada/s-fatgen.ads b/gcc/ada/s-fatgen.ads index c1bc8204058..83b6f064461 100644 --- a/gcc/ada/s-fatgen.ads +++ b/gcc/ada/s-fatgen.ads @@ -71,6 +71,8 @@ package System.Fat_Gen is function Machine (X : T) return T; + function Machine_Rounding (X : T) return T; + function Model (X : T) return T; function Pred (X : T) return T; @@ -95,6 +97,8 @@ package System.Fat_Gen is -- register, and the whole point of 'Valid is to prevent exceptions. -- Note that the object of type T must have the natural alignment -- for type T. See Unaligned_Valid for further discussion. + -- + -- Note: this routine does not work for Vax_Float ??? function Unaligned_Valid (A : System.Address) return Boolean; -- This version of Valid is used if the floating-point value to @@ -112,11 +116,16 @@ package System.Fat_Gen is -- not require strict alignment (e.g. the ia32/x86), since on a -- target not requiring strict alignment, it is fine to pass a -- non-aligned value to the standard Valid routine. + -- + -- Note: this routine does not work for Vax_Float ??? private pragma Inline (Machine); pragma Inline (Model); - pragma Inline_Always (Valid); - pragma Inline_Always (Unaligned_Valid); + + -- Note: previously the validity checking subprograms (Unaligned_Valid and + -- Valid) were also inlined, but this was changed since there were some + -- problems with this inlining in optimized mode, and in any case it seems + -- better to avoid this inlining (space and robustness considerations). end System.Fat_Gen; diff --git a/gcc/ada/s-fatlfl.ads b/gcc/ada/s-fatlfl.ads index bff94090190..844f1b4739a 100644 --- a/gcc/ada/s-fatlfl.ads +++ b/gcc/ada/s-fatlfl.ads @@ -44,6 +44,6 @@ package System.Fat_LFlt is -- (i.e. the individual floating-point attribute routines) are accessed -- by name using selected notation. - package Fat_Long_Float is new System.Fat_Gen (Long_Float); + package Attr_Long_Float is new System.Fat_Gen (Long_Float); end System.Fat_LFlt; diff --git a/gcc/ada/s-fatllf.ads b/gcc/ada/s-fatllf.ads index bb8abf4e015..f2d554c4dab 100644 --- a/gcc/ada/s-fatllf.ads +++ b/gcc/ada/s-fatllf.ads @@ -44,6 +44,6 @@ package System.Fat_LLF is -- (i.e. the individual floating-point attribute routines) are accessed -- by name using selected notation. - package Fat_Long_Long_Float is new System.Fat_Gen (Long_Long_Float); + package Attr_Long_Long_Float is new System.Fat_Gen (Long_Long_Float); end System.Fat_LLF; diff --git a/gcc/ada/s-fatsfl.ads b/gcc/ada/s-fatsfl.ads index 1d1f3509652..129efea64a2 100644 --- a/gcc/ada/s-fatsfl.ads +++ b/gcc/ada/s-fatsfl.ads @@ -44,6 +44,6 @@ package System.Fat_SFlt is -- (i.e. the individual floating-point attribute routines) are accessed -- by name using selected notation. - package Fat_Short_Float is new System.Fat_Gen (Short_Float); + package Attr_Short_Float is new System.Fat_Gen (Short_Float); end System.Fat_SFlt; diff --git a/gcc/ada/s-fileio.ads b/gcc/ada/s-fileio.ads index feb1efe78f0..75636ef5e45 100644 --- a/gcc/ada/s-fileio.ads +++ b/gcc/ada/s-fileio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -139,7 +139,7 @@ package System.File_IO is procedure Chain_File (File : FCB.AFCB_Ptr); -- Used to chain the given file into the list of open files. Normally this - -- is done implicitly by Open. Chain_File is used for the spcial cases of + -- is done implicitly by Open. Chain_File is used for the special cases of -- the system files defined by Text_IO (stdin, stdout, stderr) which are -- not opened in the normal manner. Note that the caller is responsible -- for task lock out to protect the global data structures if this is diff --git a/gcc/ada/s-filofl.ads b/gcc/ada/s-filofl.ads new file mode 100644 index 00000000000..dded3cf5a94 --- /dev/null +++ b/gcc/ada/s-filofl.ads @@ -0,0 +1,54 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . F A T _ I E E E _ L O N G _ F L O A T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains an instantiation of the floating-point attribute +-- runtime routines for IEEE long float. This is used on VMS targest where +-- we can't just use Long_Float, since this may have been mapped to Vax_Float +-- using a Float_Representation configuration pragma. + +with System.Fat_Gen; + +package System.Fat_IEEE_Long_Float is + pragma Pure; + + type Fat_IEEE_Long is digits 15; + pragma Float_Representation (IEEE_Float, Fat_IEEE_Long); + + -- Note the only entity from this package that is acccessed by Rtsfind + -- is the name of the package instantiation. Entities within this package + -- (i.e. the individual floating-point attribute routines) are accessed + -- by name using selected notation. + + package Attr_IEEE_Long is new System.Fat_Gen (Fat_IEEE_Long); + +end System.Fat_IEEE_Long_Float; diff --git a/gcc/ada/s-finroo.adb b/gcc/ada/s-finroo.adb index 6fcc6081505..559c29cf0d7 100644 --- a/gcc/ada/s-finroo.adb +++ b/gcc/ada/s-finroo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -73,8 +73,9 @@ package body System.Finalization_Root is -- Suppress warning for out paramater Item which is not assigned -- because it is pretty much empty. - procedure Read (Stream : access Ada.Streams.Root_Stream_Type'Class; - Item : out Root_Controlled) + procedure Read + (Stream : not null access Ada.Streams.Root_Stream_Type'Class; + Item : out Root_Controlled) is begin null; @@ -87,8 +88,9 @@ package body System.Finalization_Root is -- Read and Write must be empty in order to avoid copying the -- finalization pointers. - procedure Write (Stream : access Ada.Streams.Root_Stream_Type'Class; - Item : in Root_Controlled) + procedure Write + (Stream : not null access Ada.Streams.Root_Stream_Type'Class; + Item : in Root_Controlled) is begin null; diff --git a/gcc/ada/s-finroo.ads b/gcc/ada/s-finroo.ads index ed1be45ab4a..f9847eb5818 100644 --- a/gcc/ada/s-finroo.ads +++ b/gcc/ada/s-finroo.ads @@ -61,10 +61,13 @@ package System.Finalization_Root is procedure Finalize (Object : in out Root_Controlled); procedure Adjust (Object : in out Root_Controlled); - procedure Write (Stream : access Ada.Streams.Root_Stream_Type'Class; - Item : in Root_Controlled); - procedure Read (Stream : access Ada.Streams.Root_Stream_Type'Class; - Item : out Root_Controlled); + procedure Write + (Stream : not null access Ada.Streams.Root_Stream_Type'Class; + Item : in Root_Controlled); + + procedure Read + (Stream : not null access Ada.Streams.Root_Stream_Type'Class; + Item : out Root_Controlled); for Root_Controlled'Read use Read; for Root_Controlled'Write use Write; diff --git a/gcc/ada/s-fishfl.ads b/gcc/ada/s-fishfl.ads new file mode 100644 index 00000000000..7308618f1ad --- /dev/null +++ b/gcc/ada/s-fishfl.ads @@ -0,0 +1,54 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . F A T _ I E E E _ S H O R T _ F L O A T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains an instantiation of the floating-point attribute +-- runtime routines for IEEE short float. This is used on VMS targest where +-- we can't just use Float, since this may have been mapped to Vax_Float +-- using a Float_Representation configuration pragma. + +with System.Fat_Gen; + +package System.Fat_IEEE_Short_Float is + pragma Pure; + + type Fat_IEEE_Short is digits 6; + pragma Float_Representation (IEEE_Float, Fat_IEEE_Short); + + -- Note the only entity from this package that is acccessed by Rtsfind + -- is the name of the package instantiation. Entities within this package + -- (i.e. the individual floating-point attribute routines) are accessed + -- by name using selected notation. + + package Attr_IEEE_Short is new System.Fat_Gen (Fat_IEEE_Short); + +end System.Fat_IEEE_Short_Float; diff --git a/gcc/ada/s-fvadfl.ads b/gcc/ada/s-fvadfl.ads new file mode 100644 index 00000000000..05a367ca42f --- /dev/null +++ b/gcc/ada/s-fvadfl.ads @@ -0,0 +1,56 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . F A T _ V A X _ D _ F L O A T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains an instantiation of the floating-point attribute +-- runtime routines for VAX D-float for use on VMS targets. + +with System.Fat_Gen; + +package System.Fat_VAX_D_Float is + pragma Pure; + + pragma Warnings (Off); + -- This unit is normally used only for VMS, but we compile it for other + -- targest for the convenience of testing vms code using -gnatdm. + + type Fat_VAX_D is digits 9; + pragma Float_Representation (VAX_Float, Fat_VAX_D); + + -- Note the only entity from this package that is acccessed by Rtsfind + -- is the name of the package instantiation. Entities within this package + -- (i.e. the individual floating-point attribute routines) are accessed + -- by name using selected notation. + + package Attr_VAX_D_Float is new System.Fat_Gen (Fat_VAX_D); + +end System.Fat_VAX_D_Float; diff --git a/gcc/ada/s-fvaffl.ads b/gcc/ada/s-fvaffl.ads new file mode 100644 index 00000000000..0c769bfd9d1 --- /dev/null +++ b/gcc/ada/s-fvaffl.ads @@ -0,0 +1,56 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . F A T _ V A X _ F _ F L O A T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains an instantiation of the floating-point attribute +-- runtime routines for VAX F-float for use on VMS targets. + +with System.Fat_Gen; + +package System.Fat_VAX_F_Float is + pragma Pure; + + pragma Warnings (Off); + -- This unit is normally used only for VMS, but we compile it for other + -- targest for the convenience of testing vms code using -gnatdm. + + type Fat_VAX_F is digits 6; + pragma Float_Representation (VAX_Float, Fat_VAX_F); + + -- Note the only entity from this package that is acccessed by Rtsfind + -- is the name of the package instantiation. Entities within this package + -- (i.e. the individual floating-point attribute routines) are accessed + -- by name using selected notation. + + package Attr_VAX_F_Float is new System.Fat_Gen (Fat_VAX_F); + +end System.Fat_VAX_F_Float; diff --git a/gcc/ada/s-fvagfl.ads b/gcc/ada/s-fvagfl.ads new file mode 100644 index 00000000000..50a06b9e9e1 --- /dev/null +++ b/gcc/ada/s-fvagfl.ads @@ -0,0 +1,56 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . F A T _ V A X _ G _ F L O A T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT 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 distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains an instantiation of the floating-point attribute +-- runtime routines for VAX F-float for use on VMS targets. + +with System.Fat_Gen; + +package System.Fat_VAX_G_Float is + pragma Pure; + + pragma Warnings (Off); + -- This unit is normally used only for VMS, but we compile it for other + -- targest for the convenience of testing vms code using -gnatdm. + + type Fat_VAX_G is digits 15; + pragma Float_Representation (VAX_Float, Fat_VAX_G); + + -- Note the only entity from this package that is acccessed by Rtsfind + -- is the name of the package instantiation. Entities within this package + -- (i.e. the individual floating-point attribute routines) are accessed + -- by name using selected notation. + + package Attr_VAX_G_Float is new System.Fat_Gen (Fat_VAX_G); + +end System.Fat_VAX_G_Float; diff --git a/gcc/ada/s-gloloc-mingw.adb b/gcc/ada/s-gloloc-mingw.adb index a6abd441359..ce7e4f7857f 100644 --- a/gcc/ada/s-gloloc-mingw.adb +++ b/gcc/ada/s-gloloc-mingw.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2001 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,7 +31,7 @@ -- -- ------------------------------------------------------------------------------ --- This implementation is specific to NT. +-- This implementation is specific to NT with GNAT.Task_Lock; diff --git a/gcc/ada/s-imgwch.ads b/gcc/ada/s-imgwch.ads index dbcfb07cf2f..61f4441f53a 100644 --- a/gcc/ada/s-imgwch.ads +++ b/gcc/ada/s-imgwch.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-imgwiu.adb b/gcc/ada/s-imgwiu.adb index 8aee7fd9f3b..845cca51ad0 100644 --- a/gcc/ada/s-imgwiu.adb +++ b/gcc/ada/s-imgwiu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-imgwiu.ads b/gcc/ada/s-imgwiu.ads index 8b53da8e155..2b690aa2dff 100644 --- a/gcc/ada/s-imgwiu.ads +++ b/gcc/ada/s-imgwiu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-inmaop-dummy.adb b/gcc/ada/s-inmaop-dummy.adb index 72848ee0c21..edd636ed077 100644 --- a/gcc/ada/s-inmaop-dummy.adb +++ b/gcc/ada/s-inmaop-dummy.adb @@ -2,12 +2,11 @@ -- -- -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- -- -- --- S Y S T E M . I N T E R R U P T _ M A N A G E M E N T . -- --- O P E R A T I O N S -- +-- SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS -- -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-inmaop-vms.adb b/gcc/ada/s-inmaop-vms.adb index ba421ec6a0a..11db041b5a8 100644 --- a/gcc/ada/s-inmaop-vms.adb +++ b/gcc/ada/s-inmaop-vms.adb @@ -2,12 +2,11 @@ -- -- -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- -- -- --- S Y S T E M . I N T E R R U P T _ M A N A G E M E N T . -- --- O P E R A T I O N S -- +-- SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS -- -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-inmaop.ads b/gcc/ada/s-inmaop.ads index 87d82ab62ae..0fd1e00612d 100644 --- a/gcc/ada/s-inmaop.ads +++ b/gcc/ada/s-inmaop.ads @@ -63,11 +63,11 @@ package System.Interrupt_Management.Operations is procedure Install_Default_Action (Interrupt : Interrupt_ID); pragma Inline (Install_Default_Action); - -- Set the sigaction of the Interrupt to default (SIG_DFL). + -- Set the sigaction of the Interrupt to default (SIG_DFL) procedure Install_Ignore_Action (Interrupt : Interrupt_ID); pragma Inline (Install_Ignore_Action); - -- Set the sigaction of the Interrupt to ignore (SIG_IGN). + -- Set the sigaction of the Interrupt to ignore (SIG_IGN) procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask); pragma Inline (Fill_Interrupt_Mask); @@ -97,7 +97,7 @@ package System.Interrupt_Management.Operations is procedure Copy_Interrupt_Mask (X : out Interrupt_Mask; Y : Interrupt_Mask); pragma Inline (Copy_Interrupt_Mask); - -- Assigment needed for limited private type Interrupt_Mask. + -- Assigment needed for limited private type Interrupt_Mask procedure Interrupt_Self_Process (Interrupt : Interrupt_ID); pragma Inline (Interrupt_Self_Process); @@ -108,18 +108,18 @@ package System.Interrupt_Management.Operations is -- This function should be called by the elaboration of System.Interrupt -- to set up proper signal masking in all tasks. - -- The following objects serve as constants, but are initialized - -- in the body to aid portability. These actually belong to the - -- System.Interrupt_Management but since Interrupt_Mask is a - -- private type we can not have them declared there. + -- The following objects serve as constants, but are initialized in the + -- body to aid portability. These should be in System.Interrupt_Management + -- but since Interrupt_Mask is private type we cannot have them declared + -- there. -- Why not make these deferred constants that are initialized using -- function calls in the private part??? Environment_Mask : aliased Interrupt_Mask; - -- This mask represents the mask of Environment task when this package - -- is being elaborated, except the signals being - -- forced to be unmasked by RTS (items in Keep_Unmasked) + -- This mask represents the mask of Environment task when this package is + -- being elaborated, except the signals being forced to be unmasked by RTS + -- (items in Keep_Unmasked) All_Tasks_Mask : aliased Interrupt_Mask; -- This is the mask of all tasks created in RTS. Only one task in RTS diff --git a/gcc/ada/s-interr-sigaction.adb b/gcc/ada/s-interr-sigaction.adb index 6b94e958578..41937db1fac 100644 --- a/gcc/ada/s-interr-sigaction.adb +++ b/gcc/ada/s-interr-sigaction.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Free Software Fundation -- +-- Copyright (C) 1998-2005, Free Software Fundation -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-mastop-tru64.adb b/gcc/ada/s-mastop-tru64.adb index 1a7b9876924..ce379033a40 100644 --- a/gcc/ada/s-mastop-tru64.adb +++ b/gcc/ada/s-mastop-tru64.adb @@ -7,7 +7,7 @@ -- B o d y -- -- (Version for Alpha/Dec Unix) -- -- -- --- Copyright (C) 1999-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -143,7 +143,7 @@ package body System.Machine_State_Operations is Prf : constant System.Address := exc_lookup_function (Get_Code_Loc (M)); begin - if (Prf = System.Null_Address) then + if Prf = System.Null_Address then c_set_code_loc (M, 0); else exc_virtual_unwind (Prf, M); diff --git a/gcc/ada/s-mastop-vms.adb b/gcc/ada/s-mastop-vms.adb index 9e867285007..ce462cb9a60 100644 --- a/gcc/ada/s-mastop-vms.adb +++ b/gcc/ada/s-mastop-vms.adb @@ -7,7 +7,7 @@ -- B o d y -- -- (Version for Alpha/VMS) -- -- -- --- Copyright (C) 2001-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -43,7 +43,7 @@ package body System.Machine_State_Operations is subtype Cond_Value_Type is Unsigned_Longword; - -- Record layouts copied from Starlet. + -- Record layouts copied from Starlet type ICB_Fflags_Bits_Type is record Exception_Frame : Boolean; @@ -94,7 +94,7 @@ package body System.Machine_State_Operations is Ireg : Unsigned_Quadword_Array (0 .. 30); Freg : Unsigned_Quadword_Array (0 .. 30); - -- The register contents areas. 31 for scalars, 31 for float. + -- The register contents areas. 31 for scalars, 31 for float System_Defined : Unsigned_Quadword_Array (0 .. 1); -- The following is an "internal" area that's reserved for use by @@ -153,7 +153,7 @@ package body System.Machine_State_Operations is function Fetch_Code (Loc : Code_Loc) return Code_Loc is begin - -- The starting address is in the second longword pointed to by Loc. + -- The starting address is in the second longword pointed to by Loc return Fetch (System.Aux_DEC."+" (Loc, 8)); end Fetch_Code; diff --git a/gcc/ada/s-osinte-fsu.adb b/gcc/ada/s-osinte-fsu.adb index b7118750194..f5ebf934326 100644 --- a/gcc/ada/s-osinte-fsu.adb +++ b/gcc/ada/s-osinte-fsu.adb @@ -250,8 +250,8 @@ package body System.OS_Interface is -- FSU_THREADS does not have pthread_setschedparam - -- This routine returns a non-negative value upon failure - -- but the error code can not be set conforming the POSIX standard. + -- This routine returns a non-negative value upon failure but the error + -- code cannot be set conforming the POSIX standard. function pthread_setschedparam (thread : pthread_t; diff --git a/gcc/ada/s-pack03.adb b/gcc/ada/s-pack03.adb index 907936f7fd1..bd517f60d43 100644 --- a/gcc/ada/s-pack03.adb +++ b/gcc/ada/s-pack03.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_03 is function Get_03 (Arr : System.Address; N : Natural) return Bits_03 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_03 is procedure Set_03 (Arr : System.Address; N : Natural; E : Bits_03) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack03.ads b/gcc/ada/s-pack03.ads index 3b03c6ef9c4..0d6f846a182 100644 --- a/gcc/ada/s-pack03.ads +++ b/gcc/ada/s-pack03.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack05.adb b/gcc/ada/s-pack05.adb index 0e38569c3cc..c3008886758 100644 --- a/gcc/ada/s-pack05.adb +++ b/gcc/ada/s-pack05.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_05 is function Get_05 (Arr : System.Address; N : Natural) return Bits_05 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_05 is procedure Set_05 (Arr : System.Address; N : Natural; E : Bits_05) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack05.ads b/gcc/ada/s-pack05.ads index 2f4fc26a262..b5267565c3b 100644 --- a/gcc/ada/s-pack05.ads +++ b/gcc/ada/s-pack05.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack06.adb b/gcc/ada/s-pack06.adb index 12e9003ac34..b8beacc4731 100644 --- a/gcc/ada/s-pack06.adb +++ b/gcc/ada/s-pack06.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_06 is function Get_06 (Arr : System.Address; N : Natural) return Bits_06 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_06 is function GetU_06 (Arr : System.Address; N : Natural) return Bits_06 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; diff --git a/gcc/ada/s-pack06.ads b/gcc/ada/s-pack06.ads index dcd53abca2a..5c3a4109217 100644 --- a/gcc/ada/s-pack06.ads +++ b/gcc/ada/s-pack06.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack07.adb b/gcc/ada/s-pack07.adb index 064d711c1e0..b8f54b0278d 100644 --- a/gcc/ada/s-pack07.adb +++ b/gcc/ada/s-pack07.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_07 is function Get_07 (Arr : System.Address; N : Natural) return Bits_07 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_07 is procedure Set_07 (Arr : System.Address; N : Natural; E : Bits_07) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack07.ads b/gcc/ada/s-pack07.ads index d994b681e98..308d3ceda33 100644 --- a/gcc/ada/s-pack07.ads +++ b/gcc/ada/s-pack07.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack09.adb b/gcc/ada/s-pack09.adb index c3d3de4dcd1..91d4c51e3c9 100644 --- a/gcc/ada/s-pack09.adb +++ b/gcc/ada/s-pack09.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_09 is function Get_09 (Arr : System.Address; N : Natural) return Bits_09 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_09 is procedure Set_09 (Arr : System.Address; N : Natural; E : Bits_09) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack09.ads b/gcc/ada/s-pack09.ads index 7b4e51ba255..c12df55f63e 100644 --- a/gcc/ada/s-pack09.ads +++ b/gcc/ada/s-pack09.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack10.adb b/gcc/ada/s-pack10.adb index d94a50aec44..c927e0c2b03 100644 --- a/gcc/ada/s-pack10.adb +++ b/gcc/ada/s-pack10.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_10 is function Get_10 (Arr : System.Address; N : Natural) return Bits_10 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_10 is function GetU_10 (Arr : System.Address; N : Natural) return Bits_10 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; diff --git a/gcc/ada/s-pack10.ads b/gcc/ada/s-pack10.ads index f079f7f65c1..6b6904eadc8 100644 --- a/gcc/ada/s-pack10.ads +++ b/gcc/ada/s-pack10.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack11.adb b/gcc/ada/s-pack11.adb index c8ea9563543..caa535aa21e 100644 --- a/gcc/ada/s-pack11.adb +++ b/gcc/ada/s-pack11.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_11 is function Get_11 (Arr : System.Address; N : Natural) return Bits_11 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_11 is procedure Set_11 (Arr : System.Address; N : Natural; E : Bits_11) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack11.ads b/gcc/ada/s-pack11.ads index b8017cfbf42..75dbfb4e9f0 100644 --- a/gcc/ada/s-pack11.ads +++ b/gcc/ada/s-pack11.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack12.adb b/gcc/ada/s-pack12.adb index 29faf62e0b8..c728be4bf39 100644 --- a/gcc/ada/s-pack12.adb +++ b/gcc/ada/s-pack12.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_12 is function Get_12 (Arr : System.Address; N : Natural) return Bits_12 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_12 is function GetU_12 (Arr : System.Address; N : Natural) return Bits_12 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; diff --git a/gcc/ada/s-pack12.ads b/gcc/ada/s-pack12.ads index 002bc518208..14ee979afc9 100644 --- a/gcc/ada/s-pack12.ads +++ b/gcc/ada/s-pack12.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack13.adb b/gcc/ada/s-pack13.adb index 38680363857..835c99785e1 100644 --- a/gcc/ada/s-pack13.adb +++ b/gcc/ada/s-pack13.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_13 is function Get_13 (Arr : System.Address; N : Natural) return Bits_13 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_13 is procedure Set_13 (Arr : System.Address; N : Natural; E : Bits_13) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack13.ads b/gcc/ada/s-pack13.ads index 8022a90b59d..1e918c8208a 100644 --- a/gcc/ada/s-pack13.ads +++ b/gcc/ada/s-pack13.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack14.adb b/gcc/ada/s-pack14.adb index 2fc3c404fb2..6c0fa3fe330 100644 --- a/gcc/ada/s-pack14.adb +++ b/gcc/ada/s-pack14.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_14 is function Get_14 (Arr : System.Address; N : Natural) return Bits_14 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_14 is function GetU_14 (Arr : System.Address; N : Natural) return Bits_14 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_14 is procedure Set_14 (Arr : System.Address; N : Natural; E : Bits_14) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_14 is procedure SetU_14 (Arr : System.Address; N : Natural; E : Bits_14) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack14.ads b/gcc/ada/s-pack14.ads index e3744b2f587..c8e592f88a7 100644 --- a/gcc/ada/s-pack14.ads +++ b/gcc/ada/s-pack14.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack15.adb b/gcc/ada/s-pack15.adb index 3212f2de8de..cb545fe1e08 100644 --- a/gcc/ada/s-pack15.adb +++ b/gcc/ada/s-pack15.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_15 is function Get_15 (Arr : System.Address; N : Natural) return Bits_15 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_15 is procedure Set_15 (Arr : System.Address; N : Natural; E : Bits_15) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack15.ads b/gcc/ada/s-pack15.ads index c166f8ab76c..86c13e8caaf 100644 --- a/gcc/ada/s-pack15.ads +++ b/gcc/ada/s-pack15.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack17.adb b/gcc/ada/s-pack17.adb index e180609df92..a5495607773 100644 --- a/gcc/ada/s-pack17.adb +++ b/gcc/ada/s-pack17.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_17 is function Get_17 (Arr : System.Address; N : Natural) return Bits_17 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_17 is procedure Set_17 (Arr : System.Address; N : Natural; E : Bits_17) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack17.ads b/gcc/ada/s-pack17.ads index fde3bd17d52..f739138ad4b 100644 --- a/gcc/ada/s-pack17.ads +++ b/gcc/ada/s-pack17.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack18.adb b/gcc/ada/s-pack18.adb index d0232f08dbd..2ddc5579345 100644 --- a/gcc/ada/s-pack18.adb +++ b/gcc/ada/s-pack18.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_18 is function Get_18 (Arr : System.Address; N : Natural) return Bits_18 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_18 is function GetU_18 (Arr : System.Address; N : Natural) return Bits_18 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_18 is procedure Set_18 (Arr : System.Address; N : Natural; E : Bits_18) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_18 is procedure SetU_18 (Arr : System.Address; N : Natural; E : Bits_18) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack18.ads b/gcc/ada/s-pack18.ads index c689d50d5f0..936b0c5ab81 100644 --- a/gcc/ada/s-pack18.ads +++ b/gcc/ada/s-pack18.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack19.adb b/gcc/ada/s-pack19.adb index 4fd154d368e..063b5f1e83b 100644 --- a/gcc/ada/s-pack19.adb +++ b/gcc/ada/s-pack19.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_19 is function Get_19 (Arr : System.Address; N : Natural) return Bits_19 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_19 is procedure Set_19 (Arr : System.Address; N : Natural; E : Bits_19) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack19.ads b/gcc/ada/s-pack19.ads index 4f3e12da9cc..1f21aba7dd5 100644 --- a/gcc/ada/s-pack19.ads +++ b/gcc/ada/s-pack19.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack20.adb b/gcc/ada/s-pack20.adb index 317ce4dc872..b05f9ffacf5 100644 --- a/gcc/ada/s-pack20.adb +++ b/gcc/ada/s-pack20.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_20 is function Get_20 (Arr : System.Address; N : Natural) return Bits_20 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_20 is function GetU_20 (Arr : System.Address; N : Natural) return Bits_20 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_20 is procedure Set_20 (Arr : System.Address; N : Natural; E : Bits_20) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_20 is procedure SetU_20 (Arr : System.Address; N : Natural; E : Bits_20) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack20.ads b/gcc/ada/s-pack20.ads index 39a9dc576d2..2df64d3b93e 100644 --- a/gcc/ada/s-pack20.ads +++ b/gcc/ada/s-pack20.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack21.adb b/gcc/ada/s-pack21.adb index e1267a53395..1683857c661 100644 --- a/gcc/ada/s-pack21.adb +++ b/gcc/ada/s-pack21.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_21 is function Get_21 (Arr : System.Address; N : Natural) return Bits_21 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_21 is procedure Set_21 (Arr : System.Address; N : Natural; E : Bits_21) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack21.ads b/gcc/ada/s-pack21.ads index 7de18f9827d..c8c0951cc55 100644 --- a/gcc/ada/s-pack21.ads +++ b/gcc/ada/s-pack21.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack22.adb b/gcc/ada/s-pack22.adb index ab63535d0ba..31f533a2aaa 100644 --- a/gcc/ada/s-pack22.adb +++ b/gcc/ada/s-pack22.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_22 is function Get_22 (Arr : System.Address; N : Natural) return Bits_22 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_22 is function GetU_22 (Arr : System.Address; N : Natural) return Bits_22 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_22 is procedure Set_22 (Arr : System.Address; N : Natural; E : Bits_22) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_22 is procedure SetU_22 (Arr : System.Address; N : Natural; E : Bits_22) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack22.ads b/gcc/ada/s-pack22.ads index 3968d23fc82..883504e6cd8 100644 --- a/gcc/ada/s-pack22.ads +++ b/gcc/ada/s-pack22.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack23.adb b/gcc/ada/s-pack23.adb index 20d59365fc8..840d63d625a 100644 --- a/gcc/ada/s-pack23.adb +++ b/gcc/ada/s-pack23.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_23 is function Get_23 (Arr : System.Address; N : Natural) return Bits_23 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_23 is procedure Set_23 (Arr : System.Address; N : Natural; E : Bits_23) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack23.ads b/gcc/ada/s-pack23.ads index f19a9e93ac3..1efe76b400a 100644 --- a/gcc/ada/s-pack23.ads +++ b/gcc/ada/s-pack23.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack24.adb b/gcc/ada/s-pack24.adb index b44b999db83..98ec9d556f9 100644 --- a/gcc/ada/s-pack24.adb +++ b/gcc/ada/s-pack24.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_24 is function Get_24 (Arr : System.Address; N : Natural) return Bits_24 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_24 is function GetU_24 (Arr : System.Address; N : Natural) return Bits_24 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_24 is procedure Set_24 (Arr : System.Address; N : Natural; E : Bits_24) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_24 is procedure SetU_24 (Arr : System.Address; N : Natural; E : Bits_24) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack24.ads b/gcc/ada/s-pack24.ads index 8c1834e5cc8..6581de89148 100644 --- a/gcc/ada/s-pack24.ads +++ b/gcc/ada/s-pack24.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack25.adb b/gcc/ada/s-pack25.adb index 8803c62558c..bab19229628 100644 --- a/gcc/ada/s-pack25.adb +++ b/gcc/ada/s-pack25.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack25.ads b/gcc/ada/s-pack25.ads index 7882d172f16..fd464106721 100644 --- a/gcc/ada/s-pack25.ads +++ b/gcc/ada/s-pack25.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack26.adb b/gcc/ada/s-pack26.adb index 48aaad6edb0..ecddf4d3a71 100644 --- a/gcc/ada/s-pack26.adb +++ b/gcc/ada/s-pack26.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_26 is function Get_26 (Arr : System.Address; N : Natural) return Bits_26 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_26 is function GetU_26 (Arr : System.Address; N : Natural) return Bits_26 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_26 is procedure Set_26 (Arr : System.Address; N : Natural; E : Bits_26) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_26 is procedure SetU_26 (Arr : System.Address; N : Natural; E : Bits_26) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack26.ads b/gcc/ada/s-pack26.ads index 793b038c386..a1c7a359a16 100644 --- a/gcc/ada/s-pack26.ads +++ b/gcc/ada/s-pack26.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack27.adb b/gcc/ada/s-pack27.adb index 3ad9e1a50a0..b2492b5c213 100644 --- a/gcc/ada/s-pack27.adb +++ b/gcc/ada/s-pack27.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_27 is function Get_27 (Arr : System.Address; N : Natural) return Bits_27 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_27 is procedure Set_27 (Arr : System.Address; N : Natural; E : Bits_27) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack27.ads b/gcc/ada/s-pack27.ads index edbda505eeb..8a77d48905a 100644 --- a/gcc/ada/s-pack27.ads +++ b/gcc/ada/s-pack27.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack28.adb b/gcc/ada/s-pack28.adb index 801e0bc8791..f2693ab5678 100644 --- a/gcc/ada/s-pack28.adb +++ b/gcc/ada/s-pack28.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_28 is function Get_28 (Arr : System.Address; N : Natural) return Bits_28 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_28 is function GetU_28 (Arr : System.Address; N : Natural) return Bits_28 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_28 is procedure Set_28 (Arr : System.Address; N : Natural; E : Bits_28) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_28 is procedure SetU_28 (Arr : System.Address; N : Natural; E : Bits_28) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack28.ads b/gcc/ada/s-pack28.ads index 5a303079a9e..d4df26ac627 100644 --- a/gcc/ada/s-pack28.ads +++ b/gcc/ada/s-pack28.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack29.adb b/gcc/ada/s-pack29.adb index 8c686e65fed..42eda275b19 100644 --- a/gcc/ada/s-pack29.adb +++ b/gcc/ada/s-pack29.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_29 is function Get_29 (Arr : System.Address; N : Natural) return Bits_29 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_29 is procedure Set_29 (Arr : System.Address; N : Natural; E : Bits_29) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack29.ads b/gcc/ada/s-pack29.ads index 6c1ad90503f..403af534c2b 100644 --- a/gcc/ada/s-pack29.ads +++ b/gcc/ada/s-pack29.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack30.adb b/gcc/ada/s-pack30.adb index 6206122e592..2ab521233a5 100644 --- a/gcc/ada/s-pack30.adb +++ b/gcc/ada/s-pack30.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_30 is function Get_30 (Arr : System.Address; N : Natural) return Bits_30 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_30 is function GetU_30 (Arr : System.Address; N : Natural) return Bits_30 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_30 is procedure Set_30 (Arr : System.Address; N : Natural; E : Bits_30) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_30 is procedure SetU_30 (Arr : System.Address; N : Natural; E : Bits_30) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack30.ads b/gcc/ada/s-pack30.ads index c85fe7c78fb..43b624fe9e2 100644 --- a/gcc/ada/s-pack30.ads +++ b/gcc/ada/s-pack30.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack31.adb b/gcc/ada/s-pack31.adb index 71f07724a59..076d96e5f1c 100644 --- a/gcc/ada/s-pack31.adb +++ b/gcc/ada/s-pack31.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_31 is function Get_31 (Arr : System.Address; N : Natural) return Bits_31 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_31 is procedure Set_31 (Arr : System.Address; N : Natural; E : Bits_31) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack31.ads b/gcc/ada/s-pack31.ads index d23157bbfed..06c8832dfe3 100644 --- a/gcc/ada/s-pack31.ads +++ b/gcc/ada/s-pack31.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack33.adb b/gcc/ada/s-pack33.adb index f05fe6b43d1..ce0c0f8ddee 100644 --- a/gcc/ada/s-pack33.adb +++ b/gcc/ada/s-pack33.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_33 is function Get_33 (Arr : System.Address; N : Natural) return Bits_33 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_33 is procedure Set_33 (Arr : System.Address; N : Natural; E : Bits_33) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack33.ads b/gcc/ada/s-pack33.ads index 8b8d5c199e2..995341c043b 100644 --- a/gcc/ada/s-pack33.ads +++ b/gcc/ada/s-pack33.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack34.adb b/gcc/ada/s-pack34.adb index 2d08dbda277..351cad33d20 100644 --- a/gcc/ada/s-pack34.adb +++ b/gcc/ada/s-pack34.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_34 is function Get_34 (Arr : System.Address; N : Natural) return Bits_34 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_34 is function GetU_34 (Arr : System.Address; N : Natural) return Bits_34 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_34 is procedure Set_34 (Arr : System.Address; N : Natural; E : Bits_34) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_34 is procedure SetU_34 (Arr : System.Address; N : Natural; E : Bits_34) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack34.ads b/gcc/ada/s-pack34.ads index db7ffbb6d61..5a4ee7c664b 100644 --- a/gcc/ada/s-pack34.ads +++ b/gcc/ada/s-pack34.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack35.adb b/gcc/ada/s-pack35.adb index 2975949fe1f..f5128f9006f 100644 --- a/gcc/ada/s-pack35.adb +++ b/gcc/ada/s-pack35.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_35 is function Get_35 (Arr : System.Address; N : Natural) return Bits_35 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_35 is procedure Set_35 (Arr : System.Address; N : Natural; E : Bits_35) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack35.ads b/gcc/ada/s-pack35.ads index 1f07dde87ef..729aa95de7f 100644 --- a/gcc/ada/s-pack35.ads +++ b/gcc/ada/s-pack35.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack36.adb b/gcc/ada/s-pack36.adb index 447a0e2b9d0..c49b7527710 100644 --- a/gcc/ada/s-pack36.adb +++ b/gcc/ada/s-pack36.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_36 is function Get_36 (Arr : System.Address; N : Natural) return Bits_36 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_36 is function GetU_36 (Arr : System.Address; N : Natural) return Bits_36 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_36 is procedure Set_36 (Arr : System.Address; N : Natural; E : Bits_36) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_36 is procedure SetU_36 (Arr : System.Address; N : Natural; E : Bits_36) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack36.ads b/gcc/ada/s-pack36.ads index 509e65b9c84..619516022b4 100644 --- a/gcc/ada/s-pack36.ads +++ b/gcc/ada/s-pack36.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack37.adb b/gcc/ada/s-pack37.adb index e48fb1db23d..6a07d716b1c 100644 --- a/gcc/ada/s-pack37.adb +++ b/gcc/ada/s-pack37.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_37 is function Get_37 (Arr : System.Address; N : Natural) return Bits_37 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_37 is procedure Set_37 (Arr : System.Address; N : Natural; E : Bits_37) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack37.ads b/gcc/ada/s-pack37.ads index df2156d8c8b..57afa3a2b9a 100644 --- a/gcc/ada/s-pack37.ads +++ b/gcc/ada/s-pack37.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack38.adb b/gcc/ada/s-pack38.adb index 422de48ed83..d99670be6cf 100644 --- a/gcc/ada/s-pack38.adb +++ b/gcc/ada/s-pack38.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_38 is function Get_38 (Arr : System.Address; N : Natural) return Bits_38 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_38 is function GetU_38 (Arr : System.Address; N : Natural) return Bits_38 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_38 is procedure Set_38 (Arr : System.Address; N : Natural; E : Bits_38) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_38 is procedure SetU_38 (Arr : System.Address; N : Natural; E : Bits_38) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack38.ads b/gcc/ada/s-pack38.ads index a9d9a4953f2..12aeea0caa2 100644 --- a/gcc/ada/s-pack38.ads +++ b/gcc/ada/s-pack38.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack39.adb b/gcc/ada/s-pack39.adb index d2b75f9b1ad..fc4daf4e10d 100644 --- a/gcc/ada/s-pack39.adb +++ b/gcc/ada/s-pack39.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_39 is function Get_39 (Arr : System.Address; N : Natural) return Bits_39 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_39 is procedure Set_39 (Arr : System.Address; N : Natural; E : Bits_39) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack39.ads b/gcc/ada/s-pack39.ads index 4a2ff511c4d..fda38ee14d6 100644 --- a/gcc/ada/s-pack39.ads +++ b/gcc/ada/s-pack39.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack40.adb b/gcc/ada/s-pack40.adb index 3068334c9ea..46824abd145 100644 --- a/gcc/ada/s-pack40.adb +++ b/gcc/ada/s-pack40.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_40 is function Get_40 (Arr : System.Address; N : Natural) return Bits_40 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_40 is function GetU_40 (Arr : System.Address; N : Natural) return Bits_40 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_40 is procedure Set_40 (Arr : System.Address; N : Natural; E : Bits_40) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_40 is procedure SetU_40 (Arr : System.Address; N : Natural; E : Bits_40) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack40.ads b/gcc/ada/s-pack40.ads index ee7981c7ec5..21a1313af89 100644 --- a/gcc/ada/s-pack40.ads +++ b/gcc/ada/s-pack40.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack41.adb b/gcc/ada/s-pack41.adb index 26052805a62..b245633cf09 100644 --- a/gcc/ada/s-pack41.adb +++ b/gcc/ada/s-pack41.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_41 is function Get_41 (Arr : System.Address; N : Natural) return Bits_41 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_41 is procedure Set_41 (Arr : System.Address; N : Natural; E : Bits_41) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack41.ads b/gcc/ada/s-pack41.ads index 9a956f3f1d6..d4a5dc7b165 100644 --- a/gcc/ada/s-pack41.ads +++ b/gcc/ada/s-pack41.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack42.adb b/gcc/ada/s-pack42.adb index 939662ab2a4..3444ab33fea 100644 --- a/gcc/ada/s-pack42.adb +++ b/gcc/ada/s-pack42.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_42 is function Get_42 (Arr : System.Address; N : Natural) return Bits_42 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_42 is function GetU_42 (Arr : System.Address; N : Natural) return Bits_42 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_42 is procedure Set_42 (Arr : System.Address; N : Natural; E : Bits_42) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_42 is procedure SetU_42 (Arr : System.Address; N : Natural; E : Bits_42) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack42.ads b/gcc/ada/s-pack42.ads index 82ce7105076..36ef28b18ed 100644 --- a/gcc/ada/s-pack42.ads +++ b/gcc/ada/s-pack42.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack43.adb b/gcc/ada/s-pack43.adb index 5df98b62626..b9e5ca0eaaf 100644 --- a/gcc/ada/s-pack43.adb +++ b/gcc/ada/s-pack43.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_43 is function Get_43 (Arr : System.Address; N : Natural) return Bits_43 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_43 is procedure Set_43 (Arr : System.Address; N : Natural; E : Bits_43) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack43.ads b/gcc/ada/s-pack43.ads index 74d4fada4ae..844c9d2bd7a 100644 --- a/gcc/ada/s-pack43.ads +++ b/gcc/ada/s-pack43.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack44.adb b/gcc/ada/s-pack44.adb index 8eb16d7802e..b3f2f7561a6 100644 --- a/gcc/ada/s-pack44.adb +++ b/gcc/ada/s-pack44.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_44 is function Get_44 (Arr : System.Address; N : Natural) return Bits_44 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_44 is function GetU_44 (Arr : System.Address; N : Natural) return Bits_44 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_44 is procedure Set_44 (Arr : System.Address; N : Natural; E : Bits_44) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_44 is procedure SetU_44 (Arr : System.Address; N : Natural; E : Bits_44) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack44.ads b/gcc/ada/s-pack44.ads index fa6863f82e4..a09c2d36453 100644 --- a/gcc/ada/s-pack44.ads +++ b/gcc/ada/s-pack44.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack45.adb b/gcc/ada/s-pack45.adb index 32079b3b933..7f3426f5673 100644 --- a/gcc/ada/s-pack45.adb +++ b/gcc/ada/s-pack45.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_45 is function Get_45 (Arr : System.Address; N : Natural) return Bits_45 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_45 is procedure Set_45 (Arr : System.Address; N : Natural; E : Bits_45) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack45.ads b/gcc/ada/s-pack45.ads index 78ebaa1924e..bdd8338b35e 100644 --- a/gcc/ada/s-pack45.ads +++ b/gcc/ada/s-pack45.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack46.adb b/gcc/ada/s-pack46.adb index a17c078d110..efb039472c3 100644 --- a/gcc/ada/s-pack46.adb +++ b/gcc/ada/s-pack46.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_46 is function Get_46 (Arr : System.Address; N : Natural) return Bits_46 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_46 is function GetU_46 (Arr : System.Address; N : Natural) return Bits_46 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_46 is procedure Set_46 (Arr : System.Address; N : Natural; E : Bits_46) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_46 is procedure SetU_46 (Arr : System.Address; N : Natural; E : Bits_46) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack46.ads b/gcc/ada/s-pack46.ads index 09256709dad..5ec4132c965 100644 --- a/gcc/ada/s-pack46.ads +++ b/gcc/ada/s-pack46.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack47.adb b/gcc/ada/s-pack47.adb index cd49c39023f..ef73a106638 100644 --- a/gcc/ada/s-pack47.adb +++ b/gcc/ada/s-pack47.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_47 is function Get_47 (Arr : System.Address; N : Natural) return Bits_47 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_47 is procedure Set_47 (Arr : System.Address; N : Natural; E : Bits_47) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack47.ads b/gcc/ada/s-pack47.ads index 4ca1ba3e96c..e444ee08c26 100644 --- a/gcc/ada/s-pack47.ads +++ b/gcc/ada/s-pack47.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack48.adb b/gcc/ada/s-pack48.adb index 91751617c8a..5839bc92c5c 100644 --- a/gcc/ada/s-pack48.adb +++ b/gcc/ada/s-pack48.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_48 is function Get_48 (Arr : System.Address; N : Natural) return Bits_48 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_48 is function GetU_48 (Arr : System.Address; N : Natural) return Bits_48 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_48 is procedure Set_48 (Arr : System.Address; N : Natural; E : Bits_48) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_48 is procedure SetU_48 (Arr : System.Address; N : Natural; E : Bits_48) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack48.ads b/gcc/ada/s-pack48.ads index 0004f9275c9..e832e3607cc 100644 --- a/gcc/ada/s-pack48.ads +++ b/gcc/ada/s-pack48.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack49.adb b/gcc/ada/s-pack49.adb index 7e39703ce8d..a34380dc70e 100644 --- a/gcc/ada/s-pack49.adb +++ b/gcc/ada/s-pack49.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_49 is function Get_49 (Arr : System.Address; N : Natural) return Bits_49 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_49 is procedure Set_49 (Arr : System.Address; N : Natural; E : Bits_49) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack49.ads b/gcc/ada/s-pack49.ads index f60042b28ab..9b448129a90 100644 --- a/gcc/ada/s-pack49.ads +++ b/gcc/ada/s-pack49.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack50.adb b/gcc/ada/s-pack50.adb index 4ff69b20bc9..cb70a01dbe1 100644 --- a/gcc/ada/s-pack50.adb +++ b/gcc/ada/s-pack50.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_50 is function Get_50 (Arr : System.Address; N : Natural) return Bits_50 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_50 is function GetU_50 (Arr : System.Address; N : Natural) return Bits_50 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_50 is procedure Set_50 (Arr : System.Address; N : Natural; E : Bits_50) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_50 is procedure SetU_50 (Arr : System.Address; N : Natural; E : Bits_50) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack50.ads b/gcc/ada/s-pack50.ads index 0ac3532406c..cb639f9eb28 100644 --- a/gcc/ada/s-pack50.ads +++ b/gcc/ada/s-pack50.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack51.adb b/gcc/ada/s-pack51.adb index 5c5f926169b..9d71ba01539 100644 --- a/gcc/ada/s-pack51.adb +++ b/gcc/ada/s-pack51.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_51 is function Get_51 (Arr : System.Address; N : Natural) return Bits_51 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_51 is procedure Set_51 (Arr : System.Address; N : Natural; E : Bits_51) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack51.ads b/gcc/ada/s-pack51.ads index b5a479eb013..11e107f4fc0 100644 --- a/gcc/ada/s-pack51.ads +++ b/gcc/ada/s-pack51.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack52.adb b/gcc/ada/s-pack52.adb index 86765bd1bc5..88c21ff8feb 100644 --- a/gcc/ada/s-pack52.adb +++ b/gcc/ada/s-pack52.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_52 is function Get_52 (Arr : System.Address; N : Natural) return Bits_52 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_52 is function GetU_52 (Arr : System.Address; N : Natural) return Bits_52 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_52 is procedure Set_52 (Arr : System.Address; N : Natural; E : Bits_52) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_52 is procedure SetU_52 (Arr : System.Address; N : Natural; E : Bits_52) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack52.ads b/gcc/ada/s-pack52.ads index 0bb2dfc5a3b..5b19da30d77 100644 --- a/gcc/ada/s-pack52.ads +++ b/gcc/ada/s-pack52.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack53.adb b/gcc/ada/s-pack53.adb index 76a63ce752c..72cf0ea414a 100644 --- a/gcc/ada/s-pack53.adb +++ b/gcc/ada/s-pack53.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_53 is function Get_53 (Arr : System.Address; N : Natural) return Bits_53 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_53 is procedure Set_53 (Arr : System.Address; N : Natural; E : Bits_53) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack53.ads b/gcc/ada/s-pack53.ads index eaf4fcc6551..cc46a810893 100644 --- a/gcc/ada/s-pack53.ads +++ b/gcc/ada/s-pack53.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack54.adb b/gcc/ada/s-pack54.adb index 53a56a4595f..64be7270f7f 100644 --- a/gcc/ada/s-pack54.adb +++ b/gcc/ada/s-pack54.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_54 is function Get_54 (Arr : System.Address; N : Natural) return Bits_54 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_54 is function GetU_54 (Arr : System.Address; N : Natural) return Bits_54 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_54 is procedure Set_54 (Arr : System.Address; N : Natural; E : Bits_54) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_54 is procedure SetU_54 (Arr : System.Address; N : Natural; E : Bits_54) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack54.ads b/gcc/ada/s-pack54.ads index efecf497138..1bddbd596c9 100644 --- a/gcc/ada/s-pack54.ads +++ b/gcc/ada/s-pack54.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack55.adb b/gcc/ada/s-pack55.adb index e5b712b6058..c36bbc82490 100644 --- a/gcc/ada/s-pack55.adb +++ b/gcc/ada/s-pack55.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_55 is function Get_55 (Arr : System.Address; N : Natural) return Bits_55 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_55 is procedure Set_55 (Arr : System.Address; N : Natural; E : Bits_55) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack55.ads b/gcc/ada/s-pack55.ads index 61c8709f981..5727ef9b112 100644 --- a/gcc/ada/s-pack55.ads +++ b/gcc/ada/s-pack55.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack56.adb b/gcc/ada/s-pack56.adb index 4998fad86c4..dbeb6cf5a8e 100644 --- a/gcc/ada/s-pack56.adb +++ b/gcc/ada/s-pack56.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_56 is function Get_56 (Arr : System.Address; N : Natural) return Bits_56 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_56 is function GetU_56 (Arr : System.Address; N : Natural) return Bits_56 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_56 is procedure Set_56 (Arr : System.Address; N : Natural; E : Bits_56) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_56 is procedure SetU_56 (Arr : System.Address; N : Natural; E : Bits_56) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack56.ads b/gcc/ada/s-pack56.ads index d0d3c792aa3..1db23e854fb 100644 --- a/gcc/ada/s-pack56.ads +++ b/gcc/ada/s-pack56.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack57.adb b/gcc/ada/s-pack57.adb index 2da80cdadaf..190c6092eda 100644 --- a/gcc/ada/s-pack57.adb +++ b/gcc/ada/s-pack57.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_57 is function Get_57 (Arr : System.Address; N : Natural) return Bits_57 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_57 is procedure Set_57 (Arr : System.Address; N : Natural; E : Bits_57) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack57.ads b/gcc/ada/s-pack57.ads index 2781b4aa439..be6f9d2a2b4 100644 --- a/gcc/ada/s-pack57.ads +++ b/gcc/ada/s-pack57.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack58.adb b/gcc/ada/s-pack58.adb index 387dcfca04a..710f1bc6cc4 100644 --- a/gcc/ada/s-pack58.adb +++ b/gcc/ada/s-pack58.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_58 is function Get_58 (Arr : System.Address; N : Natural) return Bits_58 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_58 is function GetU_58 (Arr : System.Address; N : Natural) return Bits_58 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_58 is procedure Set_58 (Arr : System.Address; N : Natural; E : Bits_58) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_58 is procedure SetU_58 (Arr : System.Address; N : Natural; E : Bits_58) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack58.ads b/gcc/ada/s-pack58.ads index a88434556a6..5a18c5a462e 100644 --- a/gcc/ada/s-pack58.ads +++ b/gcc/ada/s-pack58.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack59.adb b/gcc/ada/s-pack59.adb index 7f79d19fd1c..fed0bb2e8db 100644 --- a/gcc/ada/s-pack59.adb +++ b/gcc/ada/s-pack59.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_59 is function Get_59 (Arr : System.Address; N : Natural) return Bits_59 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_59 is procedure Set_59 (Arr : System.Address; N : Natural; E : Bits_59) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack59.ads b/gcc/ada/s-pack59.ads index 492b9ce6395..e527306109b 100644 --- a/gcc/ada/s-pack59.ads +++ b/gcc/ada/s-pack59.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack60.adb b/gcc/ada/s-pack60.adb index 630e84b1121..8c91ec16ffc 100644 --- a/gcc/ada/s-pack60.adb +++ b/gcc/ada/s-pack60.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_60 is function Get_60 (Arr : System.Address; N : Natural) return Bits_60 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_60 is function GetU_60 (Arr : System.Address; N : Natural) return Bits_60 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_60 is procedure Set_60 (Arr : System.Address; N : Natural; E : Bits_60) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_60 is procedure SetU_60 (Arr : System.Address; N : Natural; E : Bits_60) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack60.ads b/gcc/ada/s-pack60.ads index fd6f7d05591..121c29acd58 100644 --- a/gcc/ada/s-pack60.ads +++ b/gcc/ada/s-pack60.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack61.adb b/gcc/ada/s-pack61.adb index 58f33284af2..cdc4b7114c6 100644 --- a/gcc/ada/s-pack61.adb +++ b/gcc/ada/s-pack61.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_61 is function Get_61 (Arr : System.Address; N : Natural) return Bits_61 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_61 is procedure Set_61 (Arr : System.Address; N : Natural; E : Bits_61) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack61.ads b/gcc/ada/s-pack61.ads index e745c5e6fe4..0209e75b227 100644 --- a/gcc/ada/s-pack61.ads +++ b/gcc/ada/s-pack61.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack62.adb b/gcc/ada/s-pack62.adb index da4ebad84f6..da442169ab2 100644 --- a/gcc/ada/s-pack62.adb +++ b/gcc/ada/s-pack62.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -92,7 +92,6 @@ package body System.Pack_62 is function Get_62 (Arr : System.Address; N : Natural) return Bits_62 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -112,7 +111,6 @@ package body System.Pack_62 is function GetU_62 (Arr : System.Address; N : Natural) return Bits_62 is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -132,7 +130,6 @@ package body System.Pack_62 is procedure Set_62 (Arr : System.Address; N : Natural; E : Bits_62) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; @@ -152,7 +149,6 @@ package body System.Pack_62 is procedure SetU_62 (Arr : System.Address; N : Natural; E : Bits_62) is C : constant ClusterU_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack62.ads b/gcc/ada/s-pack62.ads index a7642b5ca27..969880d0d0d 100644 --- a/gcc/ada/s-pack62.ads +++ b/gcc/ada/s-pack62.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-pack63.adb b/gcc/ada/s-pack63.adb index 8ebf4f564aa..d36c30e2d5a 100644 --- a/gcc/ada/s-pack63.adb +++ b/gcc/ada/s-pack63.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,6 @@ package body System.Pack_63 is function Get_63 (Arr : System.Address; N : Natural) return Bits_63 is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => return C.E0; @@ -99,7 +98,6 @@ package body System.Pack_63 is procedure Set_63 (Arr : System.Address; N : Natural; E : Bits_63) is C : constant Cluster_Ref := To_Ref (Arr + Bits * Ofs (Uns (N) / 8)); - begin case N07 (Uns (N) mod 8) is when 0 => C.E0 := E; diff --git a/gcc/ada/s-pack63.ads b/gcc/ada/s-pack63.ads index 08f84f542fd..cb4038242e5 100644 --- a/gcc/ada/s-pack63.ads +++ b/gcc/ada/s-pack63.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-parame-mingw.adb b/gcc/ada/s-parame-mingw.adb index e73911cf8b1..d6bc023afbf 100644 --- a/gcc/ada/s-parame-mingw.adb +++ b/gcc/ada/s-parame-mingw.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-parint.adb b/gcc/ada/s-parint.adb index b7a676e8dde..6091f3d1db6 100644 --- a/gcc/ada/s-parint.adb +++ b/gcc/ada/s-parint.adb @@ -7,7 +7,7 @@ -- B o d y -- -- (Dummy body for non-distributed case) -- -- -- --- Copyright (C) 1995-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,7 +40,7 @@ package body System.Partition_Interface is type String_Access is access String; - -- To have a minimal implementation of U'Partition_ID. + -- To have a minimal implementation of U'Partition_ID type Pkg_Node; type Pkg_List is access Pkg_Node; diff --git a/gcc/ada/s-parint.ads b/gcc/ada/s-parint.ads index 40396d22112..4eeb67109a2 100644 --- a/gcc/ada/s-parint.ads +++ b/gcc/ada/s-parint.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1995-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2005, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-purexc.ads b/gcc/ada/s-purexc.ads index c9edb603353..4600f4a07db 100644 --- a/gcc/ada/s-purexc.ads +++ b/gcc/ada/s-purexc.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2000-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-restri.adb b/gcc/ada/s-restri.adb index 81d16d07c15..d7b95256873 100644 --- a/gcc/ada/s-restri.adb +++ b/gcc/ada/s-restri.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-restri.ads b/gcc/ada/s-restri.ads index 1d2734ce340..0c9a4e79fee 100644 --- a/gcc/ada/s-restri.ads +++ b/gcc/ada/s-restri.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-scaval.adb b/gcc/ada/s-scaval.adb index 61f2fca6c2f..71b5c6017a5 100644 --- a/gcc/ada/s-scaval.adb +++ b/gcc/ada/s-scaval.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-scaval.ads b/gcc/ada/s-scaval.ads index 9e7962c433a..b39bd82a1ea 100644 --- a/gcc/ada/s-scaval.ads +++ b/gcc/ada/s-scaval.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-secsta.adb b/gcc/ada/s-secsta.adb index 97dd744f3c1..3c6485cbf6f 100644 --- a/gcc/ada/s-secsta.adb +++ b/gcc/ada/s-secsta.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-secsta.ads b/gcc/ada/s-secsta.ads index 22e0b4831d0..ad4a98decf2 100644 --- a/gcc/ada/s-secsta.ads +++ b/gcc/ada/s-secsta.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-sequio.adb b/gcc/ada/s-sequio.adb index 2e5a29b24f2..4ab259f6fbe 100644 --- a/gcc/ada/s-sequio.adb +++ b/gcc/ada/s-sequio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-sequio.ads b/gcc/ada/s-sequio.ads index fcd8233b527..3ad99820ca9 100644 --- a/gcc/ada/s-sequio.ads +++ b/gcc/ada/s-sequio.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-stoele.adb b/gcc/ada/s-stoele.adb index 59eaf0b8215..4d4f9594e76 100644 --- a/gcc/ada/s-stoele.adb +++ b/gcc/ada/s-stoele.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -61,15 +61,17 @@ package body System.Storage_Elements is return To_Offset (To_Address (To_Integer (Left) - To_Integer (Right))); end "-"; - function "mod" (Left : Address; Right : Storage_Offset) - return Storage_Offset is + function "mod" + (Left : Address; + Right : Storage_Offset) return Storage_Offset + is begin if Right >= 0 then return Storage_Offset (To_Integer (Left) mod Integer_Address (Right)); else return -Storage_Offset - (To_Integer (Left) mod Integer_Address (-Right)); + ((-To_Integer (Left)) mod Integer_Address (-Right)); end if; end "mod"; diff --git a/gcc/ada/s-stratt.adb b/gcc/ada/s-stratt.adb index 5cf84c4a3ac..810a1046ffa 100644 --- a/gcc/ada/s-stratt.adb +++ b/gcc/ada/s-stratt.adb @@ -119,7 +119,7 @@ package body System.Stream_Attributes is -- I_AD -- ---------- - function I_AD (Stream : access RST) return Fat_Pointer is + function I_AD (Stream : not null access RST) return Fat_Pointer is T : S_AD; L : SEO; @@ -137,7 +137,7 @@ package body System.Stream_Attributes is -- I_AS -- ---------- - function I_AS (Stream : access RST) return Thin_Pointer is + function I_AS (Stream : not null access RST) return Thin_Pointer is T : S_AS; L : SEO; @@ -155,7 +155,7 @@ package body System.Stream_Attributes is -- I_B -- --------- - function I_B (Stream : access RST) return Boolean is + function I_B (Stream : not null access RST) return Boolean is T : S_B; L : SEO; @@ -173,7 +173,7 @@ package body System.Stream_Attributes is -- I_C -- --------- - function I_C (Stream : access RST) return Character is + function I_C (Stream : not null access RST) return Character is T : S_C; L : SEO; @@ -191,7 +191,7 @@ package body System.Stream_Attributes is -- I_F -- --------- - function I_F (Stream : access RST) return Float is + function I_F (Stream : not null access RST) return Float is T : S_F; L : SEO; @@ -209,7 +209,7 @@ package body System.Stream_Attributes is -- I_I -- --------- - function I_I (Stream : access RST) return Integer is + function I_I (Stream : not null access RST) return Integer is T : S_I; L : SEO; @@ -227,7 +227,7 @@ package body System.Stream_Attributes is -- I_LF -- ---------- - function I_LF (Stream : access RST) return Long_Float is + function I_LF (Stream : not null access RST) return Long_Float is T : S_LF; L : SEO; @@ -245,7 +245,7 @@ package body System.Stream_Attributes is -- I_LI -- ---------- - function I_LI (Stream : access RST) return Long_Integer is + function I_LI (Stream : not null access RST) return Long_Integer is T : S_LI; L : SEO; @@ -263,7 +263,7 @@ package body System.Stream_Attributes is -- I_LLF -- ----------- - function I_LLF (Stream : access RST) return Long_Long_Float is + function I_LLF (Stream : not null access RST) return Long_Long_Float is T : S_LLF; L : SEO; @@ -281,7 +281,7 @@ package body System.Stream_Attributes is -- I_LLI -- ----------- - function I_LLI (Stream : access RST) return Long_Long_Integer is + function I_LLI (Stream : not null access RST) return Long_Long_Integer is T : S_LLI; L : SEO; @@ -299,7 +299,9 @@ package body System.Stream_Attributes is -- I_LLU -- ----------- - function I_LLU (Stream : access RST) return UST.Long_Long_Unsigned is + function I_LLU + (Stream : not null access RST) return UST.Long_Long_Unsigned + is T : S_LLU; L : SEO; @@ -317,7 +319,7 @@ package body System.Stream_Attributes is -- I_LU -- ---------- - function I_LU (Stream : access RST) return UST.Long_Unsigned is + function I_LU (Stream : not null access RST) return UST.Long_Unsigned is T : S_LU; L : SEO; @@ -335,7 +337,7 @@ package body System.Stream_Attributes is -- I_SF -- ---------- - function I_SF (Stream : access RST) return Short_Float is + function I_SF (Stream : not null access RST) return Short_Float is T : S_SF; L : SEO; @@ -353,7 +355,7 @@ package body System.Stream_Attributes is -- I_SI -- ---------- - function I_SI (Stream : access RST) return Short_Integer is + function I_SI (Stream : not null access RST) return Short_Integer is T : S_SI; L : SEO; @@ -371,7 +373,7 @@ package body System.Stream_Attributes is -- I_SSI -- ----------- - function I_SSI (Stream : access RST) return Short_Short_Integer is + function I_SSI (Stream : not null access RST) return Short_Short_Integer is T : S_SSI; L : SEO; @@ -389,7 +391,9 @@ package body System.Stream_Attributes is -- I_SSU -- ----------- - function I_SSU (Stream : access RST) return UST.Short_Short_Unsigned is + function I_SSU + (Stream : not null access RST) return UST.Short_Short_Unsigned + is T : S_SSU; L : SEO; @@ -407,7 +411,7 @@ package body System.Stream_Attributes is -- I_SU -- ---------- - function I_SU (Stream : access RST) return UST.Short_Unsigned is + function I_SU (Stream : not null access RST) return UST.Short_Unsigned is T : S_SU; L : SEO; @@ -425,7 +429,7 @@ package body System.Stream_Attributes is -- I_U -- --------- - function I_U (Stream : access RST) return UST.Unsigned is + function I_U (Stream : not null access RST) return UST.Unsigned is T : S_U; L : SEO; @@ -443,7 +447,7 @@ package body System.Stream_Attributes is -- I_WC -- ---------- - function I_WC (Stream : access RST) return Wide_Character is + function I_WC (Stream : not null access RST) return Wide_Character is T : S_WC; L : SEO; @@ -461,7 +465,7 @@ package body System.Stream_Attributes is -- W_AD -- ---------- - procedure W_AD (Stream : access RST; Item : in Fat_Pointer) is + procedure W_AD (Stream : not null access RST; Item : in Fat_Pointer) is T : constant S_AD := From_AD (Item); begin @@ -472,7 +476,7 @@ package body System.Stream_Attributes is -- W_AS -- ---------- - procedure W_AS (Stream : access RST; Item : in Thin_Pointer) is + procedure W_AS (Stream : not null access RST; Item : in Thin_Pointer) is T : constant S_AS := From_AS (Item); begin @@ -483,7 +487,7 @@ package body System.Stream_Attributes is -- W_B -- --------- - procedure W_B (Stream : access RST; Item : in Boolean) is + procedure W_B (Stream : not null access RST; Item : in Boolean) is T : S_B; begin @@ -495,7 +499,7 @@ package body System.Stream_Attributes is -- W_C -- --------- - procedure W_C (Stream : access RST; Item : in Character) is + procedure W_C (Stream : not null access RST; Item : in Character) is T : S_C; begin @@ -507,7 +511,7 @@ package body System.Stream_Attributes is -- W_F -- --------- - procedure W_F (Stream : access RST; Item : in Float) is + procedure W_F (Stream : not null access RST; Item : in Float) is T : constant S_F := From_F (Item); begin @@ -518,7 +522,7 @@ package body System.Stream_Attributes is -- W_I -- --------- - procedure W_I (Stream : access RST; Item : in Integer) is + procedure W_I (Stream : not null access RST; Item : in Integer) is T : constant S_I := From_I (Item); begin @@ -529,7 +533,7 @@ package body System.Stream_Attributes is -- W_LF -- ---------- - procedure W_LF (Stream : access RST; Item : in Long_Float) is + procedure W_LF (Stream : not null access RST; Item : in Long_Float) is T : constant S_LF := From_LF (Item); begin @@ -540,7 +544,7 @@ package body System.Stream_Attributes is -- W_LI -- ---------- - procedure W_LI (Stream : access RST; Item : in Long_Integer) is + procedure W_LI (Stream : not null access RST; Item : in Long_Integer) is T : constant S_LI := From_LI (Item); begin @@ -551,7 +555,7 @@ package body System.Stream_Attributes is -- W_LLF -- ----------- - procedure W_LLF (Stream : access RST; Item : in Long_Long_Float) is + procedure W_LLF (Stream : not null access RST; Item : in Long_Long_Float) is T : constant S_LLF := From_LLF (Item); begin @@ -562,7 +566,9 @@ package body System.Stream_Attributes is -- W_LLI -- ----------- - procedure W_LLI (Stream : access RST; Item : in Long_Long_Integer) is + procedure W_LLI + (Stream : not null access RST; Item : in Long_Long_Integer) + is T : constant S_LLI := From_LLI (Item); begin @@ -573,7 +579,9 @@ package body System.Stream_Attributes is -- W_LLU -- ----------- - procedure W_LLU (Stream : access RST; Item : in UST.Long_Long_Unsigned) is + procedure W_LLU + (Stream : not null access RST; Item : in UST.Long_Long_Unsigned) + is T : constant S_LLU := From_LLU (Item); begin @@ -584,7 +592,9 @@ package body System.Stream_Attributes is -- W_LU -- ---------- - procedure W_LU (Stream : access RST; Item : in UST.Long_Unsigned) is + procedure W_LU + (Stream : not null access RST; Item : in UST.Long_Unsigned) + is T : constant S_LU := From_LU (Item); begin @@ -595,7 +605,7 @@ package body System.Stream_Attributes is -- W_SF -- ---------- - procedure W_SF (Stream : access RST; Item : in Short_Float) is + procedure W_SF (Stream : not null access RST; Item : in Short_Float) is T : constant S_SF := From_SF (Item); begin @@ -606,7 +616,7 @@ package body System.Stream_Attributes is -- W_SI -- ---------- - procedure W_SI (Stream : access RST; Item : in Short_Integer) is + procedure W_SI (Stream : not null access RST; Item : in Short_Integer) is T : constant S_SI := From_SI (Item); begin @@ -617,7 +627,9 @@ package body System.Stream_Attributes is -- W_SSI -- ----------- - procedure W_SSI (Stream : access RST; Item : in Short_Short_Integer) is + procedure W_SSI + (Stream : not null access RST; Item : in Short_Short_Integer) + is T : constant S_SSI := From_SSI (Item); begin @@ -628,7 +640,9 @@ package body System.Stream_Attributes is -- W_SSU -- ----------- - procedure W_SSU (Stream : access RST; Item : in UST.Short_Short_Unsigned) is + procedure W_SSU + (Stream : not null access RST; Item : in UST.Short_Short_Unsigned) + is T : constant S_SSU := From_SSU (Item); begin @@ -639,7 +653,9 @@ package body System.Stream_Attributes is -- W_SU -- ---------- - procedure W_SU (Stream : access RST; Item : in UST.Short_Unsigned) is + procedure W_SU + (Stream : not null access RST; Item : in UST.Short_Unsigned) + is T : constant S_SU := From_SU (Item); begin @@ -650,7 +666,7 @@ package body System.Stream_Attributes is -- W_U -- --------- - procedure W_U (Stream : access RST; Item : in UST.Unsigned) is + procedure W_U (Stream : not null access RST; Item : in UST.Unsigned) is T : constant S_U := From_U (Item); begin @@ -661,7 +677,7 @@ package body System.Stream_Attributes is -- W_WC -- ---------- - procedure W_WC (Stream : access RST; Item : in Wide_Character) is + procedure W_WC (Stream : not null access RST; Item : in Wide_Character) is T : constant S_WC := From_WC (Item); begin diff --git a/gcc/ada/s-stratt.ads b/gcc/ada/s-stratt.ads index c4d0a32d062..eefebd4f243 100644 --- a/gcc/ada/s-stratt.ads +++ b/gcc/ada/s-stratt.ads @@ -101,25 +101,26 @@ package System.Stream_Attributes is -- is the same for all elementary types (no bounds or discriminants -- are involved). - function I_AD (Stream : access RST) return Fat_Pointer; - function I_AS (Stream : access RST) return Thin_Pointer; - function I_B (Stream : access RST) return Boolean; - function I_C (Stream : access RST) return Character; - function I_F (Stream : access RST) return Float; - function I_I (Stream : access RST) return Integer; - function I_LF (Stream : access RST) return Long_Float; - function I_LI (Stream : access RST) return Long_Integer; - function I_LLF (Stream : access RST) return Long_Long_Float; - function I_LLI (Stream : access RST) return Long_Long_Integer; - function I_LLU (Stream : access RST) return UST.Long_Long_Unsigned; - function I_LU (Stream : access RST) return UST.Long_Unsigned; - function I_SF (Stream : access RST) return Short_Float; - function I_SI (Stream : access RST) return Short_Integer; - function I_SSI (Stream : access RST) return Short_Short_Integer; - function I_SSU (Stream : access RST) return UST.Short_Short_Unsigned; - function I_SU (Stream : access RST) return UST.Short_Unsigned; - function I_U (Stream : access RST) return UST.Unsigned; - function I_WC (Stream : access RST) return Wide_Character; + function I_AD (Stream : not null access RST) return Fat_Pointer; + function I_AS (Stream : not null access RST) return Thin_Pointer; + function I_B (Stream : not null access RST) return Boolean; + function I_C (Stream : not null access RST) return Character; + function I_F (Stream : not null access RST) return Float; + function I_I (Stream : not null access RST) return Integer; + function I_LF (Stream : not null access RST) return Long_Float; + function I_LI (Stream : not null access RST) return Long_Integer; + function I_LLF (Stream : not null access RST) return Long_Long_Float; + function I_LLI (Stream : not null access RST) return Long_Long_Integer; + function I_LLU (Stream : not null access RST) return UST.Long_Long_Unsigned; + function I_LU (Stream : not null access RST) return UST.Long_Unsigned; + function I_SF (Stream : not null access RST) return Short_Float; + function I_SI (Stream : not null access RST) return Short_Integer; + function I_SSI (Stream : not null access RST) return Short_Short_Integer; + function I_SSU (Stream : not null access RST) + return UST.Short_Short_Unsigned; + function I_SU (Stream : not null access RST) return UST.Short_Unsigned; + function I_U (Stream : not null access RST) return UST.Unsigned; + function I_WC (Stream : not null access RST) return Wide_Character; ----------------------- -- Output Procedures -- @@ -130,25 +131,29 @@ package System.Stream_Attributes is -- between 'Write and 'Output because there are no discriminants -- or bounds to be written. - procedure W_AD (Stream : access RST; Item : in Fat_Pointer); - procedure W_AS (Stream : access RST; Item : in Thin_Pointer); - procedure W_B (Stream : access RST; Item : in Boolean); - procedure W_C (Stream : access RST; Item : in Character); - procedure W_F (Stream : access RST; Item : in Float); - procedure W_I (Stream : access RST; Item : in Integer); - procedure W_LF (Stream : access RST; Item : in Long_Float); - procedure W_LI (Stream : access RST; Item : in Long_Integer); - procedure W_LLF (Stream : access RST; Item : in Long_Long_Float); - procedure W_LLI (Stream : access RST; Item : in Long_Long_Integer); - procedure W_LLU (Stream : access RST; Item : in UST.Long_Long_Unsigned); - procedure W_LU (Stream : access RST; Item : in UST.Long_Unsigned); - procedure W_SF (Stream : access RST; Item : in Short_Float); - procedure W_SI (Stream : access RST; Item : in Short_Integer); - procedure W_SSI (Stream : access RST; Item : in Short_Short_Integer); - procedure W_SSU (Stream : access RST; Item : in UST.Short_Short_Unsigned); - procedure W_SU (Stream : access RST; Item : in UST.Short_Unsigned); - procedure W_U (Stream : access RST; Item : in UST.Unsigned); - procedure W_WC (Stream : access RST; Item : in Wide_Character); + procedure W_AD (Stream : not null access RST; Item : in Fat_Pointer); + procedure W_AS (Stream : not null access RST; Item : in Thin_Pointer); + procedure W_B (Stream : not null access RST; Item : in Boolean); + procedure W_C (Stream : not null access RST; Item : in Character); + procedure W_F (Stream : not null access RST; Item : in Float); + procedure W_I (Stream : not null access RST; Item : in Integer); + procedure W_LF (Stream : not null access RST; Item : in Long_Float); + procedure W_LI (Stream : not null access RST; Item : in Long_Integer); + procedure W_LLF (Stream : not null access RST; Item : in Long_Long_Float); + procedure W_LLI (Stream : not null access RST; Item : in Long_Long_Integer); + procedure W_LLU (Stream : not null access RST; + Item : in UST.Long_Long_Unsigned); + procedure W_LU (Stream : not null access RST; Item : in UST.Long_Unsigned); + procedure W_SF (Stream : not null access RST; Item : in Short_Float); + procedure W_SI (Stream : not null access RST; Item : in Short_Integer); + procedure W_SSI (Stream : not null access RST; + Item : in Short_Short_Integer); + procedure W_SSU (Stream : not null access RST; + Item : in UST.Short_Short_Unsigned); + procedure W_SU (Stream : not null access RST; + Item : in UST.Short_Unsigned); + procedure W_U (Stream : not null access RST; Item : in UST.Unsigned); + procedure W_WC (Stream : not null access RST; Item : in Wide_Character); ---------------------------- -- Composite Input/Output -- diff --git a/gcc/ada/s-strxdr.adb b/gcc/ada/s-strxdr.adb index af8c4c66b57..63aa286e8a3 100644 --- a/gcc/ada/s-strxdr.adb +++ b/gcc/ada/s-strxdr.adb @@ -279,7 +279,7 @@ package body System.Stream_Attributes is -- I_AD -- ---------- - function I_AD (Stream : access RST) return Fat_Pointer is + function I_AD (Stream : not null access RST) return Fat_Pointer is FP : Fat_Pointer; begin @@ -293,7 +293,7 @@ package body System.Stream_Attributes is -- I_AS -- ---------- - function I_AS (Stream : access RST) return Thin_Pointer is + function I_AS (Stream : not null access RST) return Thin_Pointer is S : XDR_S_TM; L : SEO; U : XDR_TM := 0; @@ -316,7 +316,7 @@ package body System.Stream_Attributes is -- I_B -- --------- - function I_B (Stream : access RST) return Boolean is + function I_B (Stream : not null access RST) return Boolean is begin case I_SSU (Stream) is when 0 => return False; @@ -329,7 +329,7 @@ package body System.Stream_Attributes is -- I_C -- --------- - function I_C (Stream : access RST) return Character is + function I_C (Stream : not null access RST) return Character is S : XDR_S_C; L : SEO; @@ -350,7 +350,7 @@ package body System.Stream_Attributes is -- I_F -- --------- - function I_F (Stream : access RST) return Float is + function I_F (Stream : not null access RST) return Float is I : constant Precision := Single; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -431,7 +431,7 @@ package body System.Stream_Attributes is -- I_I -- --------- - function I_I (Stream : access RST) return Integer is + function I_I (Stream : not null access RST) return Integer is S : XDR_S_I; L : SEO; U : XDR_U := 0; @@ -465,7 +465,7 @@ package body System.Stream_Attributes is -- I_LF -- ---------- - function I_LF (Stream : access RST) return Long_Float is + function I_LF (Stream : not null access RST) return Long_Float is I : constant Precision := Double; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -548,7 +548,7 @@ package body System.Stream_Attributes is -- I_LI -- ---------- - function I_LI (Stream : access RST) return Long_Integer is + function I_LI (Stream : not null access RST) return Long_Integer is S : XDR_S_LI; L : SEO; U : Unsigned := 0; @@ -594,7 +594,7 @@ package body System.Stream_Attributes is -- I_LLF -- ----------- - function I_LLF (Stream : access RST) return Long_Long_Float is + function I_LLF (Stream : not null access RST) return Long_Long_Float is I : constant Precision := Quadruple; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -683,7 +683,7 @@ package body System.Stream_Attributes is -- I_LLI -- ----------- - function I_LLI (Stream : access RST) return Long_Long_Integer is + function I_LLI (Stream : not null access RST) return Long_Long_Integer is S : XDR_S_LLI; L : SEO; U : Unsigned := 0; @@ -726,7 +726,7 @@ package body System.Stream_Attributes is -- I_LLU -- ----------- - function I_LLU (Stream : access RST) return Long_Long_Unsigned is + function I_LLU (Stream : not null access RST) return Long_Long_Unsigned is S : XDR_S_LLU; L : SEO; U : Unsigned := 0; @@ -763,7 +763,7 @@ package body System.Stream_Attributes is -- I_LU -- ---------- - function I_LU (Stream : access RST) return Long_Unsigned is + function I_LU (Stream : not null access RST) return Long_Unsigned is S : XDR_S_LU; L : SEO; U : Unsigned := 0; @@ -800,7 +800,7 @@ package body System.Stream_Attributes is -- I_SF -- ---------- - function I_SF (Stream : access RST) return Short_Float is + function I_SF (Stream : not null access RST) return Short_Float is I : constant Precision := Single; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -881,7 +881,7 @@ package body System.Stream_Attributes is -- I_SI -- ---------- - function I_SI (Stream : access RST) return Short_Integer is + function I_SI (Stream : not null access RST) return Short_Integer is S : XDR_S_SI; L : SEO; U : XDR_SU := 0; @@ -914,7 +914,7 @@ package body System.Stream_Attributes is -- I_SSI -- ----------- - function I_SSI (Stream : access RST) return Short_Short_Integer is + function I_SSI (Stream : not null access RST) return Short_Short_Integer is S : XDR_S_SSI; L : SEO; U : XDR_SSU; @@ -943,7 +943,7 @@ package body System.Stream_Attributes is -- I_SSU -- ----------- - function I_SSU (Stream : access RST) return Short_Short_Unsigned is + function I_SSU (Stream : not null access RST) return Short_Short_Unsigned is S : XDR_S_SSU; L : SEO; U : XDR_SSU := 0; @@ -964,7 +964,7 @@ package body System.Stream_Attributes is -- I_SU -- ---------- - function I_SU (Stream : access RST) return Short_Unsigned is + function I_SU (Stream : not null access RST) return Short_Unsigned is S : XDR_S_SU; L : SEO; U : XDR_SU := 0; @@ -989,7 +989,7 @@ package body System.Stream_Attributes is -- I_U -- --------- - function I_U (Stream : access RST) return Unsigned is + function I_U (Stream : not null access RST) return Unsigned is S : XDR_S_U; L : SEO; U : XDR_U := 0; @@ -1016,7 +1016,7 @@ package body System.Stream_Attributes is -- I_WC -- ---------- - function I_WC (Stream : access RST) return Wide_Character is + function I_WC (Stream : not null access RST) return Wide_Character is S : XDR_S_WC; L : SEO; U : XDR_WC := 0; @@ -1041,7 +1041,7 @@ package body System.Stream_Attributes is -- W_AD -- ---------- - procedure W_AD (Stream : access RST; Item : in Fat_Pointer) is + procedure W_AD (Stream : not null access RST; Item : in Fat_Pointer) is S : XDR_S_TM; U : XDR_TM; @@ -1071,7 +1071,7 @@ package body System.Stream_Attributes is -- W_AS -- ---------- - procedure W_AS (Stream : access RST; Item : in Thin_Pointer) is + procedure W_AS (Stream : not null access RST; Item : in Thin_Pointer) is S : XDR_S_TM; U : XDR_TM := XDR_TM (To_XDR_SA (Item.P1)); @@ -1092,7 +1092,7 @@ package body System.Stream_Attributes is -- W_B -- --------- - procedure W_B (Stream : access RST; Item : in Boolean) is + procedure W_B (Stream : not null access RST; Item : in Boolean) is begin if Item then W_SSU (Stream, 1); @@ -1105,7 +1105,7 @@ package body System.Stream_Attributes is -- W_C -- --------- - procedure W_C (Stream : access RST; Item : in Character) is + procedure W_C (Stream : not null access RST; Item : in Character) is S : XDR_S_C; pragma Assert (C_L = 1); @@ -1123,7 +1123,7 @@ package body System.Stream_Attributes is -- W_F -- --------- - procedure W_F (Stream : access RST; Item : in Float) is + procedure W_F (Stream : not null access RST; Item : in Float) is I : constant Precision := Single; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -1205,7 +1205,7 @@ package body System.Stream_Attributes is -- W_I -- --------- - procedure W_I (Stream : access RST; Item : in Integer) is + procedure W_I (Stream : not null access RST; Item : in Integer) is S : XDR_S_I; U : XDR_U; @@ -1239,7 +1239,7 @@ package body System.Stream_Attributes is -- W_LF -- ---------- - procedure W_LF (Stream : access RST; Item : in Long_Float) is + procedure W_LF (Stream : not null access RST; Item : in Long_Float) is I : constant Precision := Double; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -1321,7 +1321,7 @@ package body System.Stream_Attributes is -- W_LI -- ---------- - procedure W_LI (Stream : access RST; Item : in Long_Integer) is + procedure W_LI (Stream : not null access RST; Item : in Long_Integer) is S : XDR_S_LI; U : Unsigned; X : Long_Unsigned; @@ -1367,7 +1367,7 @@ package body System.Stream_Attributes is -- W_LLF -- ----------- - procedure W_LLF (Stream : access RST; Item : in Long_Long_Float) is + procedure W_LLF (Stream : not null access RST; Item : in Long_Long_Float) is I : constant Precision := Quadruple; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -1462,7 +1462,9 @@ package body System.Stream_Attributes is -- W_LLI -- ----------- - procedure W_LLI (Stream : access RST; Item : in Long_Long_Integer) is + procedure W_LLI (Stream : not null access RST; + Item : in Long_Long_Integer) + is S : XDR_S_LLI; U : Unsigned; X : Long_Long_Unsigned; @@ -1508,7 +1510,8 @@ package body System.Stream_Attributes is -- W_LLU -- ----------- - procedure W_LLU (Stream : access RST; Item : in Long_Long_Unsigned) is + procedure W_LLU (Stream : not null access RST; + Item : in Long_Long_Unsigned) is S : XDR_S_LLU; U : Unsigned; X : Long_Long_Unsigned := Item; @@ -1545,7 +1548,7 @@ package body System.Stream_Attributes is -- W_LU -- ---------- - procedure W_LU (Stream : access RST; Item : in Long_Unsigned) is + procedure W_LU (Stream : not null access RST; Item : in Long_Unsigned) is S : XDR_S_LU; U : Unsigned; X : Long_Unsigned := Item; @@ -1581,7 +1584,7 @@ package body System.Stream_Attributes is -- W_SF -- ---------- - procedure W_SF (Stream : access RST; Item : in Short_Float) is + procedure W_SF (Stream : not null access RST; Item : in Short_Float) is I : constant Precision := Single; E_Size : Integer renames Fields (I).E_Size; E_Bias : Integer renames Fields (I).E_Bias; @@ -1663,7 +1666,7 @@ package body System.Stream_Attributes is -- W_SI -- ---------- - procedure W_SI (Stream : access RST; Item : in Short_Integer) is + procedure W_SI (Stream : not null access RST; Item : in Short_Integer) is S : XDR_S_SI; U : XDR_SU; @@ -1697,7 +1700,10 @@ package body System.Stream_Attributes is -- W_SSI -- ----------- - procedure W_SSI (Stream : access RST; Item : in Short_Short_Integer) is + procedure W_SSI + (Stream : not null access RST; + Item : in Short_Short_Integer) + is S : XDR_S_SSI; U : XDR_SSU; @@ -1724,9 +1730,12 @@ package body System.Stream_Attributes is -- W_SSU -- ----------- - procedure W_SSU (Stream : access RST; Item : in Short_Short_Unsigned) is + procedure W_SSU + (Stream : not null access RST; + Item : in Short_Short_Unsigned) + is + U : constant XDR_SSU := XDR_SSU (Item); S : XDR_S_SSU; - U : XDR_SSU := XDR_SSU (Item); begin S (1) := SE (U); @@ -1738,7 +1747,7 @@ package body System.Stream_Attributes is -- W_SU -- ---------- - procedure W_SU (Stream : access RST; Item : in Short_Unsigned) is + procedure W_SU (Stream : not null access RST; Item : in Short_Unsigned) is S : XDR_S_SU; U : XDR_SU := XDR_SU (Item); @@ -1763,7 +1772,7 @@ package body System.Stream_Attributes is -- W_U -- --------- - procedure W_U (Stream : access RST; Item : in Unsigned) is + procedure W_U (Stream : not null access RST; Item : in Unsigned) is S : XDR_S_U; U : XDR_U := XDR_U (Item); @@ -1788,7 +1797,7 @@ package body System.Stream_Attributes is -- W_WC -- ---------- - procedure W_WC (Stream : access RST; Item : in Wide_Character) is + procedure W_WC (Stream : not null access RST; Item : in Wide_Character) is S : XDR_S_WC; U : XDR_WC; diff --git a/gcc/ada/s-taprop-posix.adb b/gcc/ada/s-taprop-posix.adb index 3ad2659f7a7..492c070ddcf 100644 --- a/gcc/ada/s-taprop-posix.adb +++ b/gcc/ada/s-taprop-posix.adb @@ -312,6 +312,7 @@ package body System.Task_Primitives.Operations is pragma Assert (Result = 0 or else Result = ENOMEM); if Result = ENOMEM then + Result := pthread_mutexattr_destroy (Attributes'Access); raise Storage_Error; end if; diff --git a/gcc/ada/s-taprop-solaris.adb b/gcc/ada/s-taprop-solaris.adb index 371f7411826..c9e1504779a 100644 --- a/gcc/ada/s-taprop-solaris.adb +++ b/gcc/ada/s-taprop-solaris.adb @@ -1382,7 +1382,7 @@ package body System.Task_Primitives.Operations is begin -- Check that caller is abort-deferred - if Self_ID.Deferral_Level <= 0 then + if Self_ID.Deferral_Level = 0 then return False; end if; @@ -1419,7 +1419,7 @@ package body System.Task_Primitives.Operations is -- Check that caller is abort-deferred - if Self_ID.Deferral_Level <= 0 then + if Self_ID.Deferral_Level = 0 then return False; end if; @@ -1498,7 +1498,7 @@ package body System.Task_Primitives.Operations is begin -- Check that caller is abort-deferred - if Self_ID.Deferral_Level <= 0 then + if Self_ID.Deferral_Level = 0 then return False; end if; @@ -1617,7 +1617,7 @@ package body System.Task_Primitives.Operations is -- Check that caller is abort-deferred - if Self_ID.Deferral_Level <= 0 then + if Self_ID.Deferral_Level = 0 then return False; end if; @@ -1646,7 +1646,7 @@ package body System.Task_Primitives.Operations is begin -- Check that caller is abort-deferred - if Self_ID.Deferral_Level <= 0 then + if Self_ID.Deferral_Level = 0 then return False; end if; @@ -1833,7 +1833,7 @@ package body System.Task_Primitives.Operations is -- Check that caller is abort-deferred - if Self_ID.Deferral_Level <= 0 then + if Self_ID.Deferral_Level = 0 then return False; end if; diff --git a/gcc/ada/s-tasini.adb b/gcc/ada/s-tasini.adb index 3aff42725cc..63b47e7b9e7 100644 --- a/gcc/ada/s-tasini.adb +++ b/gcc/ada/s-tasini.adb @@ -127,13 +127,6 @@ package body System.Tasking.Initialization is -- Tasking Initialization -- ---------------------------- - procedure Gnat_Install_Locks (Lock, Unlock : SSL.No_Param_Proc); - pragma Import (C, Gnat_Install_Locks, "__gnatlib_install_locks"); - -- Used by Init_RTS to install procedure Lock and Unlock for the - -- thread locking. This has no effect on GCC 2. For GCC 3, - -- it has an effect only if gcc is configured with - -- --enable_threads=gnat. - procedure Init_RTS; -- This procedure completes the initialization of the GNARL. The first -- part of the initialization is done in the body of System.Tasking. @@ -392,10 +385,6 @@ package body System.Tasking.Initialization is SSL.Tasking.Init_Tasking_Soft_Links; - -- Install tasking locks in the GCC runtime - - Gnat_Install_Locks (Task_Lock'Access, Task_Unlock'Access); - -- Abort is deferred in a new ATCB, so we need to undefer abort -- at this stage to make the environment task abortable. diff --git a/gcc/ada/s-tassta.adb b/gcc/ada/s-tassta.adb index 1ac7edb2dd0..54f92ebcde8 100644 --- a/gcc/ada/s-tassta.adb +++ b/gcc/ada/s-tassta.adb @@ -617,16 +617,6 @@ package body System.Tasking.Stages is (Storage_Error'Identity, "Failed to initialize task"); end if; - if not System.Restrictions.Abort_Allowed then - - -- If Abort is not allowed, reset the deferral level since it will - -- not get changed by the generated code. Keeping a default value - -- of one would prevent some operations (e.g. select or delay) to - -- proceed successfully. - - T.Deferral_Level := 0; - end if; - T.Master_of_Task := Master; T.Master_Within := T.Master_of_Task + 1; @@ -950,6 +940,16 @@ package body System.Tasking.Stages is Lock_RTS; Unlock_RTS; + if not System.Restrictions.Abort_Allowed then + + -- If Abort is not allowed, reset the deferral level since it will + -- not get changed by the generated code. Keeping a default value + -- of one would prevent some operations (e.g. select or delay) to + -- proceed successfully. + + Self_ID.Deferral_Level := 0; + end if; + begin -- We are separating the following portion of the code in order to -- place the exception handlers in a different block. In this way, diff --git a/gcc/ada/s-tasuti.adb b/gcc/ada/s-tasuti.adb index 8877c784e53..6721681827e 100644 --- a/gcc/ada/s-tasuti.adb +++ b/gcc/ada/s-tasuti.adb @@ -294,7 +294,7 @@ package body System.Tasking.Utilities is if Parent /= Environment_Task then - -- We can not lock three tasks at the same time, so defer the + -- We cannot lock three tasks at the same time, so defer the -- operations on the parent. Parent_Needs_Updating := True; @@ -382,7 +382,7 @@ package body System.Tasking.Utilities is pragma Assert (Self_ID.Awake_Count = 1); end if; - -- We are accepting with a terminate alternative. + -- We are accepting with a terminate alternative else if Self_ID.Open_Accepts = null then @@ -494,7 +494,7 @@ package body System.Tasking.Utilities is -- C has a parent, P. loop - -- Notify P that C has gone passive. + -- Notify P that C has gone passive P.Awake_Count := P.Awake_Count - 1; @@ -516,7 +516,7 @@ package body System.Tasking.Utilities is Write_Lock (C); end loop; - -- P has non-passive dependents. + -- P has non-passive dependents if P.Common.State = Master_Completion_Sleep and then C.Master_of_Task = P.Master_Within diff --git a/gcc/ada/s-traceb-hpux.adb b/gcc/ada/s-traceb-hpux.adb index 013435bd100..5457cb1d0ee 100644 --- a/gcc/ada/s-traceb-hpux.adb +++ b/gcc/ada/s-traceb-hpux.adb @@ -7,7 +7,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -359,7 +359,7 @@ package body System.Traceback is return False; end if; - -- Now, safely call the unwinder and use the results. + -- Now, safely call the unwinder and use the results if U_get_previous_frame_x (Frame, Up_Frame'Access, @@ -510,7 +510,7 @@ package body System.Traceback is Frame_Info_Offset : constant := 8; begin - -- First try to locate the descriptor in the program's unwind table. + -- First try to locate the descriptor in the program's unwind table UWD_Address := U_get_unwind_entry (Frame.cur_rlo, Frame.cur_rls, @@ -562,7 +562,7 @@ package body System.Traceback is Pop_Success := Pop_Frame (Frame'Access); - -- Skip the requested number of frames. + -- Skip the requested number of frames for I in 1 .. Skip_Frames loop Pop_Success := Pop_Frame (Frame'Access); diff --git a/gcc/ada/s-traceb-mastop.adb b/gcc/ada/s-traceb-mastop.adb index fc337fbef4b..9591b2d2ad6 100644 --- a/gcc/ada/s-traceb-mastop.adb +++ b/gcc/ada/s-traceb-mastop.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 1999-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -100,8 +100,8 @@ package body System.Traceback is ------------------ function C_Call_Chain - (Traceback : System.Address; - Max_Len : Natural) return Natural + (Traceback : System.Address; + Max_Len : Natural) return Natural is Val : Natural; begin diff --git a/gcc/ada/s-traceb.adb b/gcc/ada/s-traceb.adb index 5bfc830772f..e1c52080dd2 100644 --- a/gcc/ada/s-traceb.adb +++ b/gcc/ada/s-traceb.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-traceb.ads b/gcc/ada/s-traceb.ads index dbab25cbb03..23e64ff498b 100644 --- a/gcc/ada/s-traceb.ads +++ b/gcc/ada/s-traceb.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -84,6 +84,6 @@ package System.Traceback is Max_Len : Natural) return Natural; pragma Export (C, C_Call_Chain, "system__traceback__c_call_chain"); - -- Version that can be used directly from C. + -- Version that can be used directly from C end System.Traceback; diff --git a/gcc/ada/s-traces-default.adb b/gcc/ada/s-traces-default.adb index b4523315eeb..2790c33e24c 100644 --- a/gcc/ada/s-traces-default.adb +++ b/gcc/ada/s-traces-default.adb @@ -45,7 +45,7 @@ package body System.Traces is ---------------------- procedure Send_Trace_Info (Id : Trace_T) is - Task_S : String := SSL.Task_Name.all; + Task_S : constant String := SSL.Task_Name.all; Trace_S : String (1 .. 3 + Task_S'Length); begin @@ -57,8 +57,8 @@ package body System.Traces is end Send_Trace_Info; procedure Send_Trace_Info (Id : Trace_T; Timeout : Duration) is - Task_S : String := SSL.Task_Name.all; - Timeout_S : String := Duration'Image (Timeout); + Task_S : constant String := SSL.Task_Name.all; + Timeout_S : constant String := Duration'Image (Timeout); Trace_S : String (1 .. 6 + Task_S'Length + Timeout_S'Length); begin diff --git a/gcc/ada/s-trafor-default.ads b/gcc/ada/s-trafor-default.ads index 281b690221f..01d957f37bb 100644 --- a/gcc/ada/s-trafor-default.ads +++ b/gcc/ada/s-trafor-default.ads @@ -34,6 +34,7 @@ -- This package implements functions to format run-time traces package System.Traces.Format is + pragma Preelaborate; Max_Size : constant Integer := 128; -- Event messages' maximum size. diff --git a/gcc/ada/s-tratas-default.adb b/gcc/ada/s-tratas-default.adb index 8823ad0687f..5ea120dbc30 100644 --- a/gcc/ada/s-tratas-default.adb +++ b/gcc/ada/s-tratas-default.adb @@ -39,9 +39,7 @@ with System.Traces; use System.Traces; package body System.Traces.Tasking is - use System.Tasking; use System.Traces; - use System.Traces.Format; package SSL renames System.Soft_Links; @@ -60,8 +58,8 @@ package body System.Traces.Tasking is (1 .. Task_Name2.Common.Task_Image_Len); Trace_S : String (1 .. 6 + Task_S'Length + Task2_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task2_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task2_S'Length; begin if Parameters.Runtime_Traces then @@ -108,13 +106,13 @@ package body System.Traces.Tasking is Task2_S : constant String := Task_Name2.Common.Task_Image (1 .. Task_Name2.Common.Task_Image_Len); - Entry_S : String := Integer'Image (Integer (Entry_Number)); + Entry_S : constant String := Integer'Image (Integer (Entry_Number)); Trace_S : String (1 .. 9 + Task_S'Length + Task2_S'Length + Entry_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task_S'Length + Entry_S'Length; - L2 : Integer := Task_S'Length + Task2_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task_S'Length + Entry_S'Length; + L2 : constant Integer := Task_S'Length + Task2_S'Length; begin if Parameters.Runtime_Traces then @@ -156,12 +154,12 @@ package body System.Traces.Tasking is Task2_S : constant String := Task_Name2.Common.Task_Image (1 .. Task_Name2.Common.Task_Image_Len); - Entry_S : String := Integer'Image (Integer (Entry_Number)); + Entry_S : constant String := Integer'Image (Integer (Entry_Number)); Trace_S : String (1 .. 9 + Task_S'Length + Task2_S'Length + Entry_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task_S'Length + Entry_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task_S'Length + Entry_S'Length; begin if Parameters.Runtime_Traces then @@ -183,11 +181,11 @@ package body System.Traces.Tasking is end Send_Trace_Info; procedure Send_Trace_Info (Id : Trace_T; Entry_Number : Entry_Index) is - Task_S : String := SSL.Task_Name.all; - Entry_S : String := Integer'Image (Integer (Entry_Number)); + Task_S : constant String := SSL.Task_Name.all; + Entry_S : constant String := Integer'Image (Integer (Entry_Number)); Trace_S : String (1 .. 6 + Task_S'Length + Entry_S'Length); - L0 : Integer := Task_S'Length; + L0 : constant Integer := Task_S'Length; begin if Parameters.Runtime_Traces then @@ -212,7 +210,7 @@ package body System.Traces.Tasking is (1 .. Task_Name2.Common.Task_Image_Len); Trace_S : String (1 .. 6 + Task_S'Length + Task2_S'Length); - L0 : Integer := Task2_S'Length; + L0 : constant Integer := Task2_S'Length; begin if Parameters.Runtime_Traces then @@ -234,14 +232,15 @@ package body System.Traces.Tasking is Acceptor_S : constant String := Acceptor.Common.Task_Image (1 .. Acceptor.Common.Task_Image_Len); - Entry_S : String := Integer'Image (Integer (Entry_Number)); - Timeout_S : String := Duration'Image (Timeout); + Entry_S : constant String := Integer'Image (Integer (Entry_Number)); + Timeout_S : constant String := Duration'Image (Timeout); Trace_S : String (1 .. 12 + Task_S'Length + Acceptor_S'Length + Entry_S'Length + Timeout_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task_S'Length + Acceptor_S'Length; - L2 : Integer := Task_S'Length + Acceptor_S'Length + Entry_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task_S'Length + Acceptor_S'Length; + L2 : constant Integer := + Task_S'Length + Acceptor_S'Length + Entry_S'Length; begin if Parameters.Runtime_Traces then @@ -262,14 +261,14 @@ package body System.Traces.Tasking is Entry_Number : Entry_Index; Timeout : Duration) is - Task_S : String := SSL.Task_Name.all; - Entry_S : String := Integer'Image (Integer (Entry_Number)); - Timeout_S : String := Duration'Image (Timeout); + Task_S : constant String := SSL.Task_Name.all; + Entry_S : constant String := Integer'Image (Integer (Entry_Number)); + Timeout_S : constant String := Duration'Image (Timeout); Trace_S : String (1 .. 9 + Task_S'Length + Entry_S'Length + Timeout_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task_S'Length + Entry_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task_S'Length + Entry_S'Length; begin if Parameters.Runtime_Traces then @@ -288,14 +287,14 @@ package body System.Traces.Tasking is Task_Name : Task_Id; Number : Integer) is - Task_S : String := SSL.Task_Name.all; - Number_S : String := Integer'Image (Number); - Accepts_S : String := Extract_Accepts (Task_Name); + Task_S : constant String := SSL.Task_Name.all; + Number_S : constant String := Integer'Image (Number); + Accepts_S : constant String := Extract_Accepts (Task_Name); Trace_S : String (1 .. 9 + Task_S'Length + Number_S'Length + Accepts_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task_S'Length + Number_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task_S'Length + Number_S'Length; begin if Parameters.Runtime_Traces then @@ -315,16 +314,17 @@ package body System.Traces.Tasking is Number : Integer; Timeout : Duration) is - Task_S : String := SSL.Task_Name.all; - Timeout_S : String := Duration'Image (Timeout); - Number_S : String := Integer'Image (Number); - Accepts_S : String := Extract_Accepts (Task_Name); + Task_S : constant String := SSL.Task_Name.all; + Timeout_S : constant String := Duration'Image (Timeout); + Number_S : constant String := Integer'Image (Number); + Accepts_S : constant String := Extract_Accepts (Task_Name); Trace_S : String (1 .. 12 + Task_S'Length + Timeout_S'Length + Number_S'Length + Accepts_S'Length); - L0 : Integer := Task_S'Length; - L1 : Integer := Task_S'Length + Timeout_S'Length; - L2 : Integer := Task_S'Length + Timeout_S'Length + Number_S'Length; + L0 : constant Integer := Task_S'Length; + L1 : constant Integer := Task_S'Length + Timeout_S'Length; + L2 : constant Integer := + Task_S'Length + Timeout_S'Length + Number_S'Length; begin if Parameters.Runtime_Traces then diff --git a/gcc/ada/s-vaflop-vms-alpha.adb b/gcc/ada/s-vaflop-vms-alpha.adb index 45a39bba08b..5ab772d4477 100644 --- a/gcc/ada/s-vaflop-vms-alpha.adb +++ b/gcc/ada/s-vaflop-vms-alpha.adb @@ -626,7 +626,7 @@ package body System.Vax_Float_Operations is -- accurate, but is good enough in practice. function Valid_D (Arg : D) return Boolean is - Val : T := G_To_T (D_To_G (Arg)); + Val : constant T := G_To_T (D_To_G (Arg)); begin return Val'Valid; end Valid_D; @@ -639,7 +639,7 @@ package body System.Vax_Float_Operations is -- accurate, but is good enough in practice. function Valid_F (Arg : F) return Boolean is - Val : S := F_To_S (Arg); + Val : constant S := F_To_S (Arg); begin return Val'Valid; end Valid_F; @@ -652,7 +652,7 @@ package body System.Vax_Float_Operations is -- accurate, but is good enough in practice. function Valid_G (Arg : G) return Boolean is - Val : T := G_To_T (Arg); + Val : constant T := G_To_T (Arg); begin return Val'Valid; end Valid_G; diff --git a/gcc/ada/s-vaflop.adb b/gcc/ada/s-vaflop.adb index ae721cfa33d..3cf96e26e93 100644 --- a/gcc/ada/s-vaflop.adb +++ b/gcc/ada/s-vaflop.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -310,6 +310,24 @@ package body System.Vax_Float_Operations is return X * Y; end Mul_G; + ---------- + -- Ne_F -- + ---------- + + function Ne_F (X, Y : F) return Boolean is + begin + return X /= Y; + end Ne_F; + + ---------- + -- Ne_G -- + ---------- + + function Ne_G (X, Y : G) return Boolean is + begin + return X /= Y; + end Ne_G; + ----------- -- Neg_F -- ----------- @@ -426,7 +444,7 @@ package body System.Vax_Float_Operations is -- accurate, but is good enough in practice. function Valid_D (Arg : D) return Boolean is - Val : T := G_To_T (D_To_G (Arg)); + Val : constant T := G_To_T (D_To_G (Arg)); begin return Val'Valid; end Valid_D; @@ -439,7 +457,7 @@ package body System.Vax_Float_Operations is -- accurate, but is good enough in practice. function Valid_F (Arg : F) return Boolean is - Val : S := F_To_S (Arg); + Val : constant S := F_To_S (Arg); begin return Val'Valid; end Valid_F; @@ -452,7 +470,7 @@ package body System.Vax_Float_Operations is -- accurate, but is good enough in practice. function Valid_G (Arg : G) return Boolean is - Val : T := G_To_T (Arg); + Val : constant T := G_To_T (Arg); begin return Val'Valid; end Valid_G; diff --git a/gcc/ada/s-vaflop.ads b/gcc/ada/s-vaflop.ads index a7bfc9319ae..9f205d48338 100644 --- a/gcc/ada/s-vaflop.ads +++ b/gcc/ada/s-vaflop.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -139,6 +139,10 @@ package System.Vax_Float_Operations is function Lt_G (X, Y : G) return Boolean; -- Compares for X < Y + function Ne_F (X, Y : F) return Boolean; + function Ne_G (X, Y : G) return Boolean; + -- Compares for X /= Y + ---------------------------------- -- Routines for Valid Attribute -- ---------------------------------- @@ -218,6 +222,8 @@ private pragma Inline (Le_G); pragma Inline (Lt_F); pragma Inline (Lt_G); + pragma Inline (Ne_F); + pragma Inline (Ne_G); pragma Inline (Valid_D); pragma Inline (Valid_F); diff --git a/gcc/ada/s-valboo.adb b/gcc/ada/s-valboo.adb index c569b2c3b34..5d23037e57e 100644 --- a/gcc/ada/s-valboo.adb +++ b/gcc/ada/s-valboo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -49,16 +49,13 @@ package body System.Val_Bool is if S (F .. L) = "TRUE" then return True; - end if; - if S (F .. L) = "FALSE" then + elsif S (F .. L) = "FALSE" then return False; - end if; - - raise Constraint_Error; - - -- Above should use elsif, but this doesn't work in GNAT version 1.81??? + else + raise Constraint_Error; + end if; end Value_Boolean; end System.Val_Bool; diff --git a/gcc/ada/s-valboo.ads b/gcc/ada/s-valboo.ads index e08d337f58f..c2bfca3c701 100644 --- a/gcc/ada/s-valboo.ads +++ b/gcc/ada/s-valboo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,6 +35,6 @@ package System.Val_Bool is pragma Pure; function Value_Boolean (Str : String) return Boolean; - -- Computes Boolean'Value (Str). + -- Computes Boolean'Value (Str) end System.Val_Bool; diff --git a/gcc/ada/s-valcha.adb b/gcc/ada/s-valcha.adb index 561d170c819..734b2af39f5 100644 --- a/gcc/ada/s-valcha.adb +++ b/gcc/ada/s-valcha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -69,7 +69,6 @@ package body System.Val_Char is raise Constraint_Error; end if; - end Value_Character; end System.Val_Char; diff --git a/gcc/ada/s-valcha.ads b/gcc/ada/s-valcha.ads index 903ba53e063..fa31f13fd5f 100644 --- a/gcc/ada/s-valcha.ads +++ b/gcc/ada/s-valcha.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,6 +35,6 @@ package System.Val_Char is pragma Pure; function Value_Character (Str : String) return Character; - -- Computes Character'Value (Str). + -- Computes Character'Value (Str) end System.Val_Char; diff --git a/gcc/ada/s-valdec.adb b/gcc/ada/s-valdec.adb index 6bfcfb65ec0..dbac049edef 100644 --- a/gcc/ada/s-valdec.adb +++ b/gcc/ada/s-valdec.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -48,11 +48,9 @@ package body System.Val_Dec is (Str : String; Ptr : access Integer; Max : Integer; - Scale : Integer) - return Integer + Scale : Integer) return Integer is Val : Long_Long_Float; - begin Val := Scan_Real (Str, Ptr, Max); return Integer (Val * 10.0 ** Scale); diff --git a/gcc/ada/s-valdec.ads b/gcc/ada/s-valdec.ads index eb563dedf6b..df36ebd9007 100644 --- a/gcc/ada/s-valdec.ads +++ b/gcc/ada/s-valdec.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,8 +42,7 @@ package System.Val_Dec is (Str : String; Ptr : access Integer; Max : Integer; - Scale : Integer) - return Integer; + Scale : Integer) return Integer; -- This function scans the string starting at Str (Ptr.all) for a valid -- real literal according to the syntax described in (RM 3.5(43)). The -- substring scanned extends no further than Str (Max). There are three diff --git a/gcc/ada/s-valint.adb b/gcc/ada/s-valint.adb index 7598efdea9c..8bfb3733d4b 100644 --- a/gcc/ada/s-valint.adb +++ b/gcc/ada/s-valint.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,9 +42,9 @@ package body System.Val_Int is ------------------ function Scan_Integer - (Str : String; - Ptr : access Integer; - Max : Integer) return Integer + (Str : String; + Ptr : access Integer; + Max : Integer) return Integer is Uval : Unsigned; -- Unsigned result diff --git a/gcc/ada/s-valint.ads b/gcc/ada/s-valint.ads index 32c6be32cc5..6413a349272 100644 --- a/gcc/ada/s-valint.ads +++ b/gcc/ada/s-valint.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -38,9 +38,9 @@ package System.Val_Int is pragma Pure; function Scan_Integer - (Str : String; - Ptr : access Integer; - Max : Integer) return Integer; + (Str : String; + Ptr : access Integer; + Max : Integer) return Integer; -- This function scans the string starting at Str (Ptr.all) for a valid -- integer according to the syntax described in (RM 3.5(43)). The substring -- scanned extends no further than Str (Max). There are three cases for the diff --git a/gcc/ada/s-vallld.adb b/gcc/ada/s-vallld.adb index 5f7f5c3f6e1..958fb96aa6d 100644 --- a/gcc/ada/s-vallld.adb +++ b/gcc/ada/s-vallld.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -47,11 +47,9 @@ package body System.Val_LLD is (Str : String; Ptr : access Integer; Max : Integer; - Scale : Integer) - return Long_Long_Integer + Scale : Integer) return Long_Long_Integer is Val : Long_Long_Float; - begin Val := Scan_Real (Str, Ptr, Max); return Long_Long_Integer (Val * 10.0 ** Scale); @@ -65,8 +63,7 @@ package body System.Val_LLD is function Value_Long_Long_Decimal (Str : String; - Scale : Integer) - return Long_Long_Integer + Scale : Integer) return Long_Long_Integer is begin return Long_Long_Integer (Value_Real (Str) * 10.0 ** Scale); diff --git a/gcc/ada/s-vallld.ads b/gcc/ada/s-vallld.ads index 7d3b14101fc..7022669dfcd 100644 --- a/gcc/ada/s-vallld.ads +++ b/gcc/ada/s-vallld.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,8 +42,7 @@ package System.Val_LLD is (Str : String; Ptr : access Integer; Max : Integer; - Scale : Integer) - return Long_Long_Integer; + Scale : Integer) return Long_Long_Integer; -- This function scans the string starting at Str (Ptr.all) for a valid -- real literal according to the syntax described in (RM 3.5(43)). The -- substring scanned extends no further than Str (Max). There are three @@ -73,8 +72,7 @@ package System.Val_LLD is function Value_Long_Long_Decimal (Str : String; - Scale : Integer) - return Long_Long_Integer; + Scale : Integer) return Long_Long_Integer; -- Used in computing X'Value (Str) where X is a decimal types whose size -- exceeds Standard.Integer'Size. Str is the string argument of the -- attribute. Constraint_Error is raised if the string is malformed diff --git a/gcc/ada/s-vallli.adb b/gcc/ada/s-vallli.adb index 101e6aaf628..ad54db94607 100644 --- a/gcc/ada/s-vallli.adb +++ b/gcc/ada/s-vallli.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -88,7 +88,6 @@ package body System.Val_LLI is function Value_Long_Long_Integer (Str : String) return Long_Long_Integer is V : Long_Long_Integer; P : aliased Integer := Str'First; - begin V := Scan_Long_Long_Integer (Str, P'Access, Str'Last); Scan_Trailing_Blanks (Str, P); diff --git a/gcc/ada/s-vallli.ads b/gcc/ada/s-vallli.ads index 57c7f2da9d7..e83fd8f710b 100644 --- a/gcc/ada/s-vallli.ads +++ b/gcc/ada/s-vallli.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-valllu.adb b/gcc/ada/s-valllu.adb index 9407cbdf009..ca4cbb2a38c 100644 --- a/gcc/ada/s-valllu.adb +++ b/gcc/ada/s-valllu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,9 +41,9 @@ package body System.Val_LLU is ----------------------------- function Scan_Long_Long_Unsigned - (Str : String; - Ptr : access Integer; - Max : Integer) return Long_Long_Unsigned + (Str : String; + Ptr : access Integer; + Max : Integer) return Long_Long_Unsigned is P : Integer; -- Local copy of the pointer @@ -289,7 +289,6 @@ package body System.Val_LLU is is V : Long_Long_Unsigned; P : aliased Integer := Str'First; - begin V := Scan_Long_Long_Unsigned (Str, P'Access, Str'Last); Scan_Trailing_Blanks (Str, P); diff --git a/gcc/ada/s-valllu.ads b/gcc/ada/s-valllu.ads index 6fee777c8ef..603e4b6bc80 100644 --- a/gcc/ada/s-valllu.ads +++ b/gcc/ada/s-valllu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,9 +40,9 @@ package System.Val_LLU is pragma Pure; function Scan_Long_Long_Unsigned - (Str : String; - Ptr : access Integer; - Max : Integer) return System.Unsigned_Types.Long_Long_Unsigned; + (Str : String; + Ptr : access Integer; + Max : Integer) return System.Unsigned_Types.Long_Long_Unsigned; -- This function scans the string starting at Str (Ptr.all) for a valid -- integer according to the syntax described in (RM 3.5(43)). The substring -- scanned extends no further than Str (Max). There are three cases for the diff --git a/gcc/ada/s-valrea.adb b/gcc/ada/s-valrea.adb index 3a6ca8c0ba2..e277e380991 100644 --- a/gcc/ada/s-valrea.adb +++ b/gcc/ada/s-valrea.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,9 +41,9 @@ package body System.Val_Real is --------------- function Scan_Real - (Str : String; - Ptr : access Integer; - Max : Integer) return Long_Long_Float + (Str : String; + Ptr : access Integer; + Max : Integer) return Long_Long_Float is procedure Reset; pragma Import (C, Reset, "__gnat_init_float"); @@ -100,6 +100,10 @@ package body System.Val_Real is -- return P points past the last character. On entry, the current -- character is known to be a digit, so a numeral is definitely present. + ----------- + -- Scanf -- + ----------- + procedure Scanf is Digit : Natural; @@ -330,7 +334,7 @@ package body System.Val_Real is if Base /= 10.0 then Uval := Uval * Base ** Scale; - -- For base 10, use power of ten table, repeatedly if necessary. + -- For base 10, use power of ten table, repeatedly if necessary elsif Scale > 0 then while Scale > Maxpow loop @@ -377,7 +381,6 @@ package body System.Val_Real is function Value_Real (Str : String) return Long_Long_Float is V : Long_Long_Float; P : aliased Integer := Str'First; - begin V := Scan_Real (Str, P'Access, Str'Last); Scan_Trailing_Blanks (Str, P); diff --git a/gcc/ada/s-valrea.ads b/gcc/ada/s-valrea.ads index 821072d7d4e..d3b0e33d90b 100644 --- a/gcc/ada/s-valrea.ads +++ b/gcc/ada/s-valrea.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,9 +35,9 @@ package System.Val_Real is pragma Pure; function Scan_Real - (Str : String; - Ptr : access Integer; - Max : Integer) return Long_Long_Float; + (Str : String; + Ptr : access Integer; + Max : Integer) return Long_Long_Float; -- This function scans the string starting at Str (Ptr.all) for a valid -- real literal according to the syntax described in (RM 3.5(43)). The -- substring scanned extends no further than Str (Max). There are three diff --git a/gcc/ada/s-valuns.adb b/gcc/ada/s-valuns.adb index 77fba797a65..885db28f3c7 100644 --- a/gcc/ada/s-valuns.adb +++ b/gcc/ada/s-valuns.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-1997 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,10 +41,9 @@ package body System.Val_Uns is ------------------- function Scan_Unsigned - (Str : String; - Ptr : access Integer; - Max : Integer) - return Unsigned + (Str : String; + Ptr : access Integer; + Max : Integer) return Unsigned is P : Integer; -- Local copy of the pointer @@ -285,12 +284,10 @@ package body System.Val_Uns is function Value_Unsigned (Str : String) return Unsigned is V : Unsigned; P : aliased Integer := Str'First; - begin V := Scan_Unsigned (Str, P'Access, Str'Last); Scan_Trailing_Blanks (Str, P); return V; - end Value_Unsigned; end System.Val_Uns; diff --git a/gcc/ada/s-valuns.ads b/gcc/ada/s-valuns.ads index 88f609e7b5b..bd41849e98f 100644 --- a/gcc/ada/s-valuns.ads +++ b/gcc/ada/s-valuns.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,10 +40,9 @@ package System.Val_Uns is pragma Pure; function Scan_Unsigned - (Str : String; - Ptr : access Integer; - Max : Integer) - return System.Unsigned_Types.Unsigned; + (Str : String; + Ptr : access Integer; + Max : Integer) return System.Unsigned_Types.Unsigned; -- This function scans the string starting at Str (Ptr.all) for a valid -- integer according to the syntax described in (RM 3.5(43)). The substring -- scanned extends no further than Str (Max). There are three cases for the @@ -71,8 +70,7 @@ package System.Val_Uns is -- is greater than Max as required in this case. function Value_Unsigned - (Str : String) - return System.Unsigned_Types.Unsigned; + (Str : String) return System.Unsigned_Types.Unsigned; -- Used in computing X'Value (Str) where X is a modular integer type whose -- modulus does not exceed the range of System.Unsigned_Types.Unsigned. Str -- is the string argument of the attribute. Constraint_Error is raised if diff --git a/gcc/ada/s-valuti.adb b/gcc/ada/s-valuti.adb index 470f8a9c684..07f067b79cc 100644 --- a/gcc/ada/s-valuti.adb +++ b/gcc/ada/s-valuti.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2002, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -83,8 +83,7 @@ package body System.Val_Util is (Str : String; Ptr : access Integer; Max : Integer; - Real : Boolean := False) - return Integer + Real : Boolean := False) return Integer is P : Natural := Ptr.all; M : Boolean; diff --git a/gcc/ada/s-valuti.ads b/gcc/ada/s-valuti.ads index f7073ae97d1..ac905096862 100644 --- a/gcc/ada/s-valuti.ads +++ b/gcc/ada/s-valuti.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -74,8 +74,7 @@ package System.Val_Util is (Str : String; Ptr : access Integer; Max : Integer; - Real : Boolean := False) - return Integer; + Real : Boolean := False) return Integer; -- Called to scan a possible exponent. Str, Ptr, Max are as described above -- for Scan_Sign. If Ptr.all < Max and Str (Ptr.all) = 'E' or 'e', then an -- exponent is scanned out, with the exponent value returned in Exp, and diff --git a/gcc/ada/s-valwch.ads b/gcc/ada/s-valwch.ads index 05064c9cfad..32a4b508f27 100644 --- a/gcc/ada/s-valwch.ads +++ b/gcc/ada/s-valwch.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-veboop.adb b/gcc/ada/s-veboop.adb index 20d9d0ed44c..177a9448068 100644 --- a/gcc/ada/s-veboop.adb +++ b/gcc/ada/s-veboop.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-veboop.ads b/gcc/ada/s-veboop.ads index f7e135907cd..2708b22287f 100644 --- a/gcc/ada/s-veboop.ads +++ b/gcc/ada/s-veboop.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-vercon.adb b/gcc/ada/s-vercon.adb index 186b9b714c4..b9b8fe8b416 100644 --- a/gcc/ada/s-vercon.adb +++ b/gcc/ada/s-vercon.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ ------------------------------------------------------------------------------ with System.Unsigned_Types; use System.Unsigned_Types; + package body System.Version_Control is ------------------------ diff --git a/gcc/ada/s-vercon.ads b/gcc/ada/s-vercon.ads index c8d26a916d3..49c31532891 100644 --- a/gcc/ada/s-vercon.ads +++ b/gcc/ada/s-vercon.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchcnv.adb b/gcc/ada/s-wchcnv.adb index e31ac7be6f1..e3afa9c05e7 100644 --- a/gcc/ada/s-wchcnv.adb +++ b/gcc/ada/s-wchcnv.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchcnv.ads b/gcc/ada/s-wchcnv.ads index d90ae5b3869..bebf56240ab 100644 --- a/gcc/ada/s-wchcnv.ads +++ b/gcc/ada/s-wchcnv.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchcon.ads b/gcc/ada/s-wchcon.ads index 40394db1901..f2666458525 100644 --- a/gcc/ada/s-wchcon.ads +++ b/gcc/ada/s-wchcon.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchjis.adb b/gcc/ada/s-wchjis.adb index 6767c44b200..5ac43a67bfc 100644 --- a/gcc/ada/s-wchjis.adb +++ b/gcc/ada/s-wchjis.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchjis.ads b/gcc/ada/s-wchjis.ads index 0f103170ec7..ebfcbedfb71 100644 --- a/gcc/ada/s-wchjis.ads +++ b/gcc/ada/s-wchjis.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchstw.adb b/gcc/ada/s-wchstw.adb index a736d99e789..476a2e84abe 100644 --- a/gcc/ada/s-wchstw.adb +++ b/gcc/ada/s-wchstw.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -65,7 +65,7 @@ package body System.WCh_StW is -- if P > S'Last on entry. function Get_UTF_32 is new Char_Sequence_To_UTF_32 (In_Char); - -- Function to get next UFT_32 value. + -- Function to get next UFT_32 value ------------- -- In_Char -- @@ -81,6 +81,8 @@ package body System.WCh_StW is end if; end In_Char; + -- Start of processing for Get_Next_Code + begin -- Check for wide character encoding diff --git a/gcc/ada/s-wchstw.ads b/gcc/ada/s-wchstw.ads index ba154b901ba..b965e2fce52 100644 --- a/gcc/ada/s-wchstw.ads +++ b/gcc/ada/s-wchstw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchwts.adb b/gcc/ada/s-wchwts.adb index de9b6ceaabe..995f5acda0f 100644 --- a/gcc/ada/s-wchwts.adb +++ b/gcc/ada/s-wchwts.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wchwts.ads b/gcc/ada/s-wchwts.ads index ac34cf2dccd..2359701462c 100644 --- a/gcc/ada/s-wchwts.ads +++ b/gcc/ada/s-wchwts.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widboo.adb b/gcc/ada/s-widboo.adb index fa245f4b5de..395f7a1dd42 100644 --- a/gcc/ada/s-widboo.adb +++ b/gcc/ada/s-widboo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widboo.ads b/gcc/ada/s-widboo.ads index 9e5e1bd0945..16192a63258 100644 --- a/gcc/ada/s-widboo.ads +++ b/gcc/ada/s-widboo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widcha.adb b/gcc/ada/s-widcha.adb index ec898c3a19f..23130ddad36 100644 --- a/gcc/ada/s-widcha.adb +++ b/gcc/ada/s-widcha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widcha.ads b/gcc/ada/s-widcha.ads index 021a5a325f0..3dac0c4763e 100644 --- a/gcc/ada/s-widcha.ads +++ b/gcc/ada/s-widcha.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widenu.adb b/gcc/ada/s-widenu.adb index c794af92c9f..9110c107cb5 100644 --- a/gcc/ada/s-widenu.adb +++ b/gcc/ada/s-widenu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widenu.ads b/gcc/ada/s-widenu.ads index cef6e287aee..ef6af7e517a 100644 --- a/gcc/ada/s-widenu.ads +++ b/gcc/ada/s-widenu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widlli.adb b/gcc/ada/s-widlli.adb index ee9cd5b3375..3251f2d51e5 100644 --- a/gcc/ada/s-widlli.adb +++ b/gcc/ada/s-widlli.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widlli.ads b/gcc/ada/s-widlli.ads index f2aede66aae..6013a8deaf8 100644 --- a/gcc/ada/s-widlli.ads +++ b/gcc/ada/s-widlli.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widllu.adb b/gcc/ada/s-widllu.adb index c282c93a6f9..75b6667717c 100644 --- a/gcc/ada/s-widllu.adb +++ b/gcc/ada/s-widllu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widllu.ads b/gcc/ada/s-widllu.ads index dff5bb3019b..58ac484c40f 100644 --- a/gcc/ada/s-widllu.ads +++ b/gcc/ada/s-widllu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widwch.adb b/gcc/ada/s-widwch.adb index 8cca640f8dc..e4e3dcc8706 100644 --- a/gcc/ada/s-widwch.adb +++ b/gcc/ada/s-widwch.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-widwch.ads b/gcc/ada/s-widwch.ads index ca5e2fab89c..5ff4aaf7e59 100644 --- a/gcc/ada/s-widwch.ads +++ b/gcc/ada/s-widwch.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wwdcha.adb b/gcc/ada/s-wwdcha.adb index 7f657ad7bd8..3580a0142f5 100644 --- a/gcc/ada/s-wwdcha.adb +++ b/gcc/ada/s-wwdcha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wwdcha.ads b/gcc/ada/s-wwdcha.ads index 3ba15e473eb..566dc1f8c7d 100644 --- a/gcc/ada/s-wwdcha.ads +++ b/gcc/ada/s-wwdcha.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wwdenu.adb b/gcc/ada/s-wwdenu.adb index 090522f39aa..9a2fac7c3e4 100644 --- a/gcc/ada/s-wwdenu.adb +++ b/gcc/ada/s-wwdenu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/s-wwdenu.ads b/gcc/ada/s-wwdenu.ads index 67bac34a859..d8cbf528e0e 100644 --- a/gcc/ada/s-wwdenu.ads +++ b/gcc/ada/s-wwdenu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/scans.ads b/gcc/ada/scans.ads index 955637acb76..7e2a58078a1 100644 --- a/gcc/ada/scans.ads +++ b/gcc/ada/scans.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -190,22 +190,27 @@ package Scans is Tok_Dot_Dot, -- .. Sterm, Chtok - -- The following three entries are used only when scanning project - -- files. - Tok_Project, Tok_Extends, Tok_External, - Tok_Comment, + -- These three entries represent keywords for the project file language + -- and can be returned only in the case of scanning project files. - -- The following entry is used by the preprocessor and when scanning - -- project files. + Tok_Comment, + -- This entry is used when scanning project files (where it represents + -- an entire comment), and in preprocessing with the -C switch set + -- (where it represents just the "--" of a comment). For the project + -- file case, the text of the comment is stored in Tok_End_Of_Line, - - -- The following entry is used by the preprocessor + -- Represents an end of line. Not used during normal compilation scans + -- where end of line is ignored. Active for preprocessor scanning and + -- also when scanning project files (where it is neede because of ???) Tok_Special, + -- Used only in preprocessor scanning (to represent one of the + -- characters '#', '$', '?', '@', '`', '\', '^', '~', or '_'. The + -- character value itself is stored in Scans.Special_Character. No_Token); -- No_Token is used for initializing Token values to indicate that @@ -394,7 +399,7 @@ package Scans is -- We do things this way to minimize the impact on comment scanning. Character_Code : Char_Code; - -- Valid only when Token is Tok_Char_Literal. + -- Valid only when Token is Tok_Char_Literal Real_Literal_Value : Ureal; -- Valid only when Token is Tok_Real_Literal @@ -411,11 +416,17 @@ package Scans is -- Valid only when Token = Tok_String_Literal. Special_Character : Character; - -- Valid only when Token = Tok_Special + -- Valid only when Token = Tok_Special. Returns one of the characters + -- '#', '$', '?', '@', '`', '\', '^', '~', or '_'. + -- + -- Why only this set? What about wide characters??? Comment_Id : Name_Id := No_Name; -- Valid only when Token = Tok_Comment. Store the string that follows - -- the two '-' of a comment. + -- the "--" of a comment when scanning project files. + -- + -- Is it really right for this to be a Name rather than a String, what + -- about the case of Wide_Wide_Characters??? -------------------------------------------------------- -- Procedures for Saving and Restoring the Scan State -- diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb index 9d3483e8251..687c32b11d5 100644 --- a/gcc/ada/scng.adb +++ b/gcc/ada/scng.adb @@ -1465,6 +1465,17 @@ package body Scng is else -- Source (Scan_Ptr + 1) = '-' then if Style_Check then Style.Check_Comment; end if; Scan_Ptr := Scan_Ptr + 2; + + -- If we are in preprocessor mode with Replace_In_Comments set, + -- then we return the "--" as a token on its own. + + if Replace_In_Comments then + Token := Tok_Comment; + return; + end if; + + -- Otherwise scan out the comment + Start_Of_Comment := Scan_Ptr; -- Loop to scan comment (this loop runs more than once only if diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb index 36afe180caa..8c73ae95242 100644 --- a/gcc/ada/sem.adb +++ b/gcc/ada/sem.adb @@ -646,7 +646,6 @@ package body Sem is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Analyze (N); @@ -656,7 +655,6 @@ package body Sem is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Analyze (N); @@ -687,7 +685,6 @@ package body Sem is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Analyze_List (L); @@ -697,7 +694,6 @@ package body Sem is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Analyze_List (L); @@ -928,7 +924,6 @@ package body Sem is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Insert_After_And_Analyze (N, M); @@ -938,7 +933,6 @@ package body Sem is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Insert_After_And_Analyze (N, M); @@ -990,7 +984,6 @@ package body Sem is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Insert_Before_And_Analyze (N, M); @@ -1000,7 +993,6 @@ package body Sem is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Insert_Before_And_Analyze (N, M); @@ -1051,7 +1043,6 @@ package body Sem is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Insert_List_After_And_Analyze (N, L); @@ -1061,7 +1052,6 @@ package body Sem is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Insert_List_After_And_Analyze (N, L); @@ -1111,7 +1101,6 @@ package body Sem is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Insert_List_Before_And_Analyze (N, L); @@ -1121,7 +1110,6 @@ package body Sem is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Insert_List_Before_And_Analyze (N, L); diff --git a/gcc/ada/sem.ads b/gcc/ada/sem.ads index 13b2a95900e..d7fb9a649b8 100644 --- a/gcc/ada/sem.ads +++ b/gcc/ada/sem.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -79,7 +79,7 @@ -- terminates, the expression can be expanded since all the semantic -- information is available at that point. --- If we are not generating code then the expansion phase is a no-op. +-- If we are not generating code then the expansion phase is a no-op -- When generating code there are a number of exceptions to the basic -- Analysis-Resolution-Expansion model for expressions. The most prominent diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index b8fc284b501..b67a6a85fcb 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -979,7 +979,14 @@ package body Sem_Aggr is -- in which the array aggregate occurs. If the context does not -- permit it, or the aggregate type is unconstrained, an others -- choice is not allowed. - -- + + -- If expansion is disabled (generic context, or semantics-only + -- mode) actual subtypes cannot be constructed, and the type of + -- an object may be its unconstrained nominal type. However, if + -- the context is an assignment, we assume that "others" is + -- allowed, because the target of the assignment will have a + -- constrained subtype when fully compiled. + -- Note that there is no node for Explicit_Actual_Parameter. -- To test for this context we therefore have to test for node -- N_Parameter_Association which itself appears only if there is a @@ -1012,6 +1019,16 @@ package body Sem_Aggr is Component_Typ => Component_Type (Typ), Others_Allowed => True); + elsif not Expander_Active + and then Pkind = N_Assignment_Statement + then + Aggr_Resolved := + Resolve_Array_Aggregate + (N, + Index => First_Index (Aggr_Typ), + Index_Constr => First_Index (Typ), + Component_Typ => Component_Type (Typ), + Others_Allowed => True); else Aggr_Resolved := Resolve_Array_Aggregate @@ -1031,9 +1048,15 @@ package body Sem_Aggr is Set_Etype (N, Aggr_Subtyp); end Array_Aggregate; + elsif Is_Private_Type (Typ) + and then Present (Full_View (Typ)) + and then In_Inlined_Body + and then Is_Composite_Type (Full_View (Typ)) + then + Resolve (N, Full_View (Typ)); + else Error_Msg_N ("illegal context for aggregate", N); - end if; -- If we can determine statically that the evaluation of the @@ -1889,7 +1912,6 @@ package body Sem_Aggr is Check_Length (Aggr_Low, Aggr_High, Nb_Elements); Check_Length (Index_Typ_Low, Index_Typ_High, Nb_Elements); Check_Length (Index_Base_Low, Index_Base_High, Nb_Elements); - end if; if Raises_Constraint_Error (Aggr_Low) @@ -2312,7 +2334,6 @@ package body Sem_Aggr is ("initialization not allowed for limited types", N); Explain_Limited_Type (Etype (Compon), Compon); end if; - end if; end Check_Non_Limited_Type; diff --git a/gcc/ada/sem_aggr.ads b/gcc/ada/sem_aggr.ads index ab1fff58a2e..808747abc64 100644 --- a/gcc/ada/sem_aggr.ads +++ b/gcc/ada/sem_aggr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 1306779d12a..e0c05fd62ae 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -492,9 +492,16 @@ package body Sem_Attr is -- accesses are allowed (references to the current type instance). if Is_Entity_Name (P) then - Scop := Current_Scope; Typ := Entity (P); + -- The reference may appear in an aggregate that has been expanded + -- into a loop. Locate scope of type definition, if any. + + Scop := Current_Scope; + while Ekind (Scop) = E_Loop loop + Scop := Scope (Scop); + end loop; + if Is_Type (Typ) then -- OK if we are within the scope of a limited type @@ -516,6 +523,7 @@ package body Sem_Attr is loop Q := Parent (Q); end loop; + if Present (Q) then Set_Has_Per_Object_Constraint ( Defining_Identifier (Q), True); @@ -585,11 +593,9 @@ package body Sem_Attr is declare Index : Interp_Index; It : Interp; - begin Set_Etype (N, Any_Type); Get_First_Interp (P, Index, It); - while Present (It.Typ) loop Acc_Type := Build_Access_Object_Type (It.Typ); Add_One_Interp (N, Acc_Type, Acc_Type); @@ -1373,13 +1379,27 @@ package body Sem_Attr is begin Analyze (P); + -- Ada 2005 (AI-345): Attribute 'Terminated can be applied to + -- task interface class-wide types. + if Is_Task_Type (Etype (P)) or else (Is_Access_Type (Etype (P)) - and then Is_Task_Type (Designated_Type (Etype (P)))) + and then Is_Task_Type (Designated_Type (Etype (P)))) + or else (Ada_Version >= Ada_05 + and then Ekind (Etype (P)) = E_Class_Wide_Type + and then Is_Interface (Etype (P)) + and then Is_Task_Interface (Etype (P))) then Resolve (P); + else - Error_Attr ("prefix of % attribute must be a task", P); + if Ada_Version >= Ada_05 then + Error_Attr ("prefix of % attribute must be a task or a task " + & "interface class-wide object", P); + + else + Error_Attr ("prefix of % attribute must be a task", P); + end if; end if; end Check_Task_Prefix; @@ -2793,16 +2813,28 @@ package body Sem_Attr is if Etype (P) = Standard_Exception_Type then Set_Etype (N, RTE (RE_Exception_Id)); + -- Ada 2005 (AI-345): Attribute 'Identity may be applied to + -- task interface class-wide types. + elsif Is_Task_Type (Etype (P)) or else (Is_Access_Type (Etype (P)) - and then Is_Task_Type (Designated_Type (Etype (P)))) + and then Is_Task_Type (Designated_Type (Etype (P)))) + or else (Ada_Version >= Ada_05 + and then Ekind (Etype (P)) = E_Class_Wide_Type + and then Is_Interface (Etype (P)) + and then Is_Task_Interface (Etype (P))) then Resolve (P); Set_Etype (N, RTE (RO_AT_Task_Id)); else - Error_Attr ("prefix of % attribute must be a task or an " - & "exception", P); + if Ada_Version >= Ada_05 then + Error_Attr ("prefix of % attribute must be an exception, a " + & "task or a task interface class-wide object", P); + else + Error_Attr ("prefix of % attribute must be a task or an " + & "exception", P); + end if; end if; ----------- @@ -2962,6 +2994,15 @@ package body Sem_Attr is Check_E0; Set_Etype (N, Universal_Integer); + ---------------------- + -- Machine_Rounding -- + ---------------------- + + when Attribute_Machine_Rounding => + Check_Floating_Point_Type_1; + Set_Etype (N, P_Base_Type); + Resolve (E1, P_Base_Type); + -------------------- -- Machine_Rounds -- -------------------- @@ -5481,6 +5522,20 @@ package body Sem_Attr is Fold_Uint (N, Uint_2, True); end if; + ---------------------- + -- Machine_Rounding -- + ---------------------- + + -- Note: for the folding case, it is fine to treat Machine_Rounding + -- exactly the same way as Rounding, since this is one of the allowed + -- behaviors, and performance is not an issue here. It might be a bit + -- better to give the same result as it would give at run-time, even + -- though the non-determinism is certainly permitted. + + when Attribute_Machine_Rounding => + Fold_Ureal (N, + Eval_Fat.Rounding (P_Root_Type, Expr_Value_R (E1)), Static); + -------------------- -- Machine_Rounds -- -------------------- @@ -6243,7 +6298,6 @@ package body Sem_Attr is end if; Rewrite (N, New_Occurrence_Of (RTE (Id), Loc)); - end Type_Class; ----------------------- @@ -7685,12 +7739,19 @@ package body Sem_Attr is return True; end if; - if Nam = TSS_Stream_Input then - return Ada_Version >= Ada_05 - and then Stream_Attribute_Available (Etyp, TSS_Stream_Read); - elsif Nam = TSS_Stream_Output then - return Ada_Version >= Ada_05 - and then Stream_Attribute_Available (Etyp, TSS_Stream_Write); + -- In Ada 2005, Input can invoke Read, and Output can invoke Write + + if Nam = TSS_Stream_Input + and then Ada_Version >= Ada_05 + and then Stream_Attribute_Available (Etyp, TSS_Stream_Read) + then + return True; + + elsif Nam = TSS_Stream_Output + and then Ada_Version >= Ada_05 + and then Stream_Attribute_Available (Etyp, TSS_Stream_Write) + then + return True; end if; -- Case of Read and Write: check for attribute definition clause that diff --git a/gcc/ada/sem_case.adb b/gcc/ada/sem_case.adb index a7df779f324..25a2f704a15 100644 --- a/gcc/ada/sem_case.adb +++ b/gcc/ada/sem_case.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_case.ads b/gcc/ada/sem_case.ads index d7c359a7215..e07e229c8f1 100644 --- a/gcc/ada/sem_case.ads +++ b/gcc/ada/sem_case.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2002 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,8 +24,6 @@ -- -- ------------------------------------------------------------------------------ -with Types; use Types; - -- Package containing the routines to process a list of discrete choices. -- Such lists can occur in two different constructs: case statements and -- record variants. We have factorized what used to be two very similar @@ -33,6 +31,8 @@ with Types; use Types; -- aggregate case, since issues with nested aggregates make that case -- substantially different. +with Types; use Types; + package Sem_Case is type Choice_Bounds is record @@ -63,10 +63,10 @@ package Sem_Case is -- to get to the actual list of discrete choices. with procedure Process_Empty_Choice (Choice : Node_Id); - -- Processing to carry out for an empty Choice. + -- Processing to carry out for an empty Choice with procedure Process_Non_Static_Choice (Choice : Node_Id); - -- Processing to carry out for a non static Choice. + -- Processing to carry out for a non static Choice with procedure Process_Associated_Node (A : Node_Id); -- Associated to each case alternative, aggregate component @@ -96,11 +96,11 @@ package Sem_Case is -- On entry Choice_Table must be big enough to contain all the -- discrete choices encountered. -- - -- On exit Choice_Table contains all the static and non empty - -- discrete choices in sorted order. Last_Choice gives the position - -- of the last valid choice in Choice_Table, Choice_Table'First - -- contains the first. We can have Last_Choice < Choice_Table'Last - -- for one (or several) of the following reasons: + -- On exit Choice_Table contains all the static and non empty discrete + -- choices in sorted order. Last_Choice gives the position of the last + -- valid choice in Choice_Table, Choice_Table'First contains the first. + -- We can have Last_Choice < Choice_Table'Last for one (or several) of + -- the following reasons: -- -- (a) The list of choices contained a non static choice -- @@ -113,9 +113,9 @@ package Sem_Case is -- In one of the bounds of a discrete choice raises a constraint -- error the flag Raise_CE is set. -- - -- Finally Others_Present is set to True if an Others choice is - -- present in the list of choices, and in this case the call also - -- sets Others_Discrete_Choices in the N_Others_Choice node. + -- Finally Others_Present is set to True if an Others choice is present + -- in the list of choices, and in this case the call also sets + -- Others_Discrete_Choices in the N_Others_Choice node. end Generic_Choices_Processing; diff --git a/gcc/ada/sem_cat.ads b/gcc/ada/sem_cat.ads index 0792ff00fc4..7296bbe565f 100644 --- a/gcc/ada/sem_cat.ads +++ b/gcc/ada/sem_cat.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2002 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -96,7 +96,7 @@ package Sem_Cat is -- the checks cannot be made before knowing if the object is imported. procedure Validate_RCI_Declarations (P : Entity_Id); - -- Apply semantic checks given in E2.3(10-14). + -- Apply semantic checks given in E2.3(10-14) procedure Validate_RCI_Subprogram_Declaration (N : Node_Id); -- Check for RCI unit subprogram declarations with respect to diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index b752eb495aa..838e82256e7 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -95,7 +95,7 @@ package body Sem_Ch10 is -- Verify that a stub is declared immediately within a compilation unit, -- and not in an inner frame. - procedure Expand_With_Clause (Nam : Node_Id; N : Node_Id); + procedure Expand_With_Clause (Item : Node_Id; Nam : Node_Id; N : Node_Id); -- When a child unit appears in a context clause, the implicit withs on -- parents are made explicit, and with clauses are inserted in the context -- clause before the one for the child. If a parent in the with_clause @@ -998,7 +998,7 @@ package body Sem_Ch10 is Check_Stub_Level (N); Nam := Current_Entity_In_Scope (Id); - if No (Nam) or else not Is_Package (Nam) then + if No (Nam) or else not Is_Package_Or_Generic_Package (Nam) then Error_Msg_N ("missing specification for package stub", N); elsif Has_Completion (Nam) @@ -1843,9 +1843,8 @@ package body Sem_Ch10 is E_Name := Defining_Entity (Specification (Instance_Spec (U))); - elsif Unit_Kind = N_Procedure_Instantiation - or else Unit_Kind = N_Function_Instantiation - then + elsif Unit_Kind in N_Subprogram_Instantiation then + -- Instantiation node is replaced with a package that contains -- renaming declarations and instance itself. The subprogram -- Instance is declared in the visible part of the wrapper package. @@ -1953,6 +1952,13 @@ package body Sem_Ch10 is if Private_Present (N) then Set_Is_Immediately_Visible (E_Name, False); end if; + + -- Check for with'ing obsolescent package. Exclude subprograms here + -- since we will catch those on the call rather than the WITH. + + if Is_Package_Or_Generic_Package (E_Name) then + Check_Obsolescent (E_Name, N); + end if; end Analyze_With_Clause; ------------------------------ @@ -2480,13 +2486,14 @@ package body Sem_Ch10 is -- Expand_With_Clause -- ------------------------ - procedure Expand_With_Clause (Nam : Node_Id; N : Node_Id) is + procedure Expand_With_Clause (Item : Node_Id; Nam : Node_Id; N : Node_Id) is Loc : constant Source_Ptr := Sloc (Nam); Ent : constant Entity_Id := Entity (Nam); Withn : Node_Id; P : Node_Id; function Build_Unit_Name (Nam : Node_Id) return Node_Id; + -- Comment requireed here ??? --------------------- -- Build_Unit_Name -- @@ -2523,12 +2530,20 @@ package body Sem_Ch10 is Set_First_Name (Withn, True); Set_Implicit_With (Withn, True); + -- If the unit is a package declaration, a private_with_clause on a + -- child unit implies that the implicit with on the parent is also + -- private. + + if Nkind (Unit (N)) = N_Package_Declaration then + Set_Private_Present (Withn, Private_Present (Item)); + end if; + Prepend (Withn, Context_Items (N)); Mark_Rewrite_Insertion (Withn); Install_Withed_Unit (Withn); if Nkind (Nam) = N_Expanded_Name then - Expand_With_Clause (Prefix (Nam), N); + Expand_With_Clause (Item, Prefix (Nam), N); end if; New_Nodes_OK := New_Nodes_OK - 1; @@ -2640,6 +2655,16 @@ package body Sem_Ch10 is P_Unit := Original_Node (P_Unit); end if; + -- We add the implicit with if the child unit is the current unit + -- being compiled. If the current unit is a body, we do not want + -- to add an implicit_with a second time to the corresponding spec. + + if Nkind (Child_Unit) = N_Package_Declaration + and then Child_Unit /= Unit (Cunit (Current_Sem_Unit)) + then + return; + end if; + New_Nodes_OK := New_Nodes_OK + 1; Withn := Make_With_Clause (Loc, Name => Build_Unit_Name); @@ -2764,7 +2789,7 @@ package body Sem_Ch10 is if Is_Child_Spec (Decl_Node) then if Nkind (Name (Item)) = N_Expanded_Name then - Expand_With_Clause (Prefix (Name (Item)), N); + Expand_With_Clause (Item, Prefix (Name (Item)), N); else -- if not an expanded name, the child unit must be a -- renaming, nothing to do. @@ -2784,10 +2809,12 @@ package body Sem_Ch10 is if Sloc (Library_Unit (Item)) /= No_Location then License_Check : declare + + Withu : constant Unit_Number_Type := + Get_Source_Unit (Library_Unit (Item)); + Withl : constant License_Type := - License (Source_Index - (Get_Source_Unit - (Library_Unit (Item)))); + License (Source_Index (Withu)); Unitl : constant License_Type := License (Source_Index (Current_Sem_Unit)); @@ -2802,35 +2829,44 @@ package body Sem_Ch10 is procedure License_Error is begin Error_Msg_N - ("?license of with'ed unit & is incompatible", + ("?license of with'ed unit & may be inconsistent", Name (Item)); end License_Error; -- Start of processing for License_Check begin - case Unitl is - when Unknown => - null; + -- Exclude license check if withed unit is an internal unit. + -- This situation arises e.g. with the GPL version of GNAT. - when Restricted => - if Withl = GPL then - License_Error; - end if; + if Is_Internal_File_Name (Unit_File_Name (Withu)) then + null; - when GPL => - if Withl = Restricted then - License_Error; - end if; + -- Otherwise check various cases + else + case Unitl is + when Unknown => + null; - when Modified_GPL => - if Withl = Restricted or else Withl = GPL then - License_Error; - end if; + when Restricted => + if Withl = GPL then + License_Error; + end if; - when Unrestricted => - null; - end case; + when GPL => + if Withl = Restricted then + License_Error; + end if; + + when Modified_GPL => + if Withl = Restricted or else Withl = GPL then + License_Error; + end if; + + when Unrestricted => + null; + end case; + end if; end License_Check; end if; @@ -2901,10 +2937,12 @@ package body Sem_Ch10 is begin Lib_Spec := Unit (Library_Unit (N)); while Is_Child_Spec (Lib_Spec) loop - P := Unit (Parent_Spec (Lib_Spec)); + P := Unit (Parent_Spec (Lib_Spec)); + P_Name := Defining_Entity (P); - if not (Private_Present (Parent (Lib_Spec))) then - P_Name := Defining_Entity (P); + if not (Private_Present (Parent (Lib_Spec))) + and then not In_Private_Part (P_Name) + then Install_Private_Declarations (P_Name); Install_Private_With_Clauses (P_Name); Set_Use (Private_Declarations (Specification (P))); @@ -3125,7 +3163,7 @@ package body Sem_Ch10 is Item : Node_Id; begin - -- A limited with_clause can not appear in the same context_clause + -- A limited with_clause cannot appear in the same context_clause -- as a nonlimited with_clause which mentions the same library. Item := First (Context_Items (Comp_Unit)); @@ -3270,7 +3308,7 @@ package body Sem_Ch10 is Error_Msg_N ("child of a generic package must be a generic unit", Lib_Unit); - elsif not Is_Package (P_Name) then + elsif not Is_Package_Or_Generic_Package (P_Name) then Error_Msg_N ("parent unit must be package or generic package", Lib_Unit); raise Unrecoverable_Error; @@ -4378,16 +4416,12 @@ package body Sem_Ch10 is & "limited with_clauses", N); return; - when N_Package_Instantiation | - N_Function_Instantiation | - N_Procedure_Instantiation => + when N_Generic_Instantiation => Error_Msg_N ("generic instantiations not allowed in " & "limited with_clauses", N); return; - when N_Generic_Package_Renaming_Declaration | - N_Generic_Procedure_Renaming_Declaration | - N_Generic_Function_Renaming_Declaration => + when N_Generic_Renaming_Declaration => Error_Msg_N ("generic renamings not allowed in " & "limited with_clauses", N); return; diff --git a/gcc/ada/sem_ch11.adb b/gcc/ada/sem_ch11.adb index fb73f605bbb..978c7e38e96 100644 --- a/gcc/ada/sem_ch11.adb +++ b/gcc/ada/sem_ch11.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 05f89f65e20..470f5ed237c 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -37,6 +37,7 @@ with Lib; use Lib; with Lib.Load; use Lib.Load; with Lib.Xref; use Lib.Xref; with Nlists; use Nlists; +with Namet; use Namet; with Nmake; use Nmake; with Opt; use Opt; with Rident; use Rident; @@ -256,6 +257,10 @@ package body Sem_Ch12 is -- The following procedures treat other kinds of formal parameters + procedure Analyze_Formal_Derived_Interface_Type + (T : Entity_Id; + Def : Node_Id); + procedure Analyze_Formal_Derived_Type (N : Node_Id; T : Entity_Id; @@ -271,6 +276,7 @@ package body Sem_Ch12 is (T : Entity_Id; Def : Node_Id); procedure Analyze_Formal_Discrete_Type (T : Entity_Id; Def : Node_Id); procedure Analyze_Formal_Floating_Type (T : Entity_Id; Def : Node_Id); + procedure Analyze_Formal_Interface_Type (T : Entity_Id; Def : Node_Id); procedure Analyze_Formal_Signed_Integer_Type (T : Entity_Id; Def : Node_Id); procedure Analyze_Formal_Modular_Type (T : Entity_Id; Def : Node_Id); procedure Analyze_Formal_Ordinary_Fixed_Point_Type @@ -390,11 +396,6 @@ package body Sem_Ch12 is -- (component or index type of an array type) and Gen_Scope is the scope of -- the analyzed formal array type. - function Get_Package_Instantiation_Node (A : Entity_Id) return Node_Id; - -- Given the entity of a unit that is an instantiation, retrieve the - -- original instance node. This is used when loading the instantiations - -- of the ancestors of a child generic that is being instantiated. - function In_Same_Declarative_Part (F_Node : Node_Id; Inst : Node_Id) return Boolean; @@ -685,9 +686,14 @@ package body Sem_Ch12 is Parent_Unit_Visible : Boolean := False; -- Parent_Unit_Visible is used when the generic is a child unit, and -- indicates whether the ultimate parent of the generic is visible in the - -- instantiation environment. It is used to reset the visiblity of the + -- instantiation environment. It is used to reset the visibility of the -- parent at the end of the instantiation (see Remove_Parent). + Instance_Parent_Unit : Entity_Id := Empty; + -- This records the ultimate parent unit of an instance of a generic + -- child unit and is used in conjunction with Parent_Unit_Visible to + -- indicate the unit to which the Parent_Unit_Visible flag corresponds. + type Instance_Env is record Ada_Version : Ada_Version_Type; Ada_Version_Explicit : Ada_Version_Type; @@ -695,7 +701,8 @@ package body Sem_Ch12 is Exchanged_Views : Elist_Id; Hidden_Entities : Elist_Id; Current_Sem_Unit : Unit_Number_Type; - Parent_Unit_Visible : Boolean := False; + Parent_Unit_Visible : Boolean := False; + Instance_Parent_Unit : Entity_Id := Empty; end record; package Instance_Envs is new Table.Table ( @@ -1015,7 +1022,7 @@ package body Sem_Ch12 is Instantiate_Type (Formal, Match, Analyzed_Formal, Assoc)); - -- an instantiation is a freeze point for the actuals, + -- An instantiation is a freeze point for the actuals, -- unless this is a rewritten formal package. if Nkind (I_Node) /= N_Formal_Package_Declaration then @@ -1299,6 +1306,26 @@ package body Sem_Ch12 is Check_Restriction (No_Fixed_Point, Def); end Analyze_Formal_Decimal_Fixed_Point_Type; + ------------------------------------------- + -- Analyze_Formal_Derived_Interface_Type -- + ------------------------------------------- + + procedure Analyze_Formal_Derived_Interface_Type + (T : Entity_Id; + Def : Node_Id) + is + begin + Enter_Name (T); + Set_Ekind (T, E_Record_Type); + Set_Etype (T, T); + Analyze (Subtype_Indication (Def)); + Analyze_Interface_Declaration (T, Def); + Make_Class_Wide_Type (T); + Set_Primitive_Operations (T, New_Elmt_List); + Analyze_List (Interface_List (Def)); + Collect_Interfaces (Def, T); + end Analyze_Formal_Derived_Interface_Type; + --------------------------------- -- Analyze_Formal_Derived_Type -- --------------------------------- @@ -1452,6 +1479,20 @@ package body Sem_Ch12 is Check_Restriction (No_Floating_Point, Def); end Analyze_Formal_Floating_Type; + ----------------------------------- + -- Analyze_Formal_Interface_Type;-- + ----------------------------------- + + procedure Analyze_Formal_Interface_Type (T : Entity_Id; Def : Node_Id) is + begin + Enter_Name (T); + Set_Ekind (T, E_Record_Type); + Set_Etype (T, T); + Analyze_Interface_Declaration (T, Def); + Make_Class_Wide_Type (T); + Set_Primitive_Operations (T, New_Elmt_List); + end Analyze_Formal_Interface_Type; + --------------------------------- -- Analyze_Formal_Modular_Type -- --------------------------------- @@ -1630,6 +1671,12 @@ package body Sem_Ch12 is Check_Generic_Child_Unit (Gen_Id, Parent_Installed); Gen_Unit := Entity (Gen_Id); + -- Check for a formal package that is a package renaming + + if Present (Renamed_Object (Gen_Unit)) then + Gen_Unit := Renamed_Object (Gen_Unit); + end if; + if Ekind (Gen_Unit) /= E_Generic_Package then Error_Msg_N ("expect generic package name", Gen_Id); Restore_Env; @@ -1664,12 +1711,6 @@ package body Sem_Ch12 is end if; end if; - -- Check for a formal package that is a package renaming - - if Present (Renamed_Object (Gen_Unit)) then - Gen_Unit := Renamed_Object (Gen_Unit); - end if; - -- The formal package is treated like a regular instance, but only -- the specification needs to be instantiated, to make entities visible. @@ -1703,6 +1744,7 @@ package body Sem_Ch12 is (Original_Node (Gen_Decl), Empty, Instantiating => True); Rewrite (N, New_N); Set_Defining_Unit_Name (Specification (New_N), Formal); + Set_Generic_Parent (Specification (N), Gen_Unit); Set_Instance_Env (Gen_Unit, Formal); Enter_Name (Formal); @@ -1760,10 +1802,9 @@ package body Sem_Ch12 is -- instantiation, the defining_unit_name we need is in the -- new tree and not in the original. (see Package_Instantiation). -- A generic formal package is an instance, and can be used as - -- an actual for an inner instance. Mark its generic parent. + -- an actual for an inner instance. Set_Ekind (Formal, E_Package); - Set_Generic_Parent (Specification (N), Gen_Unit); Set_Has_Completion (Formal, True); Set_Ekind (Pack_Id, E_Package); @@ -2043,6 +2084,15 @@ package body Sem_Ch12 is N_Access_Procedure_Definition => Analyze_Generic_Access_Type (T, Def); + -- Ada 2005: a interface declaration is encoded as an abstract + -- record declaration or a abstract type derivation. + + when N_Record_Definition => + Analyze_Formal_Interface_Type (T, Def); + + when N_Derived_Type_Definition => + Analyze_Formal_Derived_Interface_Type (T, Def); + when N_Error => null; @@ -2655,6 +2705,19 @@ package body Sem_Ch12 is then Inline_Now := True; end if; + + -- If the current scope is itself an instance within a child + -- unit, and that unit itself is not an instance, it is + -- duplicated in the scope stack, and the unstacking mechanism + -- in Inline_Instance_Body will fail. This loses some rare + -- cases of optimization, and might be improved some day ???? + + if Is_Generic_Instance (Current_Scope) + and then Is_Child_Unit (Scope (Current_Scope)) + and then not Is_Generic_Instance (Scope (Current_Scope)) + then + Inline_Now := False; + end if; end if; Needs_Body := @@ -2856,6 +2919,7 @@ package body Sem_Ch12 is Set_Unit (Parent (N), Act_Decl); Set_Parent_Spec (Act_Decl, Parent_Spec (N)); + Set_Package_Instantiation (Act_Decl_Id, N); Analyze (Act_Decl); Set_Unit (Parent (N), N); Set_Body_Required (Parent (N), False); @@ -2974,23 +3038,29 @@ package body Sem_Ch12 is S : Entity_Id; begin - -- Case of generic unit defined in another unit. We must remove - -- the complete context of the current unit to install that of - -- the generic. + -- Case of generic unit defined in another unit. We must remove the + -- complete context of the current unit to install that of the generic. if Gen_Comp /= Cunit_Entity (Current_Sem_Unit) then - S := Current_Scope; - while Present (S) - and then S /= Standard_Standard - loop - Num_Scopes := Num_Scopes + 1; + -- Add some comments for the following two loops ??? - Use_Clauses (Num_Scopes) := - (Scope_Stack.Table - (Scope_Stack.Last - Num_Scopes + 1). - First_Use_Clause); - End_Use_Clauses (Use_Clauses (Num_Scopes)); + S := Current_Scope; + while Present (S) and then S /= Standard_Standard loop + loop + Num_Scopes := Num_Scopes + 1; + + Use_Clauses (Num_Scopes) := + (Scope_Stack.Table + (Scope_Stack.Last - Num_Scopes + 1). + First_Use_Clause); + End_Use_Clauses (Use_Clauses (Num_Scopes)); + + exit when Scope_Stack.Last - Num_Scopes + 1 = Scope_Stack.First + or else Scope_Stack.Table + (Scope_Stack.Last - Num_Scopes).Entity + = Scope (S); + end loop; exit when Is_Generic_Instance (S) and then (In_Package_Body (S) @@ -3018,12 +3088,12 @@ package body Sem_Ch12 is S := Scope (S); end loop; - -- Remove context of current compilation unit, unless we - -- are within a nested package instantiation, in which case - -- the context has been removed previously. + -- Remove context of current compilation unit, unless we are within a + -- nested package instantiation, in which case the context has been + -- removed previously. - -- If current scope is the body of a child unit, remove context - -- of spec as well. + -- If current scope is the body of a child unit, remove context of + -- spec as well. S := Current_Scope; @@ -3046,7 +3116,7 @@ package body Sem_Ch12 is Removed := True; -- Remove entities in current scopes from visibility, so - -- than instance body is compiled in a clean environment. + -- that instance body is compiled in a clean environment. Save_Scope_Stack (Handle_Use => False); @@ -3077,6 +3147,7 @@ package body Sem_Ch12 is S := Scope (S); end loop; + pragma Assert (Num_Inner < Num_Scopes); New_Scope (Standard_Standard); Scope_Stack.Table (Scope_Stack.Last).Is_Active_Stack_Base := True; @@ -4301,8 +4372,18 @@ package body Sem_Ch12 is Instance_Decl : Node_Id; begin - Enclosing_Instance := Current_Scope; + -- We do not inline any call that contains instantiations, except + -- for instantiations of Unchecked_Conversion, so if we are within + -- an inlined body the current instance does not require parents. + + if In_Inlined_Body then + pragma Assert (Chars (Gen_Id) = Name_Unchecked_Conversion); + return False; + end if; + + -- Loop to check enclosing scopes + Enclosing_Instance := Current_Scope; while Present (Enclosing_Instance) loop Instance_Decl := Unit_Declaration_Node (Enclosing_Instance); @@ -5755,6 +5836,24 @@ package body Sem_Ch12 is Inst : Node_Id; begin + -- If the Package_Instantiation attribute has been set on the package + -- entity, then use it directly when it (or its Original_Node) refers + -- to an N_Package_Instantiation node. In principle it should be + -- possible to have this field set in all cases, which should be + -- investigated, and would allow this function to be significantly + -- simplified. ??? + + if Present (Package_Instantiation (A)) then + if Nkind (Package_Instantiation (A)) = N_Package_Instantiation then + return Package_Instantiation (A); + + elsif Nkind (Original_Node (Package_Instantiation (A))) + = N_Package_Instantiation + then + return Original_Node (Package_Instantiation (A)); + end if; + end if; + -- If the instantiation is a compilation unit that does not need a -- body then the instantiation node has been rewritten as a package -- declaration for the instance, and we return the original node. @@ -5880,6 +5979,7 @@ package body Sem_Ch12 is Saved.Hidden_Entities := Hidden_Entities; Saved.Current_Sem_Unit := Current_Sem_Unit; Saved.Parent_Unit_Visible := Parent_Unit_Visible; + Saved.Instance_Parent_Unit := Instance_Parent_Unit; Instance_Envs.Increment_Last; Instance_Envs.Table (Instance_Envs.Last) := Saved; @@ -6308,16 +6408,43 @@ package body Sem_Ch12 is Specification (Unit_Declaration_Node (Par)); begin - if not Is_Child_Unit (Par) then + -- If this parent of the child instance is a top-level unit, + -- then record the unit and its visibility for later resetting + -- in Remove_Parent. We exclude units that are generic instances, + -- as we only want to record this information for the ultimate + -- top-level noninstance parent (is that always correct???). + + if Scope (Par) = Standard_Standard + and then not Is_Generic_Instance (Par) + then Parent_Unit_Visible := Is_Immediately_Visible (Par); - end if; + Instance_Parent_Unit := Par; + end if; + + -- Open the parent scope and make it and its declarations visible. + -- If this point is not within a body, then only the visible + -- declarations should be made visible, and installation of the + -- private declarations is deferred until the appropriate point + -- within analysis of the spec being instantiated (see the handling + -- of parent visibility in Analyze_Package_Specification). This is + -- relaxed in the case where the parent unit is Ada.Tags, to avoid + -- private view problems that occur when compiling instantiations of + -- a generic child of that package (Generic_Dispatching_Constructor). + -- If the instance freezes a tagged type, inlinings of operations + -- from Ada.Tags may need the full view of type Tag. If inlining + -- took proper account of establishing visibility of inlined + -- subprograms' parents then it should be possible to remove this + -- special check. ??? New_Scope (Par); Set_Is_Immediately_Visible (Par); Install_Visible_Declarations (Par); - Install_Private_Declarations (Par); Set_Use (Visible_Declarations (Spec)); - Set_Use (Private_Declarations (Spec)); + + if In_Body or else Is_RTU (Par, Ada_Tags) then + Install_Private_Declarations (Par); + Set_Use (Private_Declarations (Spec)); + end if; end Install_Spec; -- Start of processing for Install_Parent @@ -6682,9 +6809,13 @@ package body Sem_Ch12 is while Present (E1) and then E1 /= First_Private_Entity (Form) loop + -- Could this test be a single condition??? + -- Seems like it could, and isn't FPE (Form) a constant anyway??? + if not Is_Internal (E1) - and then not Is_Class_Wide_Type (E1) and then Present (Parent (E1)) + and then not Is_Class_Wide_Type (E1) + and then not Is_Internal_Name (Chars (E1)) then while Present (E2) and then Chars (E2) /= Chars (E1) @@ -7941,6 +8072,8 @@ package body Sem_Ch12 is procedure Validate_Access_Subprogram_Instance; procedure Validate_Access_Type_Instance; procedure Validate_Derived_Type_Instance; + procedure Validate_Derived_Interface_Type_Instance; + procedure Validate_Interface_Type_Instance; procedure Validate_Private_Type_Instance; -- These procedures perform validation tests for the named case @@ -8177,6 +8310,44 @@ package body Sem_Ch12 is end Validate_Array_Type_Instance; + ----------------------------------------------- + -- Validate_Derived_Interface_Type_Instance -- + ----------------------------------------------- + + procedure Validate_Derived_Interface_Type_Instance is + Par : constant Entity_Id := Entity (Subtype_Indication (Def)); + Elmt : Elmt_Id; + + begin + -- First apply interface instance checks + + Validate_Interface_Type_Instance; + + -- Verify that immediate parent interface is an ancestor of + -- the actual. + + if Present (Par) + and then not Interface_Present_In_Ancestor (Act_T, Par) + then + Error_Msg_NE + ("interface actual must include progenitor&", Actual, Par); + end if; + + -- Now verify that the actual includes all other ancestors of + -- the formal. + + Elmt := First_Elmt (Abstract_Interfaces (A_Gen_T)); + while Present (Elmt) loop + if not Interface_Present_In_Ancestor (Act_T, Node (Elmt)) then + Error_Msg_NE + ("interface actual must include progenitor&", + Actual, Node (Elmt)); + end if; + + Next_Elmt (Elmt); + end loop; + end Validate_Derived_Interface_Type_Instance; + ------------------------------------ -- Validate_Derived_Type_Instance -- ------------------------------------ @@ -8186,18 +8357,18 @@ package body Sem_Ch12 is Ancestor_Discr : Entity_Id; begin - -- If the parent type in the generic declaration is itself - -- a previous formal type, then it is local to the generic - -- and absent from the analyzed generic definition. In that - -- case the ancestor is the instance of the formal (which must - -- have been instantiated previously), unless the ancestor is - -- itself a formal derived type. In this latter case (which is the - -- subject of Corrigendum 8652/0038 (AI-202) the ancestor of the - -- formals is the ancestor of its parent. Otherwise, the analyzed - -- generic carries the parent type. If the parent type is defined - -- in a previous formal package, then the scope of that formal - -- package is that of the generic type itself, and it has already - -- been mapped into the corresponding type in the actual package. + -- If the parent type in the generic declaration is itself a previous + -- formal type, then it is local to the generic and absent from the + -- analyzed generic definition. In that case the ancestor is the + -- instance of the formal (which must have been instantiated + -- previously), unless the ancestor is itself a formal derived type. + -- In this latter case (which is the subject of Corrigendum 8652/0038 + -- (AI-202) the ancestor of the formals is the ancestor of its + -- parent. Otherwise, the analyzed generic carries the parent type. + -- If the parent type is defined in a previous formal package, then + -- the scope of that formal package is that of the generic type + -- itself, and it has already been mapped into the corresponding type + -- in the actual package. -- Common case: parent type defined outside of the generic @@ -8396,6 +8567,33 @@ package body Sem_Ch12 is end if; end Validate_Derived_Type_Instance; + -------------------------------------- + -- Validate_Interface_Type_Instance -- + -------------------------------------- + + procedure Validate_Interface_Type_Instance is + begin + if not Is_Interface (Act_T) then + Error_Msg_NE + ("actual for formal interface type must be an interface", + Actual, Gen_T); + + elsif Is_Limited_Type (Act_T) /= Is_Limited_Type (A_Gen_T) + or else + Is_Task_Interface (A_Gen_T) /= Is_Task_Interface (Act_T) + or else + Is_Protected_Interface (A_Gen_T) /= + Is_Protected_Interface (Act_T) + or else + Is_Synchronized_Interface (A_Gen_T) /= + Is_Synchronized_Interface (Act_T) + then + Error_Msg_NE + ("actual for interface& does not match ('R'M 12.5.5(5))", + Actual, Gen_T); + end if; + end Validate_Interface_Type_Instance; + ------------------------------------ -- Validate_Private_Type_Instance -- ------------------------------------ @@ -8661,6 +8859,12 @@ package body Sem_Ch12 is N_Access_Procedure_Definition => Validate_Access_Subprogram_Instance; + when N_Record_Definition => + Validate_Interface_Type_Instance; + + when N_Derived_Type_Definition => + Validate_Derived_Interface_Type_Instance; + when others => raise Program_Error; @@ -9116,12 +9320,16 @@ package body Sem_Ch12 is Install_Private_Declarations (P); end if; - -- If the ultimate parent is a compilation unit, reset its - -- visibility to what it was before instantiation. + -- If the ultimate parent is a top-level unit recorded in + -- Instance_Parent_Unit, then reset its visibility to what + -- it was before instantiation. (It's not clear what the + -- purpose is of testing whether Scope (P) is In_Open_Scopes, + -- but that test was present before the ultimate parent test + -- was added.???) elsif not In_Open_Scopes (Scope (P)) - or else - (not Is_Child_Unit (P) and then not Parent_Unit_Visible) + or else (P = Instance_Parent_Unit + and then not Parent_Unit_Visible) then Set_Is_Immediately_Visible (P, False); end if; @@ -9175,6 +9383,7 @@ package body Sem_Ch12 is Hidden_Entities := Saved.Hidden_Entities; Current_Sem_Unit := Saved.Current_Sem_Unit; Parent_Unit_Visible := Saved.Parent_Unit_Visible; + Instance_Parent_Unit := Saved.Instance_Parent_Unit; Instance_Envs.Decrement_Last; end Restore_Env; @@ -9584,9 +9793,7 @@ package body Sem_Ch12 is Set_Etype (N, Empty); end if; - if (Nkind (Parent (N)) = N_Package_Instantiation - or else Nkind (Parent (N)) = N_Function_Instantiation - or else Nkind (Parent (N)) = N_Procedure_Instantiation) + if Nkind (Parent (N)) in N_Generic_Instantiation and then N = Name (Parent (N)) then Save_Global_Defaults (Parent (N), Parent (N2)); @@ -9595,7 +9802,6 @@ package body Sem_Ch12 is elsif Nkind (Parent (N)) = N_Selected_Component and then Nkind (Parent (N2)) = N_Expanded_Name then - if Is_Global (Entity (Parent (N2))) then Change_Selected_Component_To_Expanded_Name (Parent (N)); Set_Associated_Node (Parent (N), Parent (N2)); @@ -9626,11 +9832,7 @@ package body Sem_Ch12 is end if; end if; - if (Nkind (Parent (Parent (N))) = N_Package_Instantiation - or else Nkind (Parent (Parent (N))) - = N_Function_Instantiation - or else Nkind (Parent (Parent (N))) - = N_Procedure_Instantiation) + if Nkind (Parent (Parent (N))) in N_Generic_Instantiation and then Parent (N) = Name (Parent (Parent (N))) then Save_Global_Defaults @@ -10054,6 +10256,11 @@ package body Sem_Ch12 is else declare + Loc : constant Source_Ptr := Sloc (N); + Qual : Node_Id := Empty; + Typ : Entity_Id := Empty; + Nam : Node_Id; + use Atree.Unchecked_Access; -- This code section is part of implementing an untyped tree -- traversal, so it needs direct access to node fields. @@ -10065,11 +10272,66 @@ package body Sem_Ch12 is then N2 := Get_Associated_Node (N); + if No (N2) then + Typ := Empty; + else + Typ := Etype (N2); + + -- In an instance within a generic, use the name of + -- the actual and not the original generic parameter. + -- If the actual is global in the current generic it + -- must be preserved for its instantiation. + + if Nkind (Parent (Typ)) = N_Subtype_Declaration + and then + Present (Generic_Parent_Type (Parent (Typ))) + then + Typ := Base_Type (Typ); + Set_Etype (N2, Typ); + end if; + end if; + if No (N2) - or else No (Etype (N2)) - or else not Is_Global (Etype (N2)) + or else No (Typ) + or else not Is_Global (Typ) then Set_Associated_Node (N, Empty); + + -- If the aggregate is an actual in a call, it has been + -- resolved in the current context, to some local type. + -- The enclosing call may have been disambiguated by + -- the aggregate, and this disambiguation might fail at + -- instantiation time because the type to which the + -- aggregate did resolve is not preserved. In order to + -- preserve some of this information, we wrap the + -- aggregate in a qualified expression, using the id of + -- its type. For further disambiguation we qualify the + -- type name with its scope (if visible) because both + -- id's will have corresponding entities in an instance. + -- This resolves most of the problems with missing type + -- information on aggregates in instances. + + if Nkind (N2) = Nkind (N) + and then + (Nkind (Parent (N2)) = N_Procedure_Call_Statement + or else Nkind (Parent (N2)) = N_Function_Call) + and then Comes_From_Source (Typ) + then + if Is_Immediately_Visible (Scope (Typ)) then + Nam := Make_Selected_Component (Loc, + Prefix => + Make_Identifier (Loc, Chars (Scope (Typ))), + Selector_Name => + Make_Identifier (Loc, Chars (Typ))); + else + Nam := Make_Identifier (Loc, Chars (Typ)); + end if; + + Qual := + Make_Qualified_Expression (Loc, + Subtype_Mark => Nam, + Expression => Relocate_Node (N)); + end if; end if; Save_Global_Descendant (Field1 (N)); @@ -10077,6 +10339,10 @@ package body Sem_Ch12 is Save_Global_Descendant (Field3 (N)); Save_Global_Descendant (Field5 (N)); + if Present (Qual) then + Rewrite (N, Qual); + end if; + -- All other cases than aggregates else diff --git a/gcc/ada/sem_ch12.ads b/gcc/ada/sem_ch12.ads index f1ea2f73b9a..f9634bdff65 100644 --- a/gcc/ada/sem_ch12.ads +++ b/gcc/ada/sem_ch12.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -39,7 +39,7 @@ package Sem_Ch12 is procedure Analyze_Formal_Package (N : Node_Id); procedure Start_Generic; - -- Must be invoked before starting to process a generic spec or body. + -- Must be invoked before starting to process a generic spec or body procedure End_Generic; -- Must be invoked just at the end of the end of the processing of a @@ -70,6 +70,11 @@ package Sem_Ch12 is -- Retrieve actual associated with given generic parameter. -- If A is uninstantiated or not a generic parameter, return A. + function Get_Package_Instantiation_Node (A : Entity_Id) return Node_Id; + -- Given the entity of a unit that is an instantiation, retrieve the + -- original instance node. This is used when loading the instantiations + -- of the ancestors of a child generic that is being instantiated. + procedure Instantiate_Package_Body (Body_Info : Pending_Body_Info; Inlined_Body : Boolean := False); diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index adefc6a4b59..a799427e013 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -171,14 +171,6 @@ package body Sem_Ch3 is -- False is for an implicit derived full type for a type derived from a -- private type (see Build_Derived_Type). - procedure Collect_Interfaces - (N : Node_Id; - Derived_Type : Entity_Id); - -- Ada 2005 (AI-251): Subsidiary procedure to Build_Derived_Record_Type. - -- Collect the list of interfaces that are not already implemented by the - -- ancestors. This is the list of interfaces for which we must provide - -- additional tag components. - procedure Complete_Subprograms_Derivation (Partial_View : Entity_Id; Derived_Type : Entity_Id); @@ -799,6 +791,20 @@ package body Sem_Ch3 is Set_Has_Delayed_Freeze (Current_Scope); end if; + -- Ada 2005: if the designated type is an interface that may contain + -- tasks, create a Master entity for the declaration. This must be done + -- before expansion of the full declaration, because the declaration + -- may include an expression that is an allocator, whose expansion needs + -- the proper Master for the created tasks. + + if Nkind (Related_Nod) = N_Object_Declaration + and then Expander_Active + and then Is_Interface (Desig_Type) + and then Is_Limited_Record (Desig_Type) + then + Build_Class_Wide_Master (Anon_Type); + end if; + return Anon_Type; end Access_Definition; @@ -985,6 +991,10 @@ package body Sem_Ch3 is then Error_Msg_N ("access type cannot designate its own classwide type", S); + + -- Clean up indication of tagged status to prevent cascaded errors + + Set_Is_Tagged_Type (T, False); end if; Set_Etype (T, T); @@ -1584,6 +1594,33 @@ package body Sem_Ch3 is Set_Is_Pure (T, F); end Analyze_Incomplete_Type_Decl; + ----------------------------------- + -- Analyze_Interface_Declaration -- + ----------------------------------- + + procedure Analyze_Interface_Declaration (T : Entity_Id; Def : Node_Id) is + begin + Set_Is_Tagged_Type (T); + + Set_Is_Limited_Record (T, Limited_Present (Def) + or else Task_Present (Def) + or else Protected_Present (Def) + or else Synchronized_Present (Def)); + + -- Type is abstract if full declaration carries keyword, or if + -- previous partial view did. + + Set_Is_Abstract (T); + Set_Is_Interface (T); + + Set_Is_Limited_Interface (T, Limited_Present (Def)); + Set_Is_Protected_Interface (T, Protected_Present (Def)); + Set_Is_Synchronized_Interface (T, Synchronized_Present (Def)); + Set_Is_Task_Interface (T, Task_Present (Def)); + Set_Abstract_Interfaces (T, New_Elmt_List); + Set_Primitive_Operations (T, New_Elmt_List); + end Analyze_Interface_Declaration; + ----------------------------- -- Analyze_Itype_Reference -- ----------------------------- @@ -1958,7 +1995,7 @@ package body Sem_Ch3 is if Constant_Present (N) and then No (E) then - if not Is_Package (Current_Scope) then + if not Is_Package_Or_Generic_Package (Current_Scope) then Error_Msg_N ("invalid context for deferred constant declaration ('R'M 7.4)", N); @@ -2589,7 +2626,7 @@ package body Sem_Ch3 is return; end if; - if (not Is_Package (Current_Scope) + if (not Is_Package_Or_Generic_Package (Current_Scope) and then Nkind (Parent (N)) /= N_Generic_Subprogram_Declaration) or else In_Private_Part (Current_Scope) @@ -3011,6 +3048,51 @@ package body Sem_Ch3 is or else In_Package_Body (Current_Scope)); + procedure Check_Ops_From_Incomplete_Type; + -- If there is a tagged incomplete partial view of the type, transfer + -- its operations to the full view, and indicate that the type of the + -- controlling parameter (s) is this full view. + + ------------------------------------ + -- Check_Ops_From_Incomplete_Type -- + ------------------------------------ + + procedure Check_Ops_From_Incomplete_Type is + Elmt : Elmt_Id; + Formal : Entity_Id; + Op : Entity_Id; + + begin + if Prev /= T + and then Ekind (Prev) = E_Incomplete_Type + and then Is_Tagged_Type (Prev) + and then Is_Tagged_Type (T) + then + Elmt := First_Elmt (Primitive_Operations (Prev)); + while Present (Elmt) loop + Op := Node (Elmt); + Prepend_Elmt (Op, Primitive_Operations (T)); + + Formal := First_Formal (Op); + while Present (Formal) loop + if Etype (Formal) = Prev then + Set_Etype (Formal, T); + end if; + + Next_Formal (Formal); + end loop; + + if Etype (Op) = Prev then + Set_Etype (Op, T); + end if; + + Next_Elmt (Elmt); + end loop; + end if; + end Check_Ops_From_Incomplete_Type; + + -- Start of processing for Analyze_Type_Declaration + begin Prev := Find_Type_Name (N); @@ -3149,6 +3231,7 @@ package body Sem_Ch3 is -- Some common processing for all types Set_Depends_On_Private (T, Has_Private_Component (T)); + Check_Ops_From_Incomplete_Type; -- Both the declared entity, and its anonymous base type if one -- was created, need freeze nodes allocated. @@ -3787,7 +3870,8 @@ package body Sem_Ch3 is if Number_Dimensions (Parent_Type) = 1 and then not Is_Limited_Type (Parent_Type) and then not Is_Derived_Type (Parent_Type) - and then not Is_Package (Scope (Base_Type (Parent_Type))) + and then not Is_Package_Or_Generic_Package + (Scope (Base_Type (Parent_Type))) then if not Is_Constrained (Parent_Type) and then Is_Constrained (Derived_Type) @@ -4438,6 +4522,7 @@ package body Sem_Ch3 is Full_Decl := New_Copy_Tree (N); Full_Der := New_Copy (Derived_Type); Set_Comes_From_Source (Full_Decl, False); + Set_Comes_From_Source (Full_Der, False); Insert_After (N, Full_Decl); @@ -4493,8 +4578,18 @@ package body Sem_Ch3 is -- view, the completion does not derive them anew. if not Is_Tagged_Type (Parent_Type) then - Build_Derived_Record_Type - (Full_Decl, Parent_Type, Full_Der, False); + + -- If the parent is itself derived from another private type, + -- installing the private declarations has not affected its + -- privacy status, so use its own full view explicitly. + + if Is_Private_Type (Parent_Type) then + Build_Derived_Record_Type + (Full_Decl, Full_View (Parent_Type), Full_Der, False); + else + Build_Derived_Record_Type + (Full_Decl, Parent_Type, Full_Der, False); + end if; else -- If full view of parent is tagged, the completion @@ -5895,113 +5990,37 @@ package body Sem_Ch3 is Collect_Interfaces (Type_Definition (N), Derived_Type); end if; - -- Check that the full view and the partial view agree - -- in the set of implemented interfaces + -- Ada 2005 (AI-251): The progenitor types specified in a private + -- extension declaration and the progenitor types specified in the + -- corresponding declaration of a record extension given in the + -- private part need not be the same; the only requirement is that + -- the private extension must be descended from each interface + -- from which the record extension is descended (AARM 7.3, 20.1/2) - if Has_Private_Declaration (Derived_Type) - and then Present (Abstract_Interfaces (Derived_Type)) - and then not Is_Empty_Elmt_List - (Abstract_Interfaces (Derived_Type)) - then + if Has_Private_Declaration (Derived_Type) then declare N_Partial : constant Node_Id := Parent (Tagged_Partial_View); - N_Full : constant Node_Id := Parent (Derived_Type); - - Iface_Partial : Entity_Id; - Iface_Full : Entity_Id; - Num_Ifaces_Partial : Natural := 0; - Num_Ifaces_Full : Natural := 0; - Same_Interfaces : Boolean := True; + Iface_Partial : Entity_Id; begin - if Nkind (N_Partial) /= N_Private_Extension_Declaration then - Error_Msg_N - ("(Ada 2005) interfaces only allowed in private" - & " extension declarations", N_Partial); - end if; - - -- Count the interfaces implemented by the partial view - if Nkind (N_Partial) = N_Private_Extension_Declaration and then not Is_Empty_List (Interface_List (N_Partial)) then Iface_Partial := First (Interface_List (N_Partial)); - while Present (Iface_Partial) loop - Num_Ifaces_Partial := Num_Ifaces_Partial + 1; - Next (Iface_Partial); - end loop; - end if; - - -- Take into account the case in which the partial - -- view is a directly derived from an interface - - if Is_Interface (Etype - (Defining_Identifier (N_Partial))) - then - Num_Ifaces_Partial := Num_Ifaces_Partial + 1; - end if; - - -- Count the interfaces implemented by the full view - - if not Is_Empty_List (Interface_List - (Type_Definition (N_Full))) - then - Iface_Full := First (Interface_List - (Type_Definition (N_Full))); - while Present (Iface_Full) loop - Num_Ifaces_Full := Num_Ifaces_Full + 1; - Next (Iface_Full); - end loop; - end if; - - -- Take into account the case in which the full - -- view is a directly derived from an interface - - if Is_Interface (Etype - (Defining_Identifier (N_Full))) - then - Num_Ifaces_Full := Num_Ifaces_Full + 1; - end if; - - if Num_Ifaces_Full > 0 - and then Num_Ifaces_Full = Num_Ifaces_Partial - then - -- Check that the full-view and the private-view have - -- the same list of interfaces. - - Iface_Full := First (Interface_List - (Type_Definition (N_Full))); - while Present (Iface_Full) loop - Iface_Partial := First (Interface_List (N_Partial)); - while Present (Iface_Partial) - and then Etype (Iface_Partial) /= Etype (Iface_Full) - loop - Next (Iface_Partial); - end loop; - -- If not found we check if the partial view is a - -- direct derivation of the interface. - - if not Present (Iface_Partial) - and then - Etype (Tagged_Partial_View) /= Etype (Iface_Full) + while Present (Iface_Partial) loop + if not Interface_Present_In_Ancestor + (Derived_Type, Etype (Iface_Partial)) then - Same_Interfaces := False; + Error_Msg_N + ("(Ada 2005) full type and private extension must" + & " have the same progenitors", Derived_Type); exit; end if; - Next (Iface_Full); + Next (Iface_Partial); end loop; end if; - - if Num_Ifaces_Partial /= Num_Ifaces_Full - or else not Same_Interfaces - then - Error_Msg_N - ("(Ada 2005) full declaration and private declaration" - & " must have the same list of interfaces", - Derived_Type); - end if; end; end if; end if; @@ -6132,7 +6151,14 @@ package body Sem_Ch3 is E : Entity_Id; begin - E := Derived_Type; + -- Handle private types + + if Present (Full_View (Derived_Type)) then + E := Full_View (Derived_Type); + else + E := Derived_Type; + end if; + loop if Is_Interface (E) or else (Present (Abstract_Interfaces (E)) @@ -6145,11 +6171,22 @@ package body Sem_Ch3 is exit when Etype (E) = E + -- Handle private types + + or else (Present (Full_View (Etype (E))) + and then Full_View (Etype (E)) = E) + -- Protect the frontend against wrong source or else Etype (E) = Derived_Type; - E := Etype (E); + -- Climb to the ancestor type handling private types + + if Present (Full_View (Etype (E))) then + E := Full_View (Etype (E)); + else + E := Etype (E); + end if; end loop; end; end if; @@ -6168,7 +6205,7 @@ package body Sem_Ch3 is if Present (Tagged_Partial_View) then Derive_Subprograms - (Parent_Type, Derived_Type, Predefined_Prims_Only => True); + (Parent_Type, Derived_Type); Complete_Subprograms_Derivation (Partial_View => Tagged_Partial_View, @@ -6452,10 +6489,11 @@ package body Sem_Ch3 is then CR_Disc := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim)); - Set_Ekind (CR_Disc, E_In_Parameter); - Set_Mechanism (CR_Disc, Default_Mechanism); - Set_Etype (CR_Disc, Etype (Discrim)); - Set_CR_Discriminant (Discrim, CR_Disc); + Set_Ekind (CR_Disc, E_In_Parameter); + Set_Mechanism (CR_Disc, Default_Mechanism); + Set_Etype (CR_Disc, Etype (Discrim)); + Set_Discriminal_Link (CR_Disc, Discrim); + Set_CR_Discriminant (Discrim, CR_Disc); end if; end Build_Discriminal; @@ -7179,7 +7217,7 @@ package body Sem_Ch3 is if Is_Aliased (C) and then Has_Discriminants (Etype (C)) and then not Is_Constrained (Etype (C)) - and then not In_Instance + and then not In_Instance_Body and then Ada_Version < Ada_05 then Error_Msg_N @@ -7194,7 +7232,8 @@ package body Sem_Ch3 is if Has_Aliased_Components (T) and then Has_Discriminants (Component_Type (T)) and then not Is_Constrained (Component_Type (T)) - and then not In_Instance + and then not In_Instance_Body + and then Ada_Version < Ada_05 then Error_Msg_N ("aliased component type must be constrained ('R'M 3.6(11))", @@ -7363,7 +7402,7 @@ package body Sem_Ch3 is Post_Error; end if; - elsif Is_Package (E) then + elsif Is_Package_Or_Generic_Package (E) then if Unit_Requires_Body (E) then if not Has_Completion (E) and then Nkind (Parent (Unit_Declaration_Node (E))) /= @@ -7643,6 +7682,29 @@ package body Sem_Ch3 is Next (Intf); end loop; + + -- A type extension may be written as a derivation from an interface. + -- The completion will have to implement the same, or derive from a + -- type that implements it as well. + + elsif Nkind (N) = N_Private_Extension_Declaration + and then Is_Interface (Etype (Derived_Type)) + then + Add_Interface (Etype (Derived_Type)); + end if; + + -- Same for task and protected types, that can derive directly from + -- an interface (and implement additional interfaces that will be + -- present in the interface list of the declaration). + + if Nkind (N) = N_Task_Type_Declaration + or else Nkind (N) = N_Protected_Type_Declaration + or else Nkind (N) = N_Single_Protected_Declaration + or else Nkind (N) = N_Single_Task_Declaration + then + if Is_Interface (Etype (Derived_Type)) then + Add_Interface (Etype (Derived_Type)); + end if; end if; end Collect_Interfaces; @@ -7873,6 +7935,25 @@ package body Sem_Ch3 is E : Entity_Id; begin + -- Handle the case in which the full-view is a transitive + -- derivation of the ancestor of the partial view. + + -- type I is interface; + -- type T is new I with ... + + -- package H is + -- type DT is new I with private; + -- private + -- type DT is new T with ... + -- end; + + if Etype (Partial_View) /= Etype (Derived_Type) + and then Is_Interface (Etype (Partial_View)) + and then Is_Ancestor (Etype (Partial_View), Etype (Derived_Type)) + then + return; + end if; + if Is_Tagged_Type (Partial_View) then Elmt_P := First_Elmt (Primitive_Operations (Partial_View)); else @@ -8795,7 +8876,7 @@ package body Sem_Ch3 is -- For concurrent types, the associated record value type carries the same -- discriminants, so when we constrain a concurrent type, we must constrain - -- the value type as well. + -- the corresponding record type as well. procedure Constrain_Concurrent (Def_Id : in out Entity_Id; @@ -9970,10 +10051,12 @@ package body Sem_Ch3 is then AI := First_Elmt (Abstract_Interfaces (T)); while Present (AI) loop - Derive_Subprograms - (Parent_Type => Node (AI), - Derived_Type => Derived_Type, - No_Predefined_Prims => True); + if not Is_Ancestor (Node (AI), Derived_Type) then + Derive_Subprograms + (Parent_Type => Node (AI), + Derived_Type => Derived_Type, + No_Predefined_Prims => True); + end if; Next_Elmt (AI); end loop; @@ -10391,8 +10474,7 @@ package body Sem_Ch3 is (Parent_Type : Entity_Id; Derived_Type : Entity_Id; Generic_Actual : Entity_Id := Empty; - No_Predefined_Prims : Boolean := False; - Predefined_Prims_Only : Boolean := False) + No_Predefined_Prims : Boolean := False) is Op_List : constant Elist_Id := Collect_Primitive_Operations (Parent_Type); @@ -10436,7 +10518,13 @@ package body Sem_Ch3 is if No_Predefined_Prims and then Is_Predef then null; - elsif Predefined_Prims_Only and then not Is_Predef then + -- We don't need to derive alias entities associated with + -- abstract interfaces + + elsif Is_Dispatching_Operation (Subp) + and then Present (Alias (Subp)) + and then Present (Abstract_Interface_Alias (Subp)) + then null; elsif No (Generic_Actual) then @@ -13098,15 +13186,15 @@ package body Sem_Ch3 is Full_Parent : Entity_Id; Full_Indic : Node_Id; - function Find_Interface_In_Descendant + function Find_Ancestor_Interface (Typ : Entity_Id) return Entity_Id; -- Find an implemented interface in the derivation chain of Typ - ---------------------------------- - -- Find_Interface_In_Descendant -- - ---------------------------------- + ----------------------------- + -- Find_Ancestor_Interface -- + ----------------------------- - function Find_Interface_In_Descendant + function Find_Ancestor_Interface (Typ : Entity_Id) return Entity_Id is T : Entity_Id; @@ -13127,7 +13215,7 @@ package body Sem_Ch3 is end loop; return Empty; - end Find_Interface_In_Descendant; + end Find_Ancestor_Interface; -- Start of processing for Process_Full_View @@ -13180,37 +13268,36 @@ package body Sem_Ch3 is Iface_Def : Node_Id; begin - Iface := Find_Interface_In_Descendant (Full_T); + Iface := Find_Ancestor_Interface (Full_T); if Present (Iface) then Iface_Def := Type_Definition (Parent (Iface)); - end if; - -- The full view derives from an interface descendant, but the - -- partial view does not share the same tagged type. + -- The full view derives from an interface descendant, but the + -- partial view does not share the same tagged type. - if Present (Iface) - and then Is_Tagged_Type (Priv_T) - and then Etype (Full_T) /= Etype (Priv_T) - then - Error_Msg_N ("(Ada 2005) tagged partial view cannot be " & - "completed by a type that implements an " & - "interface", Priv_T); - end if; + if Is_Tagged_Type (Priv_T) + and then Etype (Priv_T) /= Etype (Full_T) + and then Etype (Priv_T) /= Iface + then + Error_Msg_N ("(Ada 2005) tagged partial view cannot be " & + "completed by a type that implements an " & + "interface", Priv_T); + end if; - -- The full view derives from a limited, protected, - -- synchronized or task interface descendant, but the - -- partial view is not labeled as limited. + -- The full view derives from a limited, protected, + -- synchronized or task interface descendant, but the + -- partial view is not labeled as limited. - if Present (Iface) - and then (Limited_Present (Iface_Def) - or Protected_Present (Iface_Def) - or Synchronized_Present (Iface_Def) - or Task_Present (Iface_Def)) - and then not Limited_Present (Parent (Priv_T)) - then - Error_Msg_N ("(Ada 2005) non-limited private type cannot be " & - "completed by a limited type", Priv_T); + if (Limited_Present (Iface_Def) + or else Protected_Present (Iface_Def) + or else Synchronized_Present (Iface_Def) + or else Task_Present (Iface_Def)) + and then not Limited_Present (Parent (Priv_T)) + then + Error_Msg_N ("(Ada 2005) non-limited private type cannot be " + & "completed by a limited type", Priv_T); + end if; end if; end; end if; @@ -13242,24 +13329,9 @@ package body Sem_Ch3 is return; elsif not Is_Ancestor (Base_Type (Priv_Parent), Full_Parent) then - - -- Ada 2005 (AI-251): No error needed if the immediate - -- ancestor of the partial view is an interface - -- - -- Example: - -- - -- type PT1 is new I1 with private; - -- private - -- type PT1 is new T and I1 with null record; - - if Is_Interface (Base_Type (Priv_Parent)) then - null; - - else - Error_Msg_N - ("parent of full type must descend from parent" - & " of private extension", Full_Indic); - end if; + Error_Msg_N + ("parent of full type must descend from parent" + & " of private extension", Full_Indic); -- Check the rules of 7.3(10): if the private extension inherits -- known discriminants, then the full type must also inherit those @@ -14409,17 +14481,7 @@ package body Sem_Ch3 is else Is_Tagged := True; - Set_Is_Tagged_Type (T); - - Set_Is_Limited_Record (T, Limited_Present (Def) - or else Task_Present (Def) - or else Protected_Present (Def)); - - -- Type is abstract if full declaration carries keyword, or if - -- previous partial view did. - - Set_Is_Abstract (T); - Set_Is_Interface (T); + Analyze_Interface_Declaration (T, Def); end if; -- First pass: if there are self-referential access components, @@ -14428,10 +14490,6 @@ package body Sem_Ch3 is Check_Anonymous_Access_Types (Component_List (Def)); - -- Ada 2005 (AI-251): Complete the initialization of attributes - -- associated with abstract interfaces and decorate the names in the - -- list of ancestor interfaces (if any). - if Ada_Version >= Ada_05 and then Present (Interface_List (Def)) then @@ -14439,6 +14497,7 @@ package body Sem_Ch3 is Iface : Node_Id; Iface_Def : Node_Id; Iface_Typ : Entity_Id; + begin Iface := First (Interface_List (Def)); while Present (Iface) loop @@ -14521,9 +14580,8 @@ package body Sem_Ch3 is Next (Iface); end loop; - Set_Abstract_Interfaces (T, New_Elmt_List); - Collect_Interfaces (Type_Definition (N), T); + Collect_Interfaces (Def, T); end; end if; diff --git a/gcc/ada/sem_ch3.ads b/gcc/ada/sem_ch3.ads index 608666d18e6..95354d60b27 100644 --- a/gcc/ada/sem_ch3.ads +++ b/gcc/ada/sem_ch3.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -62,6 +62,9 @@ package Sem_Ch3 is -- Called to analyze a list of declarations (in what context ???). Also -- performs necessary freezing actions (more description needed ???) + procedure Analyze_Interface_Declaration (T : Entity_Id; Def : Node_Id); + -- Analyze an interface declaration or a formal interface declaration + procedure Analyze_Per_Use_Expression (N : Node_Id; T : Entity_Id); -- Default and per object expressions do not freeze their components, -- and must be analyzed and resolved accordingly. The analysis is @@ -97,6 +100,15 @@ package Sem_Ch3 is -- rather than on the declarations that require completion in the package -- declaration. + procedure Collect_Interfaces + (N : Node_Id; + Derived_Type : Entity_Id); + -- Ada 2005 (AI-251): Subsidiary procedure to Build_Derived_Record_Type + -- and Analyze_Formal_Interface_Type. + -- Collect the list of interfaces that are not already implemented by the + -- ancestors. This is the list of interfaces for which we must provide + -- additional tag components. + procedure Derive_Subprogram (New_Subp : in out Entity_Id; Parent_Subp : Entity_Id; @@ -114,8 +126,7 @@ package Sem_Ch3 is (Parent_Type : Entity_Id; Derived_Type : Entity_Id; Generic_Actual : Entity_Id := Empty; - No_Predefined_Prims : Boolean := False; - Predefined_Prims_Only : Boolean := False); + No_Predefined_Prims : Boolean := False); -- To complete type derivation, collect/retrieve the primitive operations -- of the parent type, and replace the subsidiary subtypes with the derived -- type, to build the specs of the inherited ops. For generic actuals, the @@ -124,9 +135,7 @@ package Sem_Ch3 is -- the derived subprograms are aliased to those of the actual, not those of -- the ancestor. The last two params are used in case of derivation from -- abstract interface types: No_Predefined_Prims is used to avoid the - -- derivation of predefined primitives from the interface, and Predefined - -- Prims_Only is used to complete the derivation predefined primitives - -- in case of private tagged types implementing interfaces. + -- derivation of predefined primitives from an abstract interface. -- -- Note: one might expect this to be private to the package body, but -- there is one rather unusual usage in package Exp_Dist. diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 1f8eb2155c3..e1aa6b863b2 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1156,9 +1156,7 @@ package body Sem_Ch4 is and then Nkind (N) = N_Op_Ne then Op_Id := Get_Name_Entity_Id (Name_Op_Eq); - while Present (Op_Id) loop - if Ekind (Op_Id) = E_Operator then Find_Equality_Types (L, R, Op_Id, N); else @@ -1216,7 +1214,6 @@ package body Sem_Ch4 is else Get_First_Interp (N, I, It); - while Present (It.Nam) loop if Ekind (Base_Type (It.Typ)) /= E_Subprogram_Type or else Etype (Base_Type (It.Typ)) = Standard_Void_Type @@ -1274,7 +1271,6 @@ package body Sem_Ch4 is else Get_First_Interp (P, I, It); - while Present (It.Nam) loop T := It.Typ; @@ -1522,7 +1518,6 @@ package body Sem_Ch4 is end if; Index := First_Index (Array_Type); - while Present (Index) and then Present (Exp) loop if not Has_Compatible_Type (Exp, Etype (Index)) then Wrong_Type (Exp, Etype (Index)); @@ -1771,7 +1766,6 @@ package body Sem_Ch4 is else Op_Id := Get_Name_Entity_Id (Chars (N)); - while Present (Op_Id) loop if Ekind (Op_Id) = E_Operator then Find_Boolean_Types (L, R, Op_Id, N); @@ -1854,7 +1848,6 @@ package body Sem_Ch4 is else Get_First_Interp (L, Index, It); - while Present (It.Typ) loop Try_One_Interp (It.Typ); Get_Next_Interp (Index, It); @@ -2168,9 +2161,7 @@ package body Sem_Ch4 is and then Nkind (Left_Opnd (Actual)) = N_Identifier then Formal := First_Formal (Nam); - while Present (Formal) loop - if Chars (Left_Opnd (Actual)) = Chars (Formal) then Error_Msg_N ("possible misspelling of `='>`!", Actual); @@ -3037,7 +3028,6 @@ package body Sem_Ch4 is else Get_First_Interp (L, Ind, It); - while Present (It.Typ) loop if Root_Type (It.Typ) = Standard_Boolean and then Has_Compatible_Type (R, It.Typ) @@ -3788,7 +3778,6 @@ package body Sem_Ch4 is else Get_First_Interp (L, Index1, It1); - while Present (It1.Typ) loop Check_Right_Argument (It1.Typ); Get_Next_Interp (Index1, It1); @@ -4281,7 +4270,7 @@ package body Sem_Ch4 is return False; end if; - -- Now test the entity we got to see if it a bad case + -- Now test the entity we got to see if it is a bad case case Ekind (Entity (Enode)) is @@ -4346,7 +4335,7 @@ package body Sem_Ch4 is end if; -- If either operand has no type, then don't complain further, - -- since this simply means that we have a propragated error. + -- since this simply means that we have a propagated error. if R = Error or else Etype (R) = Any_Type @@ -4669,7 +4658,6 @@ package body Sem_Ch4 is -- select the predefined operator and discard others. Get_First_Interp (N, I, It); - while Present (It.Nam) loop if Scope (It.Nam) = Standard_Standard then Set_Etype (N, Univ_Type); @@ -4758,12 +4746,10 @@ package body Sem_Ch4 is begin Normalize_Actuals (N, Designated_Type (Typ), False, Call_OK); + Actual := First_Actual (N); Formal := First_Formal (Designated_Type (Typ)); - - while Present (Actual) - and then Present (Formal) - loop + while Present (Actual) and then Present (Formal) loop if not Has_Compatible_Type (Actual, Etype (Formal)) then return False; end if; @@ -4806,9 +4792,8 @@ package body Sem_Ch4 is begin Actual := First (Actuals); Index := First_Index (Typ); - while Present (Actual) - and then Present (Index) - loop + while Present (Actual) and then Present (Index) loop + -- If the parameter list has a named association, the expression -- is definitely a call and not an indexed component. diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 2c5e0642bf0..896a8fb7a9e 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -71,15 +71,6 @@ package body Sem_Ch5 is procedure Analyze_Iteration_Scheme (N : Node_Id); - procedure Check_Possible_Current_Value_Condition (Cnode : Node_Id); - -- Cnode is N_If_Statement, N_Elsif_Part, or N_Iteration_Scheme - -- (the latter when a WHILE condition is present). This call checks - -- if Condition (Cnode) is of the form ([NOT] var op val), where var - -- is a simple object, val is known at compile time, and op is one - -- of the six relational operators. If this is the case, and the - -- Current_Value field of "var" is not set, then it is set to Cnode. - -- See Exp_Util.Set_Current_Value_Condition for further details. - ------------------------ -- Analyze_Assignment -- ------------------------ @@ -1526,13 +1517,15 @@ package body Sem_Ch5 is -- of reversing the bounds incorrectly in the range. elsif Reverse_Present (LP) - and then Nkind (H) = N_Integer_Literal + and then Nkind (Original_Node (H)) = + N_Integer_Literal and then (Intval (H) = Uint_0 or else Intval (H) = Uint_1) and then Lhi > Hhi then Error_Msg_N ("?loop range may be null", DS); + Error_Msg_N ("\?bounds may be wrong way round", DS); end if; end; end if; diff --git a/gcc/ada/sem_ch5.ads b/gcc/ada/sem_ch5.ads index 1c945335e5e..0ea538eb118 100644 --- a/gcc/ada/sem_ch5.ads +++ b/gcc/ada/sem_ch5.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2002 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -47,6 +47,15 @@ package Sem_Ch5 is -- care of setting Reachable, since labels defined by the expander can -- be assumed to be reachable. + procedure Check_Possible_Current_Value_Condition (Cnode : Node_Id); + -- Cnode is N_If_Statement, N_Elsif_Part, or N_Iteration_Scheme + -- (the latter when a WHILE condition is present). This call checks + -- if Condition (Cnode) is of the form ([NOT] var op val), where var + -- is a simple object, val is known at compile time, and op is one + -- of the six relational operators. If this is the case, and the + -- Current_Value field of "var" is not set, then it is set to Cnode. + -- See Exp_Util.Set_Current_Value_Condition for further details. + procedure Check_Unreachable_Code (N : Node_Id); -- This procedure is called with N being the node for a statement that -- is an unconditional transfer of control. It checks to see if the diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 47056d5e46b..dae06218468 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ with Elists; use Elists; with Errout; use Errout; with Expander; use Expander; with Exp_Ch7; use Exp_Ch7; +with Exp_Tss; use Exp_Tss; with Fname; use Fname; with Freeze; use Freeze; with Itypes; use Itypes; @@ -236,7 +237,7 @@ package body Sem_Ch6 is Analyze (P); -- A call of the form A.B (X) may be an Ada05 call, which is rewritten - -- as B(A, X). If the rewriting is successful, the call has been + -- as B (A, X). If the rewriting is successful, the call has been -- analyzed and we just return. if Nkind (P) = N_Selected_Component @@ -890,9 +891,16 @@ package body Sem_Ch6 is Missing_Ret : Boolean; P_Ent : Entity_Id; - procedure Check_Following_Pragma; - -- If front-end inlining is enabled, look ahead to recognize a pragma - -- that may appear after the body. + procedure Check_Inline_Pragma (Spec : in out Node_Id); + -- Look ahead to recognize a pragma that may appear after the body. + -- If there is a previous spec, check that it appears in the same + -- declarative part. If the pragma is Inline_Always, perform inlining + -- unconditionally, otherwise only if Front_End_Inlining is requested. + -- If the body acts as a spec, and inlining is required, we create a + -- subprogram declaration for it, in order to attach the body to inline. + + procedure Copy_Parameter_List (Plist : List_Id); + -- Comment required ??? procedure Verify_Overriding_Indicator; -- If there was a previous spec, the entity has been entered in the @@ -900,33 +908,115 @@ package body Sem_Ch6 is -- indicator, check that it is consistent with the known status of the -- entity. - ---------------------------- - -- Check_Following_Pragma -- - ---------------------------- + ------------------------- + -- Check_Inline_Pragma -- + ------------------------- - procedure Check_Following_Pragma is - Prag : Node_Id; + procedure Check_Inline_Pragma (Spec : in out Node_Id) is + Prag : Node_Id; + Plist : List_Id; begin - if Front_End_Inlining - and then Is_List_Member (N) - and then Present (Spec_Decl) - and then List_Containing (N) = List_Containing (Spec_Decl) + if not Expander_Active then + return; + end if; + + if Is_List_Member (N) + and then Present (Next (N)) + and then Nkind (Next (N)) = N_Pragma then Prag := Next (N); - if Present (Prag) - and then Nkind (Prag) = N_Pragma - and then Get_Pragma_Id (Chars (Prag)) = Pragma_Inline + if Nkind (Prag) = N_Pragma + and then + (Get_Pragma_Id (Chars (Prag)) = Pragma_Inline_Always + or else + (Front_End_Inlining + and then Get_Pragma_Id (Chars (Prag)) = Pragma_Inline)) and then - Chars - (Expression (First (Pragma_Argument_Associations (Prag)))) - = Chars (Body_Id) + Chars + (Expression (First (Pragma_Argument_Associations (Prag)))) + = Chars (Body_Id) then - Analyze (Prag); + Prag := Next (N); + else + Prag := Empty; end if; + else + Prag := Empty; end if; - end Check_Following_Pragma; + + if Present (Prag) then + if Present (Spec_Id) then + if List_Containing (N) = + List_Containing (Unit_Declaration_Node (Spec_Id)) + then + Analyze (Prag); + end if; + + else + -- Create a subprogram declaration, to make treatment uniform. + + declare + Subp : constant Entity_Id := + Make_Defining_Identifier (Loc, Chars (Body_Id)); + Decl : constant Node_Id := + Make_Subprogram_Declaration (Loc, + Specification => New_Copy_Tree (Specification (N))); + begin + Set_Defining_Unit_Name (Specification (Decl), Subp); + + if Present (First_Formal (Body_Id)) then + Plist := New_List; + Copy_Parameter_List (Plist); + Set_Parameter_Specifications + (Specification (Decl), Plist); + end if; + + Insert_Before (N, Decl); + Analyze (Decl); + Analyze (Prag); + Set_Has_Pragma_Inline (Subp); + + if Get_Pragma_Id (Chars (Prag)) = Pragma_Inline_Always then + Set_Is_Inlined (Subp); + Set_Next_Rep_Item (Prag, First_Rep_Item (Subp)); + Set_First_Rep_Item (Subp, Prag); + end if; + + Spec := Subp; + end; + end if; + end if; + end Check_Inline_Pragma; + + ------------------------- + -- Copy_Parameter_List -- + ------------------------- + + procedure Copy_Parameter_List (Plist : List_Id) is + Formal : Entity_Id; + + begin + Formal := First_Formal (Body_Id); + + while Present (Formal) loop + Append + (Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Sloc (Formal), + Chars => Chars (Formal)), + In_Present => In_Present (Parent (Formal)), + Out_Present => Out_Present (Parent (Formal)), + Parameter_Type => + New_Reference_To (Etype (Formal), Loc), + Expression => + New_Copy_Tree (Expression (Parent (Formal)))), + Plist); + + Next_Formal (Formal); + end loop; + end Copy_Parameter_List; --------------------------------- -- Verify_Overriding_Indicator -- @@ -1071,6 +1161,8 @@ package body Sem_Ch6 is end loop; end if; + Check_Inline_Pragma (Spec_Id); + -- Case of fully private operation in the body of the protected type. -- We must create a declaration for the subprogram, in order to attach -- the protected subprogram that will be used in internal calls. @@ -1101,22 +1193,7 @@ package body Sem_Ch6 is Plist := No_List; end if; - while Present (Formal) loop - Append - (Make_Parameter_Specification (Loc, - Defining_Identifier => - Make_Defining_Identifier (Sloc (Formal), - Chars => Chars (Formal)), - In_Present => In_Present (Parent (Formal)), - Out_Present => Out_Present (Parent (Formal)), - Parameter_Type => - New_Reference_To (Etype (Formal), Loc), - Expression => - New_Copy_Tree (Expression (Parent (Formal)))), - Plist); - - Next_Formal (Formal); - end loop; + Copy_Parameter_List (Plist); if Nkind (Body_Spec) = N_Procedure_Specification then New_Spec := @@ -1337,14 +1414,11 @@ package body Sem_Ch6 is elsif Present (Spec_Id) and then Expander_Active + and then + (Is_Always_Inlined (Spec_Id) + or else (Has_Pragma_Inline (Spec_Id) and Front_End_Inlining)) then - Check_Following_Pragma; - - if Is_Always_Inlined (Spec_Id) - or else (Has_Pragma_Inline (Spec_Id) and then Front_End_Inlining) - then - Build_Body_To_Inline (N, Spec_Id); - end if; + Build_Body_To_Inline (N, Spec_Id); end if; -- Ada 2005 (AI-262): In library subprogram bodies, after the analysis @@ -2451,9 +2525,29 @@ package body Sem_Ch6 is or else Is_Access_Constant (Etype (Old_Formal)) /= Is_Access_Constant (Etype (New_Formal))) then - Conformance_Error - ("type of & does not match!", New_Formal); - return; + -- It is allowed to omit the null-exclusion in case of + -- stream attribute subprograms + + declare + TSS_Name : TSS_Name_Type; + + begin + Get_Name_String (Chars (New_Id)); + TSS_Name := + TSS_Name_Type + (Name_Buffer + (Name_Len - TSS_Name'Length + 1 .. Name_Len)); + + if TSS_Name /= TSS_Stream_Read + and then TSS_Name /= TSS_Stream_Write + and then TSS_Name /= TSS_Stream_Input + and then TSS_Name /= TSS_Stream_Output + then + Conformance_Error + ("type of & does not match!", New_Formal); + return; + end if; + end; end if; -- Check default expressions for in parameters @@ -4696,7 +4790,7 @@ package body Sem_Ch6 is Decl : constant Node_Id := Unit_Declaration_Node (E); begin - if Is_Package (Current_Scope) + if Is_Package_Or_Generic_Package (Current_Scope) and then In_Private_Part (Current_Scope) then Priv_Decls := @@ -5014,7 +5108,7 @@ package body Sem_Ch6 is -- the fact that the full view of a private extension -- re-inherits. It has to be dealt with. - if Is_Package (Current_Scope) + if Is_Package_Or_Generic_Package (Current_Scope) and then In_Private_Part (Current_Scope) then Check_Operation_From_Private_View (S, E); @@ -5423,9 +5517,12 @@ package body Sem_Ch6 is and then Is_Access_Type (Formal_Type) and then Null_Exclusion_Present (Param_Spec) then - if Can_Never_Be_Null (Formal_Type) then + if Can_Never_Be_Null (Formal_Type) + and then Comes_From_Source (Related_Nod) + then Error_Msg_N - ("(Ada 2005) already a null-excluding type", Related_Nod); + ("null exclusion must apply to a type that does not " + & "exclude null ('R'M 3.10 (14)", Related_Nod); end if; Formal_Type := diff --git a/gcc/ada/sem_ch6.ads b/gcc/ada/sem_ch6.ads index 79d785e10c5..da8e8790ce4 100644 --- a/gcc/ada/sem_ch6.ads +++ b/gcc/ada/sem_ch6.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index 178cfd3dd60..e538970b5a4 100644 --- a/gcc/ada/sem_ch7.adb +++ b/gcc/ada/sem_ch7.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -195,7 +195,7 @@ package body Sem_Ch7 is Spec_Id := Current_Entity_In_Scope (Defining_Entity (N)); if Present (Spec_Id) - and then Is_Package (Spec_Id) + and then Is_Package_Or_Generic_Package (Spec_Id) then Pack_Decl := Unit_Declaration_Node (Spec_Id); @@ -213,7 +213,7 @@ package body Sem_Ch7 is return; end if; - if Is_Package (Spec_Id) + if Is_Package_Or_Generic_Package (Spec_Id) and then (Scope (Spec_Id) = Standard_Standard or else Is_Child_Unit (Spec_Id)) @@ -713,6 +713,14 @@ package body Sem_Ch7 is -- the error message "Unchecked_Union may not complete discriminated -- partial view". + procedure Install_Parent_Private_Declarations (Inst_Id : Entity_Id); + -- Given the package entity of a generic package instantiation or + -- formal package whose corresponding generic is a child unit, installs + -- the private declarations of each of the child unit's parents. + -- This has to be done at the point of entering the instance package's + -- private part rather than being done in Sem_Ch12.Install_Parent + -- (which is where the parents' visible declarations are installed). + --------------------- -- Clear_Constants -- --------------------- @@ -881,6 +889,70 @@ package body Sem_Ch7 is end loop; end Inspect_Unchecked_Union_Completion; + ----------------------------------------- + -- Install_Parent_Private_Declarations -- + ----------------------------------------- + + procedure Install_Parent_Private_Declarations (Inst_Id : Entity_Id) is + Inst_Par : Entity_Id := Inst_Id; + Gen_Par : Entity_Id; + Inst_Node : Node_Id; + + begin + Gen_Par := + Generic_Parent (Specification (Unit_Declaration_Node (Inst_Par))); + while Present (Gen_Par) and then Is_Child_Unit (Gen_Par) loop + Inst_Node := Get_Package_Instantiation_Node (Inst_Par); + + if (Nkind (Inst_Node) = N_Package_Instantiation + or else Nkind (Inst_Node) = N_Formal_Package_Declaration) + and then Nkind (Name (Inst_Node)) = N_Expanded_Name + then + Inst_Par := Entity (Prefix (Name (Inst_Node))); + + if Present (Renamed_Entity (Inst_Par)) then + Inst_Par := Renamed_Entity (Inst_Par); + end if; + + Gen_Par := + Generic_Parent + (Specification (Unit_Declaration_Node (Inst_Par))); + + -- Install the private declarations and private use clauses + -- of a parent instance of the child instance. + + if Present (Gen_Par) then + Install_Private_Declarations (Inst_Par); + Set_Use (Private_Declarations + (Specification + (Unit_Declaration_Node (Inst_Par)))); + + -- If we've reached the end of the generic instance parents, + -- then finish off by looping through the nongeneric parents + -- and installing their private declarations. + + else + while Present (Inst_Par) + and then Inst_Par /= Standard_Standard + and then (not In_Open_Scopes (Inst_Par) + or else not In_Private_Part (Inst_Par)) + loop + Install_Private_Declarations (Inst_Par); + Set_Use (Private_Declarations + (Specification + (Unit_Declaration_Node (Inst_Par)))); + Inst_Par := Scope (Inst_Par); + end loop; + + exit; + end if; + + else + exit; + end if; + end loop; + end Install_Parent_Private_Declarations; + -- Start of processing for Analyze_Package_Specification begin @@ -974,6 +1046,20 @@ package body Sem_Ch7 is Install_Private_With_Clauses (Id); end if; + -- If this is a package associated with a generic instance or formal + -- package, then the private declarations of each of the generic's + -- parents must be installed at this point. + + if Is_Generic_Instance (Id) + or else + (Nkind (Unit_Declaration_Node (Id)) = N_Generic_Package_Declaration + and then + Nkind (Original_Node (Unit_Declaration_Node (Id))) + = N_Formal_Package_Declaration) + then + Install_Parent_Private_Declarations (Id); + end if; + -- Analyze private part if present. The flag In_Private_Part is -- reset in End_Package_Scope. @@ -1472,9 +1558,10 @@ package body Sem_Ch7 is Last_Entity : Entity_Id; begin - pragma Assert (Is_Package (P) or else Is_Record_Type (P)); + pragma Assert + (Is_Package_Or_Generic_Package (P) or else Is_Record_Type (P)); - if Is_Package (P) then + if Is_Package_Or_Generic_Package (P) then Last_Entity := First_Private_Entity (P); else Last_Entity := Empty; @@ -1702,8 +1789,10 @@ package body Sem_Ch7 is Set_Access_Disp_Table (Priv, Access_Disp_Table (Corresponding_Record_Type (Base_Type (Full)))); + + -- Generic context, or previous errors + else - pragma Assert (Serious_Errors_Detected > 0); null; end if; diff --git a/gcc/ada/sem_ch7.ads b/gcc/ada/sem_ch7.ads index 7cb526494c2..44cca2769b4 100644 --- a/gcc/ada/sem_ch7.ads +++ b/gcc/ada/sem_ch7.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -25,7 +25,8 @@ ------------------------------------------------------------------------------ with Types; use Types; -package Sem_Ch7 is + +package Sem_Ch7 is procedure Analyze_Package_Body (N : Node_Id); procedure Analyze_Package_Declaration (N : Node_Id); @@ -33,7 +34,7 @@ package Sem_Ch7 is procedure Analyze_Private_Type_Declaration (N : Node_Id); procedure End_Package_Scope (P : Entity_Id); - -- Calls Uninstall_Declarations, and then pops the scope stack. + -- Calls Uninstall_Declarations, and then pops the scope stack procedure Exchange_Declarations (Id : Entity_Id); -- Exchange private and full declaration on entry/exit from a package @@ -74,4 +75,5 @@ package Sem_Ch7 is -- visible entities at the end of their homonym chains. For compilation -- units, make all entities invisible. In both cases, exchange private -- and visible declarations to restore order of elaboration. + end Sem_Ch7; diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index bba2ece8cc0..a0b0f38e603 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -424,8 +424,13 @@ package body Sem_Ch8 is -- an instance of the parent. procedure Chain_Use_Clause (N : Node_Id); - -- Chain use clause onto list of uses clauses headed by First_Use_Clause - -- in the top scope table entry. + -- Chain use clause onto list of uses clauses headed by First_Use_Clause in + -- the proper scope table entry. This is usually the current scope, but it + -- will be an inner scope when installing the use clauses of the private + -- declarations of a parent unit prior to compiling the private part of a + -- child unit. This chain is traversed when installing/removing use clauses + -- when compiling a subunit or instantiating a generic body on the fly, + -- when it is necessary to save and restore full environments. function Has_Implicit_Character_Literal (N : Node_Id) return Boolean; -- Find a type derived from Character or Wide_Character in the prefix of N. @@ -473,6 +478,11 @@ package body Sem_Ch8 is -- True if it is of a task type, a protected type, or else an access -- to one of these types. + procedure Note_Redundant_Use (Clause : Node_Id); + -- Mark the name in a use clause as redundant if the corresponding + -- entity is already use-visible. Emit a warning if the use clause + -- comes from source and the proper warnings are enabled. + procedure Premature_Usage (N : Node_Id); -- Diagnose usage of an entity before it is visible @@ -768,9 +778,13 @@ package body Sem_Ch8 is (Attribute_Name (Original_Node (Nam)))) -- Weird but legal, equivalent to renaming a function call + -- Illegal if the literal is the result of constant-folding + -- an attribute reference that is not a function. or else (Is_Entity_Name (Nam) - and then Ekind (Entity (Nam)) = E_Enumeration_Literal) + and then Ekind (Entity (Nam)) = E_Enumeration_Literal + and then + Nkind (Original_Node (Nam)) /= N_Attribute_Reference) or else (Nkind (Nam) = N_Type_Conversion and then Is_Tagged_Type (Entity (Subtype_Mark (Nam)))) @@ -833,7 +847,7 @@ package body Sem_Ch8 is Error_Msg_N ("expect package name in renaming", Name (N)); - -- Ada 2005 (AI-50217): Limited withed packages can not be renamed + -- Ada 2005 (AI-50217): Limited withed packages cannot be renamed elsif Ekind (Old_P) = E_Package and then From_With_Type (Old_P) @@ -1049,7 +1063,7 @@ package body Sem_Ch8 is Style.Check_Identifier (Defining_Entity (N), New_S); else - -- Only mode conformance required for a renaming_as_declaration. + -- Only mode conformance required for a renaming_as_declaration Check_Mode_Conformant (New_S, Old_S, N); end if; @@ -1190,7 +1204,13 @@ package body Sem_Ch8 is -- rewrite an actual given by a stream attribute as the name -- of the corresponding stream primitive of the type. - if Is_Actual and then Is_Abstract (Formal_Spec) then + -- In a generic context the stream operations are not generated, + -- and this must be treated as a normal attribute reference, to + -- be expanded in subsequent instantiations. + + if Is_Actual and then Is_Abstract (Formal_Spec) + and then Expander_Active + then declare Stream_Prim : Entity_Id; Prefix_Type : constant Entity_Id := Entity (Prefix (Nam)); @@ -1354,6 +1374,37 @@ package body Sem_Ch8 is -- for it at the freezing point. Set_Corresponding_Spec (N, Rename_Spec); + if Nkind (Unit_Declaration_Node (Rename_Spec)) = + N_Abstract_Subprogram_Declaration + then + -- Input and Output stream functions are abstract if the object + -- type is abstract. However, these functions may receive explicit + -- declarations in representation clauses, making the attribute + -- subprograms usable as defaults in subsequent type extensions. + -- In this case we rewrite the declaration to make the subprogram + -- non-abstract. We remove the previous declaration, and insert + -- the new one at the point of the renaming, to prevent premature + -- access to unfrozen types. The new declaration reuses the + -- specification of the previous one, and must not be analyzed. + + pragma Assert (Is_TSS (Rename_Spec, TSS_Stream_Output) + or else Is_TSS (Rename_Spec, TSS_Stream_Input)); + + declare + Old_Decl : constant Node_Id := + Unit_Declaration_Node (Rename_Spec); + New_Decl : constant Node_Id := + Make_Subprogram_Declaration (Sloc (N), + Specification => + Relocate_Node (Specification (Old_Decl))); + begin + Remove (Old_Decl); + Insert_After (N, New_Decl); + Set_Is_Abstract (Rename_Spec, False); + Set_Analyzed (New_Decl); + end; + end if; + Set_Corresponding_Body (Unit_Declaration_Node (Rename_Spec), New_S); if Ada_Version = Ada_83 and then Comes_From_Source (N) then @@ -1914,13 +1965,13 @@ package body Sem_Ch8 is return False; elsif In_Use (Pack) then - Set_Redundant_Use (Pack_Name, True); + Note_Redundant_Use (Pack_Name); return False; elsif Present (Renamed_Object (Pack)) and then In_Use (Renamed_Object (Pack)) then - Set_Redundant_Use (Pack_Name, True); + Note_Redundant_Use (Pack_Name); return False; else @@ -2142,10 +2193,38 @@ package body Sem_Ch8 is ---------------------- procedure Chain_Use_Clause (N : Node_Id) is + Pack : Entity_Id; + Level : Int := Scope_Stack.Last; + begin + if not Is_Compilation_Unit (Current_Scope) + or else not Is_Child_Unit (Current_Scope) + then + null; -- Common case + + elsif Defining_Entity (Parent (N)) = Current_Scope then + null; -- Common case for compilation unit + + else + -- If declaration appears in some other scope, it must be in some + -- parent unit when compiling a child. + + Pack := Defining_Entity (Parent (N)); + if not In_Open_Scopes (Pack) then + null; -- default as well + + else + -- Find entry for parent unit in scope stack + + while Scope_Stack.Table (Level).Entity /= Pack loop + Level := Level - 1; + end loop; + end if; + end if; + Set_Next_Use_Clause (N, - Scope_Stack.Table (Scope_Stack.Last).First_Use_Clause); - Scope_Stack.Table (Scope_Stack.Last).First_Use_Clause := N; + Scope_Stack.Table (Level).First_Use_Clause); + Scope_Stack.Table (Level).First_Use_Clause := N; end Chain_Use_Clause; --------------------------- @@ -2476,6 +2555,7 @@ package body Sem_Ch8 is elsif not Redundant_Use (Pack_Name) then Set_In_Use (Pack, False); + Set_Current_Use_Clause (Pack, Empty); Id := First_Entity (Pack); while Present (Id) loop @@ -2510,6 +2590,7 @@ package body Sem_Ch8 is if Present (Renamed_Object (Pack)) then Set_In_Use (Renamed_Object (Pack), False); + Set_Current_Use_Clause (Renamed_Object (Pack), Empty); end if; if Chars (Pack) = Name_System @@ -4552,7 +4633,9 @@ package body Sem_Ch8 is T := Base_Type (Entity (Prefix (N))); - -- Case of non-tagged type + -- Case type is not known to be tagged. Its appearance in + -- the prefix of the 'Class attribute indicates that the full + -- view will be tagged. if not Is_Tagged_Type (T) then if Ekind (T) = E_Incomplete_Type then @@ -4561,6 +4644,7 @@ package body Sem_Ch8 is -- type. The full type will have to be tagged, of course. Set_Is_Tagged_Type (T); + Set_Primitive_Operations (T, New_Elmt_List); Make_Class_Wide_Type (T); Set_Entity (N, Class_Wide_Type (T)); Set_Etype (N, Class_Wide_Type (T)); @@ -5118,12 +5202,12 @@ package body Sem_Ch8 is if Ekind (Id) = E_Package then if In_Use (Id) then - Set_Redundant_Use (P, True); + Note_Redundant_Use (P); elsif Present (Renamed_Object (Id)) and then In_Use (Renamed_Object (Id)) then - Set_Redundant_Use (P, True); + Note_Redundant_Use (P); elsif Force_Installation or else Applicable_Use (P) then Use_One_Package (Id, U); @@ -5294,6 +5378,174 @@ package body Sem_Ch8 is end if; end New_Scope; + ------------------------ + -- Note_Redundant_Use -- + ------------------------ + + procedure Note_Redundant_Use (Clause : Node_Id) is + Pack_Name : constant Entity_Id := Entity (Clause); + Cur_Use : constant Node_Id := Current_Use_Clause (Pack_Name); + Decl : constant Node_Id := Parent (Clause); + + Prev_Use : Node_Id := Empty; + Redundant : Node_Id := Empty; + -- The Use_Clause which is actually redundant. In the simplest case + -- it is Pack itself, but when we compile a body we install its + -- context before that of its spec, in which case it is the use_clause + -- in the spec that will appear to be redundant, and we want the + -- warning to be placed on the body. Similar complications appear when + -- the redundancy is between a child unit and one of its ancestors. + + begin + Set_Redundant_Use (Clause, True); + + if not Comes_From_Source (Clause) + or else In_Instance + or else not Warn_On_Redundant_Constructs + then + return; + end if; + + if not Is_Compilation_Unit (Current_Scope) then + + -- If the use_clause is in an inner scope, it is made redundant + -- by some clause in the current context. + + Redundant := Clause; + Prev_Use := Cur_Use; + + elsif Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Body then + declare + Cur_Unit : constant Unit_Number_Type := Get_Source_Unit (Cur_Use); + New_Unit : constant Unit_Number_Type := Get_Source_Unit (Clause); + Scop : Entity_Id; + + begin + if Cur_Unit = New_Unit then + + -- Redundant clause in same body + + Redundant := Clause; + Prev_Use := Cur_Use; + + elsif Cur_Unit = Current_Sem_Unit then + + -- If the new clause is not in the current unit it has been + -- analyzed first, and it makes the other one redundant. + -- However, if the new clause appears in a subunit, Cur_Unit + -- is still the parent, and in that case the redundant one + -- is the one appearing in the subunit. + + if Nkind (Unit (Cunit (New_Unit))) = N_Subunit then + Redundant := Clause; + Prev_Use := Cur_Use; + + -- Most common case: redundant clause in body, + -- original clause in spec. Current scope is spec entity. + + elsif + Current_Scope = + Defining_Entity ( + Unit (Library_Unit (Cunit (Current_Sem_Unit)))) + then + Redundant := Cur_Use; + Prev_Use := Clause; + + else + -- The new clause may appear in an unrelated unit, when + -- the parents of a generic are being installed prior to + -- instantiation. In this case there must be no warning. + -- We detect this case by checking whether the current top + -- of the stack is related to the current compilation. + + Scop := Current_Scope; + while Present (Scop) + and then Scop /= Standard_Standard + loop + if Is_Compilation_Unit (Scop) + and then not Is_Child_Unit (Scop) + then + return; + + elsif Scop = Cunit_Entity (Current_Sem_Unit) then + exit; + end if; + + Scop := Scope (Scop); + end loop; + + Redundant := Cur_Use; + Prev_Use := Clause; + end if; + + elsif New_Unit = Current_Sem_Unit then + Redundant := Clause; + Prev_Use := Cur_Use; + + else + -- Neither is the current unit, so they appear in parent or + -- sibling units. Warning will be emitted elsewhere. + + return; + end if; + end; + + elsif Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration + and then Present (Parent_Spec (Unit (Cunit (Current_Sem_Unit)))) + then + -- Use_clause is in child unit of current unit, and the child + -- unit appears in the context of the body of the parent, so it + -- has been installed first, even though it is the redundant one. + -- Depending on their placement in the context, the visible or the + -- private parts of the two units, either might appear as redundant, + -- but the message has to be on the current unit. + + if Get_Source_Unit (Cur_Use) = Current_Sem_Unit then + Redundant := Cur_Use; + Prev_Use := Clause; + else + Redundant := Clause; + Prev_Use := Cur_Use; + end if; + + -- If the new use clause appears in the private part of a parent unit + -- it may appear to be redudant w.r.t. a use clause in a child unit, + -- but the previous use clause was needed in the visible part of the + -- child, and no warning should be emitted. + + if Nkind (Parent (Decl)) = N_Package_Specification + and then + List_Containing (Decl) = Private_Declarations (Parent (Decl)) + then + declare + Par : constant Entity_Id := Defining_Entity (Parent (Decl)); + Spec : constant Node_Id := + Specification (Unit (Cunit (Current_Sem_Unit))); + + begin + if Is_Compilation_Unit (Par) + and then Par /= Cunit_Entity (Current_Sem_Unit) + and then Parent (Cur_Use) = Spec + and then + List_Containing (Cur_Use) = Visible_Declarations (Spec) + then + return; + end if; + end; + end if; + + else + null; + end if; + + if Present (Redundant) then + Error_Msg_Sloc := Sloc (Prev_Use); + Error_Msg_NE ( + "& is already use_visible through declaration #?", + Redundant, Pack_Name); + end if; + end Note_Redundant_Use; + --------------- -- Pop_Scope -- --------------- @@ -5760,6 +6012,7 @@ package body Sem_Ch8 is end if; Set_In_Use (P); + Set_Current_Use_Clause (P, N); -- Ada 2005 (AI-50217): Check restriction @@ -5788,6 +6041,7 @@ package body Sem_Ch8 is if Present (Renamed_Object (P)) then Set_In_Use (Renamed_Object (P)); + Set_Current_Use_Clause (Renamed_Object (P), N); Real_P := Renamed_Object (P); else Real_P := P; diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index 190706c4e11..c49bed34cbf 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,7 +28,7 @@ with Atree; use Atree; with Checks; use Checks; with Einfo; use Einfo; with Errout; use Errout; -with Exp_Ch9; +with Exp_Ch9; use Exp_Ch9; with Elists; use Elists; with Freeze; use Freeze; with Itypes; use Itypes; @@ -94,11 +94,22 @@ package body Sem_Ch9 is while Present (T_Name) loop Analyze (T_Name); - if not Is_Task_Type (Etype (T_Name)) then - Error_Msg_N ("expect task name for ABORT", T_Name); - return; - else + if Is_Task_Type (Etype (T_Name)) + or else (Ada_Version >= Ada_05 + and then Ekind (Etype (T_Name)) = E_Class_Wide_Type + and then Is_Interface (Etype (T_Name)) + and then Is_Task_Interface (Etype (T_Name))) + then Resolve (T_Name); + else + if Ada_Version >= Ada_05 then + Error_Msg_N ("expect task name or task interface class-wide " + & "object for ABORT", T_Name); + else + Error_Msg_N ("expect task name for ABORT", T_Name); + end if; + + return; end if; Next (T_Name); @@ -298,9 +309,7 @@ package body Sem_Ch9 is begin E1 := First_Entity (Current_Scope); - while Present (E1) loop - if Ekind (E1) = E_Procedure and then Chars (E1) = Chars (Entry_Nam) and then Type_Conformant (E1, Entry_Nam) @@ -368,7 +377,6 @@ package body Sem_Ch9 is begin Decl := First (Declarations (N)); - while Present (Decl) loop Analyze (Decl); @@ -390,6 +398,7 @@ package body Sem_Ch9 is -- In the case of a select alternative of a selective accept, -- the expander references the address declaration even if there -- is no statement list. + -- We also need to create the renaming declarations for the local -- variables that will replace references to the formals within -- the accept. @@ -440,14 +449,49 @@ package body Sem_Ch9 is --------------------------------- procedure Analyze_Asynchronous_Select (N : Node_Id) is + Param : Node_Id; + Trigger : Node_Id; + begin Tasking_Used := True; Check_Restriction (Max_Asynchronous_Select_Nesting, N); Check_Restriction (No_Select_Statements, N); - -- Analyze the statements. We analyze statements in the abortable part - -- first, because this is the section that is executed first, and that - -- way our remembering of saved values and checks is accurate. + if Ada_Version >= Ada_05 then + Trigger := Triggering_Statement (Triggering_Alternative (N)); + + Analyze (Trigger); + + -- The trigger is a dispatching procedure. Postpone the analysis + -- of the triggering and abortable statements until the expansion + -- of this asynchronous select in Expand_N_Asynchronous_Select. + -- This action is required since the code replication in Expand- + -- _N_Asynchronous_Select of an already analyzed statement list + -- causes Gigi aborts. + + if Expander_Active + and then Nkind (Trigger) = N_Procedure_Call_Statement + and then Present (Parameter_Associations (Trigger)) + then + Param := First (Parameter_Associations (Trigger)); + + if Is_Controlling_Actual (Param) + and then Is_Interface (Etype (Param)) + then + if Is_Limited_Record (Etype (Param)) then + return; + else + Error_Msg_N + ("dispatching operation of limited or synchronized " & + "interface required ('R'M 9.7.2(3))!", N); + end if; + end if; + end if; + end if; + + -- Analyze the statements. We analyze statements in the abortable part, + -- because this is the section that is executed first, and that way our + -- remembering of saved values and checks is accurate. Analyze_Statements (Statements (Abortable_Part (N))); Analyze (Triggering_Alternative (N)); @@ -462,6 +506,16 @@ package body Sem_Ch9 is Check_Restriction (No_Select_Statements, N); Tasking_Used := True; Analyze (Entry_Call_Alternative (N)); + + if List_Length (Else_Statements (N)) = 1 + and then Nkind (First (Else_Statements (N))) in N_Delay_Statement + then + Error_Msg_N + ("suspicious form of conditional entry call?", N); + Error_Msg_N + ("\`SELECT OR` may be intended rather than `SELECT ELSE`", N); + end if; + Analyze_Statements (Else_Statements (N)); end Analyze_Conditional_Entry_Call; @@ -491,19 +545,19 @@ package body Sem_Ch9 is if Nkind (Delay_Statement (N)) = N_Delay_Relative_Statement then Pre_Analyze_And_Resolve (Expr, Standard_Duration); - else Pre_Analyze_And_Resolve (Expr); end if; - if Nkind (Delay_Statement (N)) = N_Delay_Until_Statement and then - not Is_RTE (Base_Type (Etype (Expr)), RO_CA_Time) and then - not Is_RTE (Base_Type (Etype (Expr)), RO_RT_Time) + if Nkind (Delay_Statement (N)) = N_Delay_Until_Statement + and then not Is_RTE (Base_Type (Etype (Expr)), RO_CA_Time) + and then not Is_RTE (Base_Type (Etype (Expr)), RO_RT_Time) then Error_Msg_N ("expect Time types for `DELAY UNTIL`", Expr); end if; Check_Restriction (No_Fixed_Point, Expr); + else Analyze (Delay_Statement (N)); end if; @@ -632,7 +686,13 @@ package body Sem_Ch9 is then Set_Etype (Def, Empty); Set_Analyzed (Def, False); - Set_Discrete_Subtype_Definition (Index_Spec, Def); + + -- Keep the original subtree to ensure tree is + -- properly formed (e.g. for ASIS use) + + Rewrite + (Discrete_Subtype_Definition (Index_Spec), Def); + Set_Analyzed (Low_Bound (Def), False); Set_Analyzed (High_Bound (Def), False); @@ -683,12 +743,16 @@ package body Sem_Ch9 is -- The entity for the protected subprogram corresponding to the entry -- has been created. We retain the name of this entity in the entry -- body, for use when the corresponding subprogram body is created. - -- Note that entry bodies have to corresponding_spec, and there is no + -- Note that entry bodies have no corresponding_spec, and there is no -- easy link back in the tree between the entry body and the entity for - -- the entry itself. + -- the entry itself, which is why we must propagate some attributes + -- explicitly from spec to body. - Set_Protected_Body_Subprogram (Id, - Protected_Body_Subprogram (Entry_Name)); + Set_Protected_Body_Subprogram + (Id, Protected_Body_Subprogram (Entry_Name)); + + Set_Entry_Parameters_Type + (Id, Entry_Parameters_Type (Entry_Name)); if Present (Decls) then Analyze_Declarations (Decls); @@ -707,6 +771,9 @@ package body Sem_Ch9 is -- At the same time, we set the flags on the spec entities to suppress -- any warnings on the spec formals, since we also scan the spec. + -- Finally, we propagate the Entry_Component attribute to the body + -- formals, for use in the renaming declarations created later for the + -- formals (see exp_ch9.Add_Formal_Renamings). declare E1 : Entity_Id; @@ -736,6 +803,7 @@ package body Sem_Ch9 is Set_Referenced (E2, Referenced (E1)); Set_Referenced (E1); + Set_Entry_Component (E2, Entry_Component (E1)); <> Next_Entity (E1); @@ -1011,9 +1079,7 @@ package body Sem_Ch9 is end if; E := First_Entity (Current_Scope); - while Present (E) loop - if Ekind (E) = E_Function or else Ekind (E) = E_Procedure then @@ -1072,8 +1138,9 @@ package body Sem_Ch9 is -- Ada 2005 (AI-345) if Present (Interface_List (N)) then - Iface := First (Interface_List (N)); + Set_Is_Tagged_Type (T); + Iface := First (Interface_List (N)); while Present (Iface) loop Iface_Typ := Find_Type_Of_Subtype_Indic (Iface); Iface_Def := Type_Definition (Parent (Iface_Typ)); @@ -1147,7 +1214,6 @@ package body Sem_Ch9 is -- illegal uses. Now it can be set correctly. E := First_Entity (Current_Scope); - while Present (E) loop if Ekind (E) = E_Void then Set_Ekind (E, E_Component); @@ -1254,14 +1320,13 @@ package body Sem_Ch9 is -- Overloaded case, find right interpretation if Is_Overloaded (Entry_Name) then - Get_First_Interp (Entry_Name, I, It); Entry_Id := Empty; + Get_First_Interp (Entry_Name, I, It); while Present (It.Nam) loop if No (First_Formal (It.Nam)) or else Subtype_Conformant (Enclosing, It.Nam) then - -- Ada 2005 (AI-345): Since protected and task types have -- primitive entry wrappers, we only consider source entries. @@ -1348,9 +1413,10 @@ package body Sem_Ch9 is -- Processing for parameters accessed by the requeue declare - Ent : Entity_Id := First_Formal (Enclosing); + Ent : Entity_Id; begin + Ent := First_Formal (Enclosing); while Present (Ent) loop -- For OUT or IN OUT parameter, the effect of the requeue @@ -1399,6 +1465,8 @@ package body Sem_Ch9 is Check_Restriction (No_Select_Statements, N); Tasking_Used := True; + -- Loop to analyze alternatives + Alt := First (Alts); while Present (Alt) loop Alt_Count := Alt_Count + 1; @@ -1716,7 +1784,6 @@ package body Sem_Ch9 is begin Ent := First_Entity (Spec_Id); - while Present (Ent) loop if Is_Entry (Ent) and then not Entry_Accepted (Ent) @@ -1799,6 +1866,8 @@ package body Sem_Ch9 is -- Ada 2005 (AI-345) if Present (Interface_List (N)) then + Set_Is_Tagged_Type (T); + Iface := First (Interface_List (N)); while Present (Iface) loop Iface_Typ := Find_Type_Of_Subtype_Indic (Iface); @@ -1919,21 +1988,20 @@ package body Sem_Ch9 is end if; Analyze (Trigger); + if Comes_From_Source (Trigger) - and then Nkind (Trigger) /= N_Delay_Until_Statement - and then Nkind (Trigger) /= N_Delay_Relative_Statement + and then Nkind (Trigger) not in N_Delay_Statement and then Nkind (Trigger) /= N_Entry_Call_Statement then if Ada_Version < Ada_05 then Error_Msg_N ("triggering statement must be delay or entry call", Trigger); - -- Ada 2005 (AI-345): If a procedure_call_statement is used - -- for a procedure_or_entry_call, the procedure_name or pro- - -- cedure_prefix of the procedure_call_statement shall denote - -- an entry renamed by a procedure, or (a view of) a primitive - -- subprogram of a limited interface whose first parameter is - -- a controlling parameter. + -- Ada 2005 (AI-345): If a procedure_call_statement is used for a + -- procedure_or_entry_call, the procedure_name or pro- cedure_prefix + -- of the procedure_call_statement shall denote an entry renamed by a + -- procedure, or (a view of) a primitive subprogram of a limited + -- interface whose first parameter is a controlling parameter. elsif Nkind (Trigger) = N_Procedure_Call_Statement and then not Is_Renamed_Entry (Entity (Name (Trigger))) @@ -2089,7 +2157,6 @@ package body Sem_Ch9 is begin Ent := First (Ifaces); - while Present (Ent) loop if Etype (Ent) = Iface then return True; @@ -2119,14 +2186,13 @@ package body Sem_Ch9 is Entry_Param := First (Entry_Params); Proc_Param := Next (Proc_Param); - while Present (Entry_Param) - and then Present (Proc_Param) - loop + while Present (Entry_Param) and then Present (Proc_Param) loop + -- The two parameters must be mode conformant and have the exact -- same types. - if In_Present (Entry_Param) /= In_Present (Proc_Param) - or else Out_Present (Entry_Param) /= Out_Present (Proc_Param) + if Ekind (Defining_Identifier (Entry_Param)) /= + Ekind (Defining_Identifier (Proc_Param)) or else Etype (Parameter_Type (Entry_Param)) /= Etype (Parameter_Type (Proc_Param)) then @@ -2177,7 +2243,6 @@ package body Sem_Ch9 is Null_Present (Parent (Hom))) then Aliased_Hom := Hom; - while Present (Alias (Aliased_Hom)) loop Aliased_Hom := Alias (Aliased_Hom); end loop; @@ -2274,7 +2339,6 @@ package body Sem_Ch9 is else Decl := First (Vis_Decls); - while Present (Decl) loop if Nkind (Decl) = N_Entry_Declaration and then Must_Override (Decl) @@ -2322,7 +2386,6 @@ package body Sem_Ch9 is begin E := First_Entity (Spec); - while Present (E) loop Prev := Current_Entity (E); Set_Current_Entity (E); diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index 96836a75915..a187b153848 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -550,10 +550,13 @@ package body Sem_Disp is if Ada_Version = Ada_05 and then Present (Tagged_Type) and then Is_Concurrent_Type (Tagged_Type) - and then not Is_Empty_Elmt_List - (Abstract_Interfaces - (Corresponding_Record_Type (Tagged_Type))) then + -- Protect the frontend against previously detected errors + + if not Present (Corresponding_Record_Type (Tagged_Type)) then + return; + end if; + Tagged_Type := Corresponding_Record_Type (Tagged_Type); end if; @@ -589,8 +592,8 @@ package body Sem_Disp is -- where it can be a dispatching op is when it overrides an operation -- before the freezing point of the type. - elsif ((not Is_Package (Scope (Subp))) - or else In_Package_Body (Scope (Subp))) + elsif ((not Is_Package_Or_Generic_Package (Scope (Subp))) + or else In_Package_Body (Scope (Subp))) and then not Has_Dispatching_Parent then if not Comes_From_Source (Subp) @@ -1261,7 +1264,7 @@ package body Sem_Disp is Replace_Elmt (Op_Elmt, New_Op); end if; - if (not Is_Package (Current_Scope)) + if (not Is_Package_Or_Generic_Package (Current_Scope)) or else not In_Private_Part (Current_Scope) then -- Not a private primitive diff --git a/gcc/ada/sem_dist.ads b/gcc/ada/sem_dist.ads index 610c785f162..24745890b53 100644 --- a/gcc/ada/sem_dist.ads +++ b/gcc/ada/sem_dist.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index 25b5fd36624..1eae58685b4 100644 --- a/gcc/ada/sem_elab.adb +++ b/gcc/ada/sem_elab.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -117,7 +117,6 @@ package body Sem_Elab is Outer_Scope : Entity_Id; -- Save scope of outer level call - end record; package Delay_Check is new Table.Table ( @@ -166,6 +165,13 @@ package body Sem_Elab is -- then the original call was an inner call, and we are not interested -- in calls that go outside this scope. + procedure Activate_Elaborate_All_Desirable (N : Node_Id; U : Entity_Id); + -- Analysis of construct N shows that we should set Elaborate_All_Desirable + -- for the WITH clause for unit U (which will always be present). A special + -- case is when N is a function or procedure instantiation, in which case + -- it is sufficient to set Elaborate_Desirable, since in this case there is + -- no possibility of transitive elaboration issues. + procedure Check_A_Call (N : Node_Id; E : Entity_Id; @@ -308,6 +314,113 @@ package body Sem_Elab is -- which the pragma applies. This prevents spurious warnings when the -- called entity is renamed within U. + -------------------------------------- + -- Activate_Elaborate_All_Desirable -- + -------------------------------------- + + procedure Activate_Elaborate_All_Desirable (N : Node_Id; U : Entity_Id) is + UN : constant Unit_Number_Type := Get_Code_Unit (N); + CU : constant Node_Id := Cunit (UN); + UE : constant Entity_Id := Cunit_Entity (UN); + Unm : constant Unit_Name_Type := Unit_Name (UN); + CI : constant List_Id := Context_Items (CU); + Itm : Node_Id; + Ent : Entity_Id; + + procedure Set_Elab_Flag (Itm : Node_Id); + -- Sets Elaborate_[All_]Desirable as appropriate on Itm + + ------------------- + -- Set_Elab_Flag -- + ------------------- + + procedure Set_Elab_Flag (Itm : Node_Id) is + begin + if Nkind (N) in N_Subprogram_Instantiation then + Set_Elaborate_Desirable (Itm); + else + Set_Elaborate_All_Desirable (Itm); + end if; + end Set_Elab_Flag; + + -- Start of processing for Activate_Elaborate_All_Desirable + + begin + Itm := First (CI); + while Present (Itm) loop + if Nkind (Itm) = N_With_Clause then + Ent := Cunit_Entity (Get_Cunit_Unit_Number (Library_Unit (Itm))); + + -- If we find it, then mark elaborate all desirable and return + + if U = Ent then + Set_Elab_Flag (Itm); + return; + end if; + end if; + + Next (Itm); + end loop; + + -- If we fall through then the with clause is not present in the + -- current unit. One legitimate possibility is that the with clause + -- is present in the spec when we are a body. + + if Is_Body_Name (Unm) then + declare + UEs : constant Entity_Id := Spec_Entity (UE); + UNs : constant Unit_Number_Type := Get_Source_Unit (UEs); + CUs : constant Node_Id := Cunit (UNs); + CIs : constant List_Id := Context_Items (CUs); + + begin + Itm := First (CIs); + while Present (Itm) loop + if Nkind (Itm) = N_With_Clause then + Ent := + Cunit_Entity (Get_Cunit_Unit_Number (Library_Unit (Itm))); + + if U = Ent then + + -- If we find it, we have to create an implicit copy + -- of the with clause for the body, just so that it + -- can be marked as elaborate desirable (it would be + -- wrong to put it on the spec item, since it is the + -- body that has possible elaboration problems, not + -- the spec. + + declare + CW : constant Node_Id := + Make_With_Clause (Sloc (Itm), + Name => Name (Itm)); + + begin + Set_Library_Unit (CW, Library_Unit (Itm)); + Set_Implicit_With (CW, True); + + -- Set elaborate all desirable on copy and then + -- append the copy to the list of body with's + -- and we are done. + + Set_Elab_Flag (CW); + Append_To (CI, CW); + return; + end; + end if; + end if; + + Next (Itm); + end loop; + end; + end if; + + -- Here if we do not find with clause on spec or body. We just ignore + -- this case, it means that the elaboration involves some other unit + -- than the unit being compiled, and will be caught elsewhere. + + null; + end Activate_Elaborate_All_Desirable; + ------------------ -- Check_A_Call -- ------------------ @@ -370,7 +483,7 @@ package body Sem_Elab is if (Nkind (N) = N_Function_Call or else Nkind (N) = N_Procedure_Call_Statement) - and then No_Elaboration_Check (N) + and then No_Elaboration_Check (N) then return; end if; @@ -710,8 +823,15 @@ package body Sem_Elab is end if; Error_Msg_Qual_Level := Nat'Last; - Error_Msg_NE - ("\missing pragma Elaborate_All for&?", N, W_Scope); + + if Nkind (N) in N_Subprogram_Instantiation then + Error_Msg_NE + ("\missing pragma Elaborate for&?", N, W_Scope); + else + Error_Msg_NE + ("\missing pragma Elaborate_All for&?", N, W_Scope); + end if; + Error_Msg_Qual_Level := 0; Output_Calls (N); @@ -893,7 +1013,6 @@ package body Sem_Elab is ("\?Program_Error will be raised at run time", N); Insert_Elab_Check (N); Set_ABE_Is_Certain (N); - end Check_Bad_Instantiation; --------------------- @@ -1110,13 +1229,19 @@ package body Sem_Elab is return; end if; - if Nkind (P) = N_Subprogram_Body - or else - Nkind (P) = N_Protected_Body + -- A protected body has no elaboration code and contains + -- only other bodies. + + if Nkind (P) = N_Protected_Body then + return; + + elsif Nkind (P) = N_Subprogram_Body or else Nkind (P) = N_Task_Body or else Nkind (P) = N_Block_Statement + or else + Nkind (P) = N_Entry_Body then if L = Declarations (P) then exit; @@ -1510,7 +1635,6 @@ package body Sem_Elab is else Check_Internal_Call_Continue (N, E, Outer_Scope, Orig_Ent); end if; - end Check_Internal_Call; ---------------------------------- @@ -1661,9 +1785,9 @@ package body Sem_Elab is -- does not normally visit subprogram bodies. declare - Decl : Node_Id := First (Declarations (Sbody)); - + Decl : Node_Id; begin + Decl := First (Declarations (Sbody)); while Present (Decl) loop Traverse (Decl); Next (Decl); @@ -1830,7 +1954,6 @@ package body Sem_Elab is and then Has_Task (Base_Type (Typ)) then Comp := First_Component (Typ); - while Present (Comp) loop Add_Task_Proc (Etype (Comp)); Comp := Next_Component (Comp); @@ -1874,10 +1997,9 @@ package body Sem_Elab is end if; else - Elmt := First_Elmt (Inter_Procs); - -- No need for multiple entries of the same type + Elmt := First_Elmt (Inter_Procs); while Present (Elmt) loop if Node (Elmt) = Proc then return; @@ -1899,9 +2021,7 @@ package body Sem_Elab is begin if Present (Decls) then Decl := First (Decls); - while Present (Decl) loop - if Nkind (Decl) = N_Object_Declaration and then Has_Task (Etype (Defining_Identifier (Decl))) then @@ -1918,9 +2038,10 @@ package body Sem_Elab is ---------------- function Outer_Unit (E : Entity_Id) return Entity_Id is - Outer : Entity_Id := E; + Outer : Entity_Id; begin + Outer := E; while Present (Outer) loop if Elaboration_Checks_Suppressed (Outer) then Cunit_SC := True; @@ -1970,7 +2091,6 @@ package body Sem_Elab is -- the task body to be elaborated before the current one. Elmt := First_Elmt (Inter_Procs); - while Present (Elmt) loop Ent := Node (Elmt); Task_Scope := Outer_Unit (Scope (Ent)); @@ -2014,7 +2134,7 @@ package body Sem_Elab is " requires pragma Elaborate_All on &?", N, Ent); end if; - Set_Elaborate_All_Desirable (Task_Scope); + Activate_Elaborate_All_Desirable (N, Task_Scope); Set_Suppress_Elaboration_Warnings (Task_Scope); end if; @@ -2025,8 +2145,8 @@ package body Sem_Elab is -- the task procedure bodies, which are available. In_Task_Activation := True; - Elmt := First_Elmt (Intra_Procs); + Elmt := First_Elmt (Intra_Procs); while Present (Elmt) loop Ent := Node (Elmt); Check_Internal_Call_Continue (N, Ent, Enclosing, Ent); @@ -2060,7 +2180,7 @@ package body Sem_Elab is or else (Is_Child_Unit (Scop) and then Is_Visible_Child_Unit (Scop)) then - Set_Elaborate_All_Desirable (Scop); + Activate_Elaborate_All_Desirable (Call, Scop); Set_Suppress_Elaboration_Warnings (Scop, True); return; end if; @@ -2077,13 +2197,14 @@ package body Sem_Elab is null; -- detailed processing follows. else - Set_Elaborate_All_Desirable (Scop); + Activate_Elaborate_All_Desirable (Call, Scop); Set_Suppress_Elaboration_Warnings (Scop, True); return; end if; -- If the unit is not in the context, there must be an intermediate - -- unit that is, on which we need to place to elaboration flag. + -- unit that is, on which we need to place to elaboration flag. This + -- happens with init proc calls. if Is_Init_Proc (Subp) or else Init_Call @@ -2098,22 +2219,22 @@ package body Sem_Elab is Etype (First (Parameter_Associations (Call))); begin Elab_Unit := Scope (Typ); - while (Present (Elab_Unit)) and then not Is_Compilation_Unit (Elab_Unit) loop Elab_Unit := Scope (Elab_Unit); end loop; end; - elsif Nkind (Original_Node (Call)) = N_Selected_Component then - -- If original node uses selected component notation, the - -- prefix is visible and determines the scope that must be - -- elaborated. After rewriting, the prefix is the first actual - -- in the call. + -- If original node uses selected component notation, the prefix is + -- visible and determines the scope that must be elaborated. After + -- rewriting, the prefix is the first actual in the call. + elsif Nkind (Original_Node (Call)) = N_Selected_Component then Elab_Unit := Scope (Etype (First (Parameter_Associations (Call)))); + -- Not one of special cases above + else -- Using previously computed scope. If the elaboration check is -- done after analysis, the scope is not visible any longer, but @@ -2122,7 +2243,7 @@ package body Sem_Elab is Elab_Unit := Scop; end if; - Set_Elaborate_All_Desirable (Elab_Unit); + Activate_Elaborate_All_Desirable (Call, Elab_Unit); Set_Suppress_Elaboration_Warnings (Elab_Unit, True); end Set_Elaboration_Constraint; @@ -2268,7 +2389,7 @@ package body Sem_Elab is -- Otherwise look and see if we are embedded in a further package - elsif Is_Package (Scop) then + elsif Is_Package_Or_Generic_Package (Scop) then -- If so, get the body of the enclosing package, and look in -- its package body for the package body we are looking for. @@ -2311,16 +2432,15 @@ package body Sem_Elab is -- Case of entity is in other than a package spec, in this case -- the body, if present, must be in the same declarative part. - if not Is_Package (Scop) then + if not Is_Package_Or_Generic_Package (Scop) then declare P : Node_Id; begin - P := Declaration_Node (Ent); - -- Declaration node may get us a spec, so if so, go to -- the parent declaration. + P := Declaration_Node (Ent); while not Is_List_Member (P) loop P := Parent (P); end loop; @@ -2532,18 +2652,26 @@ package body Sem_Elab is ---------------------------- function Same_Elaboration_Scope (Scop1, Scop2 : Entity_Id) return Boolean is - S1 : Entity_Id := Scop1; - S2 : Entity_Id := Scop2; + S1 : Entity_Id; + S2 : Entity_Id; begin + -- Find elaboration scope for Scop1 + + S1 := Scop1; while S1 /= Standard_Standard and then (Ekind (S1) = E_Package or else + Ekind (S1) = E_Protected_Type + or else Ekind (S1) = E_Block) loop S1 := Scope (S1); end loop; + -- Find elaboration scope for Scop2 + + S2 := Scop2; while S2 /= Standard_Standard and then (Ekind (S2) = E_Package or else @@ -2606,7 +2734,6 @@ package body Sem_Elab is if Nkind (N) = N_Subprogram_Declaration then declare Ent : constant Entity_Id := Defining_Unit_Name (Specification (N)); - begin Set_Is_Imported (Ent); Set_Convention (Ent, Convention_Stubbed); @@ -2615,7 +2742,6 @@ package body Sem_Elab is elsif Nkind (N) = N_Package_Declaration then declare Spec : constant Node_Id := Specification (N); - begin New_Scope (Defining_Unit_Name (Spec)); Supply_Bodies (Visible_Declarations (Spec)); @@ -2627,7 +2753,6 @@ package body Sem_Elab is procedure Supply_Bodies (L : List_Id) is Elmt : Node_Id; - begin if Present (L) then Elmt := First (L); @@ -2647,7 +2772,6 @@ package body Sem_Elab is begin Scop := E1; - loop if Scop = E2 then return True; @@ -2675,25 +2799,23 @@ package body Sem_Elab is begin Item := First (Context_Items (Cunit (Current_Sem_Unit))); - while Present (Item) loop if Nkind (Item) = N_Pragma and then Get_Pragma_Id (Chars (Item)) = Pragma_Elaborate_All then - if Error_Posted (Item) then - - -- Some previous error on the pragma itself + -- Return if some previous error on the pragma itself + if Error_Posted (Item) then return False; end if; Elab_Id := - Entity ( - Expression (First (Pragma_Argument_Associations (Item)))); + Entity + (Expression (First (Pragma_Argument_Associations (Item)))); - Par := Parent (Unit_Declaration_Node (Elab_Id)); - Item2 := First (Context_Items (Par)); + Par := Parent (Unit_Declaration_Node (Elab_Id)); + Item2 := First (Context_Items (Par)); while Present (Item2) loop if Nkind (Item2) = N_With_Clause and then Entity (Name (Item2)) = E diff --git a/gcc/ada/sem_elab.ads b/gcc/ada/sem_elab.ads index 106cb72c6b1..e42a4ab20f4 100644 --- a/gcc/ada/sem_elab.ads +++ b/gcc/ada/sem_elab.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_elim.ads b/gcc/ada/sem_elim.ads index e3a3b153240..c87f4f0cb48 100644 --- a/gcc/ada/sem_elim.ads +++ b/gcc/ada/sem_elim.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1997-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb index 396027d39b4..d99e042dd5c 100644 --- a/gcc/ada/sem_eval.adb +++ b/gcc/ada/sem_eval.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ with Elists; use Elists; with Errout; use Errout; with Eval_Fat; use Eval_Fat; with Exp_Util; use Exp_Util; +with Lib; use Lib; with Nmake; use Nmake; with Nlists; use Nlists; with Opt; use Opt; @@ -4004,11 +4005,21 @@ package body Sem_Eval is return True; -- A definite type does not match an indefinite or classwide type + -- However, a generic type with unknown discriminants may be + -- instantiated with a type with no discriminants, and conformance + -- checking on an inherited operation may compare the actual with + -- the subtype that renames it in the instance. elsif Has_Unknown_Discriminants (T1) /= Has_Unknown_Discriminants (T2) then - return False; + if Is_Generic_Actual_Type (T1) + and then Etype (T1) = T2 + then + return True; + else + return False; + end if; -- Array type @@ -4083,13 +4094,17 @@ package body Sem_Eval is is begin Stat := False; + Fold := False; + + if Debug_Flag_Dot_F and then In_Extended_Main_Source_Unit (N) then + return; + end if; -- If operand is Any_Type, just propagate to result and do not -- try to fold, this prevents cascaded errors. if Etype (Op1) = Any_Type then Set_Etype (N, Any_Type); - Fold := False; return; -- If operand raises constraint error, then replace node N with the @@ -4099,7 +4114,6 @@ package body Sem_Eval is elsif Raises_Constraint_Error (Op1) then Rewrite_In_Raise_CE (N, Op1); - Fold := False; return; -- If the operand is not static, then the result is not static, and @@ -4118,7 +4132,6 @@ package body Sem_Eval is and then Is_Generic_Type (Etype (Op1)) then Check_Non_Static_Context (Op1); - Fold := False; return; -- Here we have the case of an operand whose type is OK, which is @@ -4145,13 +4158,17 @@ package body Sem_Eval is begin Stat := False; + Fold := False; + + if Debug_Flag_Dot_F and then In_Extended_Main_Source_Unit (N) then + return; + end if; -- If either operand is Any_Type, just propagate to result and -- do not try to fold, this prevents cascaded errors. if Etype (Op1) = Any_Type or else Etype (Op2) = Any_Type then Set_Etype (N, Any_Type); - Fold := False; return; -- If left operand raises constraint error, then replace node N with @@ -4166,7 +4183,6 @@ package body Sem_Eval is Rewrite_In_Raise_CE (N, Op1); Set_Is_Static_Expression (N, Rstat); - Fold := False; return; -- Similar processing for the case of the right operand. Note that @@ -4180,7 +4196,6 @@ package body Sem_Eval is Rewrite_In_Raise_CE (N, Op2); Set_Is_Static_Expression (N, Rstat); - Fold := False; return; -- Exclude expressions of a generic modular type, as above @@ -4189,7 +4204,6 @@ package body Sem_Eval is and then Is_Generic_Type (Etype (Op1)) then Check_Non_Static_Context (Op1); - Fold := False; return; -- If result is not static, then check non-static contexts on operands diff --git a/gcc/ada/sem_eval.ads b/gcc/ada/sem_eval.ads index bf9d712f986..5509185db31 100644 --- a/gcc/ada/sem_eval.ads +++ b/gcc/ada/sem_eval.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_intr.adb b/gcc/ada/sem_intr.adb index c7643b3dacd..4362a0ea4bb 100644 --- a/gcc/ada/sem_intr.adb +++ b/gcc/ada/sem_intr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -132,6 +132,15 @@ package body Sem_Intr is ("argument in call to & must be 31 characters or less", N, Nam); end if; + -- Check for the case of freeing a non-null object which will raise + -- Constaint_Error. Issue warning here, do the expansion in Exp_Intr. + + elsif Cnam = Name_Free + and then Can_Never_Be_Null (Etype (Arg1)) + then + Error_Msg_N + ("freeing `NOT NULL` object will raise Constraint_Error?", N); + -- For now, no other special checks are required else diff --git a/gcc/ada/sem_intr.ads b/gcc/ada/sem_intr.ads index 3629786993e..851686af0a9 100644 --- a/gcc/ada/sem_intr.ads +++ b/gcc/ada/sem_intr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_maps.adb b/gcc/ada/sem_maps.adb index 90c1c4a3ac1..0a66a91f0b3 100644 --- a/gcc/ada/sem_maps.adb +++ b/gcc/ada/sem_maps.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_maps.ads b/gcc/ada/sem_maps.ads index 5d8e6af4ffd..eb126790665 100644 --- a/gcc/ada/sem_maps.ads +++ b/gcc/ada/sem_maps.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2001 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -36,7 +36,7 @@ -- Map composition of renaming maps takes place for nested instantiations, -- for generic child units, and for formal packages. --- For additional details, see the documentation in sem_ch12. +-- For additional details, see the documentation in sem_ch12 with Table; with Types; use Types; @@ -58,24 +58,24 @@ package Sem_Maps is -- and New_Map (e2) = e3, then the image of e1 under the result is e3. function Copy (M : Map) return Map; - -- Full copy of contents and headers. + -- Full copy of contents and headers function Lookup (M : Map; E : Entity_Id) return Entity_Id; - -- Retrieve image of E under M, Empty if undefined. + -- Retrieve image of E under M, Empty if undefined procedure Add_Association (M : in out Map; O_Id : Entity_Id; N_Id : Entity_Id; Kind : Scope_Kind := S_Local); - -- Update M in place. On entry M (O_Id) must not be defined. + -- Update M in place. On entry M (O_Id) must not be defined procedure Update_Association (M : in out Map; O_Id : Entity_Id; N_Id : Entity_Id; Kind : Scope_Kind := S_Local); - -- Update the entry in M for O_Id. + -- Update the entry in M for O_Id function Build_Instance_Map (M : Map) return Map; -- Copy renaming map of generic, and create new entities for all the diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 29233a4f7ca..b06f117e158 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -64,6 +64,7 @@ with Sem_Res; use Sem_Res; with Sem_Type; use Sem_Type; with Sem_Util; use Sem_Util; with Sem_VFpt; use Sem_VFpt; +with Sem_Warn; use Sem_Warn; with Stand; use Stand; with Sinfo; use Sinfo; with Sinfo.CN; use Sinfo.CN; @@ -236,8 +237,9 @@ package body Sem_Prag is Pragma_Exit : exception; -- This exception is used to exit pragma processing completely. It - -- is used when an error is detected, and in other situations where - -- it is known that no further processing is required. + -- is used when an error is detected, and no further processing is + -- required. It is also used if an earlier error has left the tree + -- in a state where the pragma should not be processed. Arg_Count : Nat; -- Number of pragma argument associations @@ -1331,15 +1333,12 @@ package body Sem_Prag is Analyze (Expression (Arg1)); - if Unit_Kind = N_Generic_Subprogram_Declaration + if Unit_Kind = N_Generic_Subprogram_Declaration or else Unit_Kind = N_Subprogram_Declaration then Unit_Name := Defining_Entity (Unit_Node); - elsif Unit_Kind = N_Function_Instantiation - or else Unit_Kind = N_Package_Instantiation - or else Unit_Kind = N_Procedure_Instantiation - then + elsif Unit_Kind in N_Generic_Instantiation then Unit_Name := Defining_Entity (Unit_Node); else @@ -2141,7 +2140,7 @@ package body Sem_Prag is and then Ekind (E) /= E_Variable and then not (Is_Access_Type (E) - and then Ekind (Designated_Type (E)) = E_Subprogram_Type) + and then Ekind (Designated_Type (E)) = E_Subprogram_Type) then Error_Pragma_Arg ("second argument of pragma% must be subprogram (type)", @@ -3784,9 +3783,21 @@ package body Sem_Prag is -- suppress check for any check id value. if C = All_Checks then + + -- For All_Checks, we set all specific checks with the + -- exception of Elaboration_Check, which is handled specially + -- because of not wanting All_Checks to have the effect of + -- deactivating static elaboration order processing. + for J in Scope_Suppress'Range loop - Scope_Suppress (J) := Suppress_Case; + if J /= Elaboration_Check then + Scope_Suppress (J) := Suppress_Case; + end if; end loop; + + -- If not All_Checks, just set appropriate entry. Note that we + -- will set Elaboration_Check if this is explicitly specified. + else Scope_Suppress (C) := Suppress_Case; end if; @@ -4259,7 +4270,7 @@ package body Sem_Prag is if Warn_On_Unrecognized_Pragma then Error_Pragma ("unrecognized pragma%!?"); else - raise Pragma_Exit; + return; end if; else Prag_Id := Get_Pragma_Id (Chars (N)); @@ -5885,7 +5896,7 @@ package body Sem_Prag is Error_Pragma ("pragma% must refer to a spec, not a body"); else Set_Body_Required (Cunit_Node, True); - Set_Has_Pragma_Elaborate_Body (Cunit_Ent); + Set_Has_Pragma_Elaborate_Body (Cunit_Ent); -- If we are in dynamic elaboration mode, then we suppress -- elaboration warnings for the unit, since it is definitely @@ -5991,7 +6002,7 @@ package body Sem_Prag is Present (Source_Location) then Error_Pragma - ("parameter profile and source location can not " & + ("parameter profile and source location cannot " & "be used together in pragma%"); end if; @@ -8141,6 +8152,28 @@ package body Sem_Prag is S : String_Id; Active : Boolean := True; + procedure Check_Obsolete_Subprogram; + -- Checks if Subp is a subprogram declaration node, and if so + -- replaces Subp by the defining entity of the subprogram. If not, + -- issues an error message + + ------------------------------ + -- Check_Obsolete_Subprogram-- + ------------------------------ + + procedure Check_Obsolete_Subprogram is + begin + if Nkind (Subp) /= N_Subprogram_Declaration then + Error_Pragma + ("pragma% misplaced, must immediately " & + "follow subprogram/package declaration"); + else + Subp := Defining_Entity (Subp); + end if; + end Check_Obsolete_Subprogram; + + -- Start of processing for pragma Obsolescent + begin GNAT_Pragma; Check_At_Most_N_Arguments (2); @@ -8153,6 +8186,7 @@ package body Sem_Prag is if Present (Prev (N)) then Subp := Prev (N); + Check_Obsolete_Subprogram; -- Second possibility, stand alone subprogram declaration with the -- pragma immediately following the declaration. @@ -8161,25 +8195,22 @@ package body Sem_Prag is and then Nkind (Parent (N)) = N_Compilation_Unit_Aux then Subp := Unit (Parent (Parent (N))); + Check_Obsolete_Subprogram; - -- Any other possibility is a misplacement + -- Only other possibility is library unit placement for package else - Subp := Empty; - end if; - - -- Check correct placement + Subp := Find_Lib_Unit_Name; - if Nkind (Subp) /= N_Subprogram_Declaration then - Error_Pragma - ("pragma% misplaced, must immediately " & - "follow subprogram spec"); + if Ekind (Subp) /= E_Package + and then Ekind (Subp) /= E_Generic_Package + then + Check_Obsolete_Subprogram; + end if; end if; -- If OK placement, acquire arguments - Subp := Defining_Entity (Subp); - if Arg_Count >= 1 then -- Deal with static string argument @@ -9907,8 +9938,7 @@ package body Sem_Prag is ("pragma% requires separate spec and must come before body"); elsif Rep_Item_Too_Early (E, N) - or else - Rep_Item_Too_Late (E, N) + or else Rep_Item_Too_Late (E, N) then raise Pragma_Exit; @@ -10346,16 +10376,58 @@ package body Sem_Prag is -------------- -- pragma Warnings (On | Off, [LOCAL_NAME]) + -- pragma Warnings (static_string_EXPRESSION); when Pragma_Warnings => Warnings : begin GNAT_Pragma; Check_At_Least_N_Arguments (1); - Check_At_Most_N_Arguments (2); Check_No_Identifiers; - -- One argument case was processed by parser in Par.Prag + -- One argument case - if Arg_Count /= 1 then + if Arg_Count = 1 then + declare + Argx : constant Node_Id := Get_Pragma_Arg (Arg1); + + begin + -- On/Off one argument case was processed by parser + + if Nkind (Argx) = N_Identifier + and then + (Chars (Argx) = Name_On + or else + Chars (Argx) = Name_Off) + then + null; + + else + Check_Arg_Is_Static_Expression (Arg1, Standard_String); + + declare + Lit : constant Node_Id := Expr_Value_S (Argx); + Str : constant String_Id := Strval (Lit); + C : Char_Code; + + begin + for J in 1 .. String_Length (Str) loop + C := Get_String_Char (Str, J); + + if In_Character_Range (C) + and then Set_Warning_Switch (Get_Character (C)) + then + null; + else + Error_Pragma_Arg + ("invalid warning switch character", Arg1); + end if; + end loop; + end; + end if; + end; + + -- Two argument case + + elsif Arg_Count /= 1 then Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off); Check_Arg_Count (2); @@ -10372,7 +10444,7 @@ package body Sem_Prag is -- is a conversion. Retrieve the real entity name. if (In_Instance_Body - or else In_Inlined_Body) + or else In_Inlined_Body) and then Nkind (E_Id) = N_Unchecked_Type_Conversion then E_Id := Expression (E_Id); @@ -10390,8 +10462,8 @@ package body Sem_Prag is return; else loop - Set_Warnings_Off (E, - (Chars (Expression (Arg1)) = Name_Off)); + Set_Warnings_Off + (E, (Chars (Expression (Arg1)) = Name_Off)); if Is_Enumeration_Type (E) then declare @@ -10410,6 +10482,10 @@ package body Sem_Prag is end loop; end if; end; + + -- More than two arguments + else + Check_At_Most_N_Arguments (2); end if; end Warnings; diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads index b598fdf2ec2..ed2a9a06f7d 100644 --- a/gcc/ada/sem_prag.ads +++ b/gcc/ada/sem_prag.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,62 +28,62 @@ -- (logically this processing belongs in chapter 4) with Types; use Types; + package Sem_Prag is procedure Analyze_Pragma (N : Node_Id); -- Analyze procedure for pragma reference node N function Delay_Config_Pragma_Analyze (N : Node_Id) return Boolean; - -- N is a pragma appearing in a configuration pragma file. Most - -- such pragmas are analyzed when the file is read, before parsing - -- and analyzing the main unit. However, the analysis of certain - -- pragmas results in adding information to the compiled main unit, - -- and this cannot be done till the main unit is processed. Such - -- pragmas return True from this function and in Frontend pragmas - -- where Delay_Config_Pragma_Analyze is True have their analysis - -- delayed until after the main program is parsed and analyzed. + -- N is a pragma appearing in a configuration pragma file. Most such + -- pragmas are analyzed when the file is read, before parsing and analyzing + -- the main unit. However, the analysis of certain pragmas results in + -- adding information to the compiled main unit, and this cannot be done + -- till the main unit is processed. Such pragmas return True from this + -- function and in Frontend pragmas where Delay_Config_Pragma_Analyze is + -- True have their analysis delayed until after the main program is parsed + -- and analyzed. function Is_Non_Significant_Pragma_Reference (N : Node_Id) return Boolean; -- The node N is a node for an entity and the issue is whether the - -- occurrence is a reference for the purposes of giving warnings - -- about unreferenced variables. This function returns True if the - -- reference is not a reference from this point of view (e.g. the - -- occurrence in a pragma Pack) and False if it is a real reference - -- (e.g. the occcurrence in a pragma Export); + -- occurrence is a reference for the purposes of giving warnings about + -- unreferenced variables. This function returns True if the reference is + -- not a reference from this point of view (e.g. the occurrence in a pragma + -- Pack) and False if it is a real reference (e.g. the occcurrence in a + -- pragma Export); function Is_Pragma_String_Literal (Par : Node_Id) return Boolean; - -- Given an N_Pragma_Argument_Association node, Par, which has the form - -- of an operator symbol, determines whether or not it should be treated - -- as an string literal. This is called by Sem_Ch6.Analyze_Operator_Symbol. - -- If True is returned, the argument is converted to a string literal. If + -- Given an N_Pragma_Argument_Association node, Par, which has the form of + -- an operator symbol, determines whether or not it should be treated as an + -- string literal. This is called by Sem_Ch6.Analyze_Operator_Symbol. If + -- True is returned, the argument is converted to a string literal. If -- False is returned, then the argument is treated as an entity reference -- to the operator. function Is_Config_Static_String (Arg : Node_Id) return Boolean; - -- This is called for a configuration pragma that requires either a - -- string literal or a concatenation of string literals. We cannot - -- use normal static string processing because it is too early in - -- the case of the pragma appearing in a configuration pragmas file. - -- If Arg is of an appropriate form, then this call obtains the string - -- (doing any necessary concatenations) and places it in Name_Buffer, - -- setting Name_Len to its length, and then returns True. If it is - -- not of the correct form, then an appropriate error message is - -- posted, and False is returned. + -- This is called for a configuration pragma that requires either string + -- literal or a concatenation of string literals. We cannot use normal + -- static string processing because it is too early in the case of the + -- pragma appearing in a configuration pragmas file. If Arg is of an + -- appropriate form, then this call obtains the string (doing any necessary + -- concatenations) and places it in Name_Buffer, setting Name_Len to its + -- length, and then returns True. If it is not of the correct form, then an + -- appropriate error message is posted, and False is returned. procedure Process_Compilation_Unit_Pragmas (N : Node_Id); - -- Called at the start of processing compilation unit N to deal with - -- any special issues regarding pragmas. In particular, we have to - -- deal with Suppress_All at this stage, since it appears after the - -- unit instead of before. + -- Called at the start of processing compilation unit N to deal with any + -- special issues regarding pragmas. In particular, we have to deal with + -- Suppress_All at this stage, since it appears after the unit instead of + -- before. procedure Set_Encoded_Interface_Name (E : Entity_Id; S : Node_Id); - -- This routine is used to set an encoded interface name. The node - -- S is an N_String_Literal node for the external name to be set, and - -- E is an entity whose Interface_Name field is to be set. In the - -- normal case where S contains a name that is a valid C identifier, - -- then S is simply set as the value of the Interface_Name. Otherwise - -- it is encoded. See the body for details of the encoding. This - -- encoding is only done on VMS systems, since it seems pretty silly, - -- but is needed to pass some dubious tests in the test suite. + -- This routine is used to set an encoded interface name. The node S is an + -- N_String_Literal node for the external name to be set, and E is an + -- entity whose Interface_Name field is to be set. In the normal case where + -- S contains a name that is a valid C identifier, then S is simply set as + -- the value of the Interface_Name. Otherwise it is encoded. See the body + -- for details of the encoding. This encoding is only done on VMS systems, + -- since it seems pretty silly, but is needed to pass some dubious tests in + -- the test suite. end Sem_Prag; diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index e1e9b7b4ec3..f9093455fbb 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -280,7 +280,6 @@ package body Sem_Res is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Analyze_And_Resolve (N, Typ); @@ -322,7 +321,6 @@ package body Sem_Res is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Analyze_And_Resolve (N); @@ -685,12 +683,30 @@ package body Sem_Res is if Nkind (Parent (N)) = N_Return_Statement and then Same_Argument_List then - exit when not Is_List_Member (Parent (N)) - or else (Nkind (Prev (Parent (N))) /= N_Raise_Statement - and then - (Nkind (Prev (Parent (N))) not in N_Raise_xxx_Error - or else - Present (Condition (Prev (Parent (N)))))); + exit when not Is_List_Member (Parent (N)); + + -- OK, return statement is in a statement list, look for raise + + declare + Nod : Node_Id; + + begin + -- Skip past N_Freeze_Entity nodes generated by expansion + + Nod := Prev (Parent (N)); + while Present (Nod) + and then Nkind (Nod) = N_Freeze_Entity + loop + Prev (Nod); + end loop; + + -- If no raise statement, give warning + + exit when Nkind (Nod) /= N_Raise_Statement + and then + (Nkind (Nod) not in N_Raise_xxx_Error + or else Present (Condition (Nod))); + end; end if; return False; @@ -1124,6 +1140,13 @@ package body Sem_Res is then null; + -- Visibility does not need to be checked in an instance: if the + -- operator was not visible in the generic it has been diagnosed + -- already, else there is an implicit copy of it in the instance. + + elsif In_Instance then + null; + elsif (Op_Name = Name_Op_Multiply or else Op_Name = Name_Op_Divide) and then Is_Fixed_Point_Type (Etype (Left_Opnd (Op_Node))) @@ -2316,7 +2339,6 @@ package body Sem_Res is if Suppress = All_Checks then declare Svg : constant Suppress_Array := Scope_Suppress; - begin Scope_Suppress := (others => True); Resolve (N, Typ); @@ -2326,7 +2348,6 @@ package body Sem_Res is else declare Svg : constant Boolean := Scope_Suppress (Suppress); - begin Scope_Suppress (Suppress) := True; Resolve (N, Typ); @@ -3519,7 +3540,6 @@ package body Sem_Res is It : Interp; Norm_OK : Boolean; Scop : Entity_Id; - W : Node_Id; begin -- The context imposes a unique interpretation with type Typ on a @@ -3659,39 +3679,9 @@ package body Sem_Res is Kill_Current_Values; end if; - -- Deal with call to obsolescent subprogram. Note that we always allow - -- such calls in the compiler itself and the run-time, since we assume - -- that we know what we are doing in such cases. For example, the calls - -- in Ada.Characters.Handling to its own obsolescent subprograms are - -- just fine. - - if Is_Obsolescent (Nam) and then not GNAT_Mode then - Check_Restriction (No_Obsolescent_Features, N); - - if Warn_On_Obsolescent_Feature then - Error_Msg_NE ("call to obsolescent subprogram&?", N, Nam); - - -- Output additional warning if present - - W := Obsolescent_Warning (Nam); + -- Check for call to subprogram marked Is_Obsolescent - if Present (W) then - Name_Buffer (1) := '|'; - Name_Buffer (2) := '?'; - Name_Len := 2; - - -- Add characters to message, and output message - - for J in 1 .. String_Length (Strval (W)) loop - Add_Char_To_Name_Buffer ('''); - Add_Char_To_Name_Buffer - (Get_Character (Get_String_Char (Strval (W), J))); - end loop; - - Error_Msg_N (Name_Buffer (1 .. Name_Len), N); - end if; - end if; - end if; + Check_Obsolescent (Nam, N); -- Check that a procedure call does not occur in the context of the -- entry call statement of a conditional or timed entry call. Note that @@ -3720,7 +3710,8 @@ package body Sem_Res is and then not Is_Controlling_Limited_Procedure (Nam) then Error_Msg_N - ("procedure or entry call required in select statement", N); + ("entry call, entry renaming or dispatching primitive " & + "of limited or synchronized interface required", N); end if; end if; @@ -5469,25 +5460,47 @@ package body Sem_Res is and then Has_Compatible_Type (Arg, Typ) and then Etype (Arg) /= Any_Type then - Error_Msg_N ("ambiguous operand for concatenation!", Arg); declare - I : Interp_Index; - It : Interp; + I : Interp_Index; + It : Interp; + Func : Entity_Id; begin Get_First_Interp (Arg, I, It); - while Present (It.Nam) loop - if Base_Type (Etype (It.Nam)) = Base_Type (Typ) - or else Base_Type (Etype (It.Nam)) = - Base_Type (Component_Type (Typ)) - then + Func := It.Nam; + Get_Next_Interp (I, It); + + -- Special-case the error message when the overloading + -- is caused by a function that yields and array and + -- can be called without parameters. + + if It.Nam = Func then + Error_Msg_Sloc := Sloc (Func); + Error_Msg_N ("\ambiguous call to function#", Arg); + Error_Msg_NE + ("\interpretation as call yields&", Arg, Typ); + Error_Msg_NE + ("\interpretation as indexing of call yields&", + Arg, Component_Type (Typ)); + + else + Error_Msg_N ("ambiguous operand for concatenation!", + Arg); + Get_First_Interp (Arg, I, It); + while Present (It.Nam) loop Error_Msg_Sloc := Sloc (It.Nam); - Error_Msg_N ("\possible interpretation#", Arg); - end if; - Get_Next_Interp (I, It); - end loop; + if Base_Type (It.Typ) = Base_Type (Typ) + or else Base_Type (It.Typ) = + Base_Type (Component_Type (Typ)) + then + Error_Msg_N ("\possible interpretation#", Arg); + end if; + + Get_Next_Interp (I, It); + end loop; + end if; end; end if; @@ -6536,13 +6549,14 @@ package body Sem_Res is end if; -- Resolve the real operand with largest available precision + if Etype (Right_Opnd (Operand)) = Universal_Real then Rop := New_Copy_Tree (Right_Opnd (Operand)); else Rop := New_Copy_Tree (Left_Opnd (Operand)); end if; - Resolve (Rop, Standard_Long_Long_Float); + Resolve (Rop, Universal_Real); -- If the operand is a literal (it could be a non-static and -- illegal exponentiation) check whether the use of Duration @@ -6690,23 +6704,11 @@ package body Sem_Res is Hi : Uint; begin - -- Generate warning for expressions like abs (x mod 2) - - if Warn_On_Redundant_Constructs - and then Nkind (N) = N_Op_Abs - then - Determine_Range (Right_Opnd (N), OK, Lo, Hi); - - if OK and then Hi >= Lo and then Lo >= 0 then - Error_Msg_N - ("?abs applied to known non-negative value has no effect", N); - end if; - end if; - -- Generate warning for expressions like -5 mod 3 if Paren_Count (N) = 0 and then Nkind (N) = N_Op_Minus + and then Paren_Count (Right_Opnd (N)) = 0 and then Nkind (Right_Opnd (N)) = N_Op_Mod and then Comes_From_Source (N) then @@ -6732,6 +6734,19 @@ package body Sem_Res is Set_Etype (N, B_Typ); Resolve (R, B_Typ); + -- Generate warning for expressions like abs (x mod 2) + + if Warn_On_Redundant_Constructs + and then Nkind (N) = N_Op_Abs + then + Determine_Range (Right_Opnd (N), OK, Lo, Hi); + + if OK and then Hi >= Lo and then Lo >= 0 then + Error_Msg_N + ("?abs applied to known non-negative value has no effect", N); + end if; + end if; + Check_Unset_Reference (R); Generate_Operator_Reference (N, B_Typ); Eval_Unary_Op (N); @@ -7187,21 +7202,35 @@ package body Sem_Res is -- is no context type and the removal of the spurious operations -- must be done explicitly here. + -- The node may be labelled overloaded, but still contain only + -- one interpretation because others were discarded in previous + -- filters. If this is the case, retain the single interpretation + -- if legal. + Get_First_Interp (Operand, I, It); + Opnd_Type := It.Typ; + Get_Next_Interp (I, It); - while Present (It.Typ) loop - if It.Typ = Standard_Void_Type then - Remove_Interp (I); - end if; + if Present (It.Typ) + and then Opnd_Type /= Standard_Void_Type + then + -- More than one candidate interpretation is available - if Present (System_Aux_Id) - and then Is_Descendent_Of_Address (It.Typ) - then - Remove_Interp (I); - end if; + Get_First_Interp (Operand, I, It); + while Present (It.Typ) loop + if It.Typ = Standard_Void_Type then + Remove_Interp (I); + end if; - Get_Next_Interp (I, It); - end loop; + if Present (System_Aux_Id) + and then Is_Descendent_Of_Address (It.Typ) + then + Remove_Interp (I); + end if; + + Get_Next_Interp (I, It); + end loop; + end if; Get_First_Interp (Operand, I, It); I1 := I; diff --git a/gcc/ada/sem_res.ads b/gcc/ada/sem_res.ads index 2ff4d06e241..f1a098f2c7a 100644 --- a/gcc/ada/sem_res.ads +++ b/gcc/ada/sem_res.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_type.adb b/gcc/ada/sem_type.adb index eca91e59820..94c4c5c060e 100644 --- a/gcc/ada/sem_type.adb +++ b/gcc/ada/sem_type.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -913,7 +913,10 @@ package body Sem_Type is and then Designated_Type (T1) = Designated_Type (T2)) or else (T1 = Any_Access - and then Is_Access_Type (Underlying_Type (T2)))) + and then Is_Access_Type (Underlying_Type (T2))) + or else (T2 = Any_Composite + and then + Is_Composite_Type (Underlying_Type (T1)))) then return True; @@ -979,6 +982,13 @@ package body Sem_Type is -- Determine whether one of the candidates is an operation inherited by -- a type that is derived from an actual in an instantiation. + function In_Generic_Actual (Exp : Node_Id) return Boolean; + -- Determine whether the expression is part of a generic actual. At + -- the time the actual is resolved the scope is already that of the + -- instance, but conceptually the resolution of the actual takes place + -- in the enclosing context, and no special disambiguation rules should + -- be applied. + function Is_Actual_Subprogram (S : Entity_Id) return Boolean; -- Determine whether a subprogram is an actual in an enclosing instance. -- An overloading between such a subprogram and one declared outside the @@ -1009,6 +1019,34 @@ package body Sem_Type is -- pathology in the other direction with calls whose multiple overloaded -- actuals make them truly unresolvable. + ------------------------ + -- In_Generic_Actual -- + ------------------------ + + function In_Generic_Actual (Exp : Node_Id) return Boolean is + Par : constant Node_Id := Parent (Exp); + + begin + if No (Par) then + return False; + + elsif Nkind (Par) in N_Declaration then + if Nkind (Par) = N_Object_Declaration + or else Nkind (Par) = N_Object_Renaming_Declaration + then + return Present (Corresponding_Generic_Association (Par)); + else + return False; + end if; + + elsif Nkind (Par) in N_Statement_Other_Than_Procedure_Call then + return False; + + else + return In_Generic_Actual (Parent (Par)); + end if; + end In_Generic_Actual; + --------------------------- -- Inherited_From_Actual -- --------------------------- @@ -1372,7 +1410,9 @@ package body Sem_Type is -- case the resolution was to the explicit declaration in the -- generic, and remains so in the instance. - elsif In_Instance then + elsif In_Instance + and then not In_Generic_Actual (N) + then if Nkind (N) = N_Function_Call or else Nkind (N) = N_Procedure_Call_Statement then @@ -1801,7 +1841,16 @@ package body Sem_Type is return True; end if; - E := Typ; + -- Handle private types + + if Present (Full_View (Typ)) + and then not Is_Concurrent_Type (Full_View (Typ)) + then + E := Full_View (Typ); + else + E := Typ; + end if; + loop if Present (Abstract_Interfaces (E)) and then Present (Abstract_Interfaces (E)) @@ -1819,7 +1868,12 @@ package body Sem_Type is end loop; end if; - exit when Etype (E) = E; + exit when Etype (E) = E + + -- Handle private types + + or else (Present (Full_View (Etype (E))) + and then Full_View (Etype (E)) = E); -- Check if the current type is a direct derivation of the -- interface @@ -1828,14 +1882,20 @@ package body Sem_Type is return True; end if; - -- Climb to the immediate ancestor + -- Climb to the immediate ancestor handling private types - E := Etype (E); + if Present (Full_View (Etype (E))) then + E := Full_View (Etype (E)); + else + E := Etype (E); + end if; end loop; return False; end Iface_Present_In_Ancestor; + -- Start of processing for Interface_Present_In_Ancestor + begin if Is_Access_Type (Typ) then Target_Typ := Etype (Directly_Designated_Type (Typ)); @@ -1879,6 +1939,12 @@ package body Sem_Type is if Ekind (Target_Typ) = E_Incomplete_Type then pragma Assert (Present (Non_Limited_View (Target_Typ))); Target_Typ := Non_Limited_View (Target_Typ); + + -- Protect the frontend against previously detected errors + + if Ekind (Target_Typ) = E_Incomplete_Type then + return False; + end if; end if; return Iface_Present_In_Ancestor (Target_Typ); diff --git a/gcc/ada/sem_type.ads b/gcc/ada/sem_type.ads index 7f11512f8b1..63c65ec7bc3 100644 --- a/gcc/ada/sem_type.ads +++ b/gcc/ada/sem_type.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -91,7 +91,7 @@ package Sem_Type is ----------------- procedure Init_Interp_Tables; - -- Invoked by gnatf when processing multiple files. + -- Invoked by gnatf when processing multiple files procedure Collect_Interps (N : Node_Id); -- Invoked when the name N has more than one visible interpretation. @@ -131,7 +131,7 @@ package Sem_Type is -- of the operands of N, to check visibility. procedure End_Interp_List; - -- End the list of interpretations of current node. + -- End the list of interpretations of current node procedure Get_First_Interp (N : Node_Id; diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index f2835f67461..25f33b15a6b 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -41,6 +41,8 @@ with Nlists; use Nlists; with Nmake; use Nmake; with Output; use Output; with Opt; use Opt; +with Restrict; use Restrict; +with Rident; use Rident; with Rtsfind; use Rtsfind; with Scans; use Scans; with Scn; use Scn; @@ -863,6 +865,52 @@ package body Sem_Util is end if; end Check_Fully_Declared; + ----------------------- + -- Check_Obsolescent -- + ----------------------- + + procedure Check_Obsolescent (Nam : Entity_Id; N : Node_Id) is + W : Node_Id; + + begin + -- Note that we always allow obsolescent references in the compiler + -- itself and the run time, since we assume that we know what we are + -- doing in such cases. For example the calls in Ada.Characters.Handling + -- to its own obsolescent subprograms are just fine. + + if Is_Obsolescent (Nam) and then not GNAT_Mode then + Check_Restriction (No_Obsolescent_Features, N); + + if Warn_On_Obsolescent_Feature then + if Is_Package_Or_Generic_Package (Nam) then + Error_Msg_NE ("with of obsolescent package&?", N, Nam); + else + Error_Msg_NE ("call to obsolescent subprogram&?", N, Nam); + end if; + + -- Output additional warning if present + + W := Obsolescent_Warning (Nam); + + if Present (W) then + Name_Buffer (1) := '|'; + Name_Buffer (2) := '?'; + Name_Len := 2; + + -- Add characters to message, and output message + + for J in 1 .. String_Length (Strval (W)) loop + Add_Char_To_Name_Buffer ('''); + Add_Char_To_Name_Buffer + (Get_Character (Get_String_Char (Strval (W), J))); + end loop; + + Error_Msg_N (Name_Buffer (1 .. Name_Len), N); + end if; + end if; + end if; + end Check_Obsolescent; + ------------------------------------------ -- Check_Potentially_Blocking_Operation -- ------------------------------------------ @@ -955,11 +1003,10 @@ package body Sem_Util is null; end if; - elsif (Is_Package (B_Scope) - and then Nkind ( - Parent (Declaration_Node (First_Subtype (T)))) - /= N_Package_Body) - + elsif (Is_Package_Or_Generic_Package (B_Scope) + and then + Nkind (Parent (Declaration_Node (First_Subtype (T)))) /= + N_Package_Body) or else Is_Derived_Type (B_Type) then -- The primitive operations appear after the base type, except @@ -1618,6 +1665,26 @@ package body Sem_Util is E : constant Entity_Id := Current_Entity_In_Scope (Def_Id); S : constant Entity_Id := Current_Scope; + function Is_Private_Component_Renaming (N : Node_Id) return Boolean; + -- Recognize a renaming declaration that is introduced for private + -- components of a protected type. We treat these as weak declarations + -- so that they are overridden by entities with the same name that + -- come from source, such as formals or local variables of a given + -- protected declaration. + + ----------------------------------- + -- Is_Private_Component_Renaming -- + ----------------------------------- + + function Is_Private_Component_Renaming (N : Node_Id) return Boolean is + begin + return not Comes_From_Source (N) + and then not Comes_From_Source (Current_Scope) + and then Nkind (N) = N_Object_Renaming_Declaration; + end Is_Private_Component_Renaming; + + -- Start of processing for Enter_Name + begin Generate_Definition (Def_Id); @@ -1742,6 +1809,9 @@ package body Sem_Util is then return; + elsif Is_Private_Component_Renaming (Parent (Def_Id)) then + return; + -- In the body or private part of an instance, a type extension -- may introduce a component with the same name as that of an -- actual. The legality rule is not enforced, but the semantics @@ -3181,7 +3251,7 @@ package body Sem_Util is function In_Visible_Part (Scope_Id : Entity_Id) return Boolean is begin return - Is_Package (Scope_Id) + Is_Package_Or_Generic_Package (Scope_Id) and then In_Open_Scopes (Scope_Id) and then not In_Package_Body (Scope_Id) and then not In_Private_Part (Scope_Id); @@ -3450,26 +3520,30 @@ package body Sem_Util is function Is_Controlling_Limited_Procedure (Proc_Nam : Entity_Id) return Boolean is - Param_Typ : Entity_Id; + Param_Typ : Entity_Id := Empty; begin - -- Proc_Nam was found to be a primitive operation of a limited interface - - if Ekind (Proc_Nam) = E_Procedure then - Param_Typ := Etype (Parameter_Type (First (Parameter_Specifications ( - Parent (Proc_Nam))))); - return - Is_Interface (Param_Typ) - and then Is_Limited_Record (Param_Typ); + if Ekind (Proc_Nam) = E_Procedure + and then Present (Parameter_Specifications (Parent (Proc_Nam))) + then + Param_Typ := Etype (Parameter_Type (First ( + Parameter_Specifications (Parent (Proc_Nam))))); -- In this case where an Itype was created, the procedure call has been -- rewritten. elsif Present (Associated_Node_For_Itype (Proc_Nam)) and then Present (Original_Node (Associated_Node_For_Itype (Proc_Nam))) + and then + Present (Parameter_Associations + (Associated_Node_For_Itype (Proc_Nam))) then - Param_Typ := Etype (First (Parameter_Associations ( - Associated_Node_For_Itype (Proc_Nam)))); + Param_Typ := + Etype (First (Parameter_Associations + (Associated_Node_For_Itype (Proc_Nam)))); + end if; + + if Present (Param_Typ) then return Is_Interface (Param_Typ) and then Is_Limited_Record (Param_Typ); @@ -3500,7 +3574,6 @@ package body Sem_Util is function Is_Declared_Within_Variant (Comp : Entity_Id) return Boolean is Comp_Decl : constant Node_Id := Parent (Comp); Comp_List : constant Node_Id := Parent (Comp_Decl); - begin return Nkind (Parent (Comp_List)) = N_Variant; end Is_Declared_Within_Variant; @@ -3717,7 +3790,6 @@ package body Sem_Util is S : constant Ureal := Small_Value (T); M : Urealp.Save_Mark; R : Boolean; - begin M := Urealp.Mark; R := (U = UR_Trunc (U / S) * S); @@ -4033,14 +4105,12 @@ package body Sem_Util is declare Ent : constant Entity_Id := Entity (Expr); Sub : constant Entity_Id := Enclosing_Subprogram (Ent); - begin if Ekind (Ent) /= E_Variable and then Ekind (Ent) /= E_In_Out_Parameter then return False; - else return Present (Sub) and then Sub = Current_Subprogram; end if; @@ -4181,10 +4251,10 @@ package body Sem_Util is return True; -- Unchecked conversions are allowed only if they come from the - -- generated code, which sometimes uses unchecked conversions for - -- out parameters in cases where code generation is unaffected. - -- We tell source unchecked conversions by seeing if they are - -- rewrites of an original UC function call, or of an explicit + -- generated code, which sometimes uses unchecked conversions for out + -- parameters in cases where code generation is unaffected. We tell + -- source unchecked conversions by seeing if they are rewrites of an + -- original Unchecked_Conversion function call, or of an explicit -- conversion of a function call. elsif Nkind (AV) = N_Unchecked_Type_Conversion then @@ -4346,7 +4416,6 @@ package body Sem_Util is elsif Is_Private_Type (Typ) then declare U : constant Entity_Id := Underlying_Type (Typ); - begin if No (U) then return True; @@ -4446,6 +4515,7 @@ package body Sem_Util is if Nkind (The_Unit) /= N_Package_Declaration then return False; end if; + return Is_Remote_Call_Interface (Defining_Entity (The_Unit)); end Is_RCI_Pkg_Decl_Cunit; @@ -6451,20 +6521,37 @@ package body Sem_Util is S : constant Entity_Id := Current_Scope; begin - if S = Standard_Standard - or else (Is_Public (S) - and then (Ekind (S) = E_Package - or else Is_Record_Type (S) - or else Ekind (S) = E_Void)) + -- Everything in the scope of Standard is public + + if S = Standard_Standard then + Set_Is_Public (Id); + + -- Entity is definitely not public if enclosing scope is not public + + elsif not Is_Public (S) then + return; + + -- An object declaration that occurs in a handled sequence of statements + -- is the declaration for a temporary object generated by the expander. + -- It never needs to be made public and furthermore, making it public + -- can cause back end problems if it is of variable size. + + elsif Nkind (Parent (Id)) = N_Object_Declaration + and then + Nkind (Parent (Parent (Id))) = N_Handled_Sequence_Of_Statements then + return; + + -- Entities in public packages or records are public + + elsif Ekind (S) = E_Package or Is_Record_Type (S) then Set_Is_Public (Id); -- The bounds of an entry family declaration can generate object -- declarations that are visible to the back-end, e.g. in the -- the declaration of a composite type that contains tasks. - elsif Is_Public (S) - and then Is_Concurrent_Type (S) + elsif Is_Concurrent_Type (S) and then not Has_Completion (S) and then Nkind (Parent (Id)) = N_Object_Declaration then @@ -6959,7 +7046,7 @@ package body Sem_Util is end if; if Is_Entity_Name (Expr) - and then Is_Package (Entity (Expr)) + and then Is_Package_Or_Generic_Package (Entity (Expr)) then Error_Msg_N ("found package name!", Expr); diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 27f2abd9708..64dd828a050 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -108,6 +108,12 @@ package Sem_Util is -- place error message on node N. Used in object declarations, type -- conversions, qualified expressions. + procedure Check_Obsolescent (Nam : Entity_Id; N : Node_Id); + -- Nam is either a subprogram or a (generic) package entity. This procedure + -- checks if the Is_Obsolescent flag is set and if so, outputs appropriate + -- diagnostics (it also checks the appropriate restriction). N is the node + -- to which error messages are attached. + procedure Check_Potentially_Blocking_Operation (N : Node_Id); -- N is one of the statement forms that is a potentially blocking -- operation. If it appears within a protected action, emit warning. diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index d3003df5400..3f3d938a848 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -294,7 +294,20 @@ package body Sem_Warn is or else List_Containing (Prev) /= Generic_Formal_Declarations (P); - -- if we reach a subprogram body, entity is not referenceable + -- Similarly, the generic formals of a generic subprogram + -- are not accessible. + + when N_Generic_Subprogram_Declaration => + if Is_List_Member (Prev) + and then List_Containing (Prev) = + Generic_Formal_Declarations (P) + then + return False; + else + P := Parent (P); + end if; + + -- If we reach a subprogram body, entity is not referenceable -- unless it is the defining entity of the body. This will -- happen, e.g. when a function is an attribute renaming that -- is rewritten as a body. @@ -451,8 +464,20 @@ package body Sem_Warn is and then Is_True_Constant (E1) and then not Generic_Package_Spec_Entity (E1) then - Error_Msg_N - ("& is not modified, could be declared constant?", E1); + -- A special case, if this variable is volatile and not + -- imported, it is not helpful to tell the programmer + -- to mark the variable as constant, since this would be + -- illegal by virtue of RM C.6(13). + + if (Is_Volatile (E1) or else Has_Volatile_Components (E1)) + and then not Is_Imported (E1) + then + Error_Msg_N + ("& is not modified, volatile has no effect?", E1); + else + Error_Msg_N + ("& is not modified, could be declared constant?", E1); + end if; end if; -- Check for unset reference, note that we exclude access @@ -1565,6 +1590,192 @@ package body Sem_Warn is end loop; end Output_Unreferenced_Messages; + ------------------------ + -- Set_Warning_Switch -- + ------------------------ + + function Set_Warning_Switch (C : Character) return Boolean is + begin + case C is + when 'a' => + Check_Unreferenced := True; + Check_Unreferenced_Formals := True; + Check_Withs := True; + Constant_Condition_Warnings := True; + Implementation_Unit_Warnings := True; + Ineffective_Inline_Warnings := True; + Warn_On_Ada_2005_Compatibility := True; + Warn_On_Bad_Fixed_Value := True; + Warn_On_Constant := True; + Warn_On_Export_Import := True; + Warn_On_Modified_Unread := True; + Warn_On_No_Value_Assigned := True; + Warn_On_Obsolescent_Feature := True; + Warn_On_Redundant_Constructs := True; + Warn_On_Unchecked_Conversion := True; + Warn_On_Unrecognized_Pragma := True; + + when 'A' => + Check_Unreferenced := False; + Check_Unreferenced_Formals := False; + Check_Withs := False; + Constant_Condition_Warnings := False; + Elab_Warnings := False; + Implementation_Unit_Warnings := False; + Ineffective_Inline_Warnings := False; + Warn_On_Ada_2005_Compatibility := False; + Warn_On_Bad_Fixed_Value := False; + Warn_On_Constant := False; + Warn_On_Dereference := False; + Warn_On_Export_Import := False; + Warn_On_Hiding := False; + Warn_On_Modified_Unread := False; + Warn_On_No_Value_Assigned := False; + Warn_On_Obsolescent_Feature := False; + Warn_On_Redundant_Constructs := False; + Warn_On_Unchecked_Conversion := False; + Warn_On_Unrecognized_Pragma := False; + + when 'b' => + Warn_On_Bad_Fixed_Value := True; + + when 'B' => + Warn_On_Bad_Fixed_Value := False; + + when 'c' => + Constant_Condition_Warnings := True; + + when 'C' => + Constant_Condition_Warnings := False; + + when 'd' => + Warn_On_Dereference := True; + + when 'D' => + Warn_On_Dereference := False; + + when 'e' => + Warning_Mode := Treat_As_Error; + + when 'f' => + Check_Unreferenced_Formals := True; + + when 'F' => + Check_Unreferenced_Formals := False; + + when 'g' => + Warn_On_Unrecognized_Pragma := True; + + when 'G' => + Warn_On_Unrecognized_Pragma := False; + + when 'h' => + Warn_On_Hiding := True; + + when 'H' => + Warn_On_Hiding := False; + + when 'i' => + Implementation_Unit_Warnings := True; + + when 'I' => + Implementation_Unit_Warnings := False; + + when 'j' => + Warn_On_Obsolescent_Feature := True; + + when 'J' => + Warn_On_Obsolescent_Feature := False; + + when 'k' => + Warn_On_Constant := True; + + when 'K' => + Warn_On_Constant := False; + + when 'l' => + Elab_Warnings := True; + + when 'L' => + Elab_Warnings := False; + + when 'm' => + Warn_On_Modified_Unread := True; + + when 'M' => + Warn_On_Modified_Unread := False; + + when 'n' => + Warning_Mode := Normal; + + when 'o' => + Address_Clause_Overlay_Warnings := True; + + when 'O' => + Address_Clause_Overlay_Warnings := False; + + when 'p' => + Ineffective_Inline_Warnings := True; + + when 'P' => + Ineffective_Inline_Warnings := False; + + when 'r' => + Warn_On_Redundant_Constructs := True; + + when 'R' => + Warn_On_Redundant_Constructs := False; + + when 's' => + Warning_Mode := Suppress; + + when 'u' => + Check_Unreferenced := True; + Check_Withs := True; + Check_Unreferenced_Formals := True; + + when 'U' => + Check_Unreferenced := False; + Check_Withs := False; + Check_Unreferenced_Formals := False; + + when 'v' => + Warn_On_No_Value_Assigned := True; + + when 'V' => + Warn_On_No_Value_Assigned := False; + + when 'x' => + Warn_On_Export_Import := True; + + when 'X' => + Warn_On_Export_Import := False; + + when 'y' => + Warn_On_Ada_2005_Compatibility := True; + + when 'Y' => + Warn_On_Ada_2005_Compatibility := False; + + when 'z' => + Warn_On_Unchecked_Conversion := True; + + when 'Z' => + Warn_On_Unchecked_Conversion := False; + + -- Allow and ignore 'w' so that the old + -- format (e.g. -gnatwuwl) will work. + + when 'w' => + null; + + when others => + return False; + end case; + + return True; + end Set_Warning_Switch; + ----------------------------- -- Warn_On_Known_Condition -- ----------------------------- diff --git a/gcc/ada/sem_warn.ads b/gcc/ada/sem_warn.ads index cec942733ba..be2fd6f11af 100644 --- a/gcc/ada/sem_warn.ads +++ b/gcc/ada/sem_warn.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2001 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,15 @@ with Types; use Types; package Sem_Warn is + -------------------- + -- Initialization -- + -------------------- + + function Set_Warning_Switch (C : Character) return Boolean; + -- This function sets the warning switch or switches corresponding to + -- the given character. It is used for processing a -gnatw switch on the + -- command line, or a string literal in pragma Warnings. + ------------------------------------------ -- Routines to Handle Unused References -- ------------------------------------------ diff --git a/gcc/ada/sfn_scan.adb b/gcc/ada/sfn_scan.adb index 2deaf26fef4..d3d3dd4904f 100644 --- a/gcc/ada/sfn_scan.adb +++ b/gcc/ada/sfn_scan.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2000-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sfn_scan.ads b/gcc/ada/sfn_scan.ads index 8ad6d840a3f..8ce848f2866 100644 --- a/gcc/ada/sfn_scan.ads +++ b/gcc/ada/sfn_scan.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2000-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2000-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sinfo.adb b/gcc/ada/sinfo.adb index 83e094caae3..673d4541782 100644 --- a/gcc/ada/sinfo.adb +++ b/gcc/ada/sinfo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -175,6 +175,15 @@ package body Sinfo is return Flag4 (N); end Acts_As_Spec; + function Actual_Designated_Subtype + (N : Node_Id) return Node_Id is + begin + pragma Assert (False + or else NT (N).Nkind = N_Explicit_Dereference + or else NT (N).Nkind = N_Free_Statement); + return Node2 (N); + end Actual_Designated_Subtype; + function Aggregate_Bounds (N : Node_Id) return Node_Id is begin @@ -876,6 +885,14 @@ package body Sinfo is return Flag13 (N); end Do_Tag_Check; + function Elaborate_All_Desirable + (N : Node_Id) return Boolean is + begin + pragma Assert (False + or else NT (N).Nkind = N_With_Clause); + return Flag9 (N); + end Elaborate_All_Desirable; + function Elaborate_All_Present (N : Node_Id) return Boolean is begin @@ -884,6 +901,14 @@ package body Sinfo is return Flag14 (N); end Elaborate_All_Present; + function Elaborate_Desirable + (N : Node_Id) return Boolean is + begin + pragma Assert (False + or else NT (N).Nkind = N_With_Clause); + return Flag11 (N); + end Elaborate_Desirable; + function Elaborate_Present (N : Node_Id) return Boolean is begin @@ -2745,6 +2770,15 @@ package body Sinfo is Set_Flag4 (N, Val); end Set_Acts_As_Spec; + procedure Set_Actual_Designated_Subtype + (N : Node_Id; Val : Node_Id) is + begin + pragma Assert (False + or else NT (N).Nkind = N_Explicit_Dereference + or else NT (N).Nkind = N_Free_Statement); + Set_Node2 (N, Val); + end Set_Actual_Designated_Subtype; + procedure Set_Aggregate_Bounds (N : Node_Id; Val : Node_Id) is begin @@ -3446,6 +3480,14 @@ package body Sinfo is Set_Flag13 (N, Val); end Set_Do_Tag_Check; + procedure Set_Elaborate_All_Desirable + (N : Node_Id; Val : Boolean := True) is + begin + pragma Assert (False + or else NT (N).Nkind = N_With_Clause); + Set_Flag9 (N, Val); + end Set_Elaborate_All_Desirable; + procedure Set_Elaborate_All_Present (N : Node_Id; Val : Boolean := True) is begin @@ -3454,6 +3496,14 @@ package body Sinfo is Set_Flag14 (N, Val); end Set_Elaborate_All_Present; + procedure Set_Elaborate_Desirable + (N : Node_Id; Val : Boolean := True) is + begin + pragma Assert (False + or else NT (N).Nkind = N_With_Clause); + Set_Flag11 (N, Val); + end Set_Elaborate_Desirable; + procedure Set_Elaborate_Present (N : Node_Id; Val : Boolean := True) is begin diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads index 6bc6926bba1..60f8be32224 100644 --- a/gcc/ada/sinfo.ads +++ b/gcc/ada/sinfo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -90,11 +90,11 @@ package Sinfo is -- node in the checks. -- Add an appropriate section to the case statement in sprint.adb -- Add an appropriate section to the case statement in sem.adb - -- Add an appropraite section to the case statement in exp_util.adb + -- Add an appropriate section to the case statement in exp_util.adb -- (Insert_Actions procedure) - -- For a subexpression, add an appropriate sections to the case + -- For a subexpression, add an appropriate section to the case -- statement in sem_eval.adb - -- For a subexpression, add an appropriate sections to the case + -- For a subexpression, add an appropriate section to the case -- statement in sem_res.adb -- Finally, four utility programs must be run: @@ -457,27 +457,36 @@ package Sinfo is -- The following flag fields appear in all nodes - -- Analyzed + -- Analyzed (Flag1) -- This flag is used to indicate that a node (and all its children -- have been analyzed. It is used to avoid reanalysis of a node that -- has already been analyzed, both for efficiency and functional -- correctness reasons. - -- Error_Posted + -- Comes_From_Source (Flag2) + -- This flag is on for any nodes built by the scanner or parser from + -- the source program, and off for any nodes built by the analyzer or + -- expander. It indicates that a node comes from the original source. + -- This flag is defined in Atree. + + -- Error_Posted (Flag3) -- This flag is used to avoid multiple error messages being posted -- on or referring to the same node. This flag is set if an error -- message refers to a node or is posted on its source location, -- and has the effect of inhibiting further messages involving -- this same node. - -- Comes_From_Source - -- This flag is on for any nodes built by the scanner or parser from - -- the source program, and off for any nodes built by the analyzer or - -- expander. It indicates that a node comes from the original source. - -- This flag is defined in Atree. + -- Has_Dynamic_Length_Check (Flag10-Sem) + -- This flag is present on all nodes. It is set to indicate that one + -- of the routines in unit Checks has generated a length check action + -- which has been inserted at the flagged node. This is used to avoid + -- the generation of duplicate checks. - -- Has_Dynamic_Length_Check and Has_Dynamic_Range_Check also appear on - -- all nodes. They are fully described in the next section. + -- Has_Dynamic_Range_Check (Flag12-Sem) + -- This flag is present on all nodes. It is set to indicate that one + -- of the routines in unit Checks has generated a range check action + -- which has been inserted at the flagged node. This is used to avoid + -- the generation of duplicate checks. ------------------------------------ -- Description of Semantic Fields -- @@ -535,6 +544,15 @@ package Sinfo is -- compilation unit node at the library level for such a subprogram -- (see further description in spec of Lib package). + -- Actual_Designated_Subtype (Node2-Sem) + -- Present in N_Free_Statement and N_Explicit_Dereference nodes. If + -- GIGI needs to known the dynamic constrained subtype of the designated + -- object, this attribute is set to that type. This is done for + -- N_Free_Statements for access-to-classwide types and access to + -- unconstrained packed array types, and for N_Explicit_Dereference + -- when the designated type is an unconstrained packed array and the + -- dereference is the prefix of a 'Size attribute reference. + -- Aggregate_Bounds (Node3-Sem) -- Present in array N_Aggregate nodes. If the aggregate contains -- component associations this field points to an N_Range node whose @@ -831,13 +849,23 @@ package Sinfo is -- yet decided how this flag is used (TBD ???). -- Elaborate_Present (Flag4-Sem) - -- This flag is set in the N_With_Clause node to indicate that a - -- pragma Elaborate pragma appears for the with'ed units. + -- This flag is set in the N_With_Clause node to indicate that pragma + -- Elaborate pragma appears for the with'ed units. + + -- Elaborate_All_Desirable (Flag9-Sem) + -- This flag is set in the N_With_Clause mode to indicate that the static + -- elaboration processing has determined that an Elaborate_All pragma is + -- desirable for correct elaboration for this unit. -- Elaborate_All_Present (Flag14-Sem) -- This flag is set in the N_With_Clause node to indicate that a -- pragma Elaborate_All pragma appears for the with'ed units. + -- Elaborate_Desirable (Flag11-Sem) + -- This flag is set in the N_With_Clause mode to indicate that the static + -- elaboration processing has determined that an Elaborate pragma is + -- desirable for correct elaboration for this unit. + -- Elaboration_Boolean (Node2-Sem) -- This field is present in function and procedure specification -- nodes. If set, it points to the entity for a Boolean flag that @@ -1008,18 +1036,6 @@ package Sinfo is -- handler is deleted during optimization. For further details on why -- this is required, see Exp_Ch11.Remove_Handler_Entries. - -- Has_Dynamic_Length_Check (Flag10-Sem) - -- This flag is present on all nodes. It is set to indicate that one - -- of the routines in unit Checks has generated a length check action - -- which has been inserted at the flagged node. This is used to avoid - -- the generation of duplicate checks. - - -- Has_Dynamic_Range_Check (Flag12-Sem) - -- This flag is present on all nodes. It is set to indicate that one - -- of the routines in unit Checks has generated a range check action - -- which has been inserted at the flagged node. This is used to avoid - -- the generation of duplicate checks. - -- Has_No_Elaboration_Code (Flag17-Sem) -- A flag that appears in the N_Compilation_Unit node to indicate -- whether or not elaboration code is present for this unit. It is @@ -2847,6 +2863,7 @@ package Sinfo is -- N_Explicit_Dereference -- Sloc points to ALL -- Prefix (Node3) + -- Actual_Designated_Subtype (Node2-Sem) -- plus fields for expression ------------------------------- @@ -5217,6 +5234,8 @@ package Sinfo is -- Context_Installed (Flag13-Sem) -- Elaborate_Present (Flag4-Sem) -- Elaborate_All_Present (Flag14-Sem) + -- Elaborate_All_Desirable (Flag9-Sem) + -- Elaborate_Desirable (Flag11-Sem) -- Private_Present (Flag15) set if with_clause has private keyword -- Implicit_With (Flag16-Sem) -- Limited_Present (Flag17) set if LIMITED is present @@ -6233,6 +6252,7 @@ package Sinfo is -- Expression (Node3) argument to unchecked deallocation call -- Storage_Pool (Node1-Sem) -- Procedure_To_Call (Node4-Sem) + -- Actual_Designated_Subtype (Node2-Sem) -- Note: in the case where a debug source file is generated, the Sloc -- for this node points to the FREE keyword in the Sprint file output. @@ -6757,11 +6777,15 @@ package Sinfo is N_Task_Body_Stub, -- N_Generic_Instantiation, N_Later_Decl_Item + -- N_Subprogram_Instantiation N_Function_Instantiation, - N_Package_Instantiation, N_Procedure_Instantiation, + -- N_Generic_Instantiation, N_Later_Decl_Item + + N_Package_Instantiation, + -- N_Unit_Body, N_Later_Decl_Item, N_Proper_Body N_Package_Body, @@ -6797,7 +6821,7 @@ package Sinfo is N_Package_Renaming_Declaration, N_Subprogram_Renaming_Declaration, - -- N_Generic_Renaming_Declarations, N_Renaming_Declaration + -- N_Generic_Renaming_Declaration, N_Renaming_Declaration N_Generic_Function_Renaming_Declaration, N_Generic_Package_Renaming_Declaration, @@ -6813,8 +6837,14 @@ package Sinfo is N_Case_Statement, N_Code_Statement, N_Conditional_Entry_Call, + + -- N_Statement_Other_Than_Procedure_Call. N_Delay_Statement + N_Delay_Relative_Statement, N_Delay_Until_Statement, + + -- N_Statement_Other_Than_Procedure_Call + N_Entry_Call_Statement, N_Free_Statement, N_Goto_Statement, @@ -6940,6 +6970,10 @@ package Sinfo is -- Note: this includes all constructs normally thought of as declarations -- except those which are separately grouped as later declarations. + subtype N_Delay_Statement is Node_Kind range + N_Delay_Relative_Statement .. + N_Delay_Until_Statement; + subtype N_Direct_Name is Node_Kind range N_Identifier .. N_Character_Literal; @@ -6958,7 +6992,7 @@ package Sinfo is subtype N_Generic_Instantiation is Node_Kind range N_Function_Instantiation .. - N_Procedure_Instantiation; + N_Package_Instantiation; subtype N_Generic_Renaming_Declaration is Node_Kind range N_Generic_Function_Renaming_Declaration .. @@ -7036,6 +7070,10 @@ package Sinfo is -- (since overloading is possible, so it needs to go through the normal -- overloading resolution for expressions). + subtype N_Subprogram_Instantiation is Node_Kind range + N_Function_Instantiation .. + N_Procedure_Instantiation; + subtype N_Has_Condition is Node_Kind range N_Exit_Statement .. N_Terminate_Alternative; @@ -7106,6 +7144,9 @@ package Sinfo is function Acts_As_Spec (N : Node_Id) return Boolean; -- Flag4 + function Actual_Designated_Subtype + (N : Node_Id) return Node_Id; -- Node2 + function Aggregate_Bounds (N : Node_Id) return Node_Id; -- Node3 @@ -7325,9 +7366,15 @@ package Sinfo is function Do_Tag_Check (N : Node_Id) return Boolean; -- Flag13 + function Elaborate_All_Desirable + (N : Node_Id) return Boolean; -- Flag9 + function Elaborate_All_Present (N : Node_Id) return Boolean; -- Flag14 + function Elaborate_Desirable + (N : Node_Id) return Boolean; -- Flag11 + function Elaborate_Present (N : Node_Id) return Boolean; -- Flag4 @@ -7919,6 +7966,9 @@ package Sinfo is procedure Set_Acts_As_Spec (N : Node_Id; Val : Boolean := True); -- Flag4 + procedure Set_Actual_Designated_Subtype + (N : Node_Id; Val : Node_Id); -- Node2 + procedure Set_Aggregate_Bounds (N : Node_Id; Val : Node_Id); -- Node3 @@ -8138,9 +8188,15 @@ package Sinfo is procedure Set_Do_Tag_Check (N : Node_Id; Val : Boolean := True); -- Flag13 + procedure Set_Elaborate_All_Desirable + (N : Node_Id; Val : Boolean := True); -- Flag9 + procedure Set_Elaborate_All_Present (N : Node_Id; Val : Boolean := True); -- Flag14 + procedure Set_Elaborate_Desirable + (N : Node_Id; Val : Boolean := True); -- Flag11 + procedure Set_Elaborate_Present (N : Node_Id; Val : Boolean := True); -- Flag4 @@ -8723,6 +8779,7 @@ package Sinfo is pragma Inline (Actions); pragma Inline (Activation_Chain_Entity); pragma Inline (Acts_As_Spec); + pragma Inline (Actual_Designated_Subtype); pragma Inline (Aggregate_Bounds); pragma Inline (Aliased_Present); pragma Inline (All_Others); @@ -8797,7 +8854,9 @@ package Sinfo is pragma Inline (Do_Storage_Check); pragma Inline (Do_Tag_Check); pragma Inline (Elaborate_Present); + pragma Inline (Elaborate_All_Desirable); pragma Inline (Elaborate_All_Present); + pragma Inline (Elaborate_Desirable); pragma Inline (Elaboration_Boolean); pragma Inline (Else_Actions); pragma Inline (Else_Statements); @@ -8991,6 +9050,7 @@ package Sinfo is pragma Inline (Set_Actions); pragma Inline (Set_Activation_Chain_Entity); pragma Inline (Set_Acts_As_Spec); + pragma Inline (Set_Actual_Designated_Subtype); pragma Inline (Set_Aggregate_Bounds); pragma Inline (Set_Aliased_Present); pragma Inline (Set_All_Others); @@ -9065,7 +9125,9 @@ package Sinfo is pragma Inline (Set_Do_Storage_Check); pragma Inline (Set_Do_Tag_Check); pragma Inline (Set_Elaborate_Present); + pragma Inline (Set_Elaborate_All_Desirable); pragma Inline (Set_Elaborate_All_Present); + pragma Inline (Set_Elaborate_Desirable); pragma Inline (Set_Elaboration_Boolean); pragma Inline (Set_Else_Actions); pragma Inline (Set_Else_Statements); diff --git a/gcc/ada/sinput.adb b/gcc/ada/sinput.adb index c838dbb8506..d20adf5aed2 100644 --- a/gcc/ada/sinput.adb +++ b/gcc/ada/sinput.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -86,7 +86,7 @@ package body Sinput is LL : Physical_Line_Number; begin - -- Reallocate the lines tables if necessary. + -- Reallocate the lines tables if necessary -- Note: the reason we do not use the normal Table package -- mechanism is that we have several of these tables. We could diff --git a/gcc/ada/sinput.ads b/gcc/ada/sinput.ads index aaaf0b82782..092707c1c2e 100644 --- a/gcc/ada/sinput.ads +++ b/gcc/ada/sinput.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -655,7 +655,7 @@ private -- we avoid the use of fat pointers. type Logical_Lines_Table_Ptr is access all Logical_Lines_Table_Type; - -- Type used for pointers to logical line tables. + -- Type used for pointers to logical line tables ----------------------- -- Source_File Table -- diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb index 4993c64c83d..c1ca4dde733 100644 --- a/gcc/ada/snames.adb +++ b/gcc/ada/snames.adb @@ -93,6 +93,7 @@ package body Snames is "_disp_conditional_select#" & "_disp_get_prim_op_kind#" & "_disp_timed_select#" & + "_disp_get_task_id#" & "initialize#" & "adjust#" & "finalize#" & @@ -458,6 +459,7 @@ package body Snames is "machine_mantissa#" & "machine_overflows#" & "machine_radix#" & + "machine_rounding#" & "machine_rounds#" & "machine_size#" & "mantissa#" & @@ -639,6 +641,7 @@ package body Snames is "unchecked_conversion#" & "unchecked_deallocation#" & "to_pointer#" & + "free#" & "abstract#" & "aliased#" & "protected#" & @@ -674,6 +677,7 @@ package body Snames is "include_option#" & "language_processing#" & "languages#" & + "library_ali_dir#" & "library_dir#" & "library_auto_init#" & "library_gcc#" & diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads index 6cdb34433ea..caa31e35750 100644 --- a/gcc/ada/snames.ads +++ b/gcc/ada/snames.ads @@ -67,63 +67,63 @@ package Snames is -- The lower case letter entries are used for one character identifiers -- appearing in the source, for example in pragma Interface (C). - Name_A : constant Name_Id := First_Name_Id + Character'Pos ('a'); - Name_B : constant Name_Id := First_Name_Id + Character'Pos ('b'); - Name_C : constant Name_Id := First_Name_Id + Character'Pos ('c'); - Name_D : constant Name_Id := First_Name_Id + Character'Pos ('d'); - Name_E : constant Name_Id := First_Name_Id + Character'Pos ('e'); - Name_F : constant Name_Id := First_Name_Id + Character'Pos ('f'); - Name_G : constant Name_Id := First_Name_Id + Character'Pos ('g'); - Name_H : constant Name_Id := First_Name_Id + Character'Pos ('h'); - Name_I : constant Name_Id := First_Name_Id + Character'Pos ('i'); - Name_J : constant Name_Id := First_Name_Id + Character'Pos ('j'); - Name_K : constant Name_Id := First_Name_Id + Character'Pos ('k'); - Name_L : constant Name_Id := First_Name_Id + Character'Pos ('l'); - Name_M : constant Name_Id := First_Name_Id + Character'Pos ('m'); - Name_N : constant Name_Id := First_Name_Id + Character'Pos ('n'); - Name_O : constant Name_Id := First_Name_Id + Character'Pos ('o'); - Name_P : constant Name_Id := First_Name_Id + Character'Pos ('p'); - Name_Q : constant Name_Id := First_Name_Id + Character'Pos ('q'); - Name_R : constant Name_Id := First_Name_Id + Character'Pos ('r'); - Name_S : constant Name_Id := First_Name_Id + Character'Pos ('s'); - Name_T : constant Name_Id := First_Name_Id + Character'Pos ('t'); - Name_U : constant Name_Id := First_Name_Id + Character'Pos ('u'); - Name_V : constant Name_Id := First_Name_Id + Character'Pos ('v'); - Name_W : constant Name_Id := First_Name_Id + Character'Pos ('w'); - Name_X : constant Name_Id := First_Name_Id + Character'Pos ('x'); - Name_Y : constant Name_Id := First_Name_Id + Character'Pos ('y'); - Name_Z : constant Name_Id := First_Name_Id + Character'Pos ('z'); + Name_A : constant Name_Id := First_Name_Id + Character'Pos ('a'); + Name_B : constant Name_Id := First_Name_Id + Character'Pos ('b'); + Name_C : constant Name_Id := First_Name_Id + Character'Pos ('c'); + Name_D : constant Name_Id := First_Name_Id + Character'Pos ('d'); + Name_E : constant Name_Id := First_Name_Id + Character'Pos ('e'); + Name_F : constant Name_Id := First_Name_Id + Character'Pos ('f'); + Name_G : constant Name_Id := First_Name_Id + Character'Pos ('g'); + Name_H : constant Name_Id := First_Name_Id + Character'Pos ('h'); + Name_I : constant Name_Id := First_Name_Id + Character'Pos ('i'); + Name_J : constant Name_Id := First_Name_Id + Character'Pos ('j'); + Name_K : constant Name_Id := First_Name_Id + Character'Pos ('k'); + Name_L : constant Name_Id := First_Name_Id + Character'Pos ('l'); + Name_M : constant Name_Id := First_Name_Id + Character'Pos ('m'); + Name_N : constant Name_Id := First_Name_Id + Character'Pos ('n'); + Name_O : constant Name_Id := First_Name_Id + Character'Pos ('o'); + Name_P : constant Name_Id := First_Name_Id + Character'Pos ('p'); + Name_Q : constant Name_Id := First_Name_Id + Character'Pos ('q'); + Name_R : constant Name_Id := First_Name_Id + Character'Pos ('r'); + Name_S : constant Name_Id := First_Name_Id + Character'Pos ('s'); + Name_T : constant Name_Id := First_Name_Id + Character'Pos ('t'); + Name_U : constant Name_Id := First_Name_Id + Character'Pos ('u'); + Name_V : constant Name_Id := First_Name_Id + Character'Pos ('v'); + Name_W : constant Name_Id := First_Name_Id + Character'Pos ('w'); + Name_X : constant Name_Id := First_Name_Id + Character'Pos ('x'); + Name_Y : constant Name_Id := First_Name_Id + Character'Pos ('y'); + Name_Z : constant Name_Id := First_Name_Id + Character'Pos ('z'); -- The upper case letter entries are used by expander code for local -- variables that do not require unique names (e.g. formal parameter -- names in constructed procedures) - Name_uA : constant Name_Id := First_Name_Id + Character'Pos ('A'); - Name_uB : constant Name_Id := First_Name_Id + Character'Pos ('B'); - Name_uC : constant Name_Id := First_Name_Id + Character'Pos ('C'); - Name_uD : constant Name_Id := First_Name_Id + Character'Pos ('D'); - Name_uE : constant Name_Id := First_Name_Id + Character'Pos ('E'); - Name_uF : constant Name_Id := First_Name_Id + Character'Pos ('F'); - Name_uG : constant Name_Id := First_Name_Id + Character'Pos ('G'); - Name_uH : constant Name_Id := First_Name_Id + Character'Pos ('H'); - Name_uI : constant Name_Id := First_Name_Id + Character'Pos ('I'); - Name_uJ : constant Name_Id := First_Name_Id + Character'Pos ('J'); - Name_uK : constant Name_Id := First_Name_Id + Character'Pos ('K'); - Name_uL : constant Name_Id := First_Name_Id + Character'Pos ('L'); - Name_uM : constant Name_Id := First_Name_Id + Character'Pos ('M'); - Name_uN : constant Name_Id := First_Name_Id + Character'Pos ('N'); - Name_uO : constant Name_Id := First_Name_Id + Character'Pos ('O'); - Name_uP : constant Name_Id := First_Name_Id + Character'Pos ('P'); - Name_uQ : constant Name_Id := First_Name_Id + Character'Pos ('Q'); - Name_uR : constant Name_Id := First_Name_Id + Character'Pos ('R'); - Name_uS : constant Name_Id := First_Name_Id + Character'Pos ('S'); - Name_uT : constant Name_Id := First_Name_Id + Character'Pos ('T'); - Name_uU : constant Name_Id := First_Name_Id + Character'Pos ('U'); - Name_uV : constant Name_Id := First_Name_Id + Character'Pos ('V'); - Name_uW : constant Name_Id := First_Name_Id + Character'Pos ('W'); - Name_uX : constant Name_Id := First_Name_Id + Character'Pos ('X'); - Name_uY : constant Name_Id := First_Name_Id + Character'Pos ('Y'); - Name_uZ : constant Name_Id := First_Name_Id + Character'Pos ('Z'); + Name_uA : constant Name_Id := First_Name_Id + Character'Pos ('A'); + Name_uB : constant Name_Id := First_Name_Id + Character'Pos ('B'); + Name_uC : constant Name_Id := First_Name_Id + Character'Pos ('C'); + Name_uD : constant Name_Id := First_Name_Id + Character'Pos ('D'); + Name_uE : constant Name_Id := First_Name_Id + Character'Pos ('E'); + Name_uF : constant Name_Id := First_Name_Id + Character'Pos ('F'); + Name_uG : constant Name_Id := First_Name_Id + Character'Pos ('G'); + Name_uH : constant Name_Id := First_Name_Id + Character'Pos ('H'); + Name_uI : constant Name_Id := First_Name_Id + Character'Pos ('I'); + Name_uJ : constant Name_Id := First_Name_Id + Character'Pos ('J'); + Name_uK : constant Name_Id := First_Name_Id + Character'Pos ('K'); + Name_uL : constant Name_Id := First_Name_Id + Character'Pos ('L'); + Name_uM : constant Name_Id := First_Name_Id + Character'Pos ('M'); + Name_uN : constant Name_Id := First_Name_Id + Character'Pos ('N'); + Name_uO : constant Name_Id := First_Name_Id + Character'Pos ('O'); + Name_uP : constant Name_Id := First_Name_Id + Character'Pos ('P'); + Name_uQ : constant Name_Id := First_Name_Id + Character'Pos ('Q'); + Name_uR : constant Name_Id := First_Name_Id + Character'Pos ('R'); + Name_uS : constant Name_Id := First_Name_Id + Character'Pos ('S'); + Name_uT : constant Name_Id := First_Name_Id + Character'Pos ('T'); + Name_uU : constant Name_Id := First_Name_Id + Character'Pos ('U'); + Name_uV : constant Name_Id := First_Name_Id + Character'Pos ('V'); + Name_uW : constant Name_Id := First_Name_Id + Character'Pos ('W'); + Name_uX : constant Name_Id := First_Name_Id + Character'Pos ('X'); + Name_uY : constant Name_Id := First_Name_Id + Character'Pos ('Y'); + Name_uZ : constant Name_Id := First_Name_Id + Character'Pos ('Z'); -- Note: the following table is read by the utility program XSNAMES and -- its format should not be changed without coordinating with this program. @@ -181,127 +181,132 @@ package Snames is Name_uDisp_Get_Prim_Op_Kind : constant Name_Id := N + 034; Name_uDisp_Timed_Select : constant Name_Id := N + 035; + -- Names of routines used in the expansion of Abort, attributes 'Callable + -- and 'Terminated for task interface class-wide types. + + Name_uDisp_Get_Task_Id : constant Name_Id := N + 036; + -- Names of routines in Ada.Finalization, needed by expander - Name_Initialize : constant Name_Id := N + 036; - Name_Adjust : constant Name_Id := N + 037; - Name_Finalize : constant Name_Id := N + 038; + Name_Initialize : constant Name_Id := N + 037; + Name_Adjust : constant Name_Id := N + 038; + Name_Finalize : constant Name_Id := N + 039; -- Names of fields declared in System.Finalization_Implementation, -- needed by the expander when generating code for finalization. - Name_Next : constant Name_Id := N + 039; - Name_Prev : constant Name_Id := N + 040; + Name_Next : constant Name_Id := N + 040; + Name_Prev : constant Name_Id := N + 041; -- Names of TSS routines for implementation of DSA over PolyORB - Name_uTypeCode : constant Name_Id := N + 041; - Name_uFrom_Any : constant Name_Id := N + 042; - Name_uTo_Any : constant Name_Id := N + 043; + Name_uTypeCode : constant Name_Id := N + 042; + Name_uFrom_Any : constant Name_Id := N + 043; + Name_uTo_Any : constant Name_Id := N + 044; -- Names of allocation routines, also needed by expander - Name_Allocate : constant Name_Id := N + 044; - Name_Deallocate : constant Name_Id := N + 045; - Name_Dereference : constant Name_Id := N + 046; + Name_Allocate : constant Name_Id := N + 045; + Name_Deallocate : constant Name_Id := N + 046; + Name_Dereference : constant Name_Id := N + 047; -- Names of Text_IO generic subpackages (see Rtsfind.Text_IO_Kludge) - First_Text_IO_Package : constant Name_Id := N + 047; - Name_Decimal_IO : constant Name_Id := N + 047; - Name_Enumeration_IO : constant Name_Id := N + 048; - Name_Fixed_IO : constant Name_Id := N + 049; - Name_Float_IO : constant Name_Id := N + 050; - Name_Integer_IO : constant Name_Id := N + 051; - Name_Modular_IO : constant Name_Id := N + 052; - Last_Text_IO_Package : constant Name_Id := N + 052; + First_Text_IO_Package : constant Name_Id := N + 048; + Name_Decimal_IO : constant Name_Id := N + 048; + Name_Enumeration_IO : constant Name_Id := N + 049; + Name_Fixed_IO : constant Name_Id := N + 050; + Name_Float_IO : constant Name_Id := N + 051; + Name_Integer_IO : constant Name_Id := N + 052; + Name_Modular_IO : constant Name_Id := N + 053; + Last_Text_IO_Package : constant Name_Id := N + 053; subtype Text_IO_Package_Name is Name_Id range First_Text_IO_Package .. Last_Text_IO_Package; -- Some miscellaneous names used for error detection/recovery - Name_Const : constant Name_Id := N + 053; - Name_Error : constant Name_Id := N + 054; - Name_Go : constant Name_Id := N + 055; - Name_Put : constant Name_Id := N + 056; - Name_Put_Line : constant Name_Id := N + 057; - Name_To : constant Name_Id := N + 058; + Name_Const : constant Name_Id := N + 054; + Name_Error : constant Name_Id := N + 055; + Name_Go : constant Name_Id := N + 056; + Name_Put : constant Name_Id := N + 057; + Name_Put_Line : constant Name_Id := N + 058; + Name_To : constant Name_Id := N + 059; -- Names for packages that are treated specially by the compiler - Name_Finalization : constant Name_Id := N + 059; - Name_Finalization_Root : constant Name_Id := N + 060; - Name_Interfaces : constant Name_Id := N + 061; - Name_Standard : constant Name_Id := N + 062; - Name_System : constant Name_Id := N + 063; - Name_Text_IO : constant Name_Id := N + 064; - Name_Wide_Text_IO : constant Name_Id := N + 065; - Name_Wide_Wide_Text_IO : constant Name_Id := N + 066; + Name_Finalization : constant Name_Id := N + 060; + Name_Finalization_Root : constant Name_Id := N + 061; + Name_Interfaces : constant Name_Id := N + 062; + Name_Standard : constant Name_Id := N + 063; + Name_System : constant Name_Id := N + 064; + Name_Text_IO : constant Name_Id := N + 065; + Name_Wide_Text_IO : constant Name_Id := N + 066; + Name_Wide_Wide_Text_IO : constant Name_Id := N + 067; -- Names of implementations of the distributed systems annex - First_PCS_Name : constant Name_Id := N + 067; - Name_No_DSA : constant Name_Id := N + 067; - Name_GARLIC_DSA : constant Name_Id := N + 068; - Name_PolyORB_DSA : constant Name_Id := N + 069; - Last_PCS_Name : constant Name_Id := N + 069; + First_PCS_Name : constant Name_Id := N + 068; + Name_No_DSA : constant Name_Id := N + 068; + Name_GARLIC_DSA : constant Name_Id := N + 069; + Name_PolyORB_DSA : constant Name_Id := N + 070; + Last_PCS_Name : constant Name_Id := N + 070; subtype PCS_Names is Name_Id range First_PCS_Name .. Last_PCS_Name; -- Names of identifiers used in expanding distribution stubs - Name_Addr : constant Name_Id := N + 070; - Name_Async : constant Name_Id := N + 071; - Name_Get_Active_Partition_ID : constant Name_Id := N + 072; - Name_Get_RCI_Package_Receiver : constant Name_Id := N + 073; - Name_Get_RCI_Package_Ref : constant Name_Id := N + 074; - Name_Origin : constant Name_Id := N + 075; - Name_Params : constant Name_Id := N + 076; - Name_Partition : constant Name_Id := N + 077; - Name_Partition_Interface : constant Name_Id := N + 078; - Name_Ras : constant Name_Id := N + 079; - Name_Call : constant Name_Id := N + 080; - Name_RCI_Name : constant Name_Id := N + 081; - Name_Receiver : constant Name_Id := N + 082; - Name_Result : constant Name_Id := N + 083; - Name_Rpc : constant Name_Id := N + 084; - Name_Subp_Id : constant Name_Id := N + 085; - Name_Operation : constant Name_Id := N + 086; - Name_Argument : constant Name_Id := N + 087; - Name_Arg_Modes : constant Name_Id := N + 088; - Name_Handler : constant Name_Id := N + 089; - Name_Target : constant Name_Id := N + 090; - Name_Req : constant Name_Id := N + 091; - Name_Obj_TypeCode : constant Name_Id := N + 092; - Name_Stub : constant Name_Id := N + 093; + Name_Addr : constant Name_Id := N + 071; + Name_Async : constant Name_Id := N + 072; + Name_Get_Active_Partition_ID : constant Name_Id := N + 073; + Name_Get_RCI_Package_Receiver : constant Name_Id := N + 074; + Name_Get_RCI_Package_Ref : constant Name_Id := N + 075; + Name_Origin : constant Name_Id := N + 076; + Name_Params : constant Name_Id := N + 077; + Name_Partition : constant Name_Id := N + 078; + Name_Partition_Interface : constant Name_Id := N + 079; + Name_Ras : constant Name_Id := N + 080; + Name_Call : constant Name_Id := N + 081; + Name_RCI_Name : constant Name_Id := N + 082; + Name_Receiver : constant Name_Id := N + 083; + Name_Result : constant Name_Id := N + 084; + Name_Rpc : constant Name_Id := N + 085; + Name_Subp_Id : constant Name_Id := N + 086; + Name_Operation : constant Name_Id := N + 087; + Name_Argument : constant Name_Id := N + 088; + Name_Arg_Modes : constant Name_Id := N + 089; + Name_Handler : constant Name_Id := N + 090; + Name_Target : constant Name_Id := N + 091; + Name_Req : constant Name_Id := N + 092; + Name_Obj_TypeCode : constant Name_Id := N + 093; + Name_Stub : constant Name_Id := N + 094; -- Operator Symbol entries. The actual names have an upper case O at -- the start in place of the Op_ prefix (e.g. the actual name that -- corresponds to Name_Op_Abs is "Oabs". - First_Operator_Name : constant Name_Id := N + 094; - Name_Op_Abs : constant Name_Id := N + 094; -- "abs" - Name_Op_And : constant Name_Id := N + 095; -- "and" - Name_Op_Mod : constant Name_Id := N + 096; -- "mod" - Name_Op_Not : constant Name_Id := N + 097; -- "not" - Name_Op_Or : constant Name_Id := N + 098; -- "or" - Name_Op_Rem : constant Name_Id := N + 099; -- "rem" - Name_Op_Xor : constant Name_Id := N + 100; -- "xor" - Name_Op_Eq : constant Name_Id := N + 101; -- "=" - Name_Op_Ne : constant Name_Id := N + 102; -- "/=" - Name_Op_Lt : constant Name_Id := N + 103; -- "<" - Name_Op_Le : constant Name_Id := N + 104; -- "<=" - Name_Op_Gt : constant Name_Id := N + 105; -- ">" - Name_Op_Ge : constant Name_Id := N + 106; -- ">=" - Name_Op_Add : constant Name_Id := N + 107; -- "+" - Name_Op_Subtract : constant Name_Id := N + 108; -- "-" - Name_Op_Concat : constant Name_Id := N + 109; -- "&" - Name_Op_Multiply : constant Name_Id := N + 110; -- "*" - Name_Op_Divide : constant Name_Id := N + 111; -- "/" - Name_Op_Expon : constant Name_Id := N + 112; -- "**" - Last_Operator_Name : constant Name_Id := N + 112; + First_Operator_Name : constant Name_Id := N + 095; + Name_Op_Abs : constant Name_Id := N + 095; -- "abs" + Name_Op_And : constant Name_Id := N + 096; -- "and" + Name_Op_Mod : constant Name_Id := N + 097; -- "mod" + Name_Op_Not : constant Name_Id := N + 098; -- "not" + Name_Op_Or : constant Name_Id := N + 099; -- "or" + Name_Op_Rem : constant Name_Id := N + 100; -- "rem" + Name_Op_Xor : constant Name_Id := N + 101; -- "xor" + Name_Op_Eq : constant Name_Id := N + 102; -- "=" + Name_Op_Ne : constant Name_Id := N + 103; -- "/=" + Name_Op_Lt : constant Name_Id := N + 104; -- "<" + Name_Op_Le : constant Name_Id := N + 105; -- "<=" + Name_Op_Gt : constant Name_Id := N + 106; -- ">" + Name_Op_Ge : constant Name_Id := N + 107; -- ">=" + Name_Op_Add : constant Name_Id := N + 108; -- "+" + Name_Op_Subtract : constant Name_Id := N + 109; -- "-" + Name_Op_Concat : constant Name_Id := N + 110; -- "&" + Name_Op_Multiply : constant Name_Id := N + 111; -- "*" + Name_Op_Divide : constant Name_Id := N + 112; -- "/" + Name_Op_Expon : constant Name_Id := N + 113; -- "**" + Last_Operator_Name : constant Name_Id := N + 113; -- Names for all pragmas recognized by GNAT. The entries with the comment -- "Ada 83" are pragmas that are defined in Ada 83, but not in Ada 95. @@ -324,65 +329,65 @@ package Snames is -- only in GNAT for the AAMP. They are ignored in other versions with -- appropriate warnings. - First_Pragma_Name : constant Name_Id := N + 113; + First_Pragma_Name : constant Name_Id := N + 114; -- Configuration pragmas are grouped at start - Name_Ada_83 : constant Name_Id := N + 113; -- GNAT - Name_Ada_95 : constant Name_Id := N + 114; -- GNAT - Name_Ada_05 : constant Name_Id := N + 115; -- GNAT - Name_Assertion_Policy : constant Name_Id := N + 116; -- Ada 05 - Name_C_Pass_By_Copy : constant Name_Id := N + 117; -- GNAT - Name_Compile_Time_Warning : constant Name_Id := N + 118; -- GNAT - Name_Component_Alignment : constant Name_Id := N + 119; -- GNAT - Name_Convention_Identifier : constant Name_Id := N + 120; -- GNAT - Name_Debug_Policy : constant Name_Id := N + 121; -- GNAT - Name_Detect_Blocking : constant Name_Id := N + 122; -- Ada 05 - Name_Discard_Names : constant Name_Id := N + 123; - Name_Elaboration_Checks : constant Name_Id := N + 124; -- GNAT - Name_Eliminate : constant Name_Id := N + 125; -- GNAT - Name_Explicit_Overriding : constant Name_Id := N + 126; -- Ada 05 - Name_Extend_System : constant Name_Id := N + 127; -- GNAT - Name_Extensions_Allowed : constant Name_Id := N + 128; -- GNAT - Name_External_Name_Casing : constant Name_Id := N + 129; -- GNAT - Name_Float_Representation : constant Name_Id := N + 130; -- GNAT - Name_Initialize_Scalars : constant Name_Id := N + 131; -- GNAT - Name_Interrupt_State : constant Name_Id := N + 132; -- GNAT - Name_License : constant Name_Id := N + 133; -- GNAT - Name_Locking_Policy : constant Name_Id := N + 134; - Name_Long_Float : constant Name_Id := N + 135; -- VMS - Name_No_Run_Time : constant Name_Id := N + 136; -- GNAT - Name_No_Strict_Aliasing : constant Name_Id := N + 137; -- GNAT - Name_Normalize_Scalars : constant Name_Id := N + 138; - Name_Polling : constant Name_Id := N + 139; -- GNAT - Name_Persistent_BSS : constant Name_Id := N + 140; -- GNAT - Name_Profile : constant Name_Id := N + 141; -- Ada 05 - Name_Profile_Warnings : constant Name_Id := N + 142; -- GNAT - Name_Propagate_Exceptions : constant Name_Id := N + 143; -- GNAT - Name_Queuing_Policy : constant Name_Id := N + 144; - Name_Ravenscar : constant Name_Id := N + 145; -- Ada 05 - Name_Restricted_Run_Time : constant Name_Id := N + 146; -- GNAT - Name_Restrictions : constant Name_Id := N + 147; - Name_Restriction_Warnings : constant Name_Id := N + 148; -- GNAT - Name_Reviewable : constant Name_Id := N + 149; - Name_Source_File_Name : constant Name_Id := N + 150; -- GNAT - Name_Source_File_Name_Project : constant Name_Id := N + 151; -- GNAT - Name_Style_Checks : constant Name_Id := N + 152; -- GNAT - Name_Suppress : constant Name_Id := N + 153; - Name_Suppress_Exception_Locations : constant Name_Id := N + 154; -- GNAT - Name_Task_Dispatching_Policy : constant Name_Id := N + 155; - Name_Universal_Data : constant Name_Id := N + 156; -- AAMP - Name_Unsuppress : constant Name_Id := N + 157; -- GNAT - Name_Use_VADS_Size : constant Name_Id := N + 158; -- GNAT - Name_Validity_Checks : constant Name_Id := N + 159; -- GNAT - Name_Warnings : constant Name_Id := N + 160; -- GNAT - Last_Configuration_Pragma_Name : constant Name_Id := N + 160; + Name_Ada_83 : constant Name_Id := N + 114; -- GNAT + Name_Ada_95 : constant Name_Id := N + 115; -- GNAT + Name_Ada_05 : constant Name_Id := N + 116; -- GNAT + Name_Assertion_Policy : constant Name_Id := N + 117; -- Ada 05 + Name_C_Pass_By_Copy : constant Name_Id := N + 118; -- GNAT + Name_Compile_Time_Warning : constant Name_Id := N + 119; -- GNAT + Name_Component_Alignment : constant Name_Id := N + 120; -- GNAT + Name_Convention_Identifier : constant Name_Id := N + 121; -- GNAT + Name_Debug_Policy : constant Name_Id := N + 122; -- GNAT + Name_Detect_Blocking : constant Name_Id := N + 123; -- Ada 05 + Name_Discard_Names : constant Name_Id := N + 124; + Name_Elaboration_Checks : constant Name_Id := N + 125; -- GNAT + Name_Eliminate : constant Name_Id := N + 126; -- GNAT + Name_Explicit_Overriding : constant Name_Id := N + 127; -- Ada 05 + Name_Extend_System : constant Name_Id := N + 128; -- GNAT + Name_Extensions_Allowed : constant Name_Id := N + 129; -- GNAT + Name_External_Name_Casing : constant Name_Id := N + 130; -- GNAT + Name_Float_Representation : constant Name_Id := N + 131; -- GNAT + Name_Initialize_Scalars : constant Name_Id := N + 132; -- GNAT + Name_Interrupt_State : constant Name_Id := N + 133; -- GNAT + Name_License : constant Name_Id := N + 134; -- GNAT + Name_Locking_Policy : constant Name_Id := N + 135; + Name_Long_Float : constant Name_Id := N + 136; -- VMS + Name_No_Run_Time : constant Name_Id := N + 137; -- GNAT + Name_No_Strict_Aliasing : constant Name_Id := N + 138; -- GNAT + Name_Normalize_Scalars : constant Name_Id := N + 139; + Name_Polling : constant Name_Id := N + 140; -- GNAT + Name_Persistent_BSS : constant Name_Id := N + 141; -- GNAT + Name_Profile : constant Name_Id := N + 142; -- Ada 05 + Name_Profile_Warnings : constant Name_Id := N + 143; -- GNAT + Name_Propagate_Exceptions : constant Name_Id := N + 144; -- GNAT + Name_Queuing_Policy : constant Name_Id := N + 145; + Name_Ravenscar : constant Name_Id := N + 146; -- Ada 05 + Name_Restricted_Run_Time : constant Name_Id := N + 147; -- GNAT + Name_Restrictions : constant Name_Id := N + 148; + Name_Restriction_Warnings : constant Name_Id := N + 149; -- GNAT + Name_Reviewable : constant Name_Id := N + 150; + Name_Source_File_Name : constant Name_Id := N + 151; -- GNAT + Name_Source_File_Name_Project : constant Name_Id := N + 152; -- GNAT + Name_Style_Checks : constant Name_Id := N + 153; -- GNAT + Name_Suppress : constant Name_Id := N + 154; + Name_Suppress_Exception_Locations : constant Name_Id := N + 155; -- GNAT + Name_Task_Dispatching_Policy : constant Name_Id := N + 156; + Name_Universal_Data : constant Name_Id := N + 157; -- AAMP + Name_Unsuppress : constant Name_Id := N + 158; -- GNAT + Name_Use_VADS_Size : constant Name_Id := N + 159; -- GNAT + Name_Validity_Checks : constant Name_Id := N + 160; -- GNAT + Name_Warnings : constant Name_Id := N + 161; -- GNAT + Last_Configuration_Pragma_Name : constant Name_Id := N + 161; -- Remaining pragma names - Name_Abort_Defer : constant Name_Id := N + 161; -- GNAT - Name_All_Calls_Remote : constant Name_Id := N + 162; - Name_Annotate : constant Name_Id := N + 163; -- GNAT + Name_Abort_Defer : constant Name_Id := N + 162; -- GNAT + Name_All_Calls_Remote : constant Name_Id := N + 163; + Name_Annotate : constant Name_Id := N + 164; -- GNAT -- Note: AST_Entry is not in this list because its name matches the -- name of the corresponding attribute. However, it is included in the @@ -390,80 +395,80 @@ package Snames is -- and Check_Pragma_Id correctly recognize and process Name_AST_Entry. -- AST_Entry is a VMS specific pragma. - Name_Assert : constant Name_Id := N + 164; -- Ada 05 - Name_Asynchronous : constant Name_Id := N + 165; - Name_Atomic : constant Name_Id := N + 166; - Name_Atomic_Components : constant Name_Id := N + 167; - Name_Attach_Handler : constant Name_Id := N + 168; - Name_Comment : constant Name_Id := N + 169; -- GNAT - Name_Common_Object : constant Name_Id := N + 170; -- GNAT - Name_Complex_Representation : constant Name_Id := N + 171; -- GNAT - Name_Controlled : constant Name_Id := N + 172; - Name_Convention : constant Name_Id := N + 173; - Name_CPP_Class : constant Name_Id := N + 174; -- GNAT - Name_CPP_Constructor : constant Name_Id := N + 175; -- GNAT - Name_CPP_Virtual : constant Name_Id := N + 176; -- GNAT - Name_CPP_Vtable : constant Name_Id := N + 177; -- GNAT - Name_Debug : constant Name_Id := N + 178; -- GNAT - Name_Elaborate : constant Name_Id := N + 179; -- Ada 83 - Name_Elaborate_All : constant Name_Id := N + 180; - Name_Elaborate_Body : constant Name_Id := N + 181; - Name_Export : constant Name_Id := N + 182; - Name_Export_Exception : constant Name_Id := N + 183; -- VMS - Name_Export_Function : constant Name_Id := N + 184; -- GNAT - Name_Export_Object : constant Name_Id := N + 185; -- GNAT - Name_Export_Procedure : constant Name_Id := N + 186; -- GNAT - Name_Export_Value : constant Name_Id := N + 187; -- GNAT - Name_Export_Valued_Procedure : constant Name_Id := N + 188; -- GNAT - Name_External : constant Name_Id := N + 189; -- GNAT - Name_Finalize_Storage_Only : constant Name_Id := N + 190; -- GNAT - Name_Ident : constant Name_Id := N + 191; -- VMS - Name_Import : constant Name_Id := N + 192; - Name_Import_Exception : constant Name_Id := N + 193; -- VMS - Name_Import_Function : constant Name_Id := N + 194; -- GNAT - Name_Import_Object : constant Name_Id := N + 195; -- GNAT - Name_Import_Procedure : constant Name_Id := N + 196; -- GNAT - Name_Import_Valued_Procedure : constant Name_Id := N + 197; -- GNAT - Name_Inline : constant Name_Id := N + 198; - Name_Inline_Always : constant Name_Id := N + 199; -- GNAT - Name_Inline_Generic : constant Name_Id := N + 200; -- GNAT - Name_Inspection_Point : constant Name_Id := N + 201; - Name_Interface_Name : constant Name_Id := N + 202; -- GNAT - Name_Interrupt_Handler : constant Name_Id := N + 203; - Name_Interrupt_Priority : constant Name_Id := N + 204; - Name_Java_Constructor : constant Name_Id := N + 205; -- GNAT - Name_Java_Interface : constant Name_Id := N + 206; -- GNAT - Name_Keep_Names : constant Name_Id := N + 207; -- GNAT - Name_Link_With : constant Name_Id := N + 208; -- GNAT - Name_Linker_Alias : constant Name_Id := N + 209; -- GNAT - Name_Linker_Constructor : constant Name_Id := N + 210; -- GNAT - Name_Linker_Destructor : constant Name_Id := N + 211; -- GNAT - Name_Linker_Options : constant Name_Id := N + 212; - Name_Linker_Section : constant Name_Id := N + 213; -- GNAT - Name_List : constant Name_Id := N + 214; - Name_Machine_Attribute : constant Name_Id := N + 215; -- GNAT - Name_Main : constant Name_Id := N + 216; -- GNAT - Name_Main_Storage : constant Name_Id := N + 217; -- GNAT - Name_Memory_Size : constant Name_Id := N + 218; -- Ada 83 - Name_No_Return : constant Name_Id := N + 219; -- GNAT - Name_Obsolescent : constant Name_Id := N + 220; -- GNAT - Name_Optimize : constant Name_Id := N + 221; - Name_Optional_Overriding : constant Name_Id := N + 222; -- Ada 05 - Name_Pack : constant Name_Id := N + 223; - Name_Page : constant Name_Id := N + 224; - Name_Passive : constant Name_Id := N + 225; -- GNAT - Name_Preelaborate : constant Name_Id := N + 226; - Name_Preelaborate_05 : constant Name_Id := N + 227; -- GNAT - Name_Priority : constant Name_Id := N + 228; - Name_Psect_Object : constant Name_Id := N + 229; -- VMS - Name_Pure : constant Name_Id := N + 230; - Name_Pure_05 : constant Name_Id := N + 231; -- GNAT - Name_Pure_Function : constant Name_Id := N + 232; -- GNAT - Name_Remote_Call_Interface : constant Name_Id := N + 233; - Name_Remote_Types : constant Name_Id := N + 234; - Name_Share_Generic : constant Name_Id := N + 235; -- GNAT - Name_Shared : constant Name_Id := N + 236; -- Ada 83 - Name_Shared_Passive : constant Name_Id := N + 237; + Name_Assert : constant Name_Id := N + 165; -- Ada 05 + Name_Asynchronous : constant Name_Id := N + 166; + Name_Atomic : constant Name_Id := N + 167; + Name_Atomic_Components : constant Name_Id := N + 168; + Name_Attach_Handler : constant Name_Id := N + 169; + Name_Comment : constant Name_Id := N + 170; -- GNAT + Name_Common_Object : constant Name_Id := N + 171; -- GNAT + Name_Complex_Representation : constant Name_Id := N + 172; -- GNAT + Name_Controlled : constant Name_Id := N + 173; + Name_Convention : constant Name_Id := N + 174; + Name_CPP_Class : constant Name_Id := N + 175; -- GNAT + Name_CPP_Constructor : constant Name_Id := N + 176; -- GNAT + Name_CPP_Virtual : constant Name_Id := N + 177; -- GNAT + Name_CPP_Vtable : constant Name_Id := N + 178; -- GNAT + Name_Debug : constant Name_Id := N + 179; -- GNAT + Name_Elaborate : constant Name_Id := N + 180; -- Ada 83 + Name_Elaborate_All : constant Name_Id := N + 181; + Name_Elaborate_Body : constant Name_Id := N + 182; + Name_Export : constant Name_Id := N + 183; + Name_Export_Exception : constant Name_Id := N + 184; -- VMS + Name_Export_Function : constant Name_Id := N + 185; -- GNAT + Name_Export_Object : constant Name_Id := N + 186; -- GNAT + Name_Export_Procedure : constant Name_Id := N + 187; -- GNAT + Name_Export_Value : constant Name_Id := N + 188; -- GNAT + Name_Export_Valued_Procedure : constant Name_Id := N + 189; -- GNAT + Name_External : constant Name_Id := N + 190; -- GNAT + Name_Finalize_Storage_Only : constant Name_Id := N + 191; -- GNAT + Name_Ident : constant Name_Id := N + 192; -- VMS + Name_Import : constant Name_Id := N + 193; + Name_Import_Exception : constant Name_Id := N + 194; -- VMS + Name_Import_Function : constant Name_Id := N + 195; -- GNAT + Name_Import_Object : constant Name_Id := N + 196; -- GNAT + Name_Import_Procedure : constant Name_Id := N + 197; -- GNAT + Name_Import_Valued_Procedure : constant Name_Id := N + 198; -- GNAT + Name_Inline : constant Name_Id := N + 199; + Name_Inline_Always : constant Name_Id := N + 200; -- GNAT + Name_Inline_Generic : constant Name_Id := N + 201; -- GNAT + Name_Inspection_Point : constant Name_Id := N + 202; + Name_Interface_Name : constant Name_Id := N + 203; -- GNAT + Name_Interrupt_Handler : constant Name_Id := N + 204; + Name_Interrupt_Priority : constant Name_Id := N + 205; + Name_Java_Constructor : constant Name_Id := N + 206; -- GNAT + Name_Java_Interface : constant Name_Id := N + 207; -- GNAT + Name_Keep_Names : constant Name_Id := N + 208; -- GNAT + Name_Link_With : constant Name_Id := N + 209; -- GNAT + Name_Linker_Alias : constant Name_Id := N + 210; -- GNAT + Name_Linker_Constructor : constant Name_Id := N + 211; -- GNAT + Name_Linker_Destructor : constant Name_Id := N + 212; -- GNAT + Name_Linker_Options : constant Name_Id := N + 213; + Name_Linker_Section : constant Name_Id := N + 214; -- GNAT + Name_List : constant Name_Id := N + 215; + Name_Machine_Attribute : constant Name_Id := N + 216; -- GNAT + Name_Main : constant Name_Id := N + 217; -- GNAT + Name_Main_Storage : constant Name_Id := N + 218; -- GNAT + Name_Memory_Size : constant Name_Id := N + 219; -- Ada 83 + Name_No_Return : constant Name_Id := N + 220; -- GNAT + Name_Obsolescent : constant Name_Id := N + 221; -- GNAT + Name_Optimize : constant Name_Id := N + 222; + Name_Optional_Overriding : constant Name_Id := N + 223; -- Ada 05 + Name_Pack : constant Name_Id := N + 224; + Name_Page : constant Name_Id := N + 225; + Name_Passive : constant Name_Id := N + 226; -- GNAT + Name_Preelaborate : constant Name_Id := N + 227; + Name_Preelaborate_05 : constant Name_Id := N + 228; -- GNAT + Name_Priority : constant Name_Id := N + 229; + Name_Psect_Object : constant Name_Id := N + 230; -- VMS + Name_Pure : constant Name_Id := N + 231; + Name_Pure_05 : constant Name_Id := N + 232; -- GNAT + Name_Pure_Function : constant Name_Id := N + 233; -- GNAT + Name_Remote_Call_Interface : constant Name_Id := N + 234; + Name_Remote_Types : constant Name_Id := N + 235; + Name_Share_Generic : constant Name_Id := N + 236; -- GNAT + Name_Shared : constant Name_Id := N + 237; -- Ada 83 + Name_Shared_Passive : constant Name_Id := N + 238; -- Note: Storage_Size is not in this list because its name matches the -- name of the corresponding attribute. However, it is included in the @@ -473,27 +478,27 @@ package Snames is -- Note: Storage_Unit is also omitted from the list because of a clash -- with an attribute name, and is treated similarly. - Name_Source_Reference : constant Name_Id := N + 238; -- GNAT - Name_Stream_Convert : constant Name_Id := N + 239; -- GNAT - Name_Subtitle : constant Name_Id := N + 240; -- GNAT - Name_Suppress_All : constant Name_Id := N + 241; -- GNAT - Name_Suppress_Debug_Info : constant Name_Id := N + 242; -- GNAT - Name_Suppress_Initialization : constant Name_Id := N + 243; -- GNAT - Name_System_Name : constant Name_Id := N + 244; -- Ada 83 - Name_Task_Info : constant Name_Id := N + 245; -- GNAT - Name_Task_Name : constant Name_Id := N + 246; -- GNAT - Name_Task_Storage : constant Name_Id := N + 247; -- VMS - Name_Thread_Body : constant Name_Id := N + 248; -- GNAT - Name_Time_Slice : constant Name_Id := N + 249; -- GNAT - Name_Title : constant Name_Id := N + 250; -- GNAT - Name_Unchecked_Union : constant Name_Id := N + 251; -- GNAT - Name_Unimplemented_Unit : constant Name_Id := N + 252; -- GNAT - Name_Unreferenced : constant Name_Id := N + 253; -- GNAT - Name_Unreserve_All_Interrupts : constant Name_Id := N + 254; -- GNAT - Name_Volatile : constant Name_Id := N + 255; - Name_Volatile_Components : constant Name_Id := N + 256; - Name_Weak_External : constant Name_Id := N + 257; -- GNAT - Last_Pragma_Name : constant Name_Id := N + 257; + Name_Source_Reference : constant Name_Id := N + 239; -- GNAT + Name_Stream_Convert : constant Name_Id := N + 240; -- GNAT + Name_Subtitle : constant Name_Id := N + 241; -- GNAT + Name_Suppress_All : constant Name_Id := N + 242; -- GNAT + Name_Suppress_Debug_Info : constant Name_Id := N + 243; -- GNAT + Name_Suppress_Initialization : constant Name_Id := N + 244; -- GNAT + Name_System_Name : constant Name_Id := N + 245; -- Ada 83 + Name_Task_Info : constant Name_Id := N + 246; -- GNAT + Name_Task_Name : constant Name_Id := N + 247; -- GNAT + Name_Task_Storage : constant Name_Id := N + 248; -- VMS + Name_Thread_Body : constant Name_Id := N + 249; -- GNAT + Name_Time_Slice : constant Name_Id := N + 250; -- GNAT + Name_Title : constant Name_Id := N + 251; -- GNAT + Name_Unchecked_Union : constant Name_Id := N + 252; -- GNAT + Name_Unimplemented_Unit : constant Name_Id := N + 253; -- GNAT + Name_Unreferenced : constant Name_Id := N + 254; -- GNAT + Name_Unreserve_All_Interrupts : constant Name_Id := N + 255; -- GNAT + Name_Volatile : constant Name_Id := N + 256; + Name_Volatile_Components : constant Name_Id := N + 257; + Name_Weak_External : constant Name_Id := N + 258; -- GNAT + Last_Pragma_Name : constant Name_Id := N + 258; -- Language convention names for pragma Convention/Export/Import/Interface -- Note that Name_C is not included in this list, since it was already @@ -504,114 +509,114 @@ package Snames is -- Entry and Protected, this is because these conventions cannot be -- specified by a pragma. - First_Convention_Name : constant Name_Id := N + 258; - Name_Ada : constant Name_Id := N + 258; - Name_Assembler : constant Name_Id := N + 259; - Name_COBOL : constant Name_Id := N + 260; - Name_CPP : constant Name_Id := N + 261; - Name_Fortran : constant Name_Id := N + 262; - Name_Intrinsic : constant Name_Id := N + 263; - Name_Java : constant Name_Id := N + 264; - Name_Stdcall : constant Name_Id := N + 265; - Name_Stubbed : constant Name_Id := N + 266; - Last_Convention_Name : constant Name_Id := N + 266; + First_Convention_Name : constant Name_Id := N + 259; + Name_Ada : constant Name_Id := N + 259; + Name_Assembler : constant Name_Id := N + 260; + Name_COBOL : constant Name_Id := N + 261; + Name_CPP : constant Name_Id := N + 262; + Name_Fortran : constant Name_Id := N + 263; + Name_Intrinsic : constant Name_Id := N + 264; + Name_Java : constant Name_Id := N + 265; + Name_Stdcall : constant Name_Id := N + 266; + Name_Stubbed : constant Name_Id := N + 267; + Last_Convention_Name : constant Name_Id := N + 267; -- The following names are preset as synonyms for Assembler - Name_Asm : constant Name_Id := N + 267; - Name_Assembly : constant Name_Id := N + 268; + Name_Asm : constant Name_Id := N + 268; + Name_Assembly : constant Name_Id := N + 269; -- The following names are preset as synonyms for C - Name_Default : constant Name_Id := N + 269; + Name_Default : constant Name_Id := N + 270; -- Name_Exernal (previously defined as pragma) -- The following names are present as synonyms for Stdcall - Name_DLL : constant Name_Id := N + 270; - Name_Win32 : constant Name_Id := N + 271; + Name_DLL : constant Name_Id := N + 271; + Name_Win32 : constant Name_Id := N + 272; -- Other special names used in processing pragmas - Name_As_Is : constant Name_Id := N + 272; - Name_Attribute_Name : constant Name_Id := N + 273; - Name_Body_File_Name : constant Name_Id := N + 274; - Name_Boolean_Entry_Barriers : constant Name_Id := N + 275; - Name_Check : constant Name_Id := N + 276; - Name_Casing : constant Name_Id := N + 277; - Name_Code : constant Name_Id := N + 278; - Name_Component : constant Name_Id := N + 279; - Name_Component_Size_4 : constant Name_Id := N + 280; - Name_Copy : constant Name_Id := N + 281; - Name_D_Float : constant Name_Id := N + 282; - Name_Descriptor : constant Name_Id := N + 283; - Name_Dot_Replacement : constant Name_Id := N + 284; - Name_Dynamic : constant Name_Id := N + 285; - Name_Entity : constant Name_Id := N + 286; - Name_Entry_Count : constant Name_Id := N + 287; - Name_External_Name : constant Name_Id := N + 288; - Name_First_Optional_Parameter : constant Name_Id := N + 289; - Name_Form : constant Name_Id := N + 290; - Name_G_Float : constant Name_Id := N + 291; - Name_Gcc : constant Name_Id := N + 292; - Name_Gnat : constant Name_Id := N + 293; - Name_GPL : constant Name_Id := N + 294; - Name_IEEE_Float : constant Name_Id := N + 295; - Name_Ignore : constant Name_Id := N + 296; - Name_Info : constant Name_Id := N + 297; - Name_Internal : constant Name_Id := N + 298; - Name_Link_Name : constant Name_Id := N + 299; - Name_Lowercase : constant Name_Id := N + 300; - Name_Max_Entry_Queue_Depth : constant Name_Id := N + 301; - Name_Max_Entry_Queue_Length : constant Name_Id := N + 302; - Name_Max_Size : constant Name_Id := N + 303; - Name_Mechanism : constant Name_Id := N + 304; - Name_Message : constant Name_Id := N + 305; - Name_Mixedcase : constant Name_Id := N + 306; - Name_Modified_GPL : constant Name_Id := N + 307; - Name_Name : constant Name_Id := N + 308; - Name_NCA : constant Name_Id := N + 309; - Name_No : constant Name_Id := N + 310; - Name_No_Dependence : constant Name_Id := N + 311; - Name_No_Dynamic_Attachment : constant Name_Id := N + 312; - Name_No_Dynamic_Interrupts : constant Name_Id := N + 313; - Name_No_Requeue : constant Name_Id := N + 314; - Name_No_Requeue_Statements : constant Name_Id := N + 315; - Name_No_Task_Attributes : constant Name_Id := N + 316; - Name_No_Task_Attributes_Package : constant Name_Id := N + 317; - Name_On : constant Name_Id := N + 318; - Name_Parameter_Types : constant Name_Id := N + 319; - Name_Reference : constant Name_Id := N + 320; - Name_Restricted : constant Name_Id := N + 321; - Name_Result_Mechanism : constant Name_Id := N + 322; - Name_Result_Type : constant Name_Id := N + 323; - Name_Runtime : constant Name_Id := N + 324; - Name_SB : constant Name_Id := N + 325; - Name_Secondary_Stack_Size : constant Name_Id := N + 326; - Name_Section : constant Name_Id := N + 327; - Name_Semaphore : constant Name_Id := N + 328; - Name_Simple_Barriers : constant Name_Id := N + 329; - Name_Spec_File_Name : constant Name_Id := N + 330; - Name_State : constant Name_Id := N + 331; - Name_Static : constant Name_Id := N + 332; - Name_Stack_Size : constant Name_Id := N + 333; - Name_Subunit_File_Name : constant Name_Id := N + 334; - Name_Task_Stack_Size_Default : constant Name_Id := N + 335; - Name_Task_Type : constant Name_Id := N + 336; - Name_Time_Slicing_Enabled : constant Name_Id := N + 337; - Name_Top_Guard : constant Name_Id := N + 338; - Name_UBA : constant Name_Id := N + 339; - Name_UBS : constant Name_Id := N + 340; - Name_UBSB : constant Name_Id := N + 341; - Name_Unit_Name : constant Name_Id := N + 342; - Name_Unknown : constant Name_Id := N + 343; - Name_Unrestricted : constant Name_Id := N + 344; - Name_Uppercase : constant Name_Id := N + 345; - Name_User : constant Name_Id := N + 346; - Name_VAX_Float : constant Name_Id := N + 347; - Name_VMS : constant Name_Id := N + 348; - Name_Vtable_Ptr : constant Name_Id := N + 349; - Name_Working_Storage : constant Name_Id := N + 350; + Name_As_Is : constant Name_Id := N + 273; + Name_Attribute_Name : constant Name_Id := N + 274; + Name_Body_File_Name : constant Name_Id := N + 275; + Name_Boolean_Entry_Barriers : constant Name_Id := N + 276; + Name_Check : constant Name_Id := N + 277; + Name_Casing : constant Name_Id := N + 278; + Name_Code : constant Name_Id := N + 279; + Name_Component : constant Name_Id := N + 280; + Name_Component_Size_4 : constant Name_Id := N + 281; + Name_Copy : constant Name_Id := N + 282; + Name_D_Float : constant Name_Id := N + 283; + Name_Descriptor : constant Name_Id := N + 284; + Name_Dot_Replacement : constant Name_Id := N + 285; + Name_Dynamic : constant Name_Id := N + 286; + Name_Entity : constant Name_Id := N + 287; + Name_Entry_Count : constant Name_Id := N + 288; + Name_External_Name : constant Name_Id := N + 289; + Name_First_Optional_Parameter : constant Name_Id := N + 290; + Name_Form : constant Name_Id := N + 291; + Name_G_Float : constant Name_Id := N + 292; + Name_Gcc : constant Name_Id := N + 293; + Name_Gnat : constant Name_Id := N + 294; + Name_GPL : constant Name_Id := N + 295; + Name_IEEE_Float : constant Name_Id := N + 296; + Name_Ignore : constant Name_Id := N + 297; + Name_Info : constant Name_Id := N + 298; + Name_Internal : constant Name_Id := N + 299; + Name_Link_Name : constant Name_Id := N + 300; + Name_Lowercase : constant Name_Id := N + 301; + Name_Max_Entry_Queue_Depth : constant Name_Id := N + 302; + Name_Max_Entry_Queue_Length : constant Name_Id := N + 303; + Name_Max_Size : constant Name_Id := N + 304; + Name_Mechanism : constant Name_Id := N + 305; + Name_Message : constant Name_Id := N + 306; + Name_Mixedcase : constant Name_Id := N + 307; + Name_Modified_GPL : constant Name_Id := N + 308; + Name_Name : constant Name_Id := N + 309; + Name_NCA : constant Name_Id := N + 310; + Name_No : constant Name_Id := N + 311; + Name_No_Dependence : constant Name_Id := N + 312; + Name_No_Dynamic_Attachment : constant Name_Id := N + 313; + Name_No_Dynamic_Interrupts : constant Name_Id := N + 314; + Name_No_Requeue : constant Name_Id := N + 315; + Name_No_Requeue_Statements : constant Name_Id := N + 316; + Name_No_Task_Attributes : constant Name_Id := N + 317; + Name_No_Task_Attributes_Package : constant Name_Id := N + 318; + Name_On : constant Name_Id := N + 319; + Name_Parameter_Types : constant Name_Id := N + 320; + Name_Reference : constant Name_Id := N + 321; + Name_Restricted : constant Name_Id := N + 322; + Name_Result_Mechanism : constant Name_Id := N + 323; + Name_Result_Type : constant Name_Id := N + 324; + Name_Runtime : constant Name_Id := N + 325; + Name_SB : constant Name_Id := N + 326; + Name_Secondary_Stack_Size : constant Name_Id := N + 327; + Name_Section : constant Name_Id := N + 328; + Name_Semaphore : constant Name_Id := N + 329; + Name_Simple_Barriers : constant Name_Id := N + 330; + Name_Spec_File_Name : constant Name_Id := N + 331; + Name_State : constant Name_Id := N + 332; + Name_Static : constant Name_Id := N + 333; + Name_Stack_Size : constant Name_Id := N + 334; + Name_Subunit_File_Name : constant Name_Id := N + 335; + Name_Task_Stack_Size_Default : constant Name_Id := N + 336; + Name_Task_Type : constant Name_Id := N + 337; + Name_Time_Slicing_Enabled : constant Name_Id := N + 338; + Name_Top_Guard : constant Name_Id := N + 339; + Name_UBA : constant Name_Id := N + 340; + Name_UBS : constant Name_Id := N + 341; + Name_UBSB : constant Name_Id := N + 342; + Name_Unit_Name : constant Name_Id := N + 343; + Name_Unknown : constant Name_Id := N + 344; + Name_Unrestricted : constant Name_Id := N + 345; + Name_Uppercase : constant Name_Id := N + 346; + Name_User : constant Name_Id := N + 347; + Name_VAX_Float : constant Name_Id := N + 348; + Name_VMS : constant Name_Id := N + 349; + Name_Vtable_Ptr : constant Name_Id := N + 350; + Name_Working_Storage : constant Name_Id := N + 351; -- Names of recognized attributes. The entries with the comment "Ada 83" -- are attributes that are defined in Ada 83, but not in Ada 95. These @@ -625,165 +630,166 @@ package Snames is -- The entries marked VMS are recognized only in OpenVMS implementations -- of GNAT, and are treated as illegal in all other contexts. - First_Attribute_Name : constant Name_Id := N + 351; - Name_Abort_Signal : constant Name_Id := N + 351; -- GNAT - Name_Access : constant Name_Id := N + 352; - Name_Address : constant Name_Id := N + 353; - Name_Address_Size : constant Name_Id := N + 354; -- GNAT - Name_Aft : constant Name_Id := N + 355; - Name_Alignment : constant Name_Id := N + 356; - Name_Asm_Input : constant Name_Id := N + 357; -- GNAT - Name_Asm_Output : constant Name_Id := N + 358; -- GNAT - Name_AST_Entry : constant Name_Id := N + 359; -- VMS - Name_Bit : constant Name_Id := N + 360; -- GNAT - Name_Bit_Order : constant Name_Id := N + 361; - Name_Bit_Position : constant Name_Id := N + 362; -- GNAT - Name_Body_Version : constant Name_Id := N + 363; - Name_Callable : constant Name_Id := N + 364; - Name_Caller : constant Name_Id := N + 365; - Name_Code_Address : constant Name_Id := N + 366; -- GNAT - Name_Component_Size : constant Name_Id := N + 367; - Name_Compose : constant Name_Id := N + 368; - Name_Constrained : constant Name_Id := N + 369; - Name_Count : constant Name_Id := N + 370; - Name_Default_Bit_Order : constant Name_Id := N + 371; -- GNAT - Name_Definite : constant Name_Id := N + 372; - Name_Delta : constant Name_Id := N + 373; - Name_Denorm : constant Name_Id := N + 374; - Name_Digits : constant Name_Id := N + 375; - Name_Elaborated : constant Name_Id := N + 376; -- GNAT - Name_Emax : constant Name_Id := N + 377; -- Ada 83 - Name_Enum_Rep : constant Name_Id := N + 378; -- GNAT - Name_Epsilon : constant Name_Id := N + 379; -- Ada 83 - Name_Exponent : constant Name_Id := N + 380; - Name_External_Tag : constant Name_Id := N + 381; - Name_First : constant Name_Id := N + 382; - Name_First_Bit : constant Name_Id := N + 383; - Name_Fixed_Value : constant Name_Id := N + 384; -- GNAT - Name_Fore : constant Name_Id := N + 385; - Name_Has_Access_Values : constant Name_Id := N + 386; -- GNAT - Name_Has_Discriminants : constant Name_Id := N + 387; -- GNAT - Name_Identity : constant Name_Id := N + 388; - Name_Img : constant Name_Id := N + 389; -- GNAT - Name_Integer_Value : constant Name_Id := N + 390; -- GNAT - Name_Large : constant Name_Id := N + 391; -- Ada 83 - Name_Last : constant Name_Id := N + 392; - Name_Last_Bit : constant Name_Id := N + 393; - Name_Leading_Part : constant Name_Id := N + 394; - Name_Length : constant Name_Id := N + 395; - Name_Machine_Emax : constant Name_Id := N + 396; - Name_Machine_Emin : constant Name_Id := N + 397; - Name_Machine_Mantissa : constant Name_Id := N + 398; - Name_Machine_Overflows : constant Name_Id := N + 399; - Name_Machine_Radix : constant Name_Id := N + 400; - Name_Machine_Rounds : constant Name_Id := N + 401; - Name_Machine_Size : constant Name_Id := N + 402; -- GNAT - Name_Mantissa : constant Name_Id := N + 403; -- Ada 83 - Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 404; - Name_Maximum_Alignment : constant Name_Id := N + 405; -- GNAT - Name_Mechanism_Code : constant Name_Id := N + 406; -- GNAT - Name_Mod : constant Name_Id := N + 407; - Name_Model_Emin : constant Name_Id := N + 408; - Name_Model_Epsilon : constant Name_Id := N + 409; - Name_Model_Mantissa : constant Name_Id := N + 410; - Name_Model_Small : constant Name_Id := N + 411; - Name_Modulus : constant Name_Id := N + 412; - Name_Null_Parameter : constant Name_Id := N + 413; -- GNAT - Name_Object_Size : constant Name_Id := N + 414; -- GNAT - Name_Partition_ID : constant Name_Id := N + 415; - Name_Passed_By_Reference : constant Name_Id := N + 416; -- GNAT - Name_Pool_Address : constant Name_Id := N + 417; - Name_Pos : constant Name_Id := N + 418; - Name_Position : constant Name_Id := N + 419; - Name_Range : constant Name_Id := N + 420; - Name_Range_Length : constant Name_Id := N + 421; -- GNAT - Name_Round : constant Name_Id := N + 422; - Name_Safe_Emax : constant Name_Id := N + 423; -- Ada 83 - Name_Safe_First : constant Name_Id := N + 424; - Name_Safe_Large : constant Name_Id := N + 425; -- Ada 83 - Name_Safe_Last : constant Name_Id := N + 426; - Name_Safe_Small : constant Name_Id := N + 427; -- Ada 83 - Name_Scale : constant Name_Id := N + 428; - Name_Scaling : constant Name_Id := N + 429; - Name_Signed_Zeros : constant Name_Id := N + 430; - Name_Size : constant Name_Id := N + 431; - Name_Small : constant Name_Id := N + 432; - Name_Storage_Size : constant Name_Id := N + 433; - Name_Storage_Unit : constant Name_Id := N + 434; -- GNAT - Name_Stream_Size : constant Name_Id := N + 435; -- Ada 05 - Name_Tag : constant Name_Id := N + 436; - Name_Target_Name : constant Name_Id := N + 437; -- GNAT - Name_Terminated : constant Name_Id := N + 438; - Name_To_Address : constant Name_Id := N + 439; -- GNAT - Name_Type_Class : constant Name_Id := N + 440; -- GNAT - Name_UET_Address : constant Name_Id := N + 441; -- GNAT - Name_Unbiased_Rounding : constant Name_Id := N + 442; - Name_Unchecked_Access : constant Name_Id := N + 443; - Name_Unconstrained_Array : constant Name_Id := N + 444; - Name_Universal_Literal_String : constant Name_Id := N + 445; -- GNAT - Name_Unrestricted_Access : constant Name_Id := N + 446; -- GNAT - Name_VADS_Size : constant Name_Id := N + 447; -- GNAT - Name_Val : constant Name_Id := N + 448; - Name_Valid : constant Name_Id := N + 449; - Name_Value_Size : constant Name_Id := N + 450; -- GNAT - Name_Version : constant Name_Id := N + 451; - Name_Wchar_T_Size : constant Name_Id := N + 452; -- GNAT - Name_Wide_Wide_Width : constant Name_Id := N + 453; -- Ada 05 - Name_Wide_Width : constant Name_Id := N + 454; - Name_Width : constant Name_Id := N + 455; - Name_Word_Size : constant Name_Id := N + 456; -- GNAT + First_Attribute_Name : constant Name_Id := N + 352; + Name_Abort_Signal : constant Name_Id := N + 352; -- GNAT + Name_Access : constant Name_Id := N + 353; + Name_Address : constant Name_Id := N + 354; + Name_Address_Size : constant Name_Id := N + 355; -- GNAT + Name_Aft : constant Name_Id := N + 356; + Name_Alignment : constant Name_Id := N + 357; + Name_Asm_Input : constant Name_Id := N + 358; -- GNAT + Name_Asm_Output : constant Name_Id := N + 359; -- GNAT + Name_AST_Entry : constant Name_Id := N + 360; -- VMS + Name_Bit : constant Name_Id := N + 361; -- GNAT + Name_Bit_Order : constant Name_Id := N + 362; + Name_Bit_Position : constant Name_Id := N + 363; -- GNAT + Name_Body_Version : constant Name_Id := N + 364; + Name_Callable : constant Name_Id := N + 365; + Name_Caller : constant Name_Id := N + 366; + Name_Code_Address : constant Name_Id := N + 367; -- GNAT + Name_Component_Size : constant Name_Id := N + 368; + Name_Compose : constant Name_Id := N + 369; + Name_Constrained : constant Name_Id := N + 370; + Name_Count : constant Name_Id := N + 371; + Name_Default_Bit_Order : constant Name_Id := N + 372; -- GNAT + Name_Definite : constant Name_Id := N + 373; + Name_Delta : constant Name_Id := N + 374; + Name_Denorm : constant Name_Id := N + 375; + Name_Digits : constant Name_Id := N + 376; + Name_Elaborated : constant Name_Id := N + 377; -- GNAT + Name_Emax : constant Name_Id := N + 378; -- Ada 83 + Name_Enum_Rep : constant Name_Id := N + 379; -- GNAT + Name_Epsilon : constant Name_Id := N + 380; -- Ada 83 + Name_Exponent : constant Name_Id := N + 381; + Name_External_Tag : constant Name_Id := N + 382; + Name_First : constant Name_Id := N + 383; + Name_First_Bit : constant Name_Id := N + 384; + Name_Fixed_Value : constant Name_Id := N + 385; -- GNAT + Name_Fore : constant Name_Id := N + 386; + Name_Has_Access_Values : constant Name_Id := N + 387; -- GNAT + Name_Has_Discriminants : constant Name_Id := N + 388; -- GNAT + Name_Identity : constant Name_Id := N + 389; + Name_Img : constant Name_Id := N + 390; -- GNAT + Name_Integer_Value : constant Name_Id := N + 391; -- GNAT + Name_Large : constant Name_Id := N + 392; -- Ada 83 + Name_Last : constant Name_Id := N + 393; + Name_Last_Bit : constant Name_Id := N + 394; + Name_Leading_Part : constant Name_Id := N + 395; + Name_Length : constant Name_Id := N + 396; + Name_Machine_Emax : constant Name_Id := N + 397; + Name_Machine_Emin : constant Name_Id := N + 398; + Name_Machine_Mantissa : constant Name_Id := N + 399; + Name_Machine_Overflows : constant Name_Id := N + 400; + Name_Machine_Radix : constant Name_Id := N + 401; + Name_Machine_Rounding : constant Name_Id := N + 402; -- Ada 05 + Name_Machine_Rounds : constant Name_Id := N + 403; + Name_Machine_Size : constant Name_Id := N + 404; -- GNAT + Name_Mantissa : constant Name_Id := N + 405; -- Ada 83 + Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 406; + Name_Maximum_Alignment : constant Name_Id := N + 407; -- GNAT + Name_Mechanism_Code : constant Name_Id := N + 408; -- GNAT + Name_Mod : constant Name_Id := N + 409; + Name_Model_Emin : constant Name_Id := N + 410; + Name_Model_Epsilon : constant Name_Id := N + 411; + Name_Model_Mantissa : constant Name_Id := N + 412; + Name_Model_Small : constant Name_Id := N + 413; + Name_Modulus : constant Name_Id := N + 414; + Name_Null_Parameter : constant Name_Id := N + 415; -- GNAT + Name_Object_Size : constant Name_Id := N + 416; -- GNAT + Name_Partition_ID : constant Name_Id := N + 417; + Name_Passed_By_Reference : constant Name_Id := N + 418; -- GNAT + Name_Pool_Address : constant Name_Id := N + 419; + Name_Pos : constant Name_Id := N + 420; + Name_Position : constant Name_Id := N + 421; + Name_Range : constant Name_Id := N + 422; + Name_Range_Length : constant Name_Id := N + 423; -- GNAT + Name_Round : constant Name_Id := N + 424; + Name_Safe_Emax : constant Name_Id := N + 425; -- Ada 83 + Name_Safe_First : constant Name_Id := N + 426; + Name_Safe_Large : constant Name_Id := N + 427; -- Ada 83 + Name_Safe_Last : constant Name_Id := N + 428; + Name_Safe_Small : constant Name_Id := N + 429; -- Ada 83 + Name_Scale : constant Name_Id := N + 430; + Name_Scaling : constant Name_Id := N + 431; + Name_Signed_Zeros : constant Name_Id := N + 432; + Name_Size : constant Name_Id := N + 433; + Name_Small : constant Name_Id := N + 434; + Name_Storage_Size : constant Name_Id := N + 435; + Name_Storage_Unit : constant Name_Id := N + 436; -- GNAT + Name_Stream_Size : constant Name_Id := N + 437; -- Ada 05 + Name_Tag : constant Name_Id := N + 438; + Name_Target_Name : constant Name_Id := N + 439; -- GNAT + Name_Terminated : constant Name_Id := N + 440; + Name_To_Address : constant Name_Id := N + 441; -- GNAT + Name_Type_Class : constant Name_Id := N + 442; -- GNAT + Name_UET_Address : constant Name_Id := N + 443; -- GNAT + Name_Unbiased_Rounding : constant Name_Id := N + 444; + Name_Unchecked_Access : constant Name_Id := N + 445; + Name_Unconstrained_Array : constant Name_Id := N + 446; + Name_Universal_Literal_String : constant Name_Id := N + 447; -- GNAT + Name_Unrestricted_Access : constant Name_Id := N + 448; -- GNAT + Name_VADS_Size : constant Name_Id := N + 449; -- GNAT + Name_Val : constant Name_Id := N + 450; + Name_Valid : constant Name_Id := N + 451; + Name_Value_Size : constant Name_Id := N + 452; -- GNAT + Name_Version : constant Name_Id := N + 453; + Name_Wchar_T_Size : constant Name_Id := N + 454; -- GNAT + Name_Wide_Wide_Width : constant Name_Id := N + 455; -- Ada 05 + Name_Wide_Width : constant Name_Id := N + 456; + Name_Width : constant Name_Id := N + 457; + Name_Word_Size : constant Name_Id := N + 458; -- GNAT -- Attributes that designate attributes returning renamable functions, -- i.e. functions that return other than a universal value and that -- have non-universal arguments. - First_Renamable_Function_Attribute : constant Name_Id := N + 457; - Name_Adjacent : constant Name_Id := N + 457; - Name_Ceiling : constant Name_Id := N + 458; - Name_Copy_Sign : constant Name_Id := N + 459; - Name_Floor : constant Name_Id := N + 460; - Name_Fraction : constant Name_Id := N + 461; - Name_Image : constant Name_Id := N + 462; - Name_Input : constant Name_Id := N + 463; - Name_Machine : constant Name_Id := N + 464; - Name_Max : constant Name_Id := N + 465; - Name_Min : constant Name_Id := N + 466; - Name_Model : constant Name_Id := N + 467; - Name_Pred : constant Name_Id := N + 468; - Name_Remainder : constant Name_Id := N + 469; - Name_Rounding : constant Name_Id := N + 470; - Name_Succ : constant Name_Id := N + 471; - Name_Truncation : constant Name_Id := N + 472; - Name_Value : constant Name_Id := N + 473; - Name_Wide_Image : constant Name_Id := N + 474; - Name_Wide_Wide_Image : constant Name_Id := N + 475; - Name_Wide_Value : constant Name_Id := N + 476; - Name_Wide_Wide_Value : constant Name_Id := N + 477; - Last_Renamable_Function_Attribute : constant Name_Id := N + 477; + First_Renamable_Function_Attribute : constant Name_Id := N + 459; + Name_Adjacent : constant Name_Id := N + 459; + Name_Ceiling : constant Name_Id := N + 460; + Name_Copy_Sign : constant Name_Id := N + 461; + Name_Floor : constant Name_Id := N + 462; + Name_Fraction : constant Name_Id := N + 463; + Name_Image : constant Name_Id := N + 464; + Name_Input : constant Name_Id := N + 465; + Name_Machine : constant Name_Id := N + 466; + Name_Max : constant Name_Id := N + 467; + Name_Min : constant Name_Id := N + 468; + Name_Model : constant Name_Id := N + 469; + Name_Pred : constant Name_Id := N + 470; + Name_Remainder : constant Name_Id := N + 471; + Name_Rounding : constant Name_Id := N + 472; + Name_Succ : constant Name_Id := N + 473; + Name_Truncation : constant Name_Id := N + 474; + Name_Value : constant Name_Id := N + 475; + Name_Wide_Image : constant Name_Id := N + 476; + Name_Wide_Wide_Image : constant Name_Id := N + 477; + Name_Wide_Value : constant Name_Id := N + 478; + Name_Wide_Wide_Value : constant Name_Id := N + 479; + Last_Renamable_Function_Attribute : constant Name_Id := N + 479; -- Attributes that designate procedures - First_Procedure_Attribute : constant Name_Id := N + 478; - Name_Output : constant Name_Id := N + 478; - Name_Read : constant Name_Id := N + 479; - Name_Write : constant Name_Id := N + 480; - Last_Procedure_Attribute : constant Name_Id := N + 480; + First_Procedure_Attribute : constant Name_Id := N + 480; + Name_Output : constant Name_Id := N + 480; + Name_Read : constant Name_Id := N + 481; + Name_Write : constant Name_Id := N + 482; + Last_Procedure_Attribute : constant Name_Id := N + 482; -- Remaining attributes are ones that return entities - First_Entity_Attribute_Name : constant Name_Id := N + 481; - Name_Elab_Body : constant Name_Id := N + 481; -- GNAT - Name_Elab_Spec : constant Name_Id := N + 482; -- GNAT - Name_Storage_Pool : constant Name_Id := N + 483; + First_Entity_Attribute_Name : constant Name_Id := N + 483; + Name_Elab_Body : constant Name_Id := N + 483; -- GNAT + Name_Elab_Spec : constant Name_Id := N + 484; -- GNAT + Name_Storage_Pool : constant Name_Id := N + 485; -- These attributes are the ones that return types - First_Type_Attribute_Name : constant Name_Id := N + 484; - Name_Base : constant Name_Id := N + 484; - Name_Class : constant Name_Id := N + 485; - Last_Type_Attribute_Name : constant Name_Id := N + 485; - Last_Entity_Attribute_Name : constant Name_Id := N + 485; - Last_Attribute_Name : constant Name_Id := N + 485; + First_Type_Attribute_Name : constant Name_Id := N + 486; + Name_Base : constant Name_Id := N + 486; + Name_Class : constant Name_Id := N + 487; + Last_Type_Attribute_Name : constant Name_Id := N + 487; + Last_Entity_Attribute_Name : constant Name_Id := N + 487; + Last_Attribute_Name : constant Name_Id := N + 487; -- Names of recognized locking policy identifiers @@ -791,10 +797,10 @@ package Snames is -- name (e.g. C for Ceiling_Locking). If new policy names are added, -- the first character must be distinct. - First_Locking_Policy_Name : constant Name_Id := N + 486; - Name_Ceiling_Locking : constant Name_Id := N + 486; - Name_Inheritance_Locking : constant Name_Id := N + 487; - Last_Locking_Policy_Name : constant Name_Id := N + 487; + First_Locking_Policy_Name : constant Name_Id := N + 488; + Name_Ceiling_Locking : constant Name_Id := N + 488; + Name_Inheritance_Locking : constant Name_Id := N + 489; + Last_Locking_Policy_Name : constant Name_Id := N + 489; -- Names of recognized queuing policy identifiers @@ -802,10 +808,10 @@ package Snames is -- name (e.g. F for FIFO_Queuing). If new policy names are added, -- the first character must be distinct. - First_Queuing_Policy_Name : constant Name_Id := N + 488; - Name_FIFO_Queuing : constant Name_Id := N + 488; - Name_Priority_Queuing : constant Name_Id := N + 489; - Last_Queuing_Policy_Name : constant Name_Id := N + 489; + First_Queuing_Policy_Name : constant Name_Id := N + 490; + Name_FIFO_Queuing : constant Name_Id := N + 490; + Name_Priority_Queuing : constant Name_Id := N + 491; + Last_Queuing_Policy_Name : constant Name_Id := N + 491; -- Names of recognized task dispatching policy identifiers @@ -813,215 +819,220 @@ package Snames is -- name (e.g. F for FIFO_WIthinn_Priorities). If new policy names -- are added, the first character must be distinct. - First_Task_Dispatching_Policy_Name : constant Name_Id := N + 490; - Name_FIFO_Within_Priorities : constant Name_Id := N + 490; - Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 490; + First_Task_Dispatching_Policy_Name : constant Name_Id := N + 492; + Name_FIFO_Within_Priorities : constant Name_Id := N + 492; + Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 492; -- Names of recognized checks for pragma Suppress - First_Check_Name : constant Name_Id := N + 491; - Name_Access_Check : constant Name_Id := N + 491; - Name_Accessibility_Check : constant Name_Id := N + 492; - Name_Discriminant_Check : constant Name_Id := N + 493; - Name_Division_Check : constant Name_Id := N + 494; - Name_Elaboration_Check : constant Name_Id := N + 495; - Name_Index_Check : constant Name_Id := N + 496; - Name_Length_Check : constant Name_Id := N + 497; - Name_Overflow_Check : constant Name_Id := N + 498; - Name_Range_Check : constant Name_Id := N + 499; - Name_Storage_Check : constant Name_Id := N + 500; - Name_Tag_Check : constant Name_Id := N + 501; - Name_All_Checks : constant Name_Id := N + 502; - Last_Check_Name : constant Name_Id := N + 502; + First_Check_Name : constant Name_Id := N + 493; + Name_Access_Check : constant Name_Id := N + 493; + Name_Accessibility_Check : constant Name_Id := N + 494; + Name_Discriminant_Check : constant Name_Id := N + 495; + Name_Division_Check : constant Name_Id := N + 496; + Name_Elaboration_Check : constant Name_Id := N + 497; + Name_Index_Check : constant Name_Id := N + 498; + Name_Length_Check : constant Name_Id := N + 499; + Name_Overflow_Check : constant Name_Id := N + 500; + Name_Range_Check : constant Name_Id := N + 501; + Name_Storage_Check : constant Name_Id := N + 502; + Name_Tag_Check : constant Name_Id := N + 503; + Name_All_Checks : constant Name_Id := N + 504; + Last_Check_Name : constant Name_Id := N + 504; -- Names corresponding to reserved keywords, excluding those already -- declared in the attribute list (Access, Delta, Digits, Mod, Range). - Name_Abort : constant Name_Id := N + 503; - Name_Abs : constant Name_Id := N + 504; - Name_Accept : constant Name_Id := N + 505; - Name_And : constant Name_Id := N + 506; - Name_All : constant Name_Id := N + 507; - Name_Array : constant Name_Id := N + 508; - Name_At : constant Name_Id := N + 509; - Name_Begin : constant Name_Id := N + 510; - Name_Body : constant Name_Id := N + 511; - Name_Case : constant Name_Id := N + 512; - Name_Constant : constant Name_Id := N + 513; - Name_Declare : constant Name_Id := N + 514; - Name_Delay : constant Name_Id := N + 515; - Name_Do : constant Name_Id := N + 516; - Name_Else : constant Name_Id := N + 517; - Name_Elsif : constant Name_Id := N + 518; - Name_End : constant Name_Id := N + 519; - Name_Entry : constant Name_Id := N + 520; - Name_Exception : constant Name_Id := N + 521; - Name_Exit : constant Name_Id := N + 522; - Name_For : constant Name_Id := N + 523; - Name_Function : constant Name_Id := N + 524; - Name_Generic : constant Name_Id := N + 525; - Name_Goto : constant Name_Id := N + 526; - Name_If : constant Name_Id := N + 527; - Name_In : constant Name_Id := N + 528; - Name_Is : constant Name_Id := N + 529; - Name_Limited : constant Name_Id := N + 530; - Name_Loop : constant Name_Id := N + 531; - Name_New : constant Name_Id := N + 532; - Name_Not : constant Name_Id := N + 533; - Name_Null : constant Name_Id := N + 534; - Name_Of : constant Name_Id := N + 535; - Name_Or : constant Name_Id := N + 536; - Name_Others : constant Name_Id := N + 537; - Name_Out : constant Name_Id := N + 538; - Name_Package : constant Name_Id := N + 539; - Name_Pragma : constant Name_Id := N + 540; - Name_Private : constant Name_Id := N + 541; - Name_Procedure : constant Name_Id := N + 542; - Name_Raise : constant Name_Id := N + 543; - Name_Record : constant Name_Id := N + 544; - Name_Rem : constant Name_Id := N + 545; - Name_Renames : constant Name_Id := N + 546; - Name_Return : constant Name_Id := N + 547; - Name_Reverse : constant Name_Id := N + 548; - Name_Select : constant Name_Id := N + 549; - Name_Separate : constant Name_Id := N + 550; - Name_Subtype : constant Name_Id := N + 551; - Name_Task : constant Name_Id := N + 552; - Name_Terminate : constant Name_Id := N + 553; - Name_Then : constant Name_Id := N + 554; - Name_Type : constant Name_Id := N + 555; - Name_Use : constant Name_Id := N + 556; - Name_When : constant Name_Id := N + 557; - Name_While : constant Name_Id := N + 558; - Name_With : constant Name_Id := N + 559; - Name_Xor : constant Name_Id := N + 560; + Name_Abort : constant Name_Id := N + 505; + Name_Abs : constant Name_Id := N + 506; + Name_Accept : constant Name_Id := N + 507; + Name_And : constant Name_Id := N + 508; + Name_All : constant Name_Id := N + 509; + Name_Array : constant Name_Id := N + 510; + Name_At : constant Name_Id := N + 511; + Name_Begin : constant Name_Id := N + 512; + Name_Body : constant Name_Id := N + 513; + Name_Case : constant Name_Id := N + 514; + Name_Constant : constant Name_Id := N + 515; + Name_Declare : constant Name_Id := N + 516; + Name_Delay : constant Name_Id := N + 517; + Name_Do : constant Name_Id := N + 518; + Name_Else : constant Name_Id := N + 519; + Name_Elsif : constant Name_Id := N + 520; + Name_End : constant Name_Id := N + 521; + Name_Entry : constant Name_Id := N + 522; + Name_Exception : constant Name_Id := N + 523; + Name_Exit : constant Name_Id := N + 524; + Name_For : constant Name_Id := N + 525; + Name_Function : constant Name_Id := N + 526; + Name_Generic : constant Name_Id := N + 527; + Name_Goto : constant Name_Id := N + 528; + Name_If : constant Name_Id := N + 529; + Name_In : constant Name_Id := N + 530; + Name_Is : constant Name_Id := N + 531; + Name_Limited : constant Name_Id := N + 532; + Name_Loop : constant Name_Id := N + 533; + Name_New : constant Name_Id := N + 534; + Name_Not : constant Name_Id := N + 535; + Name_Null : constant Name_Id := N + 536; + Name_Of : constant Name_Id := N + 537; + Name_Or : constant Name_Id := N + 538; + Name_Others : constant Name_Id := N + 539; + Name_Out : constant Name_Id := N + 540; + Name_Package : constant Name_Id := N + 541; + Name_Pragma : constant Name_Id := N + 542; + Name_Private : constant Name_Id := N + 543; + Name_Procedure : constant Name_Id := N + 544; + Name_Raise : constant Name_Id := N + 545; + Name_Record : constant Name_Id := N + 546; + Name_Rem : constant Name_Id := N + 547; + Name_Renames : constant Name_Id := N + 548; + Name_Return : constant Name_Id := N + 549; + Name_Reverse : constant Name_Id := N + 550; + Name_Select : constant Name_Id := N + 551; + Name_Separate : constant Name_Id := N + 552; + Name_Subtype : constant Name_Id := N + 553; + Name_Task : constant Name_Id := N + 554; + Name_Terminate : constant Name_Id := N + 555; + Name_Then : constant Name_Id := N + 556; + Name_Type : constant Name_Id := N + 557; + Name_Use : constant Name_Id := N + 558; + Name_When : constant Name_Id := N + 559; + Name_While : constant Name_Id := N + 560; + Name_With : constant Name_Id := N + 561; + Name_Xor : constant Name_Id := N + 562; -- Names of intrinsic subprograms -- Note: Asm is missing from this list, since Asm is a legitimate -- convention name. So is To_Adress, which is a GNAT attribute. - First_Intrinsic_Name : constant Name_Id := N + 561; - Name_Divide : constant Name_Id := N + 561; - Name_Enclosing_Entity : constant Name_Id := N + 562; - Name_Exception_Information : constant Name_Id := N + 563; - Name_Exception_Message : constant Name_Id := N + 564; - Name_Exception_Name : constant Name_Id := N + 565; - Name_File : constant Name_Id := N + 566; - Name_Generic_Dispatching_Constructor : constant Name_Id := N + 567; - Name_Import_Address : constant Name_Id := N + 568; - Name_Import_Largest_Value : constant Name_Id := N + 569; - Name_Import_Value : constant Name_Id := N + 570; - Name_Is_Negative : constant Name_Id := N + 571; - Name_Line : constant Name_Id := N + 572; - Name_Rotate_Left : constant Name_Id := N + 573; - Name_Rotate_Right : constant Name_Id := N + 574; - Name_Shift_Left : constant Name_Id := N + 575; - Name_Shift_Right : constant Name_Id := N + 576; - Name_Shift_Right_Arithmetic : constant Name_Id := N + 577; - Name_Source_Location : constant Name_Id := N + 578; - Name_Unchecked_Conversion : constant Name_Id := N + 579; - Name_Unchecked_Deallocation : constant Name_Id := N + 580; - Name_To_Pointer : constant Name_Id := N + 581; - Last_Intrinsic_Name : constant Name_Id := N + 581; + First_Intrinsic_Name : constant Name_Id := N + 563; + Name_Divide : constant Name_Id := N + 563; + Name_Enclosing_Entity : constant Name_Id := N + 564; + Name_Exception_Information : constant Name_Id := N + 565; + Name_Exception_Message : constant Name_Id := N + 566; + Name_Exception_Name : constant Name_Id := N + 567; + Name_File : constant Name_Id := N + 568; + Name_Generic_Dispatching_Constructor : constant Name_Id := N + 569; + Name_Import_Address : constant Name_Id := N + 570; + Name_Import_Largest_Value : constant Name_Id := N + 571; + Name_Import_Value : constant Name_Id := N + 572; + Name_Is_Negative : constant Name_Id := N + 573; + Name_Line : constant Name_Id := N + 574; + Name_Rotate_Left : constant Name_Id := N + 575; + Name_Rotate_Right : constant Name_Id := N + 576; + Name_Shift_Left : constant Name_Id := N + 577; + Name_Shift_Right : constant Name_Id := N + 578; + Name_Shift_Right_Arithmetic : constant Name_Id := N + 579; + Name_Source_Location : constant Name_Id := N + 580; + Name_Unchecked_Conversion : constant Name_Id := N + 581; + Name_Unchecked_Deallocation : constant Name_Id := N + 582; + Name_To_Pointer : constant Name_Id := N + 583; + Last_Intrinsic_Name : constant Name_Id := N + 583; + + -- Names used in processing intrinsic calls + + Name_Free : constant Name_Id := N + 584; -- Reserved words used only in Ada 95 - First_95_Reserved_Word : constant Name_Id := N + 582; - Name_Abstract : constant Name_Id := N + 582; - Name_Aliased : constant Name_Id := N + 583; - Name_Protected : constant Name_Id := N + 584; - Name_Until : constant Name_Id := N + 585; - Name_Requeue : constant Name_Id := N + 586; - Name_Tagged : constant Name_Id := N + 587; - Last_95_Reserved_Word : constant Name_Id := N + 587; + First_95_Reserved_Word : constant Name_Id := N + 585; + Name_Abstract : constant Name_Id := N + 585; + Name_Aliased : constant Name_Id := N + 586; + Name_Protected : constant Name_Id := N + 587; + Name_Until : constant Name_Id := N + 588; + Name_Requeue : constant Name_Id := N + 589; + Name_Tagged : constant Name_Id := N + 590; + Last_95_Reserved_Word : constant Name_Id := N + 590; subtype Ada_95_Reserved_Words is Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word; -- Miscellaneous names used in semantic checking - Name_Raise_Exception : constant Name_Id := N + 588; + Name_Raise_Exception : constant Name_Id := N + 591; -- Additional reserved words and identifiers used in GNAT Project Files -- Note that Name_External is already previously declared - Name_Ada_Roots : constant Name_Id := N + 589; - Name_Binder : constant Name_Id := N + 590; - Name_Binder_Driver : constant Name_Id := N + 591; - Name_Body_Suffix : constant Name_Id := N + 592; - Name_Builder : constant Name_Id := N + 593; - Name_Compiler : constant Name_Id := N + 594; - Name_Compiler_Driver : constant Name_Id := N + 595; - Name_Compiler_Kind : constant Name_Id := N + 596; - Name_Compute_Dependency : constant Name_Id := N + 597; - Name_Cross_Reference : constant Name_Id := N + 598; - Name_Default_Linker : constant Name_Id := N + 599; - Name_Default_Switches : constant Name_Id := N + 600; - Name_Dependency_Option : constant Name_Id := N + 601; - Name_Exec_Dir : constant Name_Id := N + 602; - Name_Executable : constant Name_Id := N + 603; - Name_Executable_Suffix : constant Name_Id := N + 604; - Name_Extends : constant Name_Id := N + 605; - Name_Externally_Built : constant Name_Id := N + 606; - Name_Finder : constant Name_Id := N + 607; - Name_Global_Configuration_Pragmas : constant Name_Id := N + 608; - Name_Gnatls : constant Name_Id := N + 609; - Name_Gnatstub : constant Name_Id := N + 610; - Name_Implementation : constant Name_Id := N + 611; - Name_Implementation_Exceptions : constant Name_Id := N + 612; - Name_Implementation_Suffix : constant Name_Id := N + 613; - Name_Include_Option : constant Name_Id := N + 614; - Name_Language_Processing : constant Name_Id := N + 615; - Name_Languages : constant Name_Id := N + 616; - Name_Library_Dir : constant Name_Id := N + 617; - Name_Library_Auto_Init : constant Name_Id := N + 618; - Name_Library_GCC : constant Name_Id := N + 619; - Name_Library_Interface : constant Name_Id := N + 620; - Name_Library_Kind : constant Name_Id := N + 621; - Name_Library_Name : constant Name_Id := N + 622; - Name_Library_Options : constant Name_Id := N + 623; - Name_Library_Reference_Symbol_File : constant Name_Id := N + 624; - Name_Library_Src_Dir : constant Name_Id := N + 625; - Name_Library_Symbol_File : constant Name_Id := N + 626; - Name_Library_Symbol_Policy : constant Name_Id := N + 627; - Name_Library_Version : constant Name_Id := N + 628; - Name_Linker : constant Name_Id := N + 629; - Name_Local_Configuration_Pragmas : constant Name_Id := N + 630; - Name_Locally_Removed_Files : constant Name_Id := N + 631; - Name_Metrics : constant Name_Id := N + 632; - Name_Naming : constant Name_Id := N + 633; - Name_Object_Dir : constant Name_Id := N + 634; - Name_Pretty_Printer : constant Name_Id := N + 635; - Name_Project : constant Name_Id := N + 636; - Name_Separate_Suffix : constant Name_Id := N + 637; - Name_Source_Dirs : constant Name_Id := N + 638; - Name_Source_Files : constant Name_Id := N + 639; - Name_Source_List_File : constant Name_Id := N + 640; - Name_Spec : constant Name_Id := N + 641; - Name_Spec_Suffix : constant Name_Id := N + 642; - Name_Specification : constant Name_Id := N + 643; - Name_Specification_Exceptions : constant Name_Id := N + 644; - Name_Specification_Suffix : constant Name_Id := N + 645; - Name_Switches : constant Name_Id := N + 646; + Name_Ada_Roots : constant Name_Id := N + 592; + Name_Binder : constant Name_Id := N + 593; + Name_Binder_Driver : constant Name_Id := N + 594; + Name_Body_Suffix : constant Name_Id := N + 595; + Name_Builder : constant Name_Id := N + 596; + Name_Compiler : constant Name_Id := N + 597; + Name_Compiler_Driver : constant Name_Id := N + 598; + Name_Compiler_Kind : constant Name_Id := N + 599; + Name_Compute_Dependency : constant Name_Id := N + 600; + Name_Cross_Reference : constant Name_Id := N + 601; + Name_Default_Linker : constant Name_Id := N + 602; + Name_Default_Switches : constant Name_Id := N + 603; + Name_Dependency_Option : constant Name_Id := N + 604; + Name_Exec_Dir : constant Name_Id := N + 605; + Name_Executable : constant Name_Id := N + 606; + Name_Executable_Suffix : constant Name_Id := N + 607; + Name_Extends : constant Name_Id := N + 608; + Name_Externally_Built : constant Name_Id := N + 609; + Name_Finder : constant Name_Id := N + 610; + Name_Global_Configuration_Pragmas : constant Name_Id := N + 611; + Name_Gnatls : constant Name_Id := N + 612; + Name_Gnatstub : constant Name_Id := N + 613; + Name_Implementation : constant Name_Id := N + 614; + Name_Implementation_Exceptions : constant Name_Id := N + 615; + Name_Implementation_Suffix : constant Name_Id := N + 616; + Name_Include_Option : constant Name_Id := N + 617; + Name_Language_Processing : constant Name_Id := N + 618; + Name_Languages : constant Name_Id := N + 619; + Name_Library_Ali_Dir : constant Name_Id := N + 620; + Name_Library_Dir : constant Name_Id := N + 621; + Name_Library_Auto_Init : constant Name_Id := N + 622; + Name_Library_GCC : constant Name_Id := N + 623; + Name_Library_Interface : constant Name_Id := N + 624; + Name_Library_Kind : constant Name_Id := N + 625; + Name_Library_Name : constant Name_Id := N + 626; + Name_Library_Options : constant Name_Id := N + 627; + Name_Library_Reference_Symbol_File : constant Name_Id := N + 628; + Name_Library_Src_Dir : constant Name_Id := N + 629; + Name_Library_Symbol_File : constant Name_Id := N + 630; + Name_Library_Symbol_Policy : constant Name_Id := N + 631; + Name_Library_Version : constant Name_Id := N + 632; + Name_Linker : constant Name_Id := N + 633; + Name_Local_Configuration_Pragmas : constant Name_Id := N + 634; + Name_Locally_Removed_Files : constant Name_Id := N + 635; + Name_Metrics : constant Name_Id := N + 636; + Name_Naming : constant Name_Id := N + 637; + Name_Object_Dir : constant Name_Id := N + 638; + Name_Pretty_Printer : constant Name_Id := N + 639; + Name_Project : constant Name_Id := N + 640; + Name_Separate_Suffix : constant Name_Id := N + 641; + Name_Source_Dirs : constant Name_Id := N + 642; + Name_Source_Files : constant Name_Id := N + 643; + Name_Source_List_File : constant Name_Id := N + 644; + Name_Spec : constant Name_Id := N + 645; + Name_Spec_Suffix : constant Name_Id := N + 646; + Name_Specification : constant Name_Id := N + 647; + Name_Specification_Exceptions : constant Name_Id := N + 648; + Name_Specification_Suffix : constant Name_Id := N + 649; + Name_Switches : constant Name_Id := N + 650; -- Other miscellaneous names used in front end - Name_Unaligned_Valid : constant Name_Id := N + 647; + Name_Unaligned_Valid : constant Name_Id := N + 651; -- ---------------------------------------------------------------- - First_2005_Reserved_Word : constant Name_Id := N + 648; - Name_Interface : constant Name_Id := N + 648; - Name_Overriding : constant Name_Id := N + 649; - Name_Synchronized : constant Name_Id := N + 650; - Last_2005_Reserved_Word : constant Name_Id := N + 650; + First_2005_Reserved_Word : constant Name_Id := N + 652; + Name_Interface : constant Name_Id := N + 652; + Name_Overriding : constant Name_Id := N + 653; + Name_Synchronized : constant Name_Id := N + 654; + Last_2005_Reserved_Word : constant Name_Id := N + 654; subtype Ada_2005_Reserved_Words is Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word; -- Mark last defined name for consistency check in Snames body - Last_Predefined_Name : constant Name_Id := N + 650; + Last_Predefined_Name : constant Name_Id := N + 654; subtype Any_Operator_Name is Name_Id range First_Operator_Name .. Last_Operator_Name; @@ -1081,6 +1092,7 @@ package Snames is Attribute_Machine_Mantissa, Attribute_Machine_Overflows, Attribute_Machine_Radix, + Attribute_Machine_Rounding, Attribute_Machine_Rounds, Attribute_Machine_Size, Attribute_Mantissa, diff --git a/gcc/ada/snames.h b/gcc/ada/snames.h index 0ff742e816d..7b0c2ee5d0a 100644 --- a/gcc/ada/snames.h +++ b/gcc/ada/snames.h @@ -95,91 +95,92 @@ extern unsigned char Get_Attribute_Id (int); #define Attr_Machine_Mantissa 47 #define Attr_Machine_Overflows 48 #define Attr_Machine_Radix 49 -#define Attr_Machine_Rounds 50 -#define Attr_Machine_Size 51 -#define Attr_Mantissa 52 -#define Attr_Max_Size_In_Storage_Elements 53 -#define Attr_Maximum_Alignment 54 -#define Attr_Mechanism_Code 55 -#define Attr_Mod 56 -#define Attr_Model_Emin 57 -#define Attr_Model_Epsilon 58 -#define Attr_Model_Mantissa 59 -#define Attr_Model_Small 60 -#define Attr_Modulus 61 -#define Attr_Null_Parameter 62 -#define Attr_Object_Size 63 -#define Attr_Partition_ID 64 -#define Attr_Passed_By_Reference 65 -#define Attr_Pool_Address 66 -#define Attr_Pos 67 -#define Attr_Position 68 -#define Attr_Range 69 -#define Attr_Range_Length 70 -#define Attr_Round 71 -#define Attr_Safe_Emax 72 -#define Attr_Safe_First 73 -#define Attr_Safe_Large 74 -#define Attr_Safe_Last 75 -#define Attr_Safe_Small 76 -#define Attr_Scale 77 -#define Attr_Scaling 78 -#define Attr_Signed_Zeros 79 -#define Attr_Size 80 -#define Attr_Small 81 -#define Attr_Storage_Size 82 -#define Attr_Storage_Unit 83 -#define Attr_Stream_Size 84 -#define Attr_Tag 85 -#define Attr_Target_Name 86 -#define Attr_Terminated 87 -#define Attr_To_Address 88 -#define Attr_Type_Class 89 -#define Attr_UET_Address 90 -#define Attr_Unbiased_Rounding 91 -#define Attr_Unchecked_Access 92 -#define Attr_Unconstrained_Array 93 -#define Attr_Universal_Literal_String 94 -#define Attr_Unrestricted_Access 95 -#define Attr_VADS_Size 96 -#define Attr_Val 97 -#define Attr_Valid 98 -#define Attr_Value_Size 99 -#define Attr_Version 100 -#define Attr_Wchar_T_Size 101 -#define Attr_Wide_Wide_Width 102 -#define Attr_Wide_Width 103 -#define Attr_Width 104 -#define Attr_Word_Size 105 -#define Attr_Adjacent 106 -#define Attr_Ceiling 107 -#define Attr_Copy_Sign 108 -#define Attr_Floor 109 -#define Attr_Fraction 110 -#define Attr_Image 111 -#define Attr_Input 112 -#define Attr_Machine 113 -#define Attr_Max 114 -#define Attr_Min 115 -#define Attr_Model 116 -#define Attr_Pred 117 -#define Attr_Remainder 118 -#define Attr_Rounding 119 -#define Attr_Succ 120 -#define Attr_Truncation 121 -#define Attr_Value 122 -#define Attr_Wide_Image 123 -#define Attr_Wide_Wide_Image 124 -#define Attr_Wide_Value 125 -#define Attr_Wide_Wide_Value 126 -#define Attr_Output 127 -#define Attr_Read 128 -#define Attr_Write 129 -#define Attr_Elab_Body 130 -#define Attr_Elab_Spec 131 -#define Attr_Storage_Pool 132 -#define Attr_Base 133 -#define Attr_Class 134 +#define Attr_Machine_Rounding 50 +#define Attr_Machine_Rounds 51 +#define Attr_Machine_Size 52 +#define Attr_Mantissa 53 +#define Attr_Max_Size_In_Storage_Elements 54 +#define Attr_Maximum_Alignment 55 +#define Attr_Mechanism_Code 56 +#define Attr_Mod 57 +#define Attr_Model_Emin 58 +#define Attr_Model_Epsilon 59 +#define Attr_Model_Mantissa 60 +#define Attr_Model_Small 61 +#define Attr_Modulus 62 +#define Attr_Null_Parameter 63 +#define Attr_Object_Size 64 +#define Attr_Partition_ID 65 +#define Attr_Passed_By_Reference 66 +#define Attr_Pool_Address 67 +#define Attr_Pos 68 +#define Attr_Position 69 +#define Attr_Range 70 +#define Attr_Range_Length 71 +#define Attr_Round 72 +#define Attr_Safe_Emax 73 +#define Attr_Safe_First 74 +#define Attr_Safe_Large 75 +#define Attr_Safe_Last 76 +#define Attr_Safe_Small 77 +#define Attr_Scale 78 +#define Attr_Scaling 79 +#define Attr_Signed_Zeros 80 +#define Attr_Size 81 +#define Attr_Small 82 +#define Attr_Storage_Size 83 +#define Attr_Storage_Unit 84 +#define Attr_Stream_Size 85 +#define Attr_Tag 86 +#define Attr_Target_Name 87 +#define Attr_Terminated 88 +#define Attr_To_Address 89 +#define Attr_Type_Class 90 +#define Attr_UET_Address 91 +#define Attr_Unbiased_Rounding 92 +#define Attr_Unchecked_Access 93 +#define Attr_Unconstrained_Array 94 +#define Attr_Universal_Literal_String 95 +#define Attr_Unrestricted_Access 96 +#define Attr_VADS_Size 97 +#define Attr_Val 98 +#define Attr_Valid 99 +#define Attr_Value_Size 100 +#define Attr_Version 101 +#define Attr_Wchar_T_Size 102 +#define Attr_Wide_Wide_Width 103 +#define Attr_Wide_Width 104 +#define Attr_Width 105 +#define Attr_Word_Size 106 +#define Attr_Adjacent 107 +#define Attr_Ceiling 108 +#define Attr_Copy_Sign 109 +#define Attr_Floor 110 +#define Attr_Fraction 111 +#define Attr_Image 112 +#define Attr_Input 113 +#define Attr_Machine 114 +#define Attr_Max 115 +#define Attr_Min 116 +#define Attr_Model 117 +#define Attr_Pred 118 +#define Attr_Remainder 119 +#define Attr_Rounding 120 +#define Attr_Succ 121 +#define Attr_Truncation 122 +#define Attr_Value 123 +#define Attr_Wide_Image 124 +#define Attr_Wide_Wide_Image 125 +#define Attr_Wide_Value 126 +#define Attr_Wide_Wide_Value 127 +#define Attr_Output 128 +#define Attr_Read 129 +#define Attr_Write 130 +#define Attr_Elab_Body 131 +#define Attr_Elab_Spec 132 +#define Attr_Storage_Pool 133 +#define Attr_Base 134 +#define Attr_Class 135 /* Define the numeric values for the conventions. */ diff --git a/gcc/ada/socket.c b/gcc/ada/socket.c index 32135237b5a..bb79ac30a72 100644 --- a/gcc/ada/socket.c +++ b/gcc/ada/socket.c @@ -40,6 +40,7 @@ /* Required for __gnat_malloc() */ #include +/* Required for memcpy() */ extern void __gnat_disable_sigpipe (int fd); extern void __gnat_free_socket_set (fd_set *); @@ -49,8 +50,10 @@ extern void __gnat_insert_socket_in_set (fd_set *, int); extern int __gnat_is_socket_in_set (fd_set *, int); extern fd_set *__gnat_new_socket_set (fd_set *); extern void __gnat_remove_socket_from_set (fd_set *, int); +extern int __gnat_get_h_errno (void); /* Disable the sending of SIGPIPE for writes on a broken stream */ + void __gnat_disable_sigpipe (int fd) { @@ -152,3 +155,48 @@ __gnat_remove_socket_from_set (fd_set *set, int socket) { FD_CLR (socket, set); } + +/* Get the value of the last host error */ + +int +__gnat_get_h_errno (void) { +#ifdef __vxworks + int vxw_errno = errno; + + switch (vxw_errno) { + case 0: + return 0; + + case S_resolvLib_HOST_NOT_FOUND: + case S_hostLib_UNKNOWN_HOST: + return HOST_NOT_FOUND; + + case S_resolvLib_TRY_AGAIN: + return TRY_AGAIN; + + case S_resolvLib_NO_RECOVERY: + case S_resolvLib_BUFFER_2_SMALL: + case S_resolvLib_INVALID_PARAMETER: + case S_resolvLib_INVALID_ADDRESS: + case S_hostLib_INVALID_PARAMETER: + return NO_RECOVERY; + + case S_resolvLib_NO_DATA: + return NO_DATA; + + default: + return -1; + } +#elif defined(VMS) + return errno; +#elif defined(__rtems__) + /* At this stage in the tool build, no networking .h files are available. + Newlib does not provide networking .h files and RTEMS is not built yet. + So we need to explicitly extern h_errno to access it. + */ + extern int h_errno; + return h_errno; +#else + return h_errno; +#endif +} diff --git a/gcc/ada/sprint.ads b/gcc/ada/sprint.ads index a51a52a74a1..d10a009ea47 100644 --- a/gcc/ada/sprint.ads +++ b/gcc/ada/sprint.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2002, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -115,7 +115,7 @@ package Sprint is -- does not generate any New_Line calls. procedure Sprint_Opt_Node_List (List : List_Id); - -- Like Sprint_Node_List, but prints nothing if List = No_List. + -- Like Sprint_Node_List, but prints nothing if List = No_List procedure Sprint_Indented_List (List : List_Id); -- Like Sprint_Line_List, except that the indentation level is diff --git a/gcc/ada/stand.ads b/gcc/ada/stand.ads index a9a1df2ae25..8e3b7ecee2b 100644 --- a/gcc/ada/stand.ads +++ b/gcc/ada/stand.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -335,7 +335,7 @@ package Stand is -- This is a type used to represent the return type of procedures Standard_Exception_Type : Entity_Id; - -- This is a type used to represent the Etype of exceptions. + -- This is a type used to represent the Etype of exceptions Standard_A_String : Entity_Id; -- An access to String type used for building elements of tables @@ -362,13 +362,13 @@ package Stand is -- is propagated to avoid cascaded errors from a single type error. Any_Access : Entity_Id; - -- Used to resolve the overloaded literal NULL. + -- Used to resolve the overloaded literal NULL Any_Array : Entity_Id; -- Used to represent some unknown array type Any_Boolean : Entity_Id; - -- The context type of conditions in IF and WHILE statements. + -- The context type of conditions in IF and WHILE statements Any_Character : Entity_Id; -- Any_Character is used to label character literals, which in general @@ -386,7 +386,7 @@ package Stand is -- Used to represent some unknown fixed-point type Any_Integer : Entity_Id; - -- Used to represent some unknown integer type. + -- Used to represent some unknown integer type Any_Modular : Entity_Id; -- Used to represent the result type of a boolean operation on an @@ -394,10 +394,10 @@ package Stand is -- only legal in a modular context. Any_Numeric : Entity_Id; - -- Used to represent some unknown numeric type. + -- Used to represent some unknown numeric type Any_Real : Entity_Id; - -- Used to represent some unknown real type. + -- Used to represent some unknown real type Any_Scalar : Entity_Id; -- Used to represent some unknown scalar type @@ -416,7 +416,9 @@ package Stand is Universal_Real : Entity_Id; -- Entity for universal real type. The bounds of this type correspond to -- to the largest supported real type (i.e. Long_Long_Real). It is the - -- type used for runtime calculations in type universal real. + -- type used for runtime calculations in type universal real. Note that + -- this type is always IEEE format, even if Long_Long_Real is Vax_Float + -- (and in that case the bounds don't correspond exactly). Universal_Fixed : Entity_Id; -- Entity for universal fixed type. This is a type with arbitrary diff --git a/gcc/ada/stringt.adb b/gcc/ada/stringt.adb index 2865305dbe7..0a5fbb2f012 100644 --- a/gcc/ada/stringt.adb +++ b/gcc/ada/stringt.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/stringt.ads b/gcc/ada/stringt.ads index a1919694652..fb974e4e9d2 100644 --- a/gcc/ada/stringt.ads +++ b/gcc/ada/stringt.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/styleg.ads b/gcc/ada/styleg.ads index 0a1441b33c5..58c834ae1be 100644 --- a/gcc/ada/styleg.ads +++ b/gcc/ada/styleg.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -105,7 +105,7 @@ package Styleg is -- Token_Ptr is the first token on the line. procedure Check_Left_Paren; - -- Called after scanning out a left parenthesis to check spacing. + -- Called after scanning out a left parenthesis to check spacing procedure Check_Line_Max_Length (Len : Int); -- Called with Scan_Ptr pointing to the first line terminator character @@ -122,7 +122,7 @@ package Styleg is -- properly (i.e. with an appropriate casing convention). procedure Check_Right_Paren; - -- Called after scanning out a right parenthesis to check spacing. + -- Called after scanning out a right parenthesis to check spacing procedure Check_Semicolon; -- Called after scanning out a semicolon to check spacing diff --git a/gcc/ada/switch-b.adb b/gcc/ada/switch-b.adb index de69081a104..f5beb05c470 100644 --- a/gcc/ada/switch-b.adb +++ b/gcc/ada/switch-b.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -45,7 +45,7 @@ package body Switch.B is -- Skip past the initial character (must be the switch character) if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); else Ptr := Ptr + 1; end if; @@ -122,7 +122,7 @@ package body Switch.B is then Set_Debug_Flag (C); else - raise Bad_Switch; + Bad_Switch (C); end if; end loop; @@ -132,7 +132,8 @@ package body Switch.B is when 'D' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Default_Sec_Stack_Size); + Scan_Pos + (Switch_Chars, Max, Ptr, Default_Sec_Stack_Size, C); -- Processing for e switch @@ -181,7 +182,7 @@ package body Switch.B is when 'i' => if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := Ptr + 1; @@ -197,7 +198,7 @@ package body Switch.B is Identifier_Character_Set := C; Ptr := Ptr + 1; else - raise Bad_Switch; + Bad_Switch (C); end if; -- Processing for K switch @@ -216,7 +217,7 @@ package body Switch.B is when 'm' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Maximum_Errors); + Scan_Pos (Switch_Chars, Max, Ptr, Maximum_Errors, C); -- Processing for n switch @@ -234,7 +235,7 @@ package body Switch.B is Ptr := Ptr + 1; if Output_File_Name_Present then - raise Too_Many_Output_Files; + Osint.Fail ("duplicate -o switch"); else Output_File_Name_Present := True; @@ -282,7 +283,7 @@ package body Switch.B is when 'T' => Ptr := Ptr + 1; Time_Slice_Set := True; - Scan_Nat (Switch_Chars, Max, Ptr, Time_Slice_Value); + Scan_Nat (Switch_Chars, Max, Ptr, Time_Slice_Value, C); Time_Slice_Value := Time_Slice_Value * 1_000; -- Processing for v switch @@ -308,7 +309,7 @@ package body Switch.B is Warning_Mode := Suppress; when others => - raise Bad_Switch; + Bad_Switch (C); end case; Ptr := Ptr + 1; @@ -324,7 +325,7 @@ package body Switch.B is exit; elsif J = WC_Encoding_Method'Last then - raise Bad_Switch; + Bad_Switch (C); end if; end loop; @@ -345,7 +346,7 @@ package body Switch.B is when 'X' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Default_Exit_Status); + Scan_Pos (Switch_Chars, Max, Ptr, Default_Exit_Status, C); -- Processing for z switch @@ -402,7 +403,7 @@ package body Switch.B is RTS_Src_Path_Name := Src_Path_Name; RTS_Lib_Path_Name := Lib_Path_Name; - -- We can exit as there can not be another switch + -- We can exit as there cannot be another switch -- after --RTS exit; @@ -429,22 +430,9 @@ package body Switch.B is -- Anything else is an error (illegal switch character) when others => - raise Bad_Switch; + Bad_Switch (C); end case; end loop; - - exception - when Bad_Switch => - Osint.Fail ("invalid switch: ", (1 => C)); - - when Bad_Switch_Value => - Osint.Fail ("numeric value out of range for switch: ", (1 => C)); - - when Missing_Switch_Value => - Osint.Fail ("missing numeric value for switch: ", (1 => C)); - - when Too_Many_Output_Files => - Osint.Fail ("duplicate -o switch"); end Scan_Binder_Switches; end Switch.B; diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb index c89eb1bc0fb..fe7545edadf 100644 --- a/gcc/ada/switch-c.adb +++ b/gcc/ada/switch-c.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,6 +32,7 @@ with Osint; use Osint; with Opt; use Opt; with Prepcomp; use Prepcomp; with Validsw; use Validsw; +with Sem_Warn; use Sem_Warn; with Stylesw; use Stylesw; with System.WCh_Con; use System.WCh_Con; @@ -67,7 +68,7 @@ package body Switch.C is -- Skip past the initial character (must be the switch character) if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); else Ptr := Ptr + 1; end if; @@ -104,7 +105,7 @@ package body Switch.C is Ptr := Ptr + 1; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; -- Find out whether this is a -I- or regular -Ixxx switch @@ -179,7 +180,7 @@ package body Switch.C is end if; end if; else - raise Bad_Switch; + Bad_Switch (C); end if; when True => @@ -261,7 +262,7 @@ package body Switch.C is Dot := True; else - raise Bad_Switch; + Bad_Switch (C); end if; end loop; @@ -289,7 +290,7 @@ package body Switch.C is -- so we must always have a character after the e. if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; case Switch_Chars (Ptr) is @@ -308,7 +309,7 @@ package body Switch.C is end if; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; declare @@ -351,7 +352,7 @@ package body Switch.C is Ptr := Ptr + 1; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; Add_Symbol_Definition (Switch_Chars (Ptr .. Max)); @@ -378,7 +379,8 @@ package body Switch.C is when 'I' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Multiple_Unit_Index); + Scan_Pos + (Switch_Chars, Max, Ptr, Multiple_Unit_Index, C); -- -gnatem (mapping file) @@ -394,7 +396,7 @@ package body Switch.C is end if; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; Mapping_File_Name := @@ -415,7 +417,7 @@ package body Switch.C is end if; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; Preprocessing_Data_File := @@ -446,7 +448,7 @@ package body Switch.C is -- All other -gnate? switches are unassigned when others => - raise Bad_Switch; + Bad_Switch (C); end case; -- -gnatE (dynamic elaboration checks) @@ -502,7 +504,7 @@ package body Switch.C is Warn_On_Unchecked_Conversion := True; Warn_On_Unrecognized_Pragma := True; - Set_Style_Check_Options ("3abcdefhiklmnprstu"); + Set_Style_Check_Options ("3abcdefhiklmnprstux"); -- Processing for G switch @@ -526,7 +528,7 @@ package body Switch.C is when 'i' => if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := Ptr + 1; @@ -544,14 +546,15 @@ package body Switch.C is Ptr := Ptr + 1; else - raise Bad_Switch; + Bad_Switch (C); end if; -- Processing for k switch when 'k' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Maximum_File_Name_Length); + Scan_Pos + (Switch_Chars, Max, Ptr, Maximum_File_Name_Length, C); -- Processing for l switch @@ -570,7 +573,14 @@ package body Switch.C is when 'm' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Maximum_Errors); + + -- There may be an equal sign between -gnatm and the value + + if Ptr <= Max and then Switch_Chars (Ptr) = '=' then + Ptr := Ptr + 1; + end if; + + Scan_Pos (Switch_Chars, Max, Ptr, Maximum_Errors, C); -- Processing for n switch @@ -603,7 +613,18 @@ package body Switch.C is when 'p' => Ptr := Ptr + 1; - Suppress_Options := (others => True); + + -- Set all specific options as well as All_Checks in the + -- Suppress_Options array, excluding Elaboration_Check, since + -- this is treated specially because we do not want -gnatp to + -- disable static elaboration processing. + + for J in Suppress_Options'Range loop + if J /= Elaboration_Check then + Suppress_Options (J) := True; + end if; + end loop; + Validity_Checks_On := False; Opt.Suppress_Checks := True; Opt.Enable_Overflow_Checks := False; @@ -648,7 +669,7 @@ package body Switch.C is List_Representation_Info_Mechanisms := True; else - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := Ptr + 1; @@ -687,7 +708,7 @@ package body Switch.C is when 'T' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Table_Factor); + Scan_Pos (Switch_Chars, Max, Ptr, Table_Factor, C); -- Processing for u switch @@ -715,7 +736,7 @@ package body Switch.C is Ptr := Ptr + 1; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); else declare @@ -726,7 +747,7 @@ package body Switch.C is (Switch_Chars (Ptr .. Max), OK, Ptr); if not OK then - raise Bad_Switch; + Bad_Switch (C); end if; for Index in First_Char + 1 .. Max loop @@ -748,188 +769,17 @@ package body Switch.C is Ptr := Ptr + 1; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; while Ptr <= Max loop C := Switch_Chars (Ptr); - case C is - when 'a' => - Check_Unreferenced := True; - Check_Unreferenced_Formals := True; - Check_Withs := True; - Constant_Condition_Warnings := True; - Implementation_Unit_Warnings := True; - Ineffective_Inline_Warnings := True; - Warn_On_Ada_2005_Compatibility := True; - Warn_On_Bad_Fixed_Value := True; - Warn_On_Constant := True; - Warn_On_Export_Import := True; - Warn_On_Modified_Unread := True; - Warn_On_No_Value_Assigned := True; - Warn_On_Obsolescent_Feature := True; - Warn_On_Redundant_Constructs := True; - Warn_On_Unchecked_Conversion := True; - Warn_On_Unrecognized_Pragma := True; - - when 'A' => - Check_Unreferenced := False; - Check_Unreferenced_Formals := False; - Check_Withs := False; - Constant_Condition_Warnings := False; - Elab_Warnings := False; - Implementation_Unit_Warnings := False; - Ineffective_Inline_Warnings := False; - Warn_On_Ada_2005_Compatibility := False; - Warn_On_Bad_Fixed_Value := False; - Warn_On_Constant := False; - Warn_On_Dereference := False; - Warn_On_Export_Import := False; - Warn_On_Hiding := False; - Warn_On_Modified_Unread := False; - Warn_On_No_Value_Assigned := False; - Warn_On_Obsolescent_Feature := False; - Warn_On_Redundant_Constructs := False; - Warn_On_Unchecked_Conversion := False; - Warn_On_Unrecognized_Pragma := False; - - when 'b' => - Warn_On_Bad_Fixed_Value := True; - - when 'B' => - Warn_On_Bad_Fixed_Value := False; - - when 'c' => - Constant_Condition_Warnings := True; - - when 'C' => - Constant_Condition_Warnings := False; - - when 'd' => - Warn_On_Dereference := True; - - when 'D' => - Warn_On_Dereference := False; - - when 'e' => - Warning_Mode := Treat_As_Error; - - when 'f' => - Check_Unreferenced_Formals := True; - - when 'F' => - Check_Unreferenced_Formals := False; - - when 'g' => - Warn_On_Unrecognized_Pragma := True; - - when 'G' => - Warn_On_Unrecognized_Pragma := False; - - when 'h' => - Warn_On_Hiding := True; - - when 'H' => - Warn_On_Hiding := False; - - when 'i' => - Implementation_Unit_Warnings := True; - - when 'I' => - Implementation_Unit_Warnings := False; - - when 'j' => - Warn_On_Obsolescent_Feature := True; - - when 'J' => - Warn_On_Obsolescent_Feature := False; - - when 'k' => - Warn_On_Constant := True; - - when 'K' => - Warn_On_Constant := False; - - when 'l' => - Elab_Warnings := True; - - when 'L' => - Elab_Warnings := False; - - when 'm' => - Warn_On_Modified_Unread := True; - - when 'M' => - Warn_On_Modified_Unread := False; - - when 'n' => - Warning_Mode := Normal; - - when 'o' => - Address_Clause_Overlay_Warnings := True; - - when 'O' => - Address_Clause_Overlay_Warnings := False; - - when 'p' => - Ineffective_Inline_Warnings := True; - - when 'P' => - Ineffective_Inline_Warnings := False; - - when 'r' => - Warn_On_Redundant_Constructs := True; - - when 'R' => - Warn_On_Redundant_Constructs := False; - - when 's' => - Warning_Mode := Suppress; - - when 'u' => - Check_Unreferenced := True; - Check_Withs := True; - Check_Unreferenced_Formals := True; - - when 'U' => - Check_Unreferenced := False; - Check_Withs := False; - Check_Unreferenced_Formals := False; - - when 'v' => - Warn_On_No_Value_Assigned := True; - - when 'V' => - Warn_On_No_Value_Assigned := False; - - when 'x' => - Warn_On_Export_Import := True; - - when 'X' => - Warn_On_Export_Import := False; - - when 'y' => - Warn_On_Ada_2005_Compatibility := True; - - when 'Y' => - Warn_On_Ada_2005_Compatibility := False; - - when 'z' => - Warn_On_Unchecked_Conversion := True; - - when 'Z' => - Warn_On_Unchecked_Conversion := False; - - -- Allow and ignore 'w' so that the old - -- format (e.g. -gnatwuwl) will work. - - when 'w' => - null; - - when others => - raise Bad_Switch; - end case; + if Set_Warning_Switch (C) then + null; + else + Bad_Switch (C); + end if; if C /= 'w' then Storing (First_Stored + 1) := C; @@ -948,7 +798,7 @@ package body Switch.C is Ptr := Ptr + 1; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; for J in WC_Encoding_Method loop @@ -957,7 +807,7 @@ package body Switch.C is exit; elsif J = WC_Encoding_Method'Last then - raise Bad_Switch; + Bad_Switch (C); end if; end loop; @@ -1002,7 +852,7 @@ package body Switch.C is (Switch_Chars (Ptr .. Max), OK, Ptr); if not OK then - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := First_Char + 1; @@ -1047,7 +897,7 @@ package body Switch.C is Distribution_Stub_Mode := Generate_Caller_Stub_Body; when others => - raise Bad_Switch; + Bad_Switch (C); end case; Ptr := Ptr + 1; @@ -1065,13 +915,13 @@ package body Switch.C is when '8' => if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := Ptr + 1; if Switch_Chars (Ptr) /= '3' then - raise Bad_Switch; + Bad_Switch (C); else Ptr := Ptr + 1; Ada_Version := Ada_83; @@ -1082,13 +932,13 @@ package body Switch.C is when '9' => if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := Ptr + 1; if Switch_Chars (Ptr) /= '5' then - raise Bad_Switch; + Bad_Switch (C); else Ptr := Ptr + 1; Ada_Version := Ada_95; @@ -1099,13 +949,13 @@ package body Switch.C is when '0' => if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); end if; Ptr := Ptr + 1; if Switch_Chars (Ptr) /= '5' then - raise Bad_Switch; + Bad_Switch (C); else Ptr := Ptr + 1; Ada_Version := Ada_05; @@ -1120,7 +970,7 @@ package body Switch.C is -- Anything else is an error (illegal switch character) when others => - raise Bad_Switch; + Bad_Switch (C); end case; end case; @@ -1133,17 +983,6 @@ package body Switch.C is First_Switch := False; end loop; - - exception - when Bad_Switch => - Osint.Fail ("invalid switch: ", (1 => C)); - - when Bad_Switch_Value => - Osint.Fail ("numeric value out of range for switch: ", (1 => C)); - - when Missing_Switch_Value => - Osint.Fail ("missing numeric value for switch: ", (1 => C)); - end Scan_Front_End_Switches; end Switch.C; diff --git a/gcc/ada/switch-m.adb b/gcc/ada/switch-m.adb index 6c5ed1ff453..bad932a01a6 100644 --- a/gcc/ada/switch-m.adb +++ b/gcc/ada/switch-m.adb @@ -491,7 +491,7 @@ package body Switch.M is -- Skip past the initial character (must be the switch character) if Ptr = Max then - raise Bad_Switch; + Bad_Switch (C); else Ptr := Ptr + 1; @@ -581,7 +581,7 @@ package body Switch.M is then Set_Debug_Flag (C); else - raise Bad_Switch; + Bad_Switch (C); end if; end loop; @@ -593,7 +593,7 @@ package body Switch.M is Ptr := Ptr + 1; if Ptr > Max then - raise Bad_Switch; + Bad_Switch (C); end if; case Switch_Chars (Ptr) is @@ -602,7 +602,7 @@ package body Switch.M is when 'I' => Ptr := Ptr + 1; - Scan_Pos (Switch_Chars, Max, Ptr, Main_Index); + Scan_Pos (Switch_Chars, Max, Ptr, Main_Index, C); -- processing for eL switch @@ -611,7 +611,7 @@ package body Switch.M is Follow_Links := True; when others => - raise Bad_Switch; + Bad_Switch (C); end case; -- Processing for f switch @@ -646,7 +646,7 @@ package body Switch.M is declare Max_Proc : Pos; begin - Scan_Pos (Switch_Chars, Max, Ptr, Max_Proc); + Scan_Pos (Switch_Chars, Max, Ptr, Max_Proc, C); Maximum_Processes := Positive (Max_Proc); end; @@ -679,7 +679,7 @@ package body Switch.M is Ptr := Ptr + 1; if Output_File_Name_Present then - raise Too_Many_Output_Files; + Osint.Fail ("duplicate -o switch"); else Output_File_Name_Present := True; end if; @@ -707,6 +707,25 @@ package body Switch.M is when 'v' => Ptr := Ptr + 1; Verbose_Mode := True; + Verbosity_Level := Opt.High; + + if Ptr <= Max then + case Switch_Chars (Ptr) is + when 'l' => + Verbosity_Level := Opt.Low; + + when 'm' => + Verbosity_Level := Opt.Medium; + + when 'h' => + Verbosity_Level := Opt.High; + + when others => + Osint.Fail ("invalid switch: ", Switch_Chars); + end case; + + Ptr := Ptr + 1; + end if; -- Processing for x switch @@ -728,7 +747,7 @@ package body Switch.M is -- Anything else is an error (illegal switch character) when others => - raise Bad_Switch; + Bad_Switch (C); end case; @@ -738,19 +757,6 @@ package body Switch.M is end Check_Switch; - exception - when Bad_Switch => - Osint.Fail ("invalid switch: ", (1 => C)); - - when Bad_Switch_Value => - Osint.Fail ("numeric value out of range for switch: ", (1 => C)); - - when Missing_Switch_Value => - Osint.Fail ("missing numeric value for switch: ", (1 => C)); - - when Too_Many_Output_Files => - Osint.Fail ("duplicate -o switch"); - end Scan_Make_Switches; end Switch.M; diff --git a/gcc/ada/switch.adb b/gcc/ada/switch.adb index c960b57883f..048678bd19f 100644 --- a/gcc/ada/switch.adb +++ b/gcc/ada/switch.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,8 +24,19 @@ -- -- ------------------------------------------------------------------------------ +with Osint; + package body Switch is + ---------------- + -- Bad_Switch -- + ---------------- + + procedure Bad_Switch (Switch : Character) is + begin + Osint.Fail ("invalid switch: ", (1 => Switch)); + end Bad_Switch; + ------------------------- -- Is_Front_End_Switch -- ------------------------- @@ -61,24 +72,27 @@ package body Switch is (Switch_Chars : String; Max : Integer; Ptr : in out Integer; - Result : out Nat) + Result : out Nat; + Switch : Character) is begin Result := 0; if Ptr > Max or else Switch_Chars (Ptr) not in '0' .. '9' then - raise Missing_Switch_Value; + Osint.Fail ("missing numeric value for switch: ", (1 => Switch)); + + else + while Ptr <= Max and then Switch_Chars (Ptr) in '0' .. '9' loop + Result := Result * 10 + + Character'Pos (Switch_Chars (Ptr)) - Character'Pos ('0'); + Ptr := Ptr + 1; + + if Result > Switch_Max_Value then + Osint.Fail + ("numeric value out of range for switch: ", (1 => Switch)); + end if; + end loop; end if; - - while Ptr <= Max and then Switch_Chars (Ptr) in '0' .. '9' loop - Result := Result * 10 + - Character'Pos (Switch_Chars (Ptr)) - Character'Pos ('0'); - Ptr := Ptr + 1; - - if Result > Switch_Max_Value then - raise Bad_Switch_Value; - end if; - end loop; end Scan_Nat; -------------- @@ -89,15 +103,16 @@ package body Switch is (Switch_Chars : String; Max : Integer; Ptr : in out Integer; - Result : out Pos) + Result : out Pos; + Switch : Character) is Temp : Nat; begin - Scan_Nat (Switch_Chars, Max, Ptr, Temp); + Scan_Nat (Switch_Chars, Max, Ptr, Temp, Switch); if Temp = 0 then - raise Bad_Switch_Value; + Osint.Fail ("numeric value out of range for switch: ", (1 => Switch)); end if; Result := Temp; diff --git a/gcc/ada/switch.ads b/gcc/ada/switch.ads index 2be39a3f9e5..15c273f829c 100644 --- a/gcc/ada/switch.ads +++ b/gcc/ada/switch.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -62,18 +62,6 @@ private -- child packages (there is one such child package for each tool that -- uses Switches to scan switches - Compiler/gnatbind/gnatmake/. - Bad_Switch : exception; - -- Exception raised if bad switch encountered - - Bad_Switch_Value : exception; - -- Exception raised if bad switch value encountered - - Missing_Switch_Value : exception; - -- Exception raised if no switch value encountered - - Too_Many_Output_Files : exception; - -- Exception raised if the -o switch is encountered more than once - Switch_Max_Value : constant := 999_999; -- Maximum value permitted in switches that take a value @@ -81,7 +69,8 @@ private (Switch_Chars : String; Max : Integer; Ptr : in out Integer; - Result : out Nat); + Result : out Nat; + Switch : Character); -- Scan natural integer parameter for switch. On entry, Ptr points -- just past the switch character, on exit it points past the last -- digit of the integer value. @@ -90,9 +79,13 @@ private (Switch_Chars : String; Max : Integer; Ptr : in out Integer; - Result : out Pos); + Result : out Pos; + Switch : Character); -- Scan positive integer parameter for switch. On entry, Ptr points -- just past the switch character, on exit it points past the last -- digit of the integer value. + procedure Bad_Switch (Switch : Character); + -- Fail with an appropriate message when a switch is not recognized + end Switch; diff --git a/gcc/ada/symbols.adb b/gcc/ada/symbols.adb index af4a73cce0a..631ccb1f5ce 100644 --- a/gcc/ada/symbols.adb +++ b/gcc/ada/symbols.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/symbols.ads b/gcc/ada/symbols.ads index 8672a0ec9e0..b9a5e5f2a40 100644 --- a/gcc/ada/symbols.ads +++ b/gcc/ada/symbols.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -34,7 +34,7 @@ with GNAT.OS_Lib; use GNAT.OS_Lib; package Symbols is type Policy is - -- Symbol policy: + -- Symbol policy (Autonomous, -- Create a symbol file without considering any reference diff --git a/gcc/ada/system-aix.ads b/gcc/ada/system-aix.ads index 246207c18c8..8db13afacd7 100644 --- a/gcc/ada/system-aix.ads +++ b/gcc/ada/system-aix.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (AIX/PPC Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-darwin-ppc.ads b/gcc/ada/system-darwin-ppc.ads index 3d8f99b522d..19478e96d28 100644 --- a/gcc/ada/system-darwin-ppc.ads +++ b/gcc/ada/system-darwin-ppc.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (Darwin/PPC Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-freebsd-x86.ads b/gcc/ada/system-freebsd-x86.ads index 3eab5aef7e3..45216d111ec 100644 --- a/gcc/ada/system-freebsd-x86.ads +++ b/gcc/ada/system-freebsd-x86.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (FreeBSD/x86 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-hpux-ia64.ads b/gcc/ada/system-hpux-ia64.ads index cb5af090af5..c3d2ee925b8 100644 --- a/gcc/ada/system-hpux-ia64.ads +++ b/gcc/ada/system-hpux-ia64.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (HP-UX/ia64 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-hpux.ads b/gcc/ada/system-hpux.ads index 4a72615f49c..4dbc6ae1d04 100644 --- a/gcc/ada/system-hpux.ads +++ b/gcc/ada/system-hpux.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (HP-UX Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-interix.ads b/gcc/ada/system-interix.ads index 9e25857b2ec..c816faefb29 100644 --- a/gcc/ada/system-interix.ads +++ b/gcc/ada/system-interix.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (OpenNT/Interix Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-irix-n32.ads b/gcc/ada/system-irix-n32.ads index 794f494848b..958bd8ca407 100644 --- a/gcc/ada/system-irix-n32.ads +++ b/gcc/ada/system-irix-n32.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (SGI Irix, n32 ABI) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-irix-o32.ads b/gcc/ada/system-irix-o32.ads index 1a69ff08189..73b1ad520e3 100644 --- a/gcc/ada/system-irix-o32.ads +++ b/gcc/ada/system-irix-o32.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (SGI Irix, o32 ABI) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-linux-hppa.ads b/gcc/ada/system-linux-hppa.ads index 67c395c0d18..7b0259c9b74 100644 --- a/gcc/ada/system-linux-hppa.ads +++ b/gcc/ada/system-linux-hppa.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU/Linux-HPPA Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-linux-ia64.ads b/gcc/ada/system-linux-ia64.ads index 892a1be8dee..95f70a3f9f1 100644 --- a/gcc/ada/system-linux-ia64.ads +++ b/gcc/ada/system-linux-ia64.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/ia64 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-linux-ppc.ads b/gcc/ada/system-linux-ppc.ads index 99ed4e32b6f..d2b414da6c4 100644 --- a/gcc/ada/system-linux-ppc.ads +++ b/gcc/ada/system-linux-ppc.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/PPC Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-linux-x86.ads b/gcc/ada/system-linux-x86.ads index 6f43799ab28..fa79b5e4c92 100644 --- a/gcc/ada/system-linux-x86.ads +++ b/gcc/ada/system-linux-x86.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/x86 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-linux-x86_64.ads b/gcc/ada/system-linux-x86_64.ads index e850d740384..2867602ad74 100644 --- a/gcc/ada/system-linux-x86_64.ads +++ b/gcc/ada/system-linux-x86_64.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/x86-64 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-lynxos-ppc.ads b/gcc/ada/system-lynxos-ppc.ads index 3aec6f23bb8..3329bc13a63 100644 --- a/gcc/ada/system-lynxos-ppc.ads +++ b/gcc/ada/system-lynxos-ppc.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (LynxOS PPC Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -91,14 +91,28 @@ package System is -- Priority-related Declarations (RM D.1) - Max_Priority : constant Positive := 254; + -- 17 is the system determined default priority for user applications + -- running on LynxOS. + + -- The standard (Rm 13.7) requires that Default_Priority has the value: + + -- (Priority'First + Priority'Last) / 2. + + -- To allow an appropriate value for Default_Priority and expose a useful + -- range of priorities to the user, we use a range of 0 .. 34 for subtype + -- Priority. + + -- The rest of the range allowed by the system from 35 to 255 is made + -- available here in Interrupt_Priority. + + Max_Priority : constant Positive := 34; Max_Interrupt_Priority : constant Positive := 255; subtype Any_Priority is Integer range 0 .. 255; - subtype Priority is Any_Priority range 0 .. 254; - subtype Interrupt_Priority is Any_Priority range 255 .. 255; + subtype Priority is Any_Priority range 0 .. 34; + subtype Interrupt_Priority is Any_Priority range 35 .. 255; - Default_Priority : constant Priority := 15; + Default_Priority : constant Priority := 17; private diff --git a/gcc/ada/system-lynxos-x86.ads b/gcc/ada/system-lynxos-x86.ads index 8213dbe7360..00938c3ce94 100644 --- a/gcc/ada/system-lynxos-x86.ads +++ b/gcc/ada/system-lynxos-x86.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (LynxOS x86 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -91,14 +91,28 @@ package System is -- Priority-related Declarations (RM D.1) - Max_Priority : constant Positive := 254; + -- 17 is the system determined default priority for user applications + -- running on LynxOS. + + -- The standard (Rm 13.7) requires that Default_Priority has the value: + + -- (Priority'First + Priority'Last) / 2. + + -- To allow an appropriate value for Default_Priority and expose a useful + -- range of priorities to the user, we use a range of 0 .. 34 for subtype + -- Priority. + + -- The rest of the range allowed by the system from 35 to 255 is made + -- available here in Interrupt_Priority. + + Max_Priority : constant Positive := 34; Max_Interrupt_Priority : constant Positive := 255; subtype Any_Priority is Integer range 0 .. 255; - subtype Priority is Any_Priority range 0 .. 254; - subtype Interrupt_Priority is Any_Priority range 255 .. 255; + subtype Priority is Any_Priority range 0 .. 34; + subtype Interrupt_Priority is Any_Priority range 35 .. 255; - Default_Priority : constant Priority := 15; + Default_Priority : constant Priority := 17; private diff --git a/gcc/ada/system-mingw.ads b/gcc/ada/system-mingw.ads index b5967998da0..5924fc8f9c2 100644 --- a/gcc/ada/system-mingw.ads +++ b/gcc/ada/system-mingw.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (NT Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-os2.ads b/gcc/ada/system-os2.ads index 9dc5bf8b686..65c9461c050 100644 --- a/gcc/ada/system-os2.ads +++ b/gcc/ada/system-os2.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (OS/2 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-solaris-sparc.ads b/gcc/ada/system-solaris-sparc.ads index 1ec0af3872d..2c36f6482f4 100644 --- a/gcc/ada/system-solaris-sparc.ads +++ b/gcc/ada/system-solaris-sparc.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (SUN Solaris Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-solaris-sparcv9.ads b/gcc/ada/system-solaris-sparcv9.ads index 672cd97e5dd..1e1e5342501 100644 --- a/gcc/ada/system-solaris-sparcv9.ads +++ b/gcc/ada/system-solaris-sparcv9.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (Solaris Sparcv9 Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-solaris-x86.ads b/gcc/ada/system-solaris-x86.ads index 0ebf08bef5c..3f3ed23b295 100644 --- a/gcc/ada/system-solaris-x86.ads +++ b/gcc/ada/system-solaris-x86.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (x86 Solaris Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-tru64.ads b/gcc/ada/system-tru64.ads index ef3d7de8a0b..da79c82bab2 100644 --- a/gcc/ada/system-tru64.ads +++ b/gcc/ada/system-tru64.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (DEC Unix Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-unixware.ads b/gcc/ada/system-unixware.ads index 63fb6038cde..801968d5141 100644 --- a/gcc/ada/system-unixware.ads +++ b/gcc/ada/system-unixware.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (SCO UnixWare Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-vms-zcx.ads b/gcc/ada/system-vms-zcx.ads index 5f9f59423c5..39af22044e5 100644 --- a/gcc/ada/system-vms-zcx.ads +++ b/gcc/ada/system-vms-zcx.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (OpenVMS GCC_ZCX DEC Threads Version) -- -- -- --- Copyright (C) 2002-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- diff --git a/gcc/ada/system-vms.ads b/gcc/ada/system-vms.ads index d958ded7663..22d49f5d979 100644 --- a/gcc/ada/system-vms.ads +++ b/gcc/ada/system-vms.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (OpenVMS DEC Threads Version) -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -236,4 +236,9 @@ private -- {Import,Export}_Exception. Put here because this is the only -- VMS specific package that doesn't drag in tasking. + ADA_GNAT : constant Boolean := True; + pragma Export_Object (ADA_GNAT, "ADA$GNAT"); + -- Uniquitous global symbol identifing a GNAT compiled image to VMS Debug. + -- Do not remove! + end System; diff --git a/gcc/ada/system-vms_64.ads b/gcc/ada/system-vms_64.ads index 3d7b8e8f615..555692c6d90 100644 --- a/gcc/ada/system-vms_64.ads +++ b/gcc/ada/system-vms_64.ads @@ -7,7 +7,7 @@ -- S p e c -- -- (OpenVMS 64bit GCC_ZCX DEC Threads Version) -- -- -- --- Copyright (C) 2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -255,4 +255,9 @@ private -- {Import,Export}_Exception. Put here because this is the only -- VMS specific package that doesn't drag in tasking. + ADA_GNAT : constant Boolean := True; + pragma Export_Object (ADA_GNAT, "ADA$GNAT"); + -- Uniquitous global symbol identifing a GNAT compiled image to VMS Debug. + -- Do not remove! + end System; diff --git a/gcc/ada/table.ads b/gcc/ada/table.ads index 853948ab8c7..983f7fd0e35 100644 --- a/gcc/ada/table.ads +++ b/gcc/ada/table.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -174,11 +174,11 @@ package Table is procedure Increment_Last; pragma Inline (Increment_Last); - -- Adds 1 to Last (same as Set_Last (Last + 1). + -- Adds 1 to Last (same as Set_Last (Last + 1) procedure Decrement_Last; pragma Inline (Decrement_Last); - -- Subtracts 1 from Last (same as Set_Last (Last - 1). + -- Subtracts 1 from Last (same as Set_Last (Last - 1) procedure Append (New_Val : Table_Component_Type); pragma Inline (Append); diff --git a/gcc/ada/targparm.adb b/gcc/ada/targparm.adb index 0fd9c7fc596..65ba29f977e 100644 --- a/gcc/ada/targparm.adb +++ b/gcc/ada/targparm.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/targparm.ads b/gcc/ada/targparm.ads index b29f506be75..38dd2266840 100644 --- a/gcc/ada/targparm.ads +++ b/gcc/ada/targparm.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -295,7 +295,7 @@ package Targparm is -- this variable is True, then GCC ZCX is used. GCC_ZCX_Support_On_Target : Boolean := False; - -- Indicates that the target supports GCC Exceptions. + -- Indicates that the target supports GCC Exceptions ------------------------------------ -- Run-Time Library Configuration -- @@ -523,7 +523,7 @@ package Targparm is -- Set to True for targets where S'Machine_Overflows is True Signed_Zeros_On_Target : Boolean := True; - -- Set to False on targets that do not reliably support signed zeros. + -- Set to False on targets that do not reliably support signed zeros ------------------------------------------- -- Boolean-Valued Fixed-Point Attributes -- diff --git a/gcc/ada/tb-alvms.c b/gcc/ada/tb-alvms.c index 5f1fc3f0caa..22fc540855d 100644 --- a/gcc/ada/tb-alvms.c +++ b/gcc/ada/tb-alvms.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2003,2005 Ada Core Technologies, Inc * + * Copyright (C) 2003-2005, AdaCore * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * diff --git a/gcc/ada/tb-alvxw.c b/gcc/ada/tb-alvxw.c index 0f9d5e2d002..64e4a3ced0b 100644 --- a/gcc/ada/tb-alvxw.c +++ b/gcc/ada/tb-alvxw.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2000-2003 Ada Core Technologies, Inc * + * Copyright (C) 2000-2005, AdaCore * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * diff --git a/gcc/ada/tb-gcc.c b/gcc/ada/tb-gcc.c index 0fe923e53f8..1a3566ec379 100644 --- a/gcc/ada/tb-gcc.c +++ b/gcc/ada/tb-gcc.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2004 Ada Core Technologies, Inc * + * Copyright (C) 2004-2005, AdaCore * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -54,10 +54,21 @@ typedef struct { * trace_callback * ******************/ +#if defined (__ia64__) && defined (__hpux__) +#include +#endif + static _Unwind_Reason_Code trace_callback (struct _Unwind_Context * uw_context, uw_data_t * uw_data) { - void * pc = (void *) _Unwind_GetIP (uw_context); + void * pc; + +#if defined (__ia64__) && defined (__hpux__) + /* Work around problem with _Unwind_GetIP on ia64 HP-UX. */ + uwx_get_reg ((struct uwx_env *) uw_context, UWX_REG_IP, (uint64_t *) &pc); +#else + pc = (void *) _Unwind_GetIP (uw_context); +#endif if (uw_data->n_frames_skipped < uw_data->n_frames_to_skip) { diff --git a/gcc/ada/tbuild.adb b/gcc/ada/tbuild.adb index fba9c3c3c9e..f7966b156a4 100644 --- a/gcc/ada/tbuild.adb +++ b/gcc/ada/tbuild.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/tempdir.adb b/gcc/ada/tempdir.adb index 7daea87e5c6..a0b8adacac7 100644 --- a/gcc/ada/tempdir.adb +++ b/gcc/ada/tempdir.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -114,7 +114,10 @@ begin Dir : String_Access := Getenv (Tmpdir); begin - if Dir'Length > 0 and then Is_Absolute_Path (Dir.all) then + if Dir'Length > 0 and then + Is_Absolute_Path (Dir.all) and then + Is_Directory (Dir.all) + then Temp_Dir := new String'(Normalize_Pathname (Dir.all)); end if; diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c index f7c431b77b9..db825d155ee 100644 --- a/gcc/ada/tracebak.c +++ b/gcc/ada/tracebak.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2000-2005 Ada Core Technologies, Inc. * + * Copyright (C) 2000-2005, AdaCore * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -300,7 +300,11 @@ struct layout }; #define LOWEST_ADDR 0 -#define FRAME_LEVEL 0 +#define FRAME_LEVEL 1 +/* builtin_frame_address (1) is expected to work on this target, and (0) might + return the soft stack pointer, which does not designate a location where a + backchain and a return address might be found. */ + #define FRAME_OFFSET 0 #define PC_ADJUST -2 #define STOP_FRAME(CURRENT, TOP_STACK) \ @@ -309,7 +313,7 @@ struct layout || (CURRENT)->return_address == 0|| (CURRENT)->next == 0 \ || (void *) (CURRENT) < (TOP_STACK)) -#define BASE_SKIP 1 +#define BASE_SKIP (1+FRAME_LEVEL) /* On i386 architecture we check that at the call point we really have a call insn. Possible call instructions are: @@ -349,9 +353,13 @@ struct layout /*----------------------------- ia64 ---------------------------------*/ -#elif defined (__ia64__) && !defined (USE_LIBUNWIND_EXCEPTIONS) +#elif defined (__ia64__) && (defined (linux) || defined (__hpux__)) #define USE_GCC_UNWINDER +/* Use _Unwind_Backtrace driven exceptions on ia64 HP-UX and ia64 + GNU/Linux, where _Unwind_Backtrace is provided by the system unwind + library. On HP-UX 11.23 this requires patch PHSS_33352, which adds + _Unwind_Backtrace to the system unwind library. */ #define PC_ADJUST -16 /* Every call on ia64 is part of a 128 bit bundle, so an adjustment of diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c index 0e05b6d4731..c7126720003 100644 --- a/gcc/ada/trans.c +++ b/gcc/ada/trans.c @@ -408,13 +408,7 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p) else if (TREE_CODE (gnu_result) == VAR_DECL && (renamed_obj = DECL_RENAMED_OBJECT (gnu_result)) != 0 && (! DECL_RENAMING_GLOBAL_P (gnu_result) - || global_bindings_p ()) - /* Make sure it's an lvalue like INDIRECT_REF. */ - && (DECL_P (renamed_obj) - || REFERENCE_CLASS_P (renamed_obj) - || (TREE_CODE (renamed_obj) == VIEW_CONVERT_EXPR - && (DECL_P (TREE_OPERAND (renamed_obj, 0)) - || REFERENCE_CLASS_P (TREE_OPERAND (renamed_obj,0)))))) + || global_bindings_p ())) gnu_result = renamed_obj; else gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, @@ -719,6 +713,21 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) = size_binop (MAX_EXPR, gnu_result, DECL_SIZE (TREE_OPERAND (gnu_expr, 1))); } + else if (Nkind (Prefix (gnat_node)) == N_Explicit_Dereference) + { + Node_Id gnat_deref = Prefix (gnat_node); + Node_Id gnat_actual_subtype = Actual_Designated_Subtype (gnat_deref); + tree gnu_ptr_type = TREE_TYPE (gnat_to_gnu (Prefix (gnat_deref))); + if (TYPE_FAT_OR_THIN_POINTER_P (gnu_ptr_type) + && Present (gnat_actual_subtype)) + { + tree gnu_actual_obj_type = gnat_to_gnu_type (gnat_actual_subtype); + gnu_type = build_unc_object_type_from_ptr (gnu_ptr_type, + gnu_actual_obj_type, get_identifier ("SIZE")); + } + + gnu_result = TYPE_SIZE (gnu_type); + } else gnu_result = TYPE_SIZE (gnu_type); } @@ -1564,8 +1573,15 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) 0, Etype (Name (gnat_node)), "PAD", false, false, false); - gnu_target = create_tmp_var_raw (gnu_obj_type, "LR"); - gnat_pushdecl (gnu_target, gnat_node); + /* ??? We may be about to create a static temporary if we happen to + be at the global binding level. That's a regression from what + the 3.x back-end would generate in the same situation, but we + don't have a mechanism in Gigi for creating automatic variables + in the elaboration routines. */ + gnu_target + = create_var_decl (create_tmp_var_name ("LR"), NULL, gnu_obj_type, + NULL, false, false, false, false, NULL, + gnat_node); } gnu_actual_list @@ -1602,6 +1618,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) tree gnu_formal = (present_gnu_tree (gnat_formal) ? get_gnu_tree (gnat_formal) : NULL_TREE); + tree gnu_formal_type = gnat_to_gnu_type (Etype (gnat_formal)); /* We treat a conversion between aggregate types as if it is an unchecked conversion. */ bool unchecked_convert_p @@ -1613,7 +1630,6 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) tree gnu_name = gnat_to_gnu (gnat_name); tree gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)); tree gnu_actual; - tree gnu_formal_type; /* If it's possible we may need to use this expression twice, make sure than any side-effects are handled via SAVE_EXPRs. Likewise if we need @@ -1626,6 +1642,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) if (Ekind (gnat_formal) != E_In_Parameter) { gnu_name = gnat_stabilize_reference (gnu_name, true); + if (!addressable_p (gnu_name) && gnu_formal && (DECL_BY_REF_P (gnu_formal) @@ -1687,6 +1704,9 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnu_copy, gnu_actual); annotate_with_node (gnu_temp, gnat_actual); append_to_statement_list (gnu_temp, &gnu_after_list); + + /* Account for next statement just below. */ + gnu_name = gnu_actual; } } @@ -1738,6 +1758,9 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnu_actual = convert (gnat_to_gnu_type (Etype (gnat_actual)), gnu_actual); + if (TREE_CODE (gnu_actual) != SAVE_EXPR) + gnu_actual = convert (gnu_formal_type, gnu_actual); + /* If we have not saved a GCC object for the formal, it means it is an OUT parameter not passed by reference and that does not need to be copied in. Otherwise, look at the PARM_DECL to see if it is passed by @@ -1986,7 +2009,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) && TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_result))))) gnu_result = convert (TREE_TYPE (gnu_actual), gnu_result); } - + gnu_result = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_actual, gnu_result); annotate_with_node (gnu_result, gnat_actual); @@ -2494,25 +2517,40 @@ gnat_to_gnu (Node_Id gnat_node) return build1 (NULL_EXPR, get_unpadded_type (Etype (gnat_node)), build_call_raise (CE_Range_Check_Failed)); - /* If this is a Statement and we are at top level, it must be part of - the elaboration procedure, so mark us as being in that procedure - and push our context. */ - if (!current_function_decl - && ((IN (Nkind (gnat_node), N_Statement_Other_Than_Procedure_Call) - && Nkind (gnat_node) != N_Null_Statement) - || Nkind (gnat_node) == N_Procedure_Call_Statement - || Nkind (gnat_node) == N_Label - || Nkind (gnat_node) == N_Implicit_Label_Declaration - || Nkind (gnat_node) == N_Handled_Sequence_Of_Statements - || ((Nkind (gnat_node) == N_Raise_Constraint_Error - || Nkind (gnat_node) == N_Raise_Storage_Error - || Nkind (gnat_node) == N_Raise_Program_Error) - && (Ekind (Etype (gnat_node)) == E_Void)))) + /* If this is a Statement and we are at top level, it must be part of the + elaboration procedure, so mark us as being in that procedure and push our + context. + + If we are in the elaboration procedure, check if we are violating a a + No_Elaboration_Code restriction by having a statement there. */ + if ((IN (Nkind (gnat_node), N_Statement_Other_Than_Procedure_Call) + && Nkind (gnat_node) != N_Null_Statement) + || Nkind (gnat_node) == N_Procedure_Call_Statement + || Nkind (gnat_node) == N_Label + || Nkind (gnat_node) == N_Implicit_Label_Declaration + || Nkind (gnat_node) == N_Handled_Sequence_Of_Statements + || ((Nkind (gnat_node) == N_Raise_Constraint_Error + || Nkind (gnat_node) == N_Raise_Storage_Error + || Nkind (gnat_node) == N_Raise_Program_Error) + && (Ekind (Etype (gnat_node)) == E_Void))) { - current_function_decl = TREE_VALUE (gnu_elab_proc_stack); - start_stmt_group (); - gnat_pushlevel (); - went_into_elab_proc = true; + if (!current_function_decl) + { + current_function_decl = TREE_VALUE (gnu_elab_proc_stack); + start_stmt_group (); + gnat_pushlevel (); + went_into_elab_proc = true; + } + + /* Don't check for a possible No_Elaboration_Code restriction violation + on N_Handled_Sequence_Of_Statements, as we want to signal an error on + every nested real statement instead. This also avoids triggering + spurious errors on dummy (empty) sequences created by the front-end + for package bodies in some cases. */ + + if (current_function_decl == TREE_VALUE (gnu_elab_proc_stack) + && Nkind (gnat_node) != N_Handled_Sequence_Of_Statements) + Check_Elaboration_Code_Allowed (gnat_node); } switch (Nkind (gnat_node)) @@ -2979,7 +3017,7 @@ gnat_to_gnu (Node_Id gnat_node) ? Designated_Type (Etype (Prefix (gnat_node))) : Etype (Prefix (gnat_node)))) - gnu_prefix = gnat_stabilize_reference (gnu_prefix, 0); + gnu_prefix = gnat_stabilize_reference (gnu_prefix, false); gnu_result = build_component_ref (gnu_prefix, NULL_TREE, gnu_field, @@ -3423,8 +3461,8 @@ gnat_to_gnu (Node_Id gnat_node) /* If the type has a size that overflows, convert this into raise of Storage_Error: execution shouldn't have gotten here anyway. */ - if (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_lhs))) == INTEGER_CST - && TREE_OVERFLOW (TYPE_SIZE (TREE_TYPE (gnu_lhs)))) + if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs))) == INTEGER_CST + && TREE_OVERFLOW (TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs)))) gnu_result = build_call_raise (SE_Object_Too_Large); else if (Nkind (Expression (gnat_node)) == N_Function_Call && !Do_Range_Check (Expression (gnat_node))) @@ -3924,7 +3962,9 @@ gnat_to_gnu (Node_Id gnat_node) if (!type_annotate_only) { tree gnu_ptr = gnat_to_gnu (Expression (gnat_node)); + tree gnu_ptr_type = TREE_TYPE (gnu_ptr); tree gnu_obj_type; + tree gnu_actual_obj_type = 0; tree gnu_obj_size; int align; @@ -3949,7 +3989,21 @@ gnat_to_gnu (Node_Id gnat_node) gnu_ptr); gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr)); - gnu_obj_size = TYPE_SIZE_UNIT (gnu_obj_type); + + if (Present (Actual_Designated_Subtype (gnat_node))) + { + gnu_actual_obj_type = gnat_to_gnu_type (Actual_Designated_Subtype (gnat_node)); + + if (TYPE_FAT_OR_THIN_POINTER_P (gnu_ptr_type)) + gnu_actual_obj_type + = build_unc_object_type_from_ptr (gnu_ptr_type, + gnu_actual_obj_type, + get_identifier ("DEALLOC")); + } + else + gnu_actual_obj_type = gnu_obj_type; + + gnu_obj_size = TYPE_SIZE_UNIT (gnu_actual_obj_type); align = TYPE_ALIGN (gnu_obj_type); if (TREE_CODE (gnu_obj_type) == RECORD_TYPE @@ -4103,7 +4157,7 @@ gnat_to_gnu (Node_Id gnat_node) if (TREE_SIDE_EFFECTS (gnu_result) && (TREE_CODE (gnu_result_type) == UNCONSTRAINED_ARRAY_TYPE || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type)))) - gnu_result = gnat_stabilize_reference (gnu_result, 0); + gnu_result = gnat_stabilize_reference (gnu_result, false); /* Now convert the result to the proper type. If the type is void or if we have no result, return error_mark_node to show we have no result. @@ -4516,6 +4570,7 @@ int gnat_gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p ATTRIBUTE_UNUSED) { tree expr = *expr_p; + tree op; if (IS_ADA_STMT (expr)) return gnat_gimplify_stmt (expr_p); @@ -4546,25 +4601,50 @@ gnat_gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p ATTRIBUTE_UNUSED) return GS_OK; case ADDR_EXPR: + op = TREE_OPERAND (expr, 0); + /* If we're taking the address of a constant CONSTRUCTOR, force it to be put into static memory. We know it's going to be readonly given the semantics we have and it's required to be static memory in - the case when the reference is in an elaboration procedure. */ - if (TREE_CODE (TREE_OPERAND (expr, 0)) == CONSTRUCTOR - && TREE_CONSTANT (TREE_OPERAND (expr, 0))) + the case when the reference is in an elaboration procedure. */ + if (TREE_CODE (op) == CONSTRUCTOR && TREE_CONSTANT (op)) { - tree new_var - = create_tmp_var (TREE_TYPE (TREE_OPERAND (expr, 0)), "C"); + tree new_var = create_tmp_var (TREE_TYPE (op), "C"); TREE_READONLY (new_var) = 1; TREE_STATIC (new_var) = 1; TREE_ADDRESSABLE (new_var) = 1; - DECL_INITIAL (new_var) = TREE_OPERAND (expr, 0); + DECL_INITIAL (new_var) = op; TREE_OPERAND (expr, 0) = new_var; recompute_tree_invarant_for_addr_expr (expr); return GS_ALL_DONE; } + + /* Otherwise, if we are taking the address of something that is neither + reference, declaration, or constant, make a variable for the operand + here and then take its address. If we don't do it this way, we may + confuse the gimplifier because it needs to know the variable is + addressable at this point. This duplicates code in + internal_get_tmp_var, which is unfortunate. */ + else if (TREE_CODE_CLASS (TREE_CODE (op)) != tcc_reference + && TREE_CODE_CLASS (TREE_CODE (op)) != tcc_declaration + && TREE_CODE_CLASS (TREE_CODE (op)) != tcc_constant) + { + tree new_var = create_tmp_var (TREE_TYPE (op), "A"); + tree mod = build (MODIFY_EXPR, TREE_TYPE (op), new_var, op); + + TREE_ADDRESSABLE (new_var) = 1; + + if (EXPR_HAS_LOCATION (op)) + SET_EXPR_LOCUS (mod, EXPR_LOCUS (op)); + + gimplify_and_add (mod, pre_p); + TREE_OPERAND (expr, 0) = new_var; + recompute_tree_invarant_for_addr_expr (expr); + return GS_ALL_DONE; + } + return GS_UNHANDLED; case COMPONENT_REF: @@ -5706,17 +5786,26 @@ protect_multiple_eval (tree exp) exp))); } -/* This is equivalent to stabilize_reference in GCC's tree.c, but we know - how to handle our new nodes and we take an extra argument that says - whether to force evaluation of everything. */ +/* This is equivalent to stabilize_reference in GCC's tree.c, but we know how + to handle our new nodes and we take extra arguments: + + FORCE says whether to force evaluation of everything, + + SUCCESS we set to true unless we walk through something we don't know how + to stabilize, or through something which is not an lvalue and LVALUES_ONLY + is true, in which cases we set to false. */ tree -gnat_stabilize_reference (tree ref, bool force) +maybe_stabilize_reference (tree ref, bool force, bool lvalues_only, + bool *success) { tree type = TREE_TYPE (ref); enum tree_code code = TREE_CODE (ref); tree result; + /* Assume we'll success unless proven otherwise. */ + *success = true; + switch (code) { case VAR_DECL: @@ -5725,6 +5814,15 @@ gnat_stabilize_reference (tree ref, bool force) /* No action is needed in this case. */ return ref; + case ADDR_EXPR: + /* A standalone ADDR_EXPR is never an lvalue, and this one can't + be nested inside an outer INDIRECT_REF, since INDIREC_REF goes + straight to stabilize_1. */ + if (lvalues_only) + goto failure; + + /* ... Fallthru ... */ + case NOP_EXPR: case CONVERT_EXPR: case FLOAT_EXPR: @@ -5733,10 +5831,10 @@ gnat_stabilize_reference (tree ref, bool force) case FIX_ROUND_EXPR: case FIX_CEIL_EXPR: case VIEW_CONVERT_EXPR: - case ADDR_EXPR: result = build1 (code, type, - gnat_stabilize_reference (TREE_OPERAND (ref, 0), force)); + maybe_stabilize_reference (TREE_OPERAND (ref, 0), force, + lvalues_only, success)); break; case INDIRECT_REF: @@ -5747,15 +5845,16 @@ gnat_stabilize_reference (tree ref, bool force) break; case COMPONENT_REF: - result = build3 (COMPONENT_REF, type, - gnat_stabilize_reference (TREE_OPERAND (ref, 0), - force), - TREE_OPERAND (ref, 1), NULL_TREE); + result = build3 (COMPONENT_REF, type, + maybe_stabilize_reference (TREE_OPERAND (ref, 0), force, + lvalues_only, success), + TREE_OPERAND (ref, 1), NULL_TREE); break; case BIT_FIELD_REF: result = build3 (BIT_FIELD_REF, type, - gnat_stabilize_reference (TREE_OPERAND (ref, 0), force), + maybe_stabilize_reference (TREE_OPERAND (ref, 0), force, + lvalues_only, success), gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1), force), gnat_stabilize_reference_1 (TREE_OPERAND (ref, 2), @@ -5765,7 +5864,8 @@ gnat_stabilize_reference (tree ref, bool force) case ARRAY_REF: case ARRAY_RANGE_REF: result = build4 (code, type, - gnat_stabilize_reference (TREE_OPERAND (ref, 0), force), + maybe_stabilize_reference (TREE_OPERAND (ref, 0), force, + lvalues_only, success), gnat_stabilize_reference_1 (TREE_OPERAND (ref, 1), force), NULL_TREE, NULL_TREE); @@ -5775,17 +5875,21 @@ gnat_stabilize_reference (tree ref, bool force) result = build2 (COMPOUND_EXPR, type, gnat_stabilize_reference_1 (TREE_OPERAND (ref, 0), force), - gnat_stabilize_reference (TREE_OPERAND (ref, 1), - force)); + maybe_stabilize_reference (TREE_OPERAND (ref, 1), force, + lvalues_only, success)); break; + case ERROR_MARK: + ref = error_mark_node; + + /* ... Fallthru to failure ... */ + /* If arg isn't a kind of lvalue we recognize, make no change. Caller should recognize the error for an invalid lvalue. */ default: + failure: + *success = false; return ref; - - case ERROR_MARK: - return error_mark_node; } TREE_READONLY (result) = TREE_READONLY (ref); @@ -5805,6 +5909,17 @@ gnat_stabilize_reference (tree ref, bool force) return result; } +/* Wrapper around maybe_stabilize_reference, for common uses without + lvalue restrictions and without need to examine the success + indication. */ + +tree +gnat_stabilize_reference (tree ref, bool force) +{ + bool stabilized; + return maybe_stabilize_reference (ref, force, false, &stabilized); +} + /* Similar to stabilize_reference_1 in tree.c, but supports an extra arg to force a SAVE_EXPR for everything. */ diff --git a/gcc/ada/tree_io.ads b/gcc/ada/tree_io.ads index 98bdc89d580..2cd203717e3 100644 --- a/gcc/ada/tree_io.ads +++ b/gcc/ada/tree_io.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-1999 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -96,7 +96,7 @@ package Tree_IO is -- Writes a single integer value to the current tree file procedure Tree_Write_Str (S : String_Ptr); - -- Write out string value referenced by S. Low bound must be 1. + -- Write out string value referenced by S (low bound of S must be 1) procedure Tree_Write_Terminate; -- Terminates writing of the file (flushing the buffer), but does not diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb index 5066bbaf36c..aff72a9b95e 100644 --- a/gcc/ada/treepr.adb +++ b/gcc/ada/treepr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/treeprs.adt b/gcc/ada/treeprs.adt index 86dd72a7b72..fbffd5830e2 100644 --- a/gcc/ada/treeprs.adt +++ b/gcc/ada/treeprs.adt @@ -6,7 +6,7 @@ -- -- -- T e m p l a t e -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/ttypef.ads b/gcc/ada/ttypef.ads index 18c5e323629..93f7ec8a4ff 100644 --- a/gcc/ada/ttypef.ads +++ b/gcc/ada/ttypef.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/ttypes.ads b/gcc/ada/ttypes.ads index 7e0dd547522..4eb8c82ba6f 100644 --- a/gcc/ada/ttypes.ads +++ b/gcc/ada/ttypes.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -143,7 +143,7 @@ package Ttypes is Standard_Wide_Character_Size : constant Pos := 16; Standard_Wide_Wide_Character_Size : constant Pos := 32; - -- Standard wide character sizes. + -- Standard wide character sizes -- Note: there is no specific control over the representation of -- enumeration types. The convention used is that if an enumeration diff --git a/gcc/ada/types.adb b/gcc/ada/types.adb index e6d5f3e3cf0..978b4121fa0 100644 --- a/gcc/ada/types.adb +++ b/gcc/ada/types.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/types.ads b/gcc/ada/types.ads index ea8a949afb2..2367a91c2ff 100644 --- a/gcc/ada/types.ads +++ b/gcc/ada/types.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -311,14 +311,14 @@ package Types is -- is in practice infinite and there is no need to check the range. Ureal_Low_Bound : constant := 500_000_000; - -- Low bound for Ureal values. + -- Low bound for Ureal values Ureal_High_Bound : constant := 599_999_999; -- Maximum number of Ureal values stored is 100_000_000 which is in -- practice infinite so that no check is required. Uint_Low_Bound : constant := 600_000_000; - -- Low bound for Uint values. + -- Low bound for Uint values Uint_Table_Start : constant := 2_000_000_000; -- Location where table entries for universal integers start (see @@ -479,7 +479,7 @@ package Types is -- are not valid. First_Elist_Id : constant Elist_Id := No_Elist + 1; - -- Subscript of first allocated Elist header. + -- Subscript of first allocated Elist header -- Element Id values are used to identify individual elements of an -- element list (see package Elists for further details). @@ -696,12 +696,19 @@ package Types is Tag_Check, All_Checks); - -- The following record contains an entry for each recognized check name + -- The following array contains an entry for each recognized check name -- for pragma Suppress. It is used to represent current settings of scope -- based suppress actions from pragma Suppress or command line settings. - type Suppress_Array is - array (Check_Id range Access_Check .. Tag_Check) of Boolean; + -- Note: when Suppress_Array (All_Checks) is True, then generally all other + -- specific check entries are set True, except for the Elaboration_Check + -- entry which is set only if an explicit Suppress for this check is given. + -- The reason for this non-uniformity is that we do not want All_Checks to + -- suppress elaboration checking when using the static elaboration model. + -- We recognize only an explicit suppress of Elaboration_Check as a signal + -- that the static elaboration checking should skip a compile time check. + + type Suppress_Array is array (Check_Id) of Boolean; pragma Pack (Suppress_Array); -- To add a new check type to GNAT, the following steps are required: diff --git a/gcc/ada/ug_words b/gcc/ada/ug_words index 8203ee546c1..18fa05f1f0b 100644 --- a/gcc/ada/ug_words +++ b/gcc/ada/ug_words @@ -153,6 +153,8 @@ gcc -c ^ GNAT COMPILE -gnatzc ^ /DISTRIBUTION_STUBS=CALLER -gnatzr ^ /DISTRIBUTION_STUBS=RECEIVER -gnat83 ^ /83 +-gnat95 ^ /95 +-gnat05 ^ /05 -gnatx ^ /XREF=SUPPRESS -gnatX ^ /EXTENSIONS_ALLOWED --RTS ^ /RUNTIME_SYSTEM diff --git a/gcc/ada/uintp.adb b/gcc/ada/uintp.adb index 6eda7ad512b..c9fbb03e675 100644 --- a/gcc/ada/uintp.adb +++ b/gcc/ada/uintp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -50,7 +50,7 @@ package body Uintp is -- value, since the issue is host representation of integer values. Uint_Int_Last : Uint; - -- Uint value containing Int'Last value set by Initialize. + -- Uint value containing Int'Last value set by Initialize UI_Power_2 : array (Int range 0 .. 64) of Uint; -- This table is used to memoize exponentiations by powers of 2. The Nth @@ -727,9 +727,9 @@ package body Uintp is -- Mathematically: assume base congruent to 1 and compute an equivelent -- integer to Left. - -- If Sign = -1 return the alternating sum of the "digits". + -- If Sign = -1 return the alternating sum of the "digits" - -- D1 - D2 + D3 - D4 + D5 . . . + -- D1 - D2 + D3 - D4 + D5 ... -- (where D1 is Least Significant Digit) @@ -761,7 +761,7 @@ package body Uintp is if Tmp_Int >= Base then - -- Sign must be 1. + -- Sign must be 1 Tmp_Int := (Tmp_Int / Base) + 1; @@ -1328,7 +1328,7 @@ package body Uintp is Carry := Tmp_Int / Base; end loop; - -- Multiply Divisor by d. + -- Multiply Divisor by d Carry := 0; for J in reverse Divisor'Range loop @@ -1338,14 +1338,14 @@ package body Uintp is end loop; end if; - -- Main loop of long division algorithm. + -- Main loop of long division algorithm Divisor_Dig1 := Divisor (1); Divisor_Dig2 := Divisor (2); for J in Quotient'Range loop - -- [ CALCULATE Q (hat) ] (step D3 in the algorithm). + -- [ CALCULATE Q (hat) ] (step D3 in the algorithm) Tmp_Int := Dividend (J) * Base + Dividend (J + 1); @@ -1474,7 +1474,7 @@ package body Uintp is if Right = Uint_0 then return Uint_1; - -- 0 to any positive power is 0. + -- 0 to any positive power is 0 elsif Left = Uint_0 then return Uint_0; @@ -1664,7 +1664,7 @@ package body Uintp is -- UI_GCD -- ------------ - -- Lehmer's algorithm for GCD. + -- Lehmer's algorithm for GCD -- The idea is to avoid using multiple precision arithmetic wherever -- possible, substituting Int arithmetic instead. See Knuth volume II, @@ -1712,7 +1712,7 @@ package body Uintp is loop -- We might overflow and get division by zero here. This just - -- means we can not take the single precision step + -- means we cannot take the single precision step Den1 := V_Hat + C; Den2 := V_Hat + D; @@ -1745,14 +1745,14 @@ package body Uintp is if B = Int_0 then - -- No single precision steps take a regular Euclid step. + -- No single precision steps take a regular Euclid step Tmp_UI := U rem V; U := V; V := Tmp_UI; else - -- Use prior single precision steps to compute this Euclid step. + -- Use prior single precision steps to compute this Euclid step -- Fixed bug 1415-008 spends 80% of its time working on this -- step. Perhaps we need a special case Int / Uint dot @@ -2257,7 +2257,7 @@ package body Uintp is -- and replace the rem with simpler operations where -- possible. - -- Least_Sig_Digit might return Negative numbers. + -- Least_Sig_Digit might return Negative numbers when 2 => return UI_From_Int ( @@ -2357,7 +2357,7 @@ package body Uintp is end if; - -- Else fall through to general case. + -- Else fall through to general case -- ???This needs to be improved. We have the Rem when we do the -- Div. Div throws it away! diff --git a/gcc/ada/uintp.ads b/gcc/ada/uintp.ads index 5a340b39968..46286611e78 100644 --- a/gcc/ada/uintp.ads +++ b/gcc/ada/uintp.ads @@ -113,12 +113,12 @@ package Uintp is function UI_Abs (Right : Uint) return Uint; pragma Inline (UI_Abs); - -- Returns abs function of universal integer. + -- Returns abs function of universal integer function UI_Add (Left : Uint; Right : Uint) return Uint; function UI_Add (Left : Int; Right : Uint) return Uint; function UI_Add (Left : Uint; Right : Int) return Uint; - -- Returns sum of two integer values. + -- Returns sum of two integer values function UI_Decimal_Digits_Hi (U : Uint) return Nat; -- Returns an estimate of the number of decimal digits required to @@ -143,44 +143,44 @@ package Uintp is function UI_Eq (Left : Int; Right : Uint) return Boolean; function UI_Eq (Left : Uint; Right : Int) return Boolean; pragma Inline (UI_Eq); - -- Compares integer values for equality. + -- Compares integer values for equality function UI_Expon (Left : Uint; Right : Uint) return Uint; function UI_Expon (Left : Int; Right : Uint) return Uint; function UI_Expon (Left : Uint; Right : Int) return Uint; function UI_Expon (Left : Int; Right : Int) return Uint; - -- Returns result of exponentiating two integer values + -- Returns result of exponentiating two integer values. -- Fatal error if Right is negative. function UI_GCD (Uin, Vin : Uint) return Uint; - -- Computes GCD of input values. Assumes Uin >= Vin >= 0. + -- Computes GCD of input values. Assumes Uin >= Vin >= 0 function UI_Ge (Left : Uint; Right : Uint) return Boolean; function UI_Ge (Left : Int; Right : Uint) return Boolean; function UI_Ge (Left : Uint; Right : Int) return Boolean; pragma Inline (UI_Ge); - -- Compares integer values for greater than or equal. + -- Compares integer values for greater than or equal function UI_Gt (Left : Uint; Right : Uint) return Boolean; function UI_Gt (Left : Int; Right : Uint) return Boolean; function UI_Gt (Left : Uint; Right : Int) return Boolean; pragma Inline (UI_Gt); - -- Compares integer values for greater than. + -- Compares integer values for greater than function UI_Is_In_Int_Range (Input : Uint) return Boolean; pragma Inline (UI_Is_In_Int_Range); - -- Determines if universal integer is in Int range. + -- Determines if universal integer is in Int range function UI_Le (Left : Uint; Right : Uint) return Boolean; function UI_Le (Left : Int; Right : Uint) return Boolean; function UI_Le (Left : Uint; Right : Int) return Boolean; pragma Inline (UI_Le); - -- Compares integer values for less than or equal. + -- Compares integer values for less than or equal function UI_Lt (Left : Uint; Right : Uint) return Boolean; function UI_Lt (Left : Int; Right : Uint) return Boolean; function UI_Lt (Left : Uint; Right : Int) return Boolean; - -- Compares integer values for less than. + -- Compares integer values for less than function UI_Max (Left : Uint; Right : Uint) return Uint; function UI_Max (Left : Int; Right : Uint) return Uint; @@ -190,13 +190,13 @@ package Uintp is function UI_Min (Left : Uint; Right : Uint) return Uint; function UI_Min (Left : Int; Right : Uint) return Uint; function UI_Min (Left : Uint; Right : Int) return Uint; - -- Returns minimum of two integer values. + -- Returns minimum of two integer values function UI_Mod (Left : Uint; Right : Uint) return Uint; function UI_Mod (Left : Int; Right : Uint) return Uint; function UI_Mod (Left : Uint; Right : Int) return Uint; pragma Inline (UI_Mod); - -- Returns mod function of two integer values. + -- Returns mod function of two integer values function UI_Mul (Left : Uint; Right : Uint) return Uint; function UI_Mul (Left : Int; Right : Uint) return Uint; @@ -207,16 +207,16 @@ package Uintp is function UI_Ne (Left : Int; Right : Uint) return Boolean; function UI_Ne (Left : Uint; Right : Int) return Boolean; pragma Inline (UI_Ne); - -- Compares integer values for inequality. + -- Compares integer values for inequality function UI_Negate (Right : Uint) return Uint; pragma Inline (UI_Negate); - -- Returns negative of universal integer. + -- Returns negative of universal integer function UI_Rem (Left : Uint; Right : Uint) return Uint; function UI_Rem (Left : Int; Right : Uint) return Uint; function UI_Rem (Left : Uint; Right : Int) return Uint; - -- Returns rem of two integer values. + -- Returns rem of two integer values function UI_Sub (Left : Uint; Right : Uint) return Uint; function UI_Sub (Left : Int; Right : Uint) return Uint; diff --git a/gcc/ada/uname.ads b/gcc/ada/uname.ads index 0b988618f08..bf2ed3ab99a 100644 --- a/gcc/ada/uname.ads +++ b/gcc/ada/uname.ads @@ -74,7 +74,7 @@ package Uname is -- corresponding body, i.e. characters %s replaced by %b function Get_Parent_Body_Name (N : Unit_Name_Type) return Unit_Name_Type; - -- Given the name of a subunit, returns the name of the parent body. + -- Given the name of a subunit, returns the name of the parent body function Get_Parent_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type; -- Given the name of a child unit spec or body, returns the unit name diff --git a/gcc/ada/urealp.ads b/gcc/ada/urealp.ads index a9cbccd23b5..24902393829 100644 --- a/gcc/ada/urealp.ads +++ b/gcc/ada/urealp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -148,19 +148,19 @@ package Urealp is -- Table.Tree_Write routines. function Rbase (Real : Ureal) return Nat; - -- Return the base of the universal real. + -- Return the base of the universal real function Denominator (Real : Ureal) return Uint; - -- Return the denominator of the universal real. + -- Return the denominator of the universal real function Numerator (Real : Ureal) return Uint; - -- Return the numerator of the universal real. + -- Return the numerator of the universal real function Norm_Den (Real : Ureal) return Uint; - -- Return the denominator of the universal real after a normalization. + -- Return the denominator of the universal real after a normalization function Norm_Num (Real : Ureal) return Uint; - -- Return the numerator of the universal real after a normalization. + -- Return the numerator of the universal real after a normalization function UR_From_Uint (UI : Uint) return Ureal; -- Returns real corresponding to universal integer value @@ -234,7 +234,7 @@ package Urealp is -- Returns negative of real function UR_Eq (Left, Right : Ureal) return Boolean; - -- Compares reals for equality. + -- Compares reals for equality function UR_Max (Left, Right : Ureal) return Ureal; -- Returns the maximum of two reals @@ -243,19 +243,19 @@ package Urealp is -- Returns the minimum of two reals function UR_Ne (Left, Right : Ureal) return Boolean; - -- Compares reals for inequality. + -- Compares reals for inequality function UR_Lt (Left, Right : Ureal) return Boolean; - -- Compares reals for less than. + -- Compares reals for less than function UR_Le (Left, Right : Ureal) return Boolean; - -- Compares reals for less than or equal. + -- Compares reals for less than or equal function UR_Gt (Left, Right : Ureal) return Boolean; - -- Compares reals for greater than. + -- Compares reals for greater than function UR_Ge (Left, Right : Ureal) return Boolean; - -- Compares reals for greater than or equal. + -- Compares reals for greater than or equal function UR_Is_Zero (Real : Ureal) return Boolean; -- Tests if real value is zero diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index 39f3b71f5e0..1a2d902c272 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -162,7 +162,7 @@ begin -- Line for -gnateI switch - Write_Switch_Char ("eInnn"); + Write_Switch_Char ("eInn"); Write_Line ("Index in multi-unit source, e.g. -gnateI2"); -- Line for -gnatem switch @@ -213,7 +213,7 @@ begin -- Line for -gnatk switch Write_Switch_Char ("k"); - Write_Line ("Limit file names to nnn characters (k = krunch)"); + Write_Line ("Limit file names to nn characters (k = krunch)"); -- Line for -gnatl switch @@ -222,8 +222,8 @@ begin -- Line for -gnatm switch - Write_Switch_Char ("mnnn"); - Write_Line ("Limit number of detected errors to nnn (1-999999)"); + Write_Switch_Char ("mnn"); + Write_Line ("Limit number of detected errors to nn (1-999999)"); -- Line for -gnatn switch @@ -289,8 +289,8 @@ begin -- Line for -gnatT switch - Write_Switch_Char ("Tnnn"); - Write_Line ("All compiler tables start at nnn times usual starting size"); + Write_Switch_Char ("Tnn"); + Write_Line ("All compiler tables start at nn times usual starting size"); -- Line for -gnatu switch @@ -438,10 +438,10 @@ begin Write_Line (" i check if-then layout"); Write_Line (" k check casing rules for keywords"); Write_Line (" l check reference manual layout"); - Write_Line (" Lnnn check max nest level < nnn"); + Write_Line (" Lnn check max nest level < nn "); Write_Line (" m check line length <= 79 characters"); Write_Line (" n check casing of package Standard identifiers"); - Write_Line (" Mnnn check line length <= nnn characters"); + Write_Line (" Mnn check line length <= nn characters"); Write_Line (" o check subprogram bodies in alphabetical order"); Write_Line (" p check pragma casing"); Write_Line (" r check casing for identifier references"); diff --git a/gcc/ada/usage.ads b/gcc/ada/usage.ads index 4aba2132bcd..d60fdffb0be 100644 --- a/gcc/ada/usage.ads +++ b/gcc/ada/usage.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992,1993,1994 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c index 1bf00075e54..2bfafce9b51 100644 --- a/gcc/ada/utils.c +++ b/gcc/ada/utils.c @@ -324,7 +324,13 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) if (global_bindings_p () && TREE_CODE (decl) != PARM_DECL) DECL_CONTEXT (decl) = 0; else - DECL_CONTEXT (decl) = current_function_decl; + { + DECL_CONTEXT (decl) = current_function_decl; + + /* Functions imported in another function are not really nested. */ + if (TREE_CODE (decl) == FUNCTION_DECL && TREE_PUBLIC (decl)) + DECL_NO_STATIC_CHAIN (decl) = 1; + } TREE_NO_WARNING (decl) = (gnat_node == Empty || Warnings_Off (gnat_node)); @@ -1277,6 +1283,12 @@ create_var_decl (tree var_name, tree asm_name, tree type, tree var_init, || (type_annotate_only && var_init && !TREE_CONSTANT (var_init))) var_init = NULL_TREE; + /* At the global level, an initializer requiring code to be generated + produces elaboration statements. Check that such statements are allowed, + that is, not violating a No_Elaboration_Code restriction. */ + if (global_bindings_p () && var_init != 0 && ! init_const) + Check_Elaboration_Code_Allowed (gnat_node); + /* Ada doesn't feature Fortran-like COMMON variables so we shouldn't try to fiddle with DECL_COMMON. However, on platforms that don't support global BSS sections, uninitialized global variables would @@ -1313,6 +1325,10 @@ create_var_decl (tree var_name, tree asm_name, tree type, tree var_init, if (TREE_CODE (var_decl) != CONST_DECL) rest_of_decl_compilation (var_decl, global_bindings_p (), 0); + else + /* expand CONST_DECLs to set their MODE, ALIGN, SIZE and SIZE_UNIT, + which we need for later back-annotations. */ + expand_decl (var_decl); return var_decl; } @@ -1607,7 +1623,7 @@ potential_alignment_gap (tree prev_field, tree curr_field, tree offset) % DECL_ALIGN (curr_field) != 0); /* If both the position and size of the previous field are multiples - of the current field alignment, there can not be any gap. */ + of the current field alignment, there cannot be any gap. */ if (value_factor_p (bit_position (prev_field), DECL_ALIGN (curr_field)) && value_factor_p (DECL_SIZE (prev_field), DECL_ALIGN (curr_field))) return false; @@ -2444,6 +2460,22 @@ build_unc_object_type (tree template_type, tree object_type, tree name) return type; } + +/* Same, taking a thin or fat pointer type instead of a template type. */ + +tree +build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type, tree name) +{ + tree template_type; + + gcc_assert (TYPE_FAT_OR_THIN_POINTER_P (thin_fat_ptr_type)); + + template_type + = (TYPE_FAT_POINTER_P (thin_fat_ptr_type) + ? TREE_TYPE (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (thin_fat_ptr_type)))) + : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (thin_fat_ptr_type)))); + return build_unc_object_type (template_type, object_type, name); +} /* Update anything previously pointing to OLD_TYPE to point to NEW_TYPE. In the normal case this is just two adjustments, but we have more to do @@ -2755,11 +2787,15 @@ convert (tree type, tree expr) expr)), TYPE_MIN_VALUE (etype)))); - /* If the input is a justified modular type, we need to extract - the actual object before converting it to any other type with the - exception of an unconstrained array. */ + /* If the input is a justified modular type, we need to extract the actual + object before converting it to any other type with the exceptions of an + unconstrained array or of a mere type variant. It is useful to avoid the + extraction and conversion in the type variant case because it could end + up replacing a VAR_DECL expr by a constructor and we might be about the + take the address of the result. */ if (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype) - && code != UNCONSTRAINED_ARRAY_TYPE) + && code != UNCONSTRAINED_ARRAY_TYPE + && TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (etype)) return convert (type, build_component_ref (expr, NULL_TREE, TYPE_FIELDS (etype), false)); @@ -2804,9 +2840,7 @@ convert (tree type, tree expr) just make a new one in the proper type. */ if (code == ecode && AGGREGATE_TYPE_P (etype) && !(TREE_CODE (TYPE_SIZE (etype)) == INTEGER_CST - && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) - && (TREE_CODE (expr) == STRING_CST - || get_alias_set (etype) == get_alias_set (type))) + && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)) { expr = copy_node (expr); TREE_TYPE (expr) = type; @@ -2826,9 +2860,40 @@ convert (tree type, tree expr) break; case VIEW_CONVERT_EXPR: - if (AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype) - && !TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype)) - return convert (type, TREE_OPERAND (expr, 0)); + { + /* GCC 4.x is very sensitive to type consistency overall, and view + conversions thus are very frequent. Eventhough just "convert"ing + the inner operand to the output type is fine in most cases, it + might expose unexpected input/output type mismatches in special + circumstances so we avoid such recursive calls when we can. */ + + tree op0 = TREE_OPERAND (expr, 0); + + /* If we are converting back to the original type, we can just + lift the input conversion. This is a common occurence with + switches back-and-forth amongst type variants. */ + if (type == TREE_TYPE (op0)) + return op0; + + /* Otherwise, if we're converting between two aggregate types, we + might be allowed to substitute the VIEW_CONVERT target type in + place or to just convert the inner expression. */ + if (AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype)) + { + /* If we are converting between type variants, we can just + substitute the VIEW_CONVERT in place. */ + if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype)) + return build1 (VIEW_CONVERT_EXPR, type, op0); + + /* Otherwise, we may just bypass the input view conversion unless + one of the types is a fat pointer, or we're converting to an + unchecked union type. Both are handled by specialized code + below and the latter relies on exact type matching. */ + else if (!TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype) + && !(code == UNION_TYPE && TYPE_UNCHECKED_UNION_P (type))) + return convert (type, op0); + } + } break; case INDIRECT_REF: @@ -2957,13 +3022,10 @@ convert (tree type, tree expr) { if (TREE_TYPE (tem) == etype) return build1 (CONVERT_EXPR, type, expr); - - /* Accept slight type variations. */ - if (TREE_TYPE (tem) == TYPE_MAIN_VARIANT (etype) - || (TREE_CODE (TREE_TYPE (tem)) == RECORD_TYPE - && (TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (tem)) - || TYPE_IS_PADDING_P (TREE_TYPE (tem))) - && TREE_TYPE (TYPE_FIELDS (TREE_TYPE (tem))) == etype)) + else if (TREE_CODE (TREE_TYPE (tem)) == RECORD_TYPE + && (TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (tem)) + || TYPE_IS_PADDING_P (TREE_TYPE (tem))) + && TREE_TYPE (TYPE_FIELDS (TREE_TYPE (tem))) == etype) return build1 (CONVERT_EXPR, type, convert (TREE_TYPE (tem), expr)); } diff --git a/gcc/ada/utils2.c b/gcc/ada/utils2.c index 21a3f61f761..24937449cc1 100644 --- a/gcc/ada/utils2.c +++ b/gcc/ada/utils2.c @@ -170,7 +170,7 @@ known_alignment (tree exp) case NON_LVALUE_EXPR: /* Conversions between pointers and integers don't change the alignment of the underlying object. */ - this_alignment = known_alignment (TREE_OPERAND (exp, 0)); + this_alignment = known_alignment (TREE_OPERAND (exp, 0)); break; case PLUS_EXPR: @@ -656,40 +656,6 @@ build_binary_op (enum tree_code op_code, tree result_type, if (!operation_type) operation_type = left_type; - /* If the RHS has a conversion between record and array types and - an inner type is no worse, use it. Note we cannot do this for - modular types or types with TYPE_ALIGN_OK, since the latter - might indicate a conversion between a root type and a class-wide - type, which we must not remove. */ - while (TREE_CODE (right_operand) == VIEW_CONVERT_EXPR - && (((TREE_CODE (right_type) == RECORD_TYPE - || TREE_CODE (right_type) == UNION_TYPE) - && !TYPE_JUSTIFIED_MODULAR_P (right_type) - && !TYPE_ALIGN_OK (right_type) - && !TYPE_IS_FAT_POINTER_P (right_type)) - || TREE_CODE (right_type) == ARRAY_TYPE) - && ((((TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0))) - == RECORD_TYPE) - || (TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0))) - == UNION_TYPE)) - && !(TYPE_JUSTIFIED_MODULAR_P - (TREE_TYPE (TREE_OPERAND (right_operand, 0)))) - && !(TYPE_ALIGN_OK - (TREE_TYPE (TREE_OPERAND (right_operand, 0)))) - && !(TYPE_IS_FAT_POINTER_P - (TREE_TYPE (TREE_OPERAND (right_operand, 0))))) - || (TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0))) - == ARRAY_TYPE)) - && (0 == (best_type - = find_common_type (right_type, - TREE_TYPE (TREE_OPERAND - (right_operand, 0)))) - || right_type != best_type)) - { - right_operand = TREE_OPERAND (right_operand, 0); - right_type = TREE_TYPE (right_operand); - } - /* If we are copying one array or record to another, find the best type to use. */ if (((TREE_CODE (left_type) == ARRAY_TYPE @@ -1159,12 +1125,18 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) return build_unary_op (ADDR_EXPR, result_type, TREE_OPERAND (operand, 0)); - /* If this NOP_EXPR doesn't change the mode, get the result type - from this type and go down. We need to do this in case - this is a conversion of a CONST_DECL. */ - if (TYPE_MODE (type) != BLKmode - && (TYPE_MODE (type) - == TYPE_MODE (TREE_TYPE (TREE_OPERAND (operand, 0))))) + /* ... fallthru ... */ + + case VIEW_CONVERT_EXPR: + /* If this just a variant conversion or if the conversion doesn't + change the mode, get the result type from this type and go down. + This is needed for conversions of CONST_DECLs, to eventually get + to the address of their CORRESPONDING_VARs. */ + if ((TYPE_MAIN_VARIANT (type) + == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (operand, 0)))) + || (TYPE_MODE (type) != BLKmode + && (TYPE_MODE (type) + == TYPE_MODE (TREE_TYPE (TREE_OPERAND (operand, 0)))))) return build_unary_op (ADDR_EXPR, (result_type ? result_type : build_pointer_type (type)), @@ -1409,7 +1381,7 @@ build_return_expr (tree result_decl, tree ret_val) build_binary_op with the additional guarantee that the type cannot involve a placeholder, since otherwise the function would use the "target pointer" return mechanism. */ - + if (operation_type != TREE_TYPE (ret_val)) ret_val = convert (operation_type, ret_val); @@ -1493,17 +1465,41 @@ build_call_raise (int msg) build_int_cst (NULL_TREE, input_line)); } +/* qsort comparer for the bit positions of two constructor elements + for record components. */ + +static int +compare_elmt_bitpos (const PTR rt1, const PTR rt2) +{ + tree elmt1 = * (tree *) rt1; + tree elmt2 = * (tree *) rt2; + + tree pos_field1 = bit_position (TREE_PURPOSE (elmt1)); + tree pos_field2 = bit_position (TREE_PURPOSE (elmt2)); + + if (tree_int_cst_equal (pos_field1, pos_field2)) + return 0; + else if (tree_int_cst_lt (pos_field1, pos_field2)) + return -1; + else + return 1; +} + /* Return a CONSTRUCTOR of TYPE whose list is LIST. */ tree gnat_build_constructor (tree type, tree list) { tree elmt; + int n_elmts; bool allconstant = (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST); bool side_effects = false; tree result; - for (elmt = list; elmt; elmt = TREE_CHAIN (elmt)) + /* Scan the elements to see if they are all constant or if any has side + effects, to let us set global flags on the resulting constructor. Count + the elements along the way for possible sorting purposes below. */ + for (n_elmts = 0, elmt = list; elmt; elmt = TREE_CHAIN (elmt), n_elmts ++) { if (!TREE_CONSTANT (TREE_VALUE (elmt)) || (TREE_CODE (type) == RECORD_TYPE @@ -1525,26 +1521,30 @@ gnat_build_constructor (tree type, tree list) return build1 (NULL_EXPR, type, TREE_OPERAND (result, 0)); } - /* If TYPE is a RECORD_TYPE and the fields are not in the - same order as their bit position, don't treat this as constant - since varasm.c can't handle it. */ - if (allconstant && TREE_CODE (type) == RECORD_TYPE) + /* For record types with constant components only, sort field list + by increasing bit position. This is necessary to ensure the + constructor can be output as static data, which the gimplifier + might force in various circumstances. */ + if (allconstant && TREE_CODE (type) == RECORD_TYPE && n_elmts > 1) { - tree last_pos = bitsize_zero_node; - tree field; + /* Fill an array with an element tree per index, and ask qsort to order + them according to what a bitpos comparison function says. */ - for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) - { - tree this_pos = bit_position (field); + tree *gnu_arr = (tree *) alloca (sizeof (tree) * n_elmts); + int i; - if (TREE_CODE (this_pos) != INTEGER_CST - || tree_int_cst_lt (this_pos, last_pos)) - { - allconstant = false; - break; - } + for (i = 0, elmt = list; elmt; elmt = TREE_CHAIN (elmt), i++) + gnu_arr[i] = elmt; + + qsort (gnu_arr, n_elmts, sizeof (tree), compare_elmt_bitpos); - last_pos = this_pos; + /* Then reconstruct the list from the sorted array contents. */ + + list = NULL_TREE; + for (i = n_elmts - 1; i >= 0; i--) + { + TREE_CHAIN (gnu_arr[i]) = list; + list = gnu_arr[i]; } } @@ -1821,13 +1821,10 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, fill in the parts that are known. */ else if (TYPE_FAT_OR_THIN_POINTER_P (result_type)) { - tree template_type - = (TYPE_FAT_POINTER_P (result_type) - ? TREE_TYPE (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (result_type)))) - : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (result_type)))); tree storage_type - = build_unc_object_type (template_type, type, - get_identifier ("ALLOC")); + = build_unc_object_type_from_ptr (result_type, type, + get_identifier ("ALLOC")); + tree template_type = TREE_TYPE (TYPE_FIELDS (storage_type)); tree storage_ptr_type = build_pointer_type (storage_type); tree storage; tree template_cons = NULL_TREE; diff --git a/gcc/ada/validsw.ads b/gcc/ada/validsw.ads index 38214fa8b03..a2d0a189b38 100644 --- a/gcc/ada/validsw.ads +++ b/gcc/ada/validsw.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -48,11 +48,12 @@ package Validsw is -- expressions in object declarations are checked for validity. Validity_Check_Default : Boolean := True; - -- Controls default (reference manual) validity checking. If this switch - -- is set to True using -gnatVd or a 'd' in the argument of a Validity_ - -- Checks pragma then left side subscripts and case statement arguments - -- are checked for validity. This switch is also set by default if no - -- -gnatV switch is used and no Validity_Checks pragma is processed. + -- Controls default (reference manual) validity checking. If this switch is + -- set to True using -gnatVd or a 'd' in the argument of a Validity_ Checks + -- pragma (or the initial default value is used, set True), then left side + -- subscripts and case statement arguments are checked for validity. This + -- switch is also set by default if no -gnatV switch is used and no + -- Validity_Checks pragma is processed. Validity_Check_Floating_Point : Boolean := False; -- Normally validity checking applies only to discrete values (integer diff --git a/gcc/ada/vms_conv.adb b/gcc/ada/vms_conv.adb index 250e00e9d16..2157731bdf4 100644 --- a/gcc/ada/vms_conv.adb +++ b/gcc/ada/vms_conv.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -651,7 +651,7 @@ package body VMS_Conv is begin Put ("GNAT "); Put_Line (Gnatvsn.Gnat_Version_String); - Put_Line ("Copyright 1996-2005 Free Software Foundation, Inc."); + Put_Line ("Copyright 1996-2005, Free Software Foundation, Inc."); end Output_Version; ----------- diff --git a/gcc/ada/vms_conv.ads b/gcc/ada/vms_conv.ads index cb59ff9bb7c..1989381f5a2 100644 --- a/gcc/ada/vms_conv.ads +++ b/gcc/ada/vms_conv.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/vms_data.ads b/gcc/ada/vms_data.ads index c3678f46c00..9f37b20683c 100644 --- a/gcc/ada/vms_data.ads +++ b/gcc/ada/vms_data.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -3760,6 +3760,14 @@ package VMS_Data is -- /VERBOSE), then error lines start with the full path name of the -- project file, rather than its simple file name. + S_Make_Hi_Verb : aliased constant S := "/HIGH_VERBOSITY " & + "-vh"; + -- /NOHIGH_VERBOSITY (D) + -- /HIGH_VERBOSITY + -- + -- Displays the reason for all recompilations GNAT MAKE decides are + -- necessary, in high verbosity. Equivalent to /VERBOSE. + S_Make_Inplace : aliased constant S := "/IN_PLACE " & "-i"; -- /NOIN_PLACE (D) @@ -3798,6 +3806,15 @@ package VMS_Data is -- /COMPILER_QUALIFIERS, /BINDER_QUALIFIERS and /MAKE_QUALIFIERS will be -- passed to any GNAT LINK commands generated by GNAT LINK. + S_Make_Low_Verb : aliased constant S := "/LOW_VERBOSITY " & + "-vl"; + -- /NOLOW_VERBOSITY (D) + -- /LOW_VERBOSITY + -- + -- Displays the reason for all recompilations GNAT MAKE decides are + -- necessary, in low verbosity, that is with less output than + -- /MEDIUM_VERBOSITY, /HIGH_VERBOSITY or /VERBOSE. + S_Make_Make : aliased constant S := "/MAKE_QUALIFIERS=?" & "-margs MAKE"; -- /MAKE_QUALIFIERS @@ -3822,6 +3839,15 @@ package VMS_Data is -- the mapping file. This will improve the source search during the next -- invocations of the compiler + S_Make_Med_Verb : aliased constant S := "/MEDIUM_VERBOSITY " & + "-vm"; + -- /NOMEDIUM_VERBOSITY (D) + -- /MEDIUM_VERBOSITY + -- + -- Displays the reason for all recompilations GNAT MAKE decides are + -- necessary, in medium verbosity, that is with potentially less output + -- than /HIGH_VERBOSITY or /VERBOSE. + S_Make_Mess : aliased constant S := "/MESSAGES_PROJECT_FILE=" & "DEFAULT " & "-vP0 " & @@ -4017,12 +4043,15 @@ package VMS_Data is S_Make_Ext 'Access, S_Make_Force 'Access, S_Make_Full 'Access, + S_Make_Hi_Verb 'Access, S_Make_Inplace 'Access, S_Make_Index 'Access, S_Make_Library 'Access, S_Make_Link 'Access, + S_Make_Low_Verb'Access, S_Make_Make 'Access, S_Make_Mapping 'Access, + S_Make_Med_Verb'Access, S_Make_Mess 'Access, S_Make_Minimal 'Access, S_Make_Nolink 'Access, @@ -4452,6 +4481,14 @@ package VMS_Data is -- Preprocessor lines and deleted lines are completely removed from the -- output. + S_Prep_Replace : aliased constant S := "/REPLACE_IN_COMMENTS " & + "-C"; + -- /NOREPLACE_IN_COMMENTS (D) + -- /REPLACE_IN_COMMENTS + -- + -- Causes preprocessor to scan comments and perform replacements on + -- any $symbol occurrences within the comment text. + S_Prep_Symbols : aliased constant S := "/SYMBOLS " & "-s"; -- /NOSYMBOLS (D) @@ -4471,6 +4508,7 @@ package VMS_Data is S_Prep_Com 'Access, S_Prep_Ref 'Access, S_Prep_Remove 'Access, + S_Prep_Replace 'Access, S_Prep_Symbols 'Access, S_Prep_Undef 'Access); diff --git a/gcc/ada/vxaddr2line.adb b/gcc/ada/vxaddr2line.adb index ad53b1024ad..ba87c9938a3 100644 --- a/gcc/ada/vxaddr2line.adb +++ b/gcc/ada/vxaddr2line.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2005 Ada Core Technologies, Inc. -- +-- Copyright (C) 2002-2005, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -90,7 +90,7 @@ procedure VxAddr2Line is type Arch_Record is record Addr2line_Binary : String_Access; - -- Name of the addr2line utility to use. + -- Name of the addr2line utility to use Nm_Binary : String_Access; -- Name of the host nm utility, which will be used to find out the @@ -294,7 +294,7 @@ procedure VxAddr2Line is return Value; end; - -- We can not get here + -- We cannot get here raise Program_Error; @@ -408,7 +408,7 @@ begin Error ("Couldn't find " & Arch_List (Cur_Arch).Addr2line_Binary.all); end if; - -- The first argument specifies the image file. Check if it exists. + -- The first argument specifies the image file. Check if it exists if not Is_Regular_File (Argument (1)) then Error ("Couldn't find the executable " & Argument (1)); diff --git a/gcc/ada/widechar.adb b/gcc/ada/widechar.adb index e1999286e49..31fedc48d11 100644 --- a/gcc/ada/widechar.adb +++ b/gcc/ada/widechar.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/widechar.ads b/gcc/ada/widechar.ads index cc0ab34a022..8686f81890b 100644 --- a/gcc/ada/widechar.ads +++ b/gcc/ada/widechar.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/xeinfo.adb b/gcc/ada/xeinfo.adb index d057e04a551..a24dff436c9 100644 --- a/gcc/ada/xeinfo.adb +++ b/gcc/ada/xeinfo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/xgnatugn.adb b/gcc/ada/xgnatugn.adb index 3a55df4296a..a7e90ffde98 100644 --- a/gcc/ada/xgnatugn.adb +++ b/gcc/ada/xgnatugn.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2004 Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -180,8 +180,8 @@ procedure Xgnatugn is Target : Target_Type; -- The Target variable is initialized using the command line - Valid_Characters : constant Character_Set - := To_Set (Span => (' ', '~')); + Valid_Characters : constant Character_Set := + To_Set (Span => (' ', '~')); -- This array controls which characters are permitted in the input -- file (after line breaks have been removed). Valid characters -- are all printable ASCII characters and the space character. @@ -748,7 +748,7 @@ procedure Xgnatugn is else - -- Extend Seq to cover the current (known) word. + -- Extend Seq to cover the current (known) word Seq.Last := Token.Span.Last; Next_Token; @@ -1045,7 +1045,7 @@ procedure Xgnatugn is if (not Have_Conditional) or (Flag in Edition_Type) then - -- The ordinary case. + -- The ordinary case if not Currently_Excluding then Put_Line (Output_File, Rewritten); @@ -1068,7 +1068,7 @@ procedure Xgnatugn is -- case). procedure Add (Extension, Replacement : String); - -- Adds an extension with a custom replacement. + -- Adds an extension with a custom replacement --------- -- Add -- @@ -1294,7 +1294,7 @@ begin begin Target := Flag_Type'Value (Argument (1)); - if Target not in Target_Type then + if not Target'Valid then Valid_Command_Line := False; end if; diff --git a/gcc/ada/xnmake.adb b/gcc/ada/xnmake.adb index d221d94b22c..ec08692e275 100644 --- a/gcc/ada/xnmake.adb +++ b/gcc/ada/xnmake.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/xr_tabls.adb b/gcc/ada/xr_tabls.adb index 5e8cbe34a0a..b3aa017dd95 100644 --- a/gcc/ada/xr_tabls.adb +++ b/gcc/ada/xr_tabls.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -131,7 +131,7 @@ package body Xr_Tabls is -- Column. This key should be used for lookup in Entity_HTable function Is_Less_Than (Decl1, Decl2 : Declaration_Reference) return Boolean; - -- Compare two declarations. The comparison is case-insensitive. + -- Compare two declarations (the comparison is case-insensitive) function Is_Less_Than (Ref1, Ref2 : Reference) return Boolean; -- Compare two references @@ -144,14 +144,12 @@ package body Xr_Tabls is Get_Declaration : Boolean := False; Arr : in out Reference_Array; Index : in out Natural); - -- Store in Arr, starting at Index, all the references to Decl. - -- The Get_* parameters can be used to indicate which references should be - -- stored. + -- Store in Arr, starting at Index, all the references to Decl. The Get_* + -- parameters can be used to indicate which references should be stored. -- Constraint_Error will be raised if Arr is not big enough. procedure Sort (Arr : in out Reference_Array); - -- Sort an array of references. - -- Arr'First must be 1. + -- Sort an array of references (Arr'First must be 1) -------------- -- Set_Next -- diff --git a/gcc/ada/xr_tabls.ads b/gcc/ada/xr_tabls.ads index be1d8d00418..d2b83353e6c 100644 --- a/gcc/ada/xr_tabls.ads +++ b/gcc/ada/xr_tabls.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1998-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -35,7 +35,7 @@ package Xr_Tabls is ------------------- function ALI_File_Name (Ada_File_Name : String) return String; - -- Returns the ali file name corresponding to Ada_File_Name. + -- Returns the ali file name corresponding to Ada_File_Name procedure Create_Project_File (Name : String); -- Open and parse a new project file. If the file Name could not be @@ -82,14 +82,14 @@ package Xr_Tabls is Remove_Only : Boolean := False; Symbol_Match : Boolean := True) return Declaration_Reference; - -- Add a new declaration in the table and return the index to it. - -- Decl_Type is the type of the entity Any previous instance of this - -- entity in the htable is removed. If Remove_Only is True, then any - -- previous instance is removed, but the new entity is never inserted. - -- Symbol_Match should be set to False if the name of the symbol doesn't - -- match the pattern from the command line. In that case, the entity will - -- not be output by gnatfind. If Symbol_Match is True, the entity will only - -- be output if the file name itself matches. + -- Add a new declaration in the table and return the index to it. Decl_Type + -- is the type of the entity Any previous instance of this entity in the + -- htable is removed. If Remove_Only is True, then any previous instance is + -- removed, but the new entity is never inserted. Symbol_Match should be + -- set to False if the name of the symbol doesn't match the pattern from + -- the command line. In that case, the entity will not be output by + -- gnatfind. If Symbol_Match is True, the entity will only be output if the + -- file name itself matches. procedure Add_Parent (Declaration : in out Declaration_Reference; @@ -160,10 +160,9 @@ package Xr_Tabls is Get_Writes : Boolean := False; Get_Bodies : Boolean := False) return Reference_Array_Access; - -- Return a sorted list of all references to the entity in decl. - -- The parameters Get_* are used to specify what kind of references - -- should be merged and returned (read-only accesses, write accesses - -- and bodies). + -- Return a sorted list of all references to the entity in decl. The + -- parameters Get_* are used to specify what kind of references should be + -- merged and returned (read-only accesses, write accesses and bodies). function Get_Column (Decl : Declaration_Reference) return String; function Get_Column (Ref : Reference) return String; @@ -216,14 +215,13 @@ package Xr_Tabls is (File : File_Reference; With_Dir : Boolean := False; Strip : Natural := 0) return String; - -- Returns the file name (and its directory if With_Dir is True or the - -- user has used the -f switch on the command line. If Strip is not 0, - -- then the last Strip-th "-..." substrings are removed first. For - -- instance, with Strip=2, a file name "parent-child1-child2-child3.ali" - -- would be returned as "parent-child1.ali". This is used when looking - -- for the ALI file to use for a package, since for separates with have - -- to use the parent's ALI. The null string is returned if there is no - -- such parent unit. + -- Returns the file name (and its directory if With_Dir is True or the user + -- has used the -f switch on the command line. If Strip is not 0, then the + -- last Strip-th "-..." substrings are removed first. For instance, with + -- Strip=2, a file name "parent-child1-child2-child3.ali" would be returned + -- as "parent-child1.ali". This is used when looking for the ALI file to + -- use for a package, since for separates with have to use the parent's + -- ALI. The null string is returned if there is no such parent unit. -- -- Note that this version of Get_File is not inlined @@ -240,16 +238,16 @@ package Xr_Tabls is -- Return the source line associated with the reference procedure Grep_Source_Files; - -- Parse all the source files which have at least one reference, - -- and grep the appropriate source lines so that we'll be able to - -- display them. This function should be called once all the .ali - -- files have been parsed, and only if the appropriate user switch + -- Parse all the source files which have at least one reference, and grep + -- the appropriate source lines so that we'll be able to display them. This + -- function should be called once all the .ali files have been parsed, and + -- only if the appropriate user switch -- has been used (gnatfind -s). -- - -- Note: To save memory, the strings for the source lines are shared. - -- Thus it is no longer possible to free the references, or we would - -- free the same chunk multiple times. It doesn't matter, though, since - -- this is only called once, prior to exiting gnatfind. + -- Note: To save memory, the strings for the source lines are shared. Thus + -- it is no longer possible to free the references, or we would free the + -- same chunk multiple times. It doesn't matter, though, since this is only + -- called once, prior to exiting gnatfind. function Longest_File_Name return Natural; -- Returns the longest file name found @@ -266,9 +264,9 @@ package Xr_Tabls is -- by the user function Next_Unvisited_File return File_Reference; - -- Returns the next unvisited library file in the list - -- If there is no more unvisited file, return Empty_File. - -- Two calls to this subprogram will return different files. + -- Returns the next unvisited library file in the list If there is no more + -- unvisited file, return Empty_File. Two calls to this subprogram will + -- return different files. procedure Set_Default_Match (Value : Boolean); -- Set the default value for match in declarations. @@ -276,23 +274,22 @@ package Xr_Tabls is -- command line, then every file match procedure Reset_Directory (File : File_Reference); - -- Reset the cached directory for file. Next time Get_File is - -- called, the directory willl be recomputed. + -- Reset the cached directory for file. Next time Get_File is called, the + -- directory willl be recomputed. procedure Set_Unvisited (File_Ref : File_Reference); - -- Set File_Ref as unvisited. So Next_Unvisited_File will return it. + -- Set File_Ref as unvisited. So Next_Unvisited_File will return it procedure Read_File (File_Name : String; Contents : out GNAT.OS_Lib.String_Access); - -- Reads File_Name into the newly allocated strig Contents. A - -- Types.EOF character will be added to the returned Contents to - -- simplify parsing. Name_Error is raised if the file was not found. - -- End_Error is raised if the file could not be read correctly. For - -- most systems correct reading means that the number of bytes read - -- is equal to the file size. The exception is OpenVMS where correct - -- reading means that the number of bytes read is less than or equal - -- to the file size. + -- Reads File_Name into the newly allocated strig Contents. Types.EOF + -- character will be added to the returned Contents to simplify parsing. + -- Name_Error is raised if the file was not found. End_Error is raised if + -- the file could not be read correctly. For most systems correct reading + -- means that the number of bytes read is equal to the file size. The + -- exception is OpenVMS where correct reading means that the number of + -- bytes read is less than or equal to the file size. private type Project_File (Src_Dir_Length, Obj_Dir_Length : Natural) is record diff --git a/gcc/ada/xref_lib.adb b/gcc/ada/xref_lib.adb index 454acccd9c2..3650851d916 100644 --- a/gcc/ada/xref_lib.adb +++ b/gcc/ada/xref_lib.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1998-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -372,7 +372,7 @@ package body Xref_Lib is if Tail (Dir_Ent (1 .. Last), 4) = ".adp" then - -- The first project file found is the good one. + -- The first project file found is the good one Close (My_Dir); return Dir_Ent (1 .. Last); @@ -889,8 +889,9 @@ package body Xref_Lib is if Ali (Ptr) = '[' then Skip_To_Matching_Closing_Bracket; + end if; - elsif Ali (Ptr) = '<' + if Ali (Ptr) = '<' or else Ali (Ptr) = '(' or else Ali (Ptr) = '{' then @@ -1475,7 +1476,7 @@ package body Xref_Lib is -- Go to start of new line procedure Print80 (S : in String); - -- Print the text, respecting the 80 columns rule. + -- Print the text, respecting the 80 columns rule procedure Print_Ref (Line, Column : String); -- The beginning of the output is aligned on a column multiple of 9 diff --git a/gcc/ada/xref_lib.ads b/gcc/ada/xref_lib.ads index bc4c4fa1f00..2c9f944e594 100644 --- a/gcc/ada/xref_lib.ads +++ b/gcc/ada/xref_lib.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1998-2002 Free Software Foundation, Inc. -- +-- Copyright (C) 1998-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -95,7 +95,7 @@ package Xref_Lib is ------------------------ function Default_Project_File (Dir_Name : in String) return String; - -- Returns the default Project file name for the directory Dir_Name. + -- Returns the default Project file name for the directory Dir_Name procedure Search (Pattern : Search_Pattern; @@ -144,16 +144,16 @@ private type Dependencies is new Dependencies_Tables.Instance; type ALI_File is limited record - Buffer : String_Access := null; + Buffer : String_Access := null; -- Buffer used to read the whole file at once - Current_Line : Positive; + Current_Line : Positive; -- Start of the current line in Buffer - Xref_Line : Positive; + Xref_Line : Positive; -- Start of the xref lines in Buffer - X_File : Xr_Tabls.File_Reference; + X_File : Xr_Tabls.File_Reference; -- Stores the cross-referencing file-name ("X..." lines), as an -- index into the dependencies table @@ -171,10 +171,10 @@ private -- line, it is stored as "Entity_Name Declaration_File:line:column" File_Ref : Xr_Tabls.File_Reference; - -- A reference to the source file, if any. + -- A reference to the source file, if any Initialized : Boolean := False; - -- Set to True when Entity has been initialized. + -- Set to True when Entity has been initialized end record; - -- Stores all the pattern that are search for. + end Xref_Lib; diff --git a/gcc/ada/xsinfo.adb b/gcc/ada/xsinfo.adb index 7ff76c605bc..035109b7c30 100644 --- a/gcc/ada/xsinfo.adb +++ b/gcc/ada/xsinfo.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/xsnames.adb b/gcc/ada/xsnames.adb index 47fe13ec88a..6781edbc921 100644 --- a/gcc/ada/xsnames.adb +++ b/gcc/ada/xsnames.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/xtreeprs.adb b/gcc/ada/xtreeprs.adb index eb46f3d96fa..59116e76475 100644 --- a/gcc/ada/xtreeprs.adb +++ b/gcc/ada/xtreeprs.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/builtins.c b/gcc/builtins.c index a9fe8582501..6cca5fbe37e 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -6704,6 +6704,7 @@ integer_valued_real_p (tree t) real_trunc (&cint, TYPE_MODE (TREE_TYPE (t)), &c); return real_identical (&c, &cint); } + break; case NOP_EXPR: { @@ -9198,8 +9199,10 @@ fold_builtin_strstr (tree arglist, tree type) return fold_convert (type, tem); } + /* The argument is const char *, and the result is char *, so we need + a type conversion here to avoid a warning. */ if (p2[0] == '\0') - return s1; + return fold_convert (type, s1); if (p2[1] != '\0') return 0; diff --git a/gcc/c-common.c b/gcc/c-common.c index abd33d2a183..7b27ba06e4e 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -520,6 +520,7 @@ static tree handle_section_attribute (tree *, tree, tree, int, bool *); static tree handle_aligned_attribute (tree *, tree, tree, int, bool *); static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ; static tree handle_alias_attribute (tree *, tree, tree, int, bool *); +static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ; static tree handle_visibility_attribute (tree *, tree, tree, int, bool *); static tree handle_tls_model_attribute (tree *, tree, tree, int, @@ -599,6 +600,8 @@ const struct attribute_spec c_common_attribute_table[] = handle_weak_attribute }, { "alias", 1, 1, true, false, false, handle_alias_attribute }, + { "weakref", 0, 1, true, false, false, + handle_weakref_attribute }, { "no_instrument_function", 0, 0, true, false, false, handle_no_instrument_function_attribute }, { "malloc", 0, 0, true, false, false, @@ -4742,7 +4745,10 @@ handle_alias_attribute (tree *node, tree name, tree args, DECL_INITIAL (decl) = error_mark_node; else { - DECL_EXTERNAL (decl) = 0; + if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl))) + DECL_EXTERNAL (decl) = 1; + else + DECL_EXTERNAL (decl) = 0; TREE_STATIC (decl) = 1; } } @@ -4755,6 +4761,40 @@ handle_alias_attribute (tree *node, tree name, tree args, return NULL_TREE; } +/* Handle a "weakref" attribute; arguments as in struct + attribute_spec.handler. */ + +static tree +handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args, + int flags, bool *no_add_attrs) +{ + tree attr = NULL_TREE; + + /* The idea here is that `weakref("name")' mutates into `weakref, + alias("name")', and weakref without arguments, in turn, + implicitly adds weak. */ + + if (args) + { + attr = tree_cons (get_identifier ("alias"), args, attr); + attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr); + + *no_add_attrs = true; + } + else + { + if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node))) + error ("%Jweakref attribute must appear before alias attribute", + *node); + + attr = tree_cons (get_identifier ("weak"), NULL_TREE, attr); + } + + decl_attributes (node, attr, flags); + + return NULL_TREE; +} + /* Handle an "visibility" attribute; arguments as in struct attribute_spec.handler. */ @@ -5124,7 +5164,7 @@ handle_vector_size_attribute (tree *node, tree name, tree args, orig_mode = TYPE_MODE (type); if (TREE_CODE (type) == RECORD_TYPE - || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT + || (!SCALAR_FLOAT_MODE_P (orig_mode) && GET_MODE_CLASS (orig_mode) != MODE_INT) || !host_integerp (TYPE_SIZE_UNIT (type), 1)) { diff --git a/gcc/c-common.h b/gcc/c-common.h index 4e8485a061a..cf75ed9e82a 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -776,6 +776,7 @@ extern tree finish_label_address_expr (tree); /* Same function prototype, but the C and C++ front ends have different implementations. Used in c-common.c. */ extern tree lookup_label (tree); +extern tree lookup_name (tree); extern int vector_types_convertible_p (tree t1, tree t2); diff --git a/gcc/c-cppbuiltin.c b/gcc/c-cppbuiltin.c index 9020e0b49f9..e0d61892009 100644 --- a/gcc/c-cppbuiltin.c +++ b/gcc/c-cppbuiltin.c @@ -419,6 +419,11 @@ c_cpp_builtins (cpp_reader *pfile) cpp_define (pfile, "__FINITE_MATH_ONLY__=1"); else cpp_define (pfile, "__FINITE_MATH_ONLY__=0"); + if (flag_pic) + { + builtin_define_with_int_value ("__pic__", flag_pic); + builtin_define_with_int_value ("__PIC__", flag_pic); + } if (flag_iso) cpp_define (pfile, "__STRICT_ANSI__"); diff --git a/gcc/c-decl.c b/gcc/c-decl.c index f7cad3b7105..a86cfdc01b6 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4014,8 +4014,13 @@ grokdeclarator (const struct c_declarator *declarator, && !funcdef_flag) { /* 'extern' with initialization is invalid if not at file scope. */ - if (current_scope == file_scope) - warning (0, "%qs initialized and declared %", name); + if (current_scope == file_scope) + { + /* It is fine to have 'extern const' when compiling at C + and C++ intersection. */ + if (!(warn_cxx_compat && constp)) + warning (0, "%qs initialized and declared %", name); + } else error ("%qs has both % and initializer", name); } @@ -4694,11 +4699,10 @@ grokdeclarator (const struct c_declarator *declarator, /* At file scope, the presence of a `static' or `register' storage class specifier, or the absence of all storage class specifiers makes this declaration a definition (perhaps tentative). Also, - the absence of both `static' and `register' makes it public. */ + the absence of `static' makes it public. */ if (current_scope == file_scope) { - TREE_PUBLIC (decl) = !(storage_class == csc_static - || storage_class == csc_register); + TREE_PUBLIC (decl) = storage_class != csc_static; TREE_STATIC (decl) = !extern_ref; } /* Not at file scope, only `static' makes a static definition. */ diff --git a/gcc/c-opts.c b/gcc/c-opts.c index b0efaf4a61b..62db668b4e1 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -70,6 +70,9 @@ static bool deps_seen; /* If -v seen. */ static bool verbose; +/* If -lang-fortran seen. */ +static bool lang_fortran = false; + /* Dependency output file. */ static const char *deps_file; @@ -237,6 +240,15 @@ c_common_init_options (unsigned int argc, const char **argv) result |= CL_C | CL_ObjC | CL_CXX | CL_ObjCXX; break; } + +#ifdef CL_Fortran + for (i = 1; i < argc; i++) + if (! strcmp (argv[i], "-lang-fortran")) + { + result |= CL_Fortran; + break; + } +#endif } return result; @@ -258,6 +270,10 @@ c_common_handle_option (size_t scode, const char *arg, int value) default: if (cl_options[code].flags & (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX)) break; +#ifdef CL_Fortran + if (lang_fortran && (cl_options[code].flags & (CL_Fortran))) + break; +#endif result = 0; break; @@ -651,13 +667,6 @@ c_common_handle_option (size_t scode, const char *arg, int value) cpp_opts->extended_identifiers = value; break; - case OPT_ffixed_form: - case OPT_ffixed_line_length_: - /* Fortran front end options ignored when preprocessing only. */ - if (!flag_preprocess_only) - result = 0; - break; - case OPT_ffor_scope: flag_new_for_scope = value; break; @@ -833,6 +842,10 @@ c_common_handle_option (size_t scode, const char *arg, int value) cpp_opts->dollars_in_ident = false; break; + case OPT_lang_fortran: + lang_fortran = true; + break; + case OPT_lang_objc: cpp_opts->objc = 1; break; diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 0894317e574..6468ef27cc6 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -454,7 +454,6 @@ extern tree groktypename (struct c_type_name *); extern tree grokparm (const struct c_parm *); extern tree implicitly_declare (tree); extern void keep_next_level (void); -extern tree lookup_name (tree); extern void pending_xref_error (void); extern void c_push_function_context (struct function *); extern void c_pop_function_context (struct function *); diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index cf9798adc8a..80259cc811d 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -917,7 +917,7 @@ alloc_tagged_tu_seen_cache (tree t1, tree t2) struct a *next; }; If we are comparing this against a similar struct in another TU, - and did not assume they were compatiable, we end up with an infinite + and did not assume they were compatible, we end up with an infinite loop. */ tu->val = 1; return tu; @@ -3500,16 +3500,19 @@ build_c_cast (tree type, tree expr) /* Ignore any integer overflow caused by the cast. */ if (TREE_CODE (value) == INTEGER_CST) { - /* If OVALUE had overflow set, then so will VALUE, so it - is safe to overwrite. */ - if (CONSTANT_CLASS_P (ovalue)) + if (CONSTANT_CLASS_P (ovalue) + && (TREE_OVERFLOW (ovalue) || TREE_CONSTANT_OVERFLOW (ovalue))) { + /* Avoid clobbering a shared constant. */ + value = copy_node (value); TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue); - /* Similarly, constant_overflow cannot have become cleared. */ TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue); } - else - TREE_OVERFLOW (value) = 0; + else if (TREE_OVERFLOW (value) || TREE_CONSTANT_OVERFLOW (value)) + /* Reset VALUE's overflow flags, ensuring constant sharing. */ + value = build_int_cst_wide (TREE_TYPE (value), + TREE_INT_CST_LOW (value), + TREE_INT_CST_HIGH (value)); } } diff --git a/gcc/c.opt b/gcc/c.opt index eb01d325ab2..1338b11d4b2 100644 --- a/gcc/c.opt +++ b/gcc/c.opt @@ -510,6 +510,9 @@ C++ ObjC++ ffixed-form C ObjC +ffixed-line-length-none +C ObjC + ffixed-line-length- C ObjC Joined @@ -781,6 +784,9 @@ C ObjC C++ ObjC++ Joined Separate lang-asm C Undocumented +lang-fortran +C Undocumented + lang-objc C ObjC C++ ObjC++ Undocumented diff --git a/gcc/calls.c b/gcc/calls.c index 7dbc21fe415..2cc15fc2e81 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -527,7 +527,9 @@ special_function_p (tree fndecl, int flags) else if ((tname[0] == 'q' && tname[1] == 's' && ! strcmp (tname, "qsetjmp")) || (tname[0] == 'v' && tname[1] == 'f' - && ! strcmp (tname, "vfork"))) + && ! strcmp (tname, "vfork")) + || (tname[0] == 'g' && tname[1] == 'e' + && !strcmp (tname, "getcontext"))) flags |= ECF_RETURNS_TWICE; else if (tname[0] == 'l' && tname[1] == 'o' @@ -2855,19 +2857,50 @@ expand_call (tree exp, rtx target, int ignore) && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp)) && GET_MODE (target) == GET_MODE (valreg)) { - /* TARGET and VALREG cannot be equal at this point because the - latter would not have REG_FUNCTION_VALUE_P true, while the - former would if it were referring to the same register. - - If they refer to the same register, this move will be a no-op, - except when function inlining is being done. */ - emit_move_insn (target, valreg); - - /* If we are setting a MEM, this code must be executed. Since it is - emitted after the call insn, sibcall optimization cannot be - performed in that case. */ - if (MEM_P (target)) - sibcall_failure = 1; + bool may_overlap = false; + + /* We have to copy a return value in a CLASS_LIKELY_SPILLED hard + reg to a plain register. */ + if (REG_P (valreg) + && HARD_REGISTER_P (valreg) + && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (valreg))) + && !(REG_P (target) && !HARD_REGISTER_P (target))) + valreg = copy_to_reg (valreg); + + /* If TARGET is a MEM in the argument area, and we have + saved part of the argument area, then we can't store + directly into TARGET as it may get overwritten when we + restore the argument save area below. Don't work too + hard though and simply force TARGET to a register if it + is a MEM; the optimizer is quite likely to sort it out. */ + if (ACCUMULATE_OUTGOING_ARGS && pass && MEM_P (target)) + for (i = 0; i < num_actuals; i++) + if (args[i].save_area) + { + may_overlap = true; + break; + } + + if (may_overlap) + target = copy_to_reg (valreg); + else + { + /* TARGET and VALREG cannot be equal at this point + because the latter would not have + REG_FUNCTION_VALUE_P true, while the former would if + it were referring to the same register. + + If they refer to the same register, this move will be + a no-op, except when function inlining is being + done. */ + emit_move_insn (target, valreg); + + /* If we are setting a MEM, this code must be executed. + Since it is emitted after the call insn, sibcall + optimization cannot be performed in that case. */ + if (MEM_P (target)) + sibcall_failure = 1; + } } else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode) { diff --git a/gcc/combine.c b/gcc/combine.c index ff10663a147..abd64582d3e 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -1423,6 +1423,7 @@ combinable_i3pat (rtx i3, rtx *loc, rtx i2dest, rtx i1dest, rtx dest = SET_DEST (set); rtx src = SET_SRC (set); rtx inner_dest = dest; + rtx subdest; while (GET_CODE (inner_dest) == STRICT_LOW_PART || GET_CODE (inner_dest) == SUBREG @@ -1457,27 +1458,35 @@ combinable_i3pat (rtx i3, rtx *loc, rtx i2dest, rtx i1dest, || (i1_not_in_src && reg_overlap_mentioned_p (i1dest, src))) return 0; - /* If DEST is used in I3, it is being killed in this insn, - so record that for later. + /* If DEST is used in I3, it is being killed in this insn, so + record that for later. We have to consider paradoxical + subregs here, since they kill the whole register, but we + ignore partial subregs, STRICT_LOW_PART, etc. Never add REG_DEAD notes for the FRAME_POINTER_REGNUM or the STACK_POINTER_REGNUM, since these are always considered to be live. Similarly for ARG_POINTER_REGNUM if it is fixed. */ - if (pi3dest_killed && REG_P (dest) - && reg_referenced_p (dest, PATTERN (i3)) - && REGNO (dest) != FRAME_POINTER_REGNUM + subdest = dest; + if (GET_CODE (subdest) == SUBREG + && (GET_MODE_SIZE (GET_MODE (subdest)) + >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (subdest))))) + subdest = SUBREG_REG (subdest); + if (pi3dest_killed + && REG_P (subdest) + && reg_referenced_p (subdest, PATTERN (i3)) + && REGNO (subdest) != FRAME_POINTER_REGNUM #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM - && REGNO (dest) != HARD_FRAME_POINTER_REGNUM + && REGNO (subdest) != HARD_FRAME_POINTER_REGNUM #endif #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM - && (REGNO (dest) != ARG_POINTER_REGNUM - || ! fixed_regs [REGNO (dest)]) + && (REGNO (subdest) != ARG_POINTER_REGNUM + || ! fixed_regs [REGNO (subdest)]) #endif - && REGNO (dest) != STACK_POINTER_REGNUM) + && REGNO (subdest) != STACK_POINTER_REGNUM) { if (*pi3dest_killed) return 0; - *pi3dest_killed = dest; + *pi3dest_killed = subdest; } } @@ -2080,35 +2089,6 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p) subst_insn = i3; - /* It is possible that the source of I2 or I1 may be performing an - unneeded operation, such as a ZERO_EXTEND of something that is known - to have the high part zero. Handle that case by letting subst look at - the innermost one of them. - - Another way to do this would be to have a function that tries to - simplify a single insn instead of merging two or more insns. We don't - do this because of the potential of infinite loops and because - of the potential extra memory required. However, doing it the way - we are is a bit of a kludge and doesn't catch all cases. - - But only do this if -fexpensive-optimizations since it slows things down - and doesn't usually win. */ - - if (flag_expensive_optimizations) - { - /* Pass pc_rtx so no substitutions are done, just simplifications. */ - if (i1) - { - subst_low_cuid = INSN_CUID (i1); - i1src = subst (i1src, pc_rtx, pc_rtx, 0, 0); - } - else - { - subst_low_cuid = INSN_CUID (i2); - i2src = subst (i2src, pc_rtx, pc_rtx, 0, 0); - } - } - #ifndef HAVE_cc0 /* Many machines that don't use CC0 have insns that can both perform an arithmetic operation and set the condition code. These operations will @@ -2171,6 +2151,41 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p) else #endif { + /* It is possible that the source of I2 or I1 may be performing + an unneeded operation, such as a ZERO_EXTEND of something + that is known to have the high part zero. Handle that case + by letting subst look at the innermost one of them. + + Another way to do this would be to have a function that tries + to simplify a single insn instead of merging two or more + insns. We don't do this because of the potential of infinite + loops and because of the potential extra memory required. + However, doing it the way we are is a bit of a kludge and + doesn't catch all cases. + + But only do this if -fexpensive-optimizations since it slows + things down and doesn't usually win. + + This is not done in the COMPARE case above because the + unmodified I2PAT is used in the PARALLEL and so a pattern + with a modified I2SRC would not match. */ + + if (flag_expensive_optimizations) + { + /* Pass pc_rtx so no substitutions are done, just + simplifications. */ + if (i1) + { + subst_low_cuid = INSN_CUID (i1); + i1src = subst (i1src, pc_rtx, pc_rtx, 0, 0); + } + else + { + subst_low_cuid = INSN_CUID (i2); + i2src = subst (i2src, pc_rtx, pc_rtx, 0, 0); + } + } + n_occurrences = 0; /* `subst' counts here */ /* If I1 feeds into I2 (not into I3) and I1DEST is in I1SRC, we @@ -6914,6 +6929,16 @@ make_compound_operation (rtx x, enum rtx_code in_code) SUBST (XEXP (x, i), new); } + /* If this is a commutative operation, the changes to the operands + may have made it noncanonical. */ + if (COMMUTATIVE_ARITH_P (x) + && swap_commutative_operands_p (XEXP (x, 0), XEXP (x, 1))) + { + tem = XEXP (x, 0); + SUBST (XEXP (x, 0), XEXP (x, 1)); + SUBST (XEXP (x, 1), tem); + } + return x; } @@ -8117,14 +8142,15 @@ apply_distributive_law (rtx x) break; case SUBREG: - /* Non-paradoxical SUBREGs distributes over all operations, provided - the inner modes and byte offsets are the same, this is an extraction - of a low-order part, we don't convert an fp operation to int or - vice versa, and we would not be converting a single-word - operation into a multi-word operation. The latter test is not - required, but it prevents generating unneeded multi-word operations. - Some of the previous tests are redundant given the latter test, but - are retained because they are required for correctness. + /* Non-paradoxical SUBREGs distributes over all operations, + provided the inner modes and byte offsets are the same, this + is an extraction of a low-order part, we don't convert an fp + operation to int or vice versa, this is not a vector mode, + and we would not be converting a single-word operation into a + multi-word operation. The latter test is not required, but + it prevents generating unneeded multi-word operations. Some + of the previous tests are redundant given the latter test, + but are retained because they are required for correctness. We produce the result slightly differently in this case. */ @@ -8135,6 +8161,7 @@ apply_distributive_law (rtx x) != GET_MODE_CLASS (GET_MODE (SUBREG_REG (lhs)))) || (GET_MODE_SIZE (GET_MODE (lhs)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (lhs)))) + || VECTOR_MODE_P (GET_MODE (lhs)) || GET_MODE_SIZE (GET_MODE (SUBREG_REG (lhs))) > UNITS_PER_WORD) return x; @@ -12230,6 +12257,10 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2, rtx elim_i2, { basic_block bb = this_basic_block; + /* You might think you could search back from FROM_INSN + rather than from I3, but combine tries to split invalid + combined instructions. This can result in the old I2 + or I1 moving later in the insn sequence. */ for (tem = PREV_INSN (i3); place == 0; tem = PREV_INSN (tem)) { if (! INSN_P (tem)) @@ -12330,6 +12361,22 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2, rtx elim_i2, || (CALL_P (tem) && find_reg_fusage (tem, USE, XEXP (note, 0)))) { + /* This may not be the correct place for the death + note if FROM_INSN is before TEM, and the reg is + set between FROM_INSN and TEM. The reg might + die two or more times. An existing death note + means we are looking at the wrong live range. */ + if (from_insn + && INSN_CUID (from_insn) < INSN_CUID (tem) + && find_regno_note (tem, REG_DEAD, + REGNO (XEXP (note, 0)))) + { + tem = from_insn; + if (tem == BB_HEAD (bb)) + break; + continue; + } + place = tem; /* If we are doing a 3->2 combination, and we have a diff --git a/gcc/common.opt b/gcc/common.opt index dc8aca6f385..ccadf43eb4b 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -173,6 +173,10 @@ Wunused-variable Common Var(warn_unused_variable) Warn when a variable is unused +Wvolatile-register-var +Common Var(warn_register_var) +Warn when a register variable is declared volatile + aux-info Common Separate -aux-info Emit declaration information into diff --git a/gcc/config.gcc b/gcc/config.gcc index 21c6dab8cd9..c0867e1e91c 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -900,6 +900,9 @@ hppa[12]*-*-hpux10*) tmake_file="${tmake_file} pa/t-dce-thr" ;; esac + if test x$sjlj != x1; then + tmake_file="$tmake_file pa/t-slibgcc-elf-ver" + fi use_collect2=yes use_fixproto=yes ;; @@ -932,6 +935,9 @@ hppa*64*-*-hpux11*) pa/pa-hpux1010.opt pa/pa64-hpux.opt" need_64bit_hwint=yes tmake_file="pa/t-pa64 pa/t-pa-hpux pa/t-hpux-shlib" + if test x$sjlj != x1; then + tmake_file="$tmake_file pa/t-slibgcc-elf-ver" + fi extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o" case x${enable_threads} in xyes | xposix ) @@ -955,6 +961,9 @@ hppa[12]*-*-hpux11*) ;; esac tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib" + if test x$sjlj != x1; then + tmake_file="$tmake_file pa/t-slibgcc-elf-ver" + fi case x${enable_threads} in xyes | xposix ) thread_file=posix diff --git a/gcc/config.in b/gcc/config.in index fa39a356efc..d91891f0709 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -161,6 +161,12 @@ #endif +/* Define if your assembler supports fprnd. */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_FPRND +#endif + + /* Define if your assembler supports the --gdwarf2 option. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_GDWARF2_DEBUG_FLAG @@ -744,6 +750,12 @@ #endif +/* Define if your assembler supports .weakref. */ +#ifndef USED_FOR_TARGET +#undef HAVE_GAS_WEAKREF +#endif + + /* Define to 1 if you have the `getchar_unlocked' function. */ #ifndef USED_FOR_TARGET #undef HAVE_GETCHAR_UNLOCKED diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h index 5dd57343c58..f6b237a1c0f 100644 --- a/gcc/config/alpha/alpha-protos.h +++ b/gcc/config/alpha/alpha-protos.h @@ -53,8 +53,9 @@ extern rtx split_small_symbolic_operand (rtx); extern void get_aligned_mem (rtx, rtx *, rtx *); extern rtx get_unaligned_address (rtx, int); extern enum reg_class alpha_preferred_reload_class (rtx, enum reg_class); -extern enum reg_class secondary_reload_class (enum reg_class, - enum machine_mode, rtx, int); +extern enum reg_class alpha_secondary_reload_class (enum reg_class, + enum machine_mode, rtx, + int); extern void alpha_set_memflags (rtx, rtx); extern bool alpha_split_const_mov (enum machine_mode, rtx *); diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 89b292c3d7f..2dfc8776282 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1586,7 +1586,7 @@ alpha_preferred_reload_class(rtx x, enum reg_class class) from register elimination into a DImode fp register. */ enum reg_class -secondary_reload_class (enum reg_class class, enum machine_mode mode, +alpha_secondary_reload_class (enum reg_class class, enum machine_mode mode, rtx x, int in) { if ((mode == QImode || mode == HImode) && ! TARGET_BWX) @@ -6462,13 +6462,16 @@ static void alpha_init_builtins (void) { const struct alpha_builtin_def *p; + tree dimode_integer_type_node; tree ftype, attrs[2]; size_t i; + dimode_integer_type_node = lang_hooks.types.type_for_mode (DImode, 0); + attrs[0] = tree_cons (get_identifier ("nothrow"), NULL, NULL); attrs[1] = tree_cons (get_identifier ("const"), NULL, attrs[0]); - ftype = build_function_type (long_integer_type_node, void_list_node); + ftype = build_function_type (dimode_integer_type_node, void_list_node); p = zero_arg_builtins; for (i = 0; i < ARRAY_SIZE (zero_arg_builtins); ++i, ++p) @@ -6476,8 +6479,8 @@ alpha_init_builtins (void) lang_hooks.builtin_function (p->name, ftype, p->code, BUILT_IN_MD, NULL, attrs[p->is_const]); - ftype = build_function_type_list (long_integer_type_node, - long_integer_type_node, NULL_TREE); + ftype = build_function_type_list (dimode_integer_type_node, + dimode_integer_type_node, NULL_TREE); p = one_arg_builtins; for (i = 0; i < ARRAY_SIZE (one_arg_builtins); ++i, ++p) @@ -6485,9 +6488,9 @@ alpha_init_builtins (void) lang_hooks.builtin_function (p->name, ftype, p->code, BUILT_IN_MD, NULL, attrs[p->is_const]); - ftype = build_function_type_list (long_integer_type_node, - long_integer_type_node, - long_integer_type_node, NULL_TREE); + ftype = build_function_type_list (dimode_integer_type_node, + dimode_integer_type_node, + dimode_integer_type_node, NULL_TREE); p = two_arg_builtins; for (i = 0; i < ARRAY_SIZE (two_arg_builtins); ++i, ++p) @@ -7535,16 +7538,15 @@ alpha_expand_prologue (void) { if (frame_size > 4096) { - int probed = 4096; + int probed; - do + for (probed = 4096; probed < frame_size; probed += 8192) emit_insn (gen_probe_stack (GEN_INT (TARGET_ABI_UNICOSMK ? -probed + 64 : -probed))); - while ((probed += 8192) < frame_size); /* We only have to do this probe if we aren't saving registers. */ - if (sa_size == 0 && probed + 4096 < frame_size) + if (sa_size == 0 && frame_size > probed - 4096) emit_insn (gen_probe_stack (GEN_INT (-frame_size))); } diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 91689fbb564..ed02c9f3e8e 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -672,10 +672,10 @@ enum reg_class { FP register. */ #define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \ - secondary_reload_class((CLASS), (MODE), (IN), 1) + alpha_secondary_reload_class((CLASS), (MODE), (IN), 1) #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,OUT) \ - secondary_reload_class((CLASS), (MODE), (OUT), 0) + alpha_secondary_reload_class((CLASS), (MODE), (OUT), 0) /* If we are copying between general and FP registers, we need a memory location unless the FIX extension is available. */ diff --git a/gcc/config/alpha/freebsd.h b/gcc/config/alpha/freebsd.h index 5bf328eeaad..ca49a8bb0cd 100644 --- a/gcc/config/alpha/freebsd.h +++ b/gcc/config/alpha/freebsd.h @@ -24,22 +24,9 @@ Boston, MA 02110-1301, USA. */ #define SUBTARGET_EXTRA_SPECS \ { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER } -/* Provide a FBSD_TARGET_CPU_CPP_BUILTINS and CPP_SPEC appropriate for - FreeBSD/alpha. Besides the dealing with - the GCC option `-posix', and PIC issues as on all FreeBSD platforms, we must - deal with the Alpha's FP issues. */ - -#undef FBSD_TARGET_CPU_CPP_BUILTINS -#define FBSD_TARGET_CPU_CPP_BUILTINS() \ - do \ - { \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ - } \ - while (0) +/* Provide a CPP_SPEC appropriate for FreeBSD/alpha. Besides the + dealing with the GCC option `-posix', we must deal with the Alpha's + FP issues. */ #undef CPP_SPEC #define CPP_SPEC "%(cpp_subtarget) %{posix:-D_POSIX_SOURCE}" diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index 2768748a2d9..ffb581c4f53 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -36,11 +36,6 @@ Boston, MA 02110-1301, USA. */ /* The GNU C++ standard library requires this. */ \ if (c_dialect_cxx ()) \ builtin_define ("_GNU_SOURCE"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } while (0) #undef LIB_SPEC diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index b8913a1cf59..2bd84ca6024 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -56,6 +56,7 @@ extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, enum machine_mode, rtx *); extern int legitimate_pic_operand_p (rtx); extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx); +extern rtx legitimize_tls_address (rtx, rtx); extern int arm_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, int); extern int thumb_legitimate_address_p (enum machine_mode, rtx, int); extern int thumb_legitimate_offset_p (enum machine_mode, HOST_WIDE_INT); @@ -66,6 +67,7 @@ extern rtx thumb_legitimize_reload_address (rtx *, enum machine_mode, int, int, extern int arm_const_double_rtx (rtx); extern int neg_const_double_rtx_ok_for_fpa (rtx); extern enum reg_class vfp_secondary_reload_class (enum machine_mode, rtx); +extern bool arm_tls_referenced_p (rtx); extern int cirrus_memory_offset (rtx); extern int arm_coproc_mem_operand (rtx, bool); @@ -74,6 +76,7 @@ extern int arm_no_early_alu_shift_dep (rtx, rtx); extern int arm_no_early_alu_shift_value_dep (rtx, rtx); extern int arm_no_early_mul_dep (rtx, rtx); +extern int tls_mentioned_p (rtx); extern int symbol_mentioned_p (rtx); extern int label_mentioned_p (rtx); extern RTX_CODE minmax_code (rtx); @@ -122,6 +125,8 @@ extern const char *vfp_output_fstmx (rtx *); extern void arm_set_return_address (rtx, rtx); extern int arm_eliminable_register (rtx); +extern bool arm_output_addr_const_extra (FILE *, rtx); + #if defined TREE_CODE extern rtx arm_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int); extern void arm_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree); @@ -161,7 +166,6 @@ extern const char *thumb_load_double_from_address (rtx *); extern const char *thumb_output_move_mem_multiple (int, rtx *); extern const char *thumb_call_via_reg (rtx); extern void thumb_expand_movmemqi (rtx *); -extern rtx *thumb_legitimize_pic_address (rtx, enum machine_mode, rtx); extern int thumb_go_if_legitimate_address (enum machine_mode, rtx); extern rtx arm_return_addr (int, rtx); extern void thumb_reload_out_hi (rtx *); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 1bb6149c568..009d1420d08 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -142,6 +142,7 @@ static rtx arm_expand_binop_builtin (enum insn_code, tree, rtx); static rtx arm_expand_unop_builtin (enum insn_code, tree, rtx, int); static rtx arm_expand_builtin (tree, rtx, rtx, enum machine_mode, int); static void emit_constant_insn (rtx cond, rtx pattern); +static rtx emit_set_insn (rtx, rtx); static int arm_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, tree, bool); @@ -188,6 +189,9 @@ static bool arm_cxx_use_aeabi_atexit (void); static void arm_init_libfuncs (void); static bool arm_handle_option (size_t, const char *, int); static unsigned HOST_WIDE_INT arm_shift_truncation_mask (enum machine_mode); +static bool arm_cannot_copy_insn_p (rtx); +static bool arm_tls_symbol_p (rtx x); + /* Initialize the GCC target structure. */ #if TARGET_DLLIMPORT_DECL_ATTRIBUTES @@ -353,6 +357,17 @@ static unsigned HOST_WIDE_INT arm_shift_truncation_mask (enum machine_mode); #define TARGET_ARM_EABI_UNWINDER true #endif /* TARGET_UNWIND_INFO */ +#undef TARGET_CANNOT_COPY_INSN_P +#define TARGET_CANNOT_COPY_INSN_P arm_cannot_copy_insn_p + +#ifdef HAVE_AS_TLS +#undef TARGET_HAVE_TLS +#define TARGET_HAVE_TLS true +#endif + +#undef TARGET_CANNOT_FORCE_CONST_MEM +#define TARGET_CANNOT_FORCE_CONST_MEM arm_tls_referenced_p + struct gcc_target targetm = TARGET_INITIALIZER; /* Obstack for minipool constant handling. */ @@ -390,6 +405,9 @@ enum float_abi_type arm_float_abi; /* Which ABI to use. */ enum arm_abi_type arm_abi; +/* Which thread pointer model to use. */ +enum arm_tp_type target_thread_pointer = TP_AUTO; + /* Used to parse -mstructure_size_boundary command line option. */ int arm_structure_size_boundary = DEFAULT_STRUCTURE_SIZE_BOUNDARY; @@ -415,6 +433,7 @@ static int thumb_call_reg_needed; #define FL_VFPV2 (1 << 13) /* Vector Floating Point V2. */ #define FL_WBUF (1 << 14) /* Schedule for write buffer ops. Note: ARM6 & 7 derivatives only. */ +#define FL_ARCH6K (1 << 15) /* Architecture rel 6 K extensions. */ #define FL_IWMMXT (1 << 29) /* XScale v2 or "Intel Wireless MMX technology". */ @@ -430,9 +449,9 @@ static int thumb_call_reg_needed; #define FL_FOR_ARCH5TEJ FL_FOR_ARCH5TE #define FL_FOR_ARCH6 (FL_FOR_ARCH5TE | FL_ARCH6) #define FL_FOR_ARCH6J FL_FOR_ARCH6 -#define FL_FOR_ARCH6K FL_FOR_ARCH6 +#define FL_FOR_ARCH6K (FL_FOR_ARCH6 | FL_ARCH6K) #define FL_FOR_ARCH6Z FL_FOR_ARCH6 -#define FL_FOR_ARCH6ZK FL_FOR_ARCH6 +#define FL_FOR_ARCH6ZK FL_FOR_ARCH6K /* The bits in this mask specify which instructions we are allowed to generate. */ @@ -463,6 +482,9 @@ int arm_arch5e = 0; /* Nonzero if this chip supports the ARM Architecture 6 extensions. */ int arm_arch6 = 0; +/* Nonzero if this chip supports the ARM 6K extensions. */ +int arm_arch6k = 0; + /* Nonzero if this chip can benefit from load scheduling. */ int arm_ld_sched = 0; @@ -677,6 +699,24 @@ static const struct abi_name arm_all_abis[] = {"aapcs-linux", ARM_ABI_AAPCS_LINUX} }; +/* Supported TLS relocations. */ + +enum tls_reloc { + TLS_GD32, + TLS_LDM32, + TLS_LDO32, + TLS_IE32, + TLS_LE32 +}; + +/* Emit an insn that's a simple single-set. Both the operands must be known + to be valid. */ +inline static rtx +emit_set_insn (rtx x, rtx y) +{ + return emit_insn (gen_rtx_SET (VOIDmode, x, y)); +} + /* Return the number of bits set in VALUE. */ static unsigned bit_count (unsigned long value) @@ -786,8 +826,11 @@ arm_init_libfuncs (void) routines. */ set_optab_libfunc (sdiv_optab, DImode, "__aeabi_ldivmod"); set_optab_libfunc (udiv_optab, DImode, "__aeabi_uldivmod"); - set_optab_libfunc (sdiv_optab, SImode, "__aeabi_idivmod"); - set_optab_libfunc (udiv_optab, SImode, "__aeabi_uidivmod"); + + /* For SImode division the ABI provides div-without-mod routines, + which are faster. */ + set_optab_libfunc (sdiv_optab, SImode, "__aeabi_idiv"); + set_optab_libfunc (udiv_optab, SImode, "__aeabi_uidiv"); /* We don't have mod libcalls. Fortunately gcc knows how to use the divmod libcalls instead. */ @@ -1065,6 +1108,7 @@ arm_override_options (void) arm_arch5 = (insn_flags & FL_ARCH5) != 0; arm_arch5e = (insn_flags & FL_ARCH5E) != 0; arm_arch6 = (insn_flags & FL_ARCH6) != 0; + arm_arch6k = (insn_flags & FL_ARCH6K) != 0; arm_arch_xscale = (insn_flags & FL_XSCALE) != 0; arm_arch_cirrus = (insn_flags & FL_CIRRUS) != 0; @@ -1194,6 +1238,30 @@ arm_override_options (void) && (tune_flags & FL_MODE32) == 0) flag_schedule_insns = flag_schedule_insns_after_reload = 0; + if (target_thread_switch) + { + if (strcmp (target_thread_switch, "soft") == 0) + target_thread_pointer = TP_SOFT; + else if (strcmp (target_thread_switch, "auto") == 0) + target_thread_pointer = TP_AUTO; + else if (strcmp (target_thread_switch, "cp15") == 0) + target_thread_pointer = TP_CP15; + else + error ("invalid thread pointer option: -mtp=%s", target_thread_switch); + } + + /* Use the cp15 method if it is available. */ + if (target_thread_pointer == TP_AUTO) + { + if (arm_arch6k && !TARGET_THUMB) + target_thread_pointer = TP_CP15; + else + target_thread_pointer = TP_SOFT; + } + + if (TARGET_HARD_TP && TARGET_THUMB) + error ("can not use -mtp=cp15 with -mthumb"); + /* Override the default structure alignment for AAPCS ABI. */ if (TARGET_AAPCS_BASED) arm_structure_size_boundary = 8; @@ -1614,22 +1682,21 @@ arm_split_constant (enum rtx_code code, enum machine_mode mode, rtx insn, { /* Currently SET is the only monadic value for CODE, all the rest are diadic. */ - emit_insn (gen_rtx_SET (VOIDmode, target, GEN_INT (val))); + emit_set_insn (target, GEN_INT (val)); return 1; } else { rtx temp = subtargets ? gen_reg_rtx (mode) : target; - emit_insn (gen_rtx_SET (VOIDmode, temp, GEN_INT (val))); + emit_set_insn (temp, GEN_INT (val)); /* For MINUS, the value is subtracted from, since we never have subtraction of a constant. */ if (code == MINUS) - emit_insn (gen_rtx_SET (VOIDmode, target, - gen_rtx_MINUS (mode, temp, source))); + emit_set_insn (target, gen_rtx_MINUS (mode, temp, source)); else - emit_insn (gen_rtx_SET (VOIDmode, target, - gen_rtx_fmt_ee (code, mode, source, temp))); + emit_set_insn (target, + gen_rtx_fmt_ee (code, mode, source, temp)); return 2; } } @@ -3182,6 +3249,10 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx) return orig; + if (GET_CODE (XEXP (orig, 0)) == UNSPEC + && XINT (XEXP (orig, 0), 1) == UNSPEC_TLS) + return orig; + if (reg == 0) { gcc_assert (!no_new_pseudos); @@ -3277,6 +3348,7 @@ thumb_find_work_register (unsigned long pushed_regs_mask) gcc_unreachable (); } +static GTY(()) int pic_labelno; /* Generate code to load the PIC register. In thumb mode SCRATCH is a low register. */ @@ -3285,7 +3357,7 @@ void arm_load_pic_register (unsigned long saved_regs ATTRIBUTE_UNUSED) { #ifndef AOF_ASSEMBLER - rtx l1, pic_tmp, pic_tmp2, pic_rtx; + rtx l1, labelno, pic_tmp, pic_tmp2, pic_rtx; rtx global_offset_table; if (current_function_uses_pic_offset_table == 0 || TARGET_SINGLE_PIC_BASE) @@ -3293,12 +3365,17 @@ arm_load_pic_register (unsigned long saved_regs ATTRIBUTE_UNUSED) gcc_assert (flag_pic); - l1 = gen_label_rtx (); + /* We use an UNSPEC rather than a LABEL_REF because this label never appears + in the code stream. */ + + labelno = GEN_INT (pic_labelno++); + l1 = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, labelno), UNSPEC_PIC_LABEL); + l1 = gen_rtx_CONST (VOIDmode, l1); global_offset_table = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_"); /* On the ARM the PC register contains 'dot + 8' at the time of the addition, on the Thumb it is 'dot + 4'. */ - pic_tmp = plus_constant (gen_rtx_LABEL_REF (Pmode, l1), TARGET_ARM ? 8 : 4); + pic_tmp = plus_constant (l1, TARGET_ARM ? 8 : 4); if (GOT_PCREL) pic_tmp2 = gen_rtx_CONST (VOIDmode, gen_rtx_PLUS (Pmode, global_offset_table, pc_rtx)); @@ -3310,7 +3387,8 @@ arm_load_pic_register (unsigned long saved_regs ATTRIBUTE_UNUSED) if (TARGET_ARM) { emit_insn (gen_pic_load_addr_arm (pic_offset_table_rtx, pic_rtx)); - emit_insn (gen_pic_add_dot_plus_eight (pic_offset_table_rtx, l1)); + emit_insn (gen_pic_add_dot_plus_eight (pic_offset_table_rtx, + pic_offset_table_rtx, labelno)); } else { @@ -3325,7 +3403,8 @@ arm_load_pic_register (unsigned long saved_regs ATTRIBUTE_UNUSED) } else emit_insn (gen_pic_load_addr_thumb (pic_offset_table_rtx, pic_rtx)); - emit_insn (gen_pic_add_dot_plus_four (pic_offset_table_rtx, l1)); + emit_insn (gen_pic_add_dot_plus_four (pic_offset_table_rtx, + pic_offset_table_rtx, labelno)); } /* Need to emit this whether or not we obey regdecls, @@ -3355,6 +3434,19 @@ arm_address_register_rtx_p (rtx x, int strict_p) || regno == ARG_POINTER_REGNUM); } +/* Return TRUE if this rtx is the difference of a symbol and a label, + and will reduce to a PC-relative relocation in the object file. + Expressions like this can be left alone when generating PIC, rather + than forced through the GOT. */ +static int +pcrel_constant_p (rtx x) +{ + if (GET_CODE (x) == MINUS) + return symbol_mentioned_p (XEXP (x, 0)) && label_mentioned_p (XEXP (x, 1)); + + return FALSE; +} + /* Return nonzero if X is a valid ARM state address operand. */ int arm_legitimate_address_p (enum machine_mode mode, rtx x, RTX_CODE outer, @@ -3433,7 +3525,8 @@ arm_legitimate_address_p (enum machine_mode mode, rtx x, RTX_CODE outer, && code == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x) && ! (flag_pic - && symbol_mentioned_p (get_pool_constant (x)))) + && symbol_mentioned_p (get_pool_constant (x)) + && ! pcrel_constant_p (get_pool_constant (x)))) return 1; return 0; @@ -3658,8 +3751,9 @@ thumb_legitimate_address_p (enum machine_mode mode, rtx x, int strict_p) && GET_MODE_SIZE (mode) == 4 && GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x) - && !(flag_pic - && symbol_mentioned_p (get_pool_constant (x)))) + && ! (flag_pic + && symbol_mentioned_p (get_pool_constant (x)) + && ! pcrel_constant_p (get_pool_constant (x)))) return 1; return 0; @@ -3685,11 +3779,166 @@ thumb_legitimate_offset_p (enum machine_mode mode, HOST_WIDE_INT val) } } +/* Build the SYMBOL_REF for __tls_get_addr. */ + +static GTY(()) rtx tls_get_addr_libfunc; + +static rtx +get_tls_get_addr (void) +{ + if (!tls_get_addr_libfunc) + tls_get_addr_libfunc = init_one_libfunc ("__tls_get_addr"); + return tls_get_addr_libfunc; +} + +static rtx +arm_load_tp (rtx target) +{ + if (!target) + target = gen_reg_rtx (SImode); + + if (TARGET_HARD_TP) + { + /* Can return in any reg. */ + emit_insn (gen_load_tp_hard (target)); + } + else + { + /* Always returned in r0. Immediately copy the result into a pseudo, + otherwise other uses of r0 (e.g. setting up function arguments) may + clobber the value. */ + + rtx tmp; + + emit_insn (gen_load_tp_soft ()); + + tmp = gen_rtx_REG (SImode, 0); + emit_move_insn (target, tmp); + } + return target; +} + +static rtx +load_tls_operand (rtx x, rtx reg) +{ + rtx tmp; + + if (reg == NULL_RTX) + reg = gen_reg_rtx (SImode); + + tmp = gen_rtx_CONST (SImode, x); + + emit_move_insn (reg, tmp); + + return reg; +} + +static rtx +arm_call_tls_get_addr (rtx x, rtx reg, rtx *valuep, int reloc) +{ + rtx insns, label, labelno, sum; + + start_sequence (); + + labelno = GEN_INT (pic_labelno++); + label = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, labelno), UNSPEC_PIC_LABEL); + label = gen_rtx_CONST (VOIDmode, label); + + sum = gen_rtx_UNSPEC (Pmode, + gen_rtvec (4, x, GEN_INT (reloc), label, + GEN_INT (TARGET_ARM ? 8 : 4)), + UNSPEC_TLS); + reg = load_tls_operand (sum, reg); + + if (TARGET_ARM) + emit_insn (gen_pic_add_dot_plus_eight (reg, reg, labelno)); + else + emit_insn (gen_pic_add_dot_plus_four (reg, reg, labelno)); + + *valuep = emit_library_call_value (get_tls_get_addr (), NULL_RTX, LCT_PURE, /* LCT_CONST? */ + Pmode, 1, reg, Pmode); + + insns = get_insns (); + end_sequence (); + + return insns; +} + +rtx +legitimize_tls_address (rtx x, rtx reg) +{ + rtx dest, tp, label, labelno, sum, insns, ret, eqv, addend; + unsigned int model = SYMBOL_REF_TLS_MODEL (x); + + switch (model) + { + case TLS_MODEL_GLOBAL_DYNAMIC: + insns = arm_call_tls_get_addr (x, reg, &ret, TLS_GD32); + dest = gen_reg_rtx (Pmode); + emit_libcall_block (insns, dest, ret, x); + return dest; + + case TLS_MODEL_LOCAL_DYNAMIC: + insns = arm_call_tls_get_addr (x, reg, &ret, TLS_LDM32); + + /* Attach a unique REG_EQUIV, to allow the RTL optimizers to + share the LDM result with other LD model accesses. */ + eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const1_rtx), + UNSPEC_TLS); + dest = gen_reg_rtx (Pmode); + emit_libcall_block (insns, dest, ret, eqv); + + /* Load the addend. */ + addend = gen_rtx_UNSPEC (Pmode, gen_rtvec (2, x, GEN_INT (TLS_LDO32)), + UNSPEC_TLS); + addend = force_reg (SImode, gen_rtx_CONST (SImode, addend)); + return gen_rtx_PLUS (Pmode, dest, addend); + + case TLS_MODEL_INITIAL_EXEC: + labelno = GEN_INT (pic_labelno++); + label = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, labelno), UNSPEC_PIC_LABEL); + label = gen_rtx_CONST (VOIDmode, label); + sum = gen_rtx_UNSPEC (Pmode, + gen_rtvec (4, x, GEN_INT (TLS_IE32), label, + GEN_INT (TARGET_ARM ? 8 : 4)), + UNSPEC_TLS); + reg = load_tls_operand (sum, reg); + + if (TARGET_ARM) + emit_insn (gen_tls_load_dot_plus_eight (reg, reg, labelno)); + else + { + emit_insn (gen_pic_add_dot_plus_four (reg, reg, labelno)); + emit_move_insn (reg, gen_const_mem (SImode, reg)); + } + + tp = arm_load_tp (NULL_RTX); + + return gen_rtx_PLUS (Pmode, tp, reg); + + case TLS_MODEL_LOCAL_EXEC: + tp = arm_load_tp (NULL_RTX); + + reg = gen_rtx_UNSPEC (Pmode, + gen_rtvec (2, x, GEN_INT (TLS_LE32)), + UNSPEC_TLS); + reg = force_reg (SImode, gen_rtx_CONST (SImode, reg)); + + return gen_rtx_PLUS (Pmode, tp, reg); + + default: + abort (); + } +} + /* Try machine-dependent ways of modifying an illegitimate address to be legitimate. If we find one, return the new, valid address. */ rtx arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) { + if (arm_tls_symbol_p (x)) + return legitimize_tls_address (x, NULL_RTX); + if (GET_CODE (x) == PLUS) { rtx xop0 = XEXP (x, 0); @@ -3729,11 +3978,9 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) } base_reg = gen_reg_rtx (SImode); - val = force_operand (gen_rtx_PLUS (SImode, xop0, - GEN_INT (n)), NULL_RTX); + val = force_operand (plus_constant (xop0, n), NULL_RTX); emit_move_insn (base_reg, val); - x = (low_n == 0 ? base_reg - : gen_rtx_PLUS (SImode, base_reg, GEN_INT (low_n))); + x = plus_constant (base_reg, low_n); } else if (xop0 != XEXP (x, 0) || xop1 != XEXP (x, 1)) x = gen_rtx_PLUS (SImode, xop0, xop1); @@ -3781,7 +4028,7 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) index -= mask; } base_reg = force_reg (SImode, GEN_INT (base)); - x = gen_rtx_PLUS (SImode, base_reg, GEN_INT (index)); + x = plus_constant (base_reg, index); } if (flag_pic) @@ -3803,6 +4050,9 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) rtx thumb_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) { + if (arm_tls_symbol_p (x)) + return legitimize_tls_address (x, NULL_RTX); + if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT && (INTVAL (XEXP (x, 1)) >= 32 * GET_MODE_SIZE (mode) @@ -3907,6 +4157,50 @@ thumb_legitimize_reload_address (rtx *x_p, return NULL; } + +/* Test for various thread-local symbols. */ + +/* Return TRUE if X is a thread-local symbol. */ + +static bool +arm_tls_symbol_p (rtx x) +{ + if (! TARGET_HAVE_TLS) + return false; + + if (GET_CODE (x) != SYMBOL_REF) + return false; + + return SYMBOL_REF_TLS_MODEL (x) != 0; +} + +/* Helper for arm_tls_referenced_p. */ + +static int +arm_tls_operand_p_1 (rtx *x, void *data ATTRIBUTE_UNUSED) +{ + if (GET_CODE (*x) == SYMBOL_REF) + return SYMBOL_REF_TLS_MODEL (*x) != 0; + + /* Don't recurse into UNSPEC_TLS looking for TLS symbols; these are + TLS offsets, not real symbol references. */ + if (GET_CODE (*x) == UNSPEC + && XINT (*x, 1) == UNSPEC_TLS) + return -1; + + return 0; +} + +/* Return TRUE if X contains any TLS symbol references. */ + +bool +arm_tls_referenced_p (rtx x) +{ + if (! TARGET_HAVE_TLS) + return false; + + return for_each_rtx (&x, arm_tls_operand_p_1, NULL); +} #define REG_OR_SUBREG_REG(X) \ (GET_CODE (X) == REG \ @@ -5278,6 +5572,11 @@ symbol_mentioned_p (rtx x) if (GET_CODE (x) == SYMBOL_REF) return 1; + /* UNSPEC_TLS entries for a symbol include the SYMBOL_REF, but they + are constant offsets, not symbols. */ + if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLS) + return 0; + fmt = GET_RTX_FORMAT (GET_CODE (x)); for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) @@ -5307,6 +5606,11 @@ label_mentioned_p (rtx x) if (GET_CODE (x) == LABEL_REF) return 1; + /* UNSPEC_TLS entries for a symbol include a LABEL_REF for the referencing + instruction, but they are constant offsets, not symbols. */ + if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLS) + return 0; + fmt = GET_RTX_FORMAT (GET_CODE (x)); for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) { @@ -5325,6 +5629,48 @@ label_mentioned_p (rtx x) return 0; } +int +tls_mentioned_p (rtx x) +{ + switch (GET_CODE (x)) + { + case CONST: + return tls_mentioned_p (XEXP (x, 0)); + + case UNSPEC: + if (XINT (x, 1) == UNSPEC_TLS) + return 1; + + default: + return 0; + } +} + +/* Must not copy a SET whose source operand is PC-relative. */ + +static bool +arm_cannot_copy_insn_p (rtx insn) +{ + rtx pat = PATTERN (insn); + + if (GET_CODE (pat) == PARALLEL + && GET_CODE (XVECEXP (pat, 0, 0)) == SET) + { + rtx rhs = SET_SRC (XVECEXP (pat, 0, 0)); + + if (GET_CODE (rhs) == UNSPEC + && XINT (rhs, 1) == UNSPEC_PIC_BASE) + return TRUE; + + if (GET_CODE (rhs) == MEM + && GET_CODE (XEXP (rhs, 0)) == UNSPEC + && XINT (XEXP (rhs, 0), 1) == UNSPEC_PIC_BASE) + return TRUE; + } + + return FALSE; +} + enum rtx_code minmax_code (rtx x) { @@ -5811,7 +6157,6 @@ emit_stm_seq (rtx *operands, int nops) output_asm_insn (buf, operands); return ""; } - /* Routines for use in generating RTL. */ @@ -5884,8 +6229,7 @@ arm_gen_load_multiple (int base_regno, int count, rtx from, int up, if (write_back) { XVECEXP (result, 0, 0) - = gen_rtx_SET (GET_MODE (from), from, - plus_constant (from, count * 4 * sign)); + = gen_rtx_SET (VOIDmode, from, plus_constant (from, count * 4 * sign)); i = 1; count++; } @@ -5948,7 +6292,7 @@ arm_gen_store_multiple (int base_regno, int count, rtx to, int up, if (write_back) { XVECEXP (result, 0, 0) - = gen_rtx_SET (GET_MODE (to), to, + = gen_rtx_SET (VOIDmode, to, plus_constant (to, count * 4 * sign)); i = 1; count++; @@ -6398,8 +6742,7 @@ arm_gen_compare_reg (enum rtx_code code, rtx x, rtx y) enum machine_mode mode = SELECT_CC_MODE (code, x, y); rtx cc_reg = gen_rtx_REG (mode, CC_REGNUM); - emit_insn (gen_rtx_SET (VOIDmode, cc_reg, - gen_rtx_COMPARE (mode, x, y))); + emit_set_insn (cc_reg, gen_rtx_COMPARE (mode, x, y)); return cc_reg; } @@ -6453,7 +6796,7 @@ arm_reload_in_hi (rtx *operands) { rtx base_plus = gen_rtx_REG (SImode, REGNO (operands[2]) + 1); - emit_insn (gen_rtx_SET (VOIDmode, base_plus, base)); + emit_set_insn (base_plus, base); base = base_plus; } else if (GET_CODE (base) == PLUS) @@ -6511,20 +6854,19 @@ arm_reload_in_hi (rtx *operands) plus_constant (base, offset + 1)))); if (!BYTES_BIG_ENDIAN) - emit_insn (gen_rtx_SET (VOIDmode, gen_rtx_SUBREG (SImode, operands[0], 0), - gen_rtx_IOR (SImode, - gen_rtx_ASHIFT - (SImode, - gen_rtx_SUBREG (SImode, operands[0], 0), - GEN_INT (8)), - scratch))); + emit_set_insn (gen_rtx_SUBREG (SImode, operands[0], 0), + gen_rtx_IOR (SImode, + gen_rtx_ASHIFT + (SImode, + gen_rtx_SUBREG (SImode, operands[0], 0), + GEN_INT (8)), + scratch)); else - emit_insn (gen_rtx_SET (VOIDmode, gen_rtx_SUBREG (SImode, operands[0], 0), - gen_rtx_IOR (SImode, - gen_rtx_ASHIFT (SImode, scratch, - GEN_INT (8)), - gen_rtx_SUBREG (SImode, operands[0], - 0)))); + emit_set_insn (gen_rtx_SUBREG (SImode, operands[0], 0), + gen_rtx_IOR (SImode, + gen_rtx_ASHIFT (SImode, scratch, + GEN_INT (8)), + gen_rtx_SUBREG (SImode, operands[0], 0))); } /* Handle storing a half-word to memory during reload by synthesizing as two @@ -6599,7 +6941,7 @@ arm_reload_out_hi (rtx *operands) } } - emit_insn (gen_rtx_SET (VOIDmode, base_plus, base)); + emit_set_insn (base_plus, base); base = base_plus; } else if (GET_CODE (base) == PLUS) @@ -8106,8 +8448,7 @@ vfp_emit_fstmx (int base_reg, int count) UNSPEC_PUSH_MULT)); tmp = gen_rtx_SET (VOIDmode, stack_pointer_rtx, - gen_rtx_PLUS (SImode, stack_pointer_rtx, - GEN_INT (-(count * 8 + 4)))); + plus_constant (stack_pointer_rtx, -(count * 8 + 4))); RTX_FRAME_RELATED_P (tmp) = 1; XVECEXP (dwarf, 0, 0) = tmp; @@ -8125,9 +8466,8 @@ vfp_emit_fstmx (int base_reg, int count) tmp = gen_rtx_SET (VOIDmode, gen_frame_mem (DFmode, - gen_rtx_PLUS (SImode, - stack_pointer_rtx, - GEN_INT (i * 8))), + plus_constant (stack_pointer_rtx, + i * 8)), reg); RTX_FRAME_RELATED_P (tmp) = 1; XVECEXP (dwarf, 0, i + 1) = tmp; @@ -9868,11 +10208,9 @@ emit_multi_reg_push (unsigned long mask) par = emit_insn (par); - tmp = gen_rtx_SET (SImode, + tmp = gen_rtx_SET (VOIDmode, stack_pointer_rtx, - gen_rtx_PLUS (SImode, - stack_pointer_rtx, - GEN_INT (-4 * num_regs))); + plus_constant (stack_pointer_rtx, -4 * num_regs)); RTX_FRAME_RELATED_P (tmp) = 1; XVECEXP (dwarf, 0, 0) = tmp; @@ -9937,9 +10275,8 @@ emit_sfm (int base_reg, int count) tmp = gen_rtx_SET (VOIDmode, stack_pointer_rtx, - gen_rtx_PLUS (SImode, - stack_pointer_rtx, - GEN_INT (-12 * count))); + plus_constant (stack_pointer_rtx, -12 * count)); + RTX_FRAME_RELATED_P (tmp) = 1; XVECEXP (dwarf, 0, 0) = tmp; @@ -10272,25 +10609,19 @@ arm_expand_prologue (void) inherited from the caller. */ if (regs_ever_live[3] == 0) - { - insn = gen_rtx_REG (SImode, 3); - insn = gen_rtx_SET (SImode, insn, ip_rtx); - insn = emit_insn (insn); - } + insn = emit_set_insn (gen_rtx_REG (SImode, 3), ip_rtx); else if (args_to_push == 0) { rtx dwarf; - insn = gen_rtx_PRE_DEC (SImode, stack_pointer_rtx); - insn = gen_frame_mem (SImode, insn); - insn = gen_rtx_SET (VOIDmode, insn, ip_rtx); - insn = emit_insn (insn); + insn = gen_rtx_PRE_DEC (SImode, stack_pointer_rtx); + insn = emit_set_insn (gen_frame_mem (SImode, insn), ip_rtx); fp_offset = 4; /* Just tell the dwarf backend that we adjusted SP. */ dwarf = gen_rtx_SET (VOIDmode, stack_pointer_rtx, - gen_rtx_PLUS (SImode, stack_pointer_rtx, - GEN_INT (-fp_offset))); + plus_constant (stack_pointer_rtx, + -fp_offset)); RTX_FRAME_RELATED_P (insn) = 1; REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, dwarf, REG_NOTES (insn)); @@ -10313,21 +10644,12 @@ arm_expand_prologue (void) args_to_push = 0; /* Now reuse r3 to preserve IP. */ - insn = gen_rtx_REG (SImode, 3); - insn = gen_rtx_SET (SImode, insn, ip_rtx); - (void) emit_insn (insn); + emit_set_insn (gen_rtx_REG (SImode, 3), ip_rtx); } } - if (fp_offset) - { - insn = gen_rtx_PLUS (SImode, stack_pointer_rtx, GEN_INT (fp_offset)); - insn = gen_rtx_SET (SImode, ip_rtx, insn); - } - else - insn = gen_movsi (ip_rtx, stack_pointer_rtx); - - insn = emit_insn (insn); + insn = emit_set_insn (ip_rtx, + plus_constant (stack_pointer_rtx, fp_offset)); RTX_FRAME_RELATED_P (insn) = 1; } @@ -10352,11 +10674,11 @@ arm_expand_prologue (void) if ((func_type == ARM_FT_ISR || func_type == ARM_FT_FIQ) && (live_regs_mask & (1 << LR_REGNUM)) != 0 && ! frame_pointer_needed) - emit_insn (gen_rtx_SET (SImode, - gen_rtx_REG (SImode, LR_REGNUM), - gen_rtx_PLUS (SImode, - gen_rtx_REG (SImode, LR_REGNUM), - GEN_INT (-4)))); + { + rtx lr = gen_rtx_REG (SImode, LR_REGNUM); + + emit_set_insn (lr, plus_constant (lr, -4)); + } if (live_regs_mask) { @@ -10371,8 +10693,7 @@ arm_expand_prologue (void) { insn = gen_rtx_PRE_DEC (V2SImode, stack_pointer_rtx); insn = gen_frame_mem (V2SImode, insn); - insn = emit_insn (gen_rtx_SET (VOIDmode, insn, - gen_rtx_REG (V2SImode, reg))); + insn = emit_set_insn (insn, gen_rtx_REG (V2SImode, reg)); RTX_FRAME_RELATED_P (insn) = 1; saved_regs += 8; } @@ -10390,8 +10711,7 @@ arm_expand_prologue (void) { insn = gen_rtx_PRE_DEC (XFmode, stack_pointer_rtx); insn = gen_frame_mem (XFmode, insn); - insn = emit_insn (gen_rtx_SET (VOIDmode, insn, - gen_rtx_REG (XFmode, reg))); + insn = emit_set_insn (insn, gen_rtx_REG (XFmode, reg)); RTX_FRAME_RELATED_P (insn) = 1; saved_regs += 12; } @@ -10467,12 +10787,11 @@ arm_expand_prologue (void) insn = gen_rtx_REG (SImode, 3); else /* if (current_function_pretend_args_size == 0) */ { - insn = gen_rtx_PLUS (SImode, hard_frame_pointer_rtx, - GEN_INT (4)); + insn = plus_constant (hard_frame_pointer_rtx, 4); insn = gen_frame_mem (SImode, insn); } - emit_insn (gen_rtx_SET (SImode, ip_rtx, insn)); + emit_set_insn (ip_rtx, insn); /* Add a USE to stop propagate_one_insn() from barfing. */ emit_insn (gen_prologue_use (ip_rtx)); } @@ -10511,8 +10830,11 @@ arm_expand_prologue (void) /* If we are profiling, make sure no instructions are scheduled before the call to mcount. Similarly if the user has requested no - scheduling in the prolog. */ - if (current_function_profile || !TARGET_SCHED_PROLOG) + scheduling in the prolog. Similarly if we want non-call exceptions + using the EABI unwinder, to prevent faulting instructions from being + swapped with a stack adjustment. */ + if (current_function_profile || !TARGET_SCHED_PROLOG + || (ARM_EABI_UNWIND_TABLES && flag_non_call_exceptions)) emit_insn (gen_blockage ()); /* If the link register is being kept alive, with the return address in it, @@ -11476,7 +11798,9 @@ int arm_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode) { if (GET_MODE_CLASS (mode) == MODE_CC) - return regno == CC_REGNUM || regno == VFPCC_REGNUM; + return (regno == CC_REGNUM + || (TARGET_HARD_FLOAT && TARGET_VFP + && regno == VFPCC_REGNUM)); if (TARGET_THUMB) /* For the Thumb we only allow values bigger than SImode in @@ -11486,7 +11810,8 @@ arm_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode) start of an even numbered register pair. */ return (ARM_NUM_REGS (mode) < 2) || (regno < LAST_LO_REGNUM); - if (IS_CIRRUS_REGNUM (regno)) + if (TARGET_HARD_FLOAT && TARGET_MAVERICK + && IS_CIRRUS_REGNUM (regno)) /* We have outlawed SI values in Cirrus registers because they reside in the lower 32 bits, but SF values reside in the upper 32 bits. This causes gcc all sorts of grief. We can't @@ -11494,7 +11819,8 @@ arm_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode) get sign extended to 64bits-- aldyh. */ return (GET_MODE_CLASS (mode) == MODE_FLOAT) || (mode == DImode); - if (IS_VFP_REGNUM (regno)) + if (TARGET_HARD_FLOAT && TARGET_VFP + && IS_VFP_REGNUM (regno)) { if (mode == SFmode || mode == SImode) return TRUE; @@ -11505,28 +11831,32 @@ arm_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode) return FALSE; } - if (IS_IWMMXT_GR_REGNUM (regno)) - return mode == SImode; - - if (IS_IWMMXT_REGNUM (regno)) - return VALID_IWMMXT_REG_MODE (mode); + if (TARGET_REALLY_IWMMXT) + { + if (IS_IWMMXT_GR_REGNUM (regno)) + return mode == SImode; + if (IS_IWMMXT_REGNUM (regno)) + return VALID_IWMMXT_REG_MODE (mode); + } + /* We allow any value to be stored in the general registers. Restrict doubleword quantities to even register pairs so that we can use ldrd. */ if (regno <= LAST_ARM_REGNUM) return !(TARGET_LDRD && GET_MODE_SIZE (mode) > 4 && (regno & 1) != 0); - if ( regno == FRAME_POINTER_REGNUM + if (regno == FRAME_POINTER_REGNUM || regno == ARG_POINTER_REGNUM) /* We only allow integers in the fake hard registers. */ return GET_MODE_CLASS (mode) == MODE_INT; /* The only registers left are the FPA registers which we only allow to hold FP values. */ - return GET_MODE_CLASS (mode) == MODE_FLOAT - && regno >= FIRST_FPA_REGNUM - && regno <= LAST_FPA_REGNUM; + return (TARGET_HARD_FLOAT && TARGET_FPA + && GET_MODE_CLASS (mode) == MODE_FLOAT + && regno >= FIRST_FPA_REGNUM + && regno <= LAST_FPA_REGNUM); } int @@ -12119,8 +12449,23 @@ arm_init_iwmmxt_builtins (void) } static void +arm_init_tls_builtins (void) +{ + tree ftype; + tree nothrow = tree_cons (get_identifier ("nothrow"), NULL, NULL); + tree const_nothrow = tree_cons (get_identifier ("const"), NULL, nothrow); + + ftype = build_function_type (ptr_type_node, void_list_node); + lang_hooks.builtin_function ("__builtin_thread_pointer", ftype, + ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD, + NULL, const_nothrow); +} + +static void arm_init_builtins (void) { + arm_init_tls_builtins (); + if (TARGET_REALLY_IWMMXT) arm_init_iwmmxt_builtins (); } @@ -12425,6 +12770,9 @@ arm_expand_builtin (tree exp, emit_insn (gen_iwmmxt_clrdi (target)); return target; + case ARM_BUILTIN_THREAD_POINTER: + return arm_load_tp (target); + default: break; } @@ -13297,7 +13645,7 @@ thumb_expand_prologue (void) insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg)); RTX_FRAME_RELATED_P (insn) = 1; - dwarf = gen_rtx_SET (SImode, stack_pointer_rtx, + dwarf = gen_rtx_SET (VOIDmode, stack_pointer_rtx, plus_constant (stack_pointer_rtx, -amount)); RTX_FRAME_RELATED_P (dwarf) = 1; @@ -13323,7 +13671,7 @@ thumb_expand_prologue (void) insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg)); RTX_FRAME_RELATED_P (insn) = 1; - dwarf = gen_rtx_SET (SImode, stack_pointer_rtx, + dwarf = gen_rtx_SET (VOIDmode, stack_pointer_rtx, plus_constant (stack_pointer_rtx, -amount)); RTX_FRAME_RELATED_P (dwarf) = 1; @@ -13347,7 +13695,7 @@ thumb_expand_prologue (void) insn = emit_insn (gen_addsi3 (hard_frame_pointer_rtx, hard_frame_pointer_rtx, stack_pointer_rtx)); - dwarf = gen_rtx_SET (SImode, hard_frame_pointer_rtx, + dwarf = gen_rtx_SET (VOIDmode, hard_frame_pointer_rtx, plus_constant (stack_pointer_rtx, amount)); RTX_FRAME_RELATED_P (dwarf) = 1; REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, dwarf, @@ -13357,7 +13705,13 @@ thumb_expand_prologue (void) RTX_FRAME_RELATED_P (insn) = 1; } - if (current_function_profile || !TARGET_SCHED_PROLOG) + /* If we are profiling, make sure no instructions are scheduled before + the call to mcount. Similarly if the user has requested no + scheduling in the prolog. Similarly if we want non-call exceptions + using the EABI unwinder, to prevent faulting instructions from being + swapped with a stack adjustment. */ + if (current_function_profile || !TARGET_SCHED_PROLOG + || (ARM_EABI_UNWIND_TABLES && flag_non_call_exceptions)) emit_insn (gen_blockage ()); cfun->machine->lr_save_eliminated = !thumb_force_lr_save (); @@ -14224,6 +14578,8 @@ arm_encode_section_info (tree decl, rtx rtl, int first) else if (! TREE_PUBLIC (decl)) arm_encode_call_attribute (decl, SHORT_CALL_FLAG_CHAR); } + + default_encode_section_info (decl, rtl, first); } #endif /* !ARM_PE */ @@ -15025,3 +15381,76 @@ arm_output_fn_unwind (FILE * f, bool prologue) else fputs ("\t.fnend\n", f); } + +static bool +arm_emit_tls_decoration (FILE *fp, rtx x) +{ + enum tls_reloc reloc; + rtx val; + + val = XVECEXP (x, 0, 0); + reloc = INTVAL (XVECEXP (x, 0, 1)); + + output_addr_const (fp, val); + + switch (reloc) + { + case TLS_GD32: + fputs ("(tlsgd)", fp); + break; + case TLS_LDM32: + fputs ("(tlsldm)", fp); + break; + case TLS_LDO32: + fputs ("(tlsldo)", fp); + break; + case TLS_IE32: + fputs ("(gottpoff)", fp); + break; + case TLS_LE32: + fputs ("(tpoff)", fp); + break; + default: + gcc_unreachable (); + } + + switch (reloc) + { + case TLS_GD32: + case TLS_LDM32: + case TLS_IE32: + fputs (" + (. - ", fp); + output_addr_const (fp, XVECEXP (x, 0, 2)); + fputs (" - ", fp); + output_addr_const (fp, XVECEXP (x, 0, 3)); + fputc (')', fp); + break; + default: + break; + } + + return TRUE; +} + +bool +arm_output_addr_const_extra (FILE *fp, rtx x) +{ + if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLS) + return arm_emit_tls_decoration (fp, x); + else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_PIC_LABEL) + { + char label[256]; + int labelno = INTVAL (XVECEXP (x, 0, 0)); + + ASM_GENERATE_INTERNAL_LABEL (label, "LPIC", labelno); + assemble_name_raw (fp, label); + + return TRUE; + } + else if (GET_CODE (x) == CONST_VECTOR) + return arm_emit_vector_const (fp, x); + + return FALSE; +} + +#include "gt-arm.h" diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index ae13a9d92b1..2bca1538dc1 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -192,6 +192,9 @@ extern GTY(()) rtx aof_pic_label; #define TARGET_AAPCS_BASED \ (arm_abi != ARM_ABI_APCS && arm_abi != ARM_ABI_ATPCS) +#define TARGET_HARD_TP (target_thread_pointer == TP_CP15) +#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT) + /* True iff the full BPABI is being used. If TARGET_BPABI is true, then TARGET_AAPCS_BASED must be true -- but the converse does not hold. TARGET_BPABI implies the use of the BPABI runtime library, @@ -289,6 +292,15 @@ extern enum arm_abi_type arm_abi; #define ARM_DEFAULT_ABI ARM_ABI_APCS #endif +/* Which thread pointer access sequence to use. */ +enum arm_tp_type { + TP_AUTO, + TP_SOFT, + TP_CP15 +}; + +extern enum arm_tp_type target_thread_pointer; + /* Nonzero if this chip supports the ARM Architecture 3M extensions. */ extern int arm_arch3m; @@ -1882,8 +1894,10 @@ typedef struct || CONSTANT_ADDRESS_P (X) \ || flag_pic) -#define LEGITIMATE_CONSTANT_P(X) \ - (TARGET_ARM ? ARM_LEGITIMATE_CONSTANT_P (X) : THUMB_LEGITIMATE_CONSTANT_P (X)) +#define LEGITIMATE_CONSTANT_P(X) \ + (!arm_tls_referenced_p (X) \ + && (TARGET_ARM ? ARM_LEGITIMATE_CONSTANT_P (X) \ + : THUMB_LEGITIMATE_CONSTANT_P (X))) /* Special characters prefixed to function names in order to encode attribute like information. @@ -2199,14 +2213,16 @@ extern int arm_pic_register; #define PIC_OFFSET_TABLE_REGNUM arm_pic_register /* We can't directly access anything that contains a symbol, - nor can we indirect via the constant pool. */ + nor can we indirect via the constant pool. One exception is + UNSPEC_TLS, which is always PIC. */ #define LEGITIMATE_PIC_OPERAND_P(X) \ (!(symbol_mentioned_p (X) \ || label_mentioned_p (X) \ || (GET_CODE (X) == SYMBOL_REF \ && CONSTANT_POOL_ADDRESS_P (X) \ && (symbol_mentioned_p (get_pool_constant (X)) \ - || label_mentioned_p (get_pool_constant (X)))))) + || label_mentioned_p (get_pool_constant (X))))) \ + || tls_mentioned_p (X)) /* We need to know when we are making a constant pool; this determines whether data needs to be in the GOT or can be referenced via a GOT @@ -2487,10 +2503,9 @@ extern int making_const_table; else \ THUMB_PRINT_OPERAND_ADDRESS (STREAM, X) -#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL) \ - if (GET_CODE (X) != CONST_VECTOR \ - || ! arm_emit_vector_const (FILE, X)) \ - goto FAIL; +#define OUTPUT_ADDR_CONST_EXTRA(file, x, fail) \ + if (arm_output_addr_const_extra (file, x) == FALSE) \ + goto fail /* A C expression whose value is RTL representing the value of the return address for the frame COUNT steps up from the current frame. */ @@ -2682,6 +2697,8 @@ enum arm_builtins ARM_BUILTIN_WUNPCKELUH, ARM_BUILTIN_WUNPCKELUW, + ARM_BUILTIN_THREAD_POINTER, + ARM_BUILTIN_MAX }; #endif /* ! GCC_ARM_H */ diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 76eb12b5fad..aa28c3fae77 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -90,6 +90,9 @@ (UNSPEC_CLRDI 17) ; Used by the intrinsic form of the iWMMXt CLRDI instruction. (UNSPEC_WMADDS 18) ; Used by the intrinsic form of the iWMMXt WMADDS instruction. (UNSPEC_WMADDU 19) ; Used by the intrinsic form of the iWMMXt WMADDU instruction. + (UNSPEC_TLS 20) ; A symbol that has been treated properly for TLS usage. + (UNSPEC_PIC_LABEL 21) ; A label used for PIC access that does not appear in the + ; instruction stream. ] ) @@ -4280,13 +4283,37 @@ operands[1] = force_reg (SImode, operands[1]); } } - - if (flag_pic - && (CONSTANT_P (operands[1]) - || symbol_mentioned_p (operands[1]) - || label_mentioned_p (operands[1]))) - operands[1] = legitimize_pic_address (operands[1], SImode, - (no_new_pseudos ? operands[0] : 0)); + + /* Recognize the case where operand[1] is a reference to thread-local + data and load its address to a register. */ + if (arm_tls_referenced_p (operands[1])) + { + rtx tmp = operands[1]; + rtx addend = NULL; + + if (GET_CODE (tmp) == CONST && GET_CODE (XEXP (tmp, 0)) == PLUS) + { + addend = XEXP (XEXP (tmp, 0), 1); + tmp = XEXP (XEXP (tmp, 0), 0); + } + + gcc_assert (GET_CODE (tmp) == SYMBOL_REF); + gcc_assert (SYMBOL_REF_TLS_MODEL (tmp) != 0); + + tmp = legitimize_tls_address (tmp, no_new_pseudos ? operands[0] : 0); + if (addend) + { + tmp = gen_rtx_PLUS (SImode, tmp, addend); + tmp = force_operand (tmp, operands[0]); + } + operands[1] = tmp; + } + else if (flag_pic + && (CONSTANT_P (operands[1]) + || symbol_mentioned_p (operands[1]) + || label_mentioned_p (operands[1]))) + operands[1] = legitimize_pic_address (operands[1], SImode, + (no_new_pseudos ? operands[0] : 0)); " ) @@ -4439,35 +4466,70 @@ ) (define_insn "pic_add_dot_plus_four" - [(set (match_operand:SI 0 "register_operand" "+r") - (unspec:SI [(plus:SI (match_dup 0) + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec:SI [(plus:SI (match_operand:SI 1 "register_operand" "0") (const (plus:SI (pc) (const_int 4))))] UNSPEC_PIC_BASE)) - (use (label_ref (match_operand 1 "" "")))] - "TARGET_THUMB && flag_pic" + (use (match_operand 2 "" ""))] + "TARGET_THUMB" "* - (*targetm.asm_out.internal_label) (asm_out_file, \"L\", - CODE_LABEL_NUMBER (operands[1])); + (*targetm.asm_out.internal_label) (asm_out_file, \"LPIC\", + INTVAL (operands[2])); return \"add\\t%0, %|pc\"; " [(set_attr "length" "2")] ) (define_insn "pic_add_dot_plus_eight" - [(set (match_operand:SI 0 "register_operand" "+r") - (unspec:SI [(plus:SI (match_dup 0) + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec:SI [(plus:SI (match_operand:SI 1 "register_operand" "r") (const (plus:SI (pc) (const_int 8))))] UNSPEC_PIC_BASE)) - (use (label_ref (match_operand 1 "" "")))] - "TARGET_ARM && flag_pic" + (use (match_operand 2 "" ""))] + "TARGET_ARM" "* - (*targetm.asm_out.internal_label) (asm_out_file, \"L\", - CODE_LABEL_NUMBER (operands[1])); - return \"add%?\\t%0, %|pc, %0\"; + (*targetm.asm_out.internal_label) (asm_out_file, \"LPIC\", + INTVAL (operands[2])); + return \"add%?\\t%0, %|pc, %1\"; " [(set_attr "predicable" "yes")] ) +(define_insn "tls_load_dot_plus_eight" + [(set (match_operand:SI 0 "register_operand" "+r") + (mem:SI (unspec:SI [(plus:SI (match_operand:SI 1 "register_operand" "r") + (const (plus:SI (pc) (const_int 8))))] + UNSPEC_PIC_BASE))) + (use (match_operand 2 "" ""))] + "TARGET_ARM" + "* + (*targetm.asm_out.internal_label) (asm_out_file, \"LPIC\", + INTVAL (operands[2])); + return \"ldr%?\\t%0, [%|pc, %1]\t\t@ tls_load_dot_plus_eight\"; + " + [(set_attr "predicable" "yes")] +) + +;; PIC references to local variables can generate pic_add_dot_plus_eight +;; followed by a load. These sequences can be crunched down to +;; tls_load_dot_plus_eight by a peephole. + +(define_peephole2 + [(parallel [(set (match_operand:SI 0 "register_operand" "") + (unspec:SI [(plus:SI (match_operand:SI 3 "register_operand" "") + (const (plus:SI (pc) (const_int 8))))] + UNSPEC_PIC_BASE)) + (use (label_ref (match_operand 1 "" "")))]) + (set (match_operand:SI 2 "register_operand" "") (mem:SI (match_dup 0)))] + "TARGET_ARM && peep2_reg_dead_p (2, operands[0])" + [(parallel [(set (match_dup 2) + (mem:SI (unspec:SI [(plus:SI (match_dup 3) + (const (plus:SI (pc) (const_int 8))))] + UNSPEC_PIC_BASE))) + (use (label_ref (match_dup 1)))])] + "" +) + (define_expand "builtin_setjmp_receiver" [(label_ref (match_operand 0 "" ""))] "flag_pic" @@ -5075,11 +5137,12 @@ " ) +;; Transform a floating-point move of a constant into a core register into +;; an SImode operation. (define_split - [(set (match_operand:SF 0 "nonimmediate_operand" "") + [(set (match_operand:SF 0 "arm_general_register_operand" "") (match_operand:SF 1 "immediate_operand" ""))] "TARGET_ARM - && !(TARGET_HARD_FLOAT && TARGET_FPA) && reload_completed && GET_CODE (operands[1]) == CONST_DOUBLE" [(set (match_dup 2) (match_dup 3))] @@ -10080,6 +10143,28 @@ }" ) + +;; TLS support + +(define_insn "load_tp_hard" + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec:SI [(const_int 0)] UNSPEC_TLS))] + "TARGET_HARD_TP" + "mrc%?\\tp15, 0, %0, c13, c0, 3\\t@ load_tp_hard" + [(set_attr "predicable" "yes")] +) + +;; Doesn't clobber R1-R3. Must use r0 for the first operand. +(define_insn "load_tp_soft" + [(set (reg:SI 0) (unspec:SI [(const_int 0)] UNSPEC_TLS)) + (clobber (reg:SI LR_REGNUM)) + (clobber (reg:SI IP_REGNUM)) + (clobber (reg:CC CC_REGNUM))] + "TARGET_SOFT_TP" + "bl\\t__aeabi_read_tp\\t@ load_tp_soft" + [(set_attr "conds" "clob")] +) + ;; Load the FPA co-processor patterns (include "fpa.md") ;; Load the Maverick co-processor patterns diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt index a13aa175330..ac497d96186 100644 --- a/gcc/config/arm/arm.opt +++ b/gcc/config/arm/arm.opt @@ -134,6 +134,10 @@ mthumb-interwork Target Report Mask(INTERWORK) Support calls between Thumb and ARM instruction sets +mtp= +Target RejectNegative Joined Var(target_thread_switch) +Specify how to access the thread pointer + mtpcs-frame Target Report Mask(TPCS_FRAME) Thumb: Generate (non-leaf) stack frames even if not needed diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm index 952eb562a92..8494a973bfa 100644 --- a/gcc/config/arm/lib1funcs.asm +++ b/gcc/config/arm/lib1funcs.asm @@ -989,29 +989,15 @@ LSYM(Lover12): #ifdef L_dvmd_lnx @ GNU/Linux division-by zero handler. Used in place of L_dvmd_tls -/* Constants taken from and */ +/* Constant taken from . */ #define SIGFPE 8 -#define __NR_SYSCALL_BASE 0x900000 -#define __NR_getpid (__NR_SYSCALL_BASE+ 20) -#define __NR_kill (__NR_SYSCALL_BASE+ 37) -#define __NR_gettid (__NR_SYSCALL_BASE+ 224) -#define __NR_tkill (__NR_SYSCALL_BASE+ 238) .code 32 FUNC_START div0 stmfd sp!, {r1, lr} - swi __NR_gettid - cmn r0, #1000 - swihs __NR_getpid - cmnhs r0, #1000 - RETLDM r1 hs - mov ip, r0 - mov r1, #SIGFPE - swi __NR_tkill - movs r0, r0 - movne r0, ip - swine __NR_kill + mov r0, #SIGFPE + bl SYM(raise) __PLT__ RETLDM r1 FUNC_END div0 @@ -1315,5 +1301,4 @@ LSYM(Lchange_\register): #include "ieee754-df.S" #include "ieee754-sf.S" #include "bpabi.S" -#include "libunwind.S" #endif /* __symbian__ */ diff --git a/gcc/config/arm/libunwind.S b/gcc/config/arm/libunwind.S index 96044f85853..06e13107d2a 100644 --- a/gcc/config/arm/libunwind.S +++ b/gcc/config/arm/libunwind.S @@ -1,5 +1,5 @@ /* Support functions for the unwinder. - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Paul Brook This file is free software; you can redistribute it and/or modify it @@ -26,7 +26,9 @@ the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifdef L_unwind +#ifndef __symbian__ + +#include "lib1funcs.asm" .macro UNPREFIX name .global SYM (\name) @@ -76,7 +78,7 @@ ARM_FUNC_START gnu_Unwind_Save_VFP /* Wrappers to save core registers, then call the real routine. */ -.macro UNWIND_WRAPPER name +.macro UNWIND_WRAPPER name nargs ARM_FUNC_START \name /* Create a phase2_vrs structure. */ /* Split reg push in two to ensure the correct value for sp. */ @@ -87,8 +89,8 @@ ARM_FUNC_START gnu_Unwind_Save_VFP mov r3, #0 stmfd sp!, {r2, r3} - /* Point r1 at the block. Pass r0 unchanged. */ - add r1, sp, #4 + /* Point r1 at the block. Pass r[0..nargs) unchanged. */ + add r\nargs, sp, #4 #if defined(__thumb__) /* Switch back to thumb mode to avoid interworking hassle. */ adr ip, .L1_\name @@ -110,7 +112,9 @@ ARM_FUNC_START gnu_Unwind_Save_VFP UNPREFIX \name .endm -UNWIND_WRAPPER _Unwind_RaiseException -UNWIND_WRAPPER _Unwind_Resume +UNWIND_WRAPPER _Unwind_RaiseException 1 +UNWIND_WRAPPER _Unwind_Resume 1 +UNWIND_WRAPPER _Unwind_Resume_or_Rethrow 1 +UNWIND_WRAPPER _Unwind_ForcedUnwind 3 -#endif /* L_unwind */ +#endif /* __symbian__ */ diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h index 62aa6dd10a1..6cd0989c8c5 100644 --- a/gcc/config/arm/linux-eabi.h +++ b/gcc/config/arm/linux-eabi.h @@ -1,5 +1,5 @@ /* Configuration file for ARM GNU/Linux EABI targets. - Copyright (C) 2004 + Copyright (C) 2004, 2005 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC @@ -68,3 +68,18 @@ non-AAPCS. */ #undef WCHAR_TYPE #define WCHAR_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long int") + +/* Clear the instruction cache from `beg' to `end'. This makes an + inline system call to SYS_cacheflush. It is modified to work with + both the original and EABI-only syscall interfaces. */ +#undef CLEAR_INSN_CACHE +#define CLEAR_INSN_CACHE(BEG, END) \ +{ \ + register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \ + register unsigned long _end __asm ("a2") = (unsigned long) (END); \ + register unsigned long _flg __asm ("a3") = 0; \ + register unsigned long _scno __asm ("r7") = 0xf0002; \ + __asm __volatile ("swi 0x9f0002 @ sys_cacheflush" \ + : "=r" (_beg) \ + : "0" (_beg), "r" (_end), "r" (_flg), "r" (_scno)); \ +} diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h index 15354e5ba0d..c3ae2bed2e8 100644 --- a/gcc/config/arm/linux-elf.h +++ b/gcc/config/arm/linux-elf.h @@ -71,11 +71,6 @@ do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/arm/pr-support.c b/gcc/config/arm/pr-support.c index 8ea1e608921..072b4a98d5c 100644 --- a/gcc/config/arm/pr-support.c +++ b/gcc/config/arm/pr-support.c @@ -27,6 +27,10 @@ Boston, MA 02110-1301, USA. */ #include "unwind.h" +/* We add a prototype for abort here to avoid creating a dependency on + target headers. */ +extern void abort (void); + typedef struct _ZSt9type_info type_info; /* This names C++ type_info type */ /* Misc constants. */ diff --git a/gcc/config/arm/rtems-elf.h b/gcc/config/arm/rtems-elf.h index 02bdebf0264..f71e582ede7 100644 --- a/gcc/config/arm/rtems-elf.h +++ b/gcc/config/arm/rtems-elf.h @@ -1,5 +1,5 @@ /* Definitions for RTEMS based ARM systems using ELF - Copyright (C) 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -37,3 +37,10 @@ #undef SUBTARGET_EXTRA_ASM_SPEC #define SUBTARGET_EXTRA_ASM_SPEC "\ %{!mhard-float: %{!msoft-float:-mfpu=softfpa}}" + +/* + * The default includes --start-group and --end-group which conflicts + * with how this used to be defined. + */ +#undef LINK_GCC_C_SEQUENCE_SPEC +#define LINK_GCC_C_SEQUENCE_SPEC "%G %L" diff --git a/gcc/config/arm/t-bpabi b/gcc/config/arm/t-bpabi index 34981078e0e..b5c6a0b6171 100644 --- a/gcc/config/arm/t-bpabi +++ b/gcc/config/arm/t-bpabi @@ -1,6 +1,5 @@ # Add the bpabi.S functions. -LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod \ - _unwind +LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod # Add the BPABI C functions. LIB2FUNCS_EXTRA = $(srcdir)/config/arm/bpabi.c \ @@ -8,8 +7,9 @@ LIB2FUNCS_EXTRA = $(srcdir)/config/arm/bpabi.c \ UNWIND_H = $(srcdir)/config/arm/unwind-arm.h LIB2ADDEH = $(srcdir)/config/arm/unwind-arm.c \ + $(srcdir)/config/arm/libunwind.S \ $(srcdir)/config/arm/pr-support.c $(srcdir)/unwind-c.c -LIB2ADDEHDEP = $(UNWIND_H) +LIB2ADDEHDEP = $(UNWIND_H) $(srcdir)/config/$(LIB1ASMSRC) # Add the BPABI names. SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver diff --git a/gcc/config/arm/unwind-arm.c b/gcc/config/arm/unwind-arm.c index e436f7c2659..b3f8a00dcb5 100644 --- a/gcc/config/arm/unwind-arm.c +++ b/gcc/config/arm/unwind-arm.c @@ -27,6 +27,10 @@ Boston, MA 02110-1301, USA. */ #include "unwind.h" +/* We add a prototype for abort here to avoid creating a dependency on + target headers. */ +extern void abort (void); + /* Definitions for C++ runtime support routines. We make these weak declarations to avoid pulling in libsupc++ unnecessarily. */ typedef unsigned char bool; @@ -51,8 +55,10 @@ __gnu_Unwind_Find_exidx (_Unwind_Ptr, int *); #define EXIDX_CANTUNWIND 1 #define uint32_highbit (((_uw) 1) << 31) +#define UCB_FORCED_STOP_FN(ucbp) ((ucbp)->unwinder_cache.reserved1) #define UCB_PR_ADDR(ucbp) ((ucbp)->unwinder_cache.reserved2) #define UCB_SAVED_CALLSITE_ADDR(ucbp) ((ucbp)->unwinder_cache.reserved3) +#define UCB_FORCED_STOP_ARG(ucbp) ((ucbp)->unwinder_cache.reserved4) struct core_regs { @@ -105,6 +111,7 @@ typedef struct /* The first fields must be the same as a phase2_vrs. */ _uw demand_save_flags; struct core_regs core; + _uw prev_sp; /* Only valid during forced unwinding. */ struct vfp_regs vfp; struct fpa_regs fpa; } phase1_vrs; @@ -356,9 +363,9 @@ search_EIT_table (const __EIT_entry * table, int nrec, _uw return_address) n = (left + right) / 2; this_fn = selfrel_offset31 (&table[n].fnoffset); if (n != nrec - 1) - next_fn = selfrel_offset31 (&table[n + 1].fnoffset); + next_fn = selfrel_offset31 (&table[n + 1].fnoffset) - 1; else - next_fn = ~(_uw) 0; + next_fn = (_uw)0 - 1; if (return_address < this_fn) { @@ -366,7 +373,7 @@ search_EIT_table (const __EIT_entry * table, int nrec, _uw return_address) return (__EIT_entry *) 0; right = n - 1; } - else if (return_address < next_fn) + else if (return_address <= next_fn) return &table[n]; else left = n + 1; @@ -419,7 +426,7 @@ get_eit_entry (_Unwind_Control_Block *ucbp, _uw return_address) if (eitp->content == EXIDX_CANTUNWIND) { UCB_PR_ADDR (ucbp) = 0; - return _URC_FAILURE; + return _URC_END_OF_STACK; } /* Obtain the address of the "real" __EHT_Header word. */ @@ -472,21 +479,19 @@ unwind_phase2 (_Unwind_Control_Block * ucbp, phase2_vrs * vrs) { _Unwind_Reason_Code pr_result; - for(;;) + do { /* Find the entry for this routine. */ if (get_eit_entry (ucbp, vrs->core.r[R_PC]) != _URC_OK) abort (); UCB_SAVED_CALLSITE_ADDR (ucbp) = vrs->core.r[R_PC]; - + /* Call the pr to decide what to do. */ pr_result = ((personality_routine) UCB_PR_ADDR (ucbp)) (_US_UNWIND_FRAME_STARTING, ucbp, (_Unwind_Context *) vrs); - - if (pr_result != _URC_CONTINUE_UNWIND) - break; } + while (pr_result == _URC_CONTINUE_UNWIND); if (pr_result != _URC_INSTALL_CONTEXT) abort(); @@ -494,6 +499,104 @@ unwind_phase2 (_Unwind_Control_Block * ucbp, phase2_vrs * vrs) restore_core_regs (&vrs->core); } +/* Perform phase2 forced unwinding. */ + +static _Unwind_Reason_Code +unwind_phase2_forced (_Unwind_Control_Block *ucbp, phase2_vrs *entry_vrs, + int resuming) +{ + _Unwind_Stop_Fn stop_fn = (_Unwind_Stop_Fn) UCB_FORCED_STOP_FN (ucbp); + void *stop_arg = (void *)UCB_FORCED_STOP_ARG (ucbp); + _Unwind_Reason_Code pr_result = 0; + /* We use phase1_vrs here even though we do not demand save, for the + prev_sp field. */ + phase1_vrs saved_vrs, next_vrs; + + /* Save the core registers. */ + saved_vrs.core = entry_vrs->core; + /* We don't need to demand-save the non-core registers, because we + unwind in a single pass. */ + saved_vrs.demand_save_flags = 0; + + /* Unwind until we reach a propagation barrier. */ + do + { + _Unwind_State action; + _Unwind_Reason_Code entry_code; + _Unwind_Reason_Code stop_code; + + /* Find the entry for this routine. */ + entry_code = get_eit_entry (ucbp, saved_vrs.core.r[R_PC]); + + if (resuming) + { + action = _US_UNWIND_FRAME_RESUME | _US_FORCE_UNWIND; + resuming = 0; + } + else + action = _US_UNWIND_FRAME_STARTING | _US_FORCE_UNWIND; + + if (entry_code == _URC_OK) + { + UCB_SAVED_CALLSITE_ADDR (ucbp) = saved_vrs.core.r[R_PC]; + + next_vrs = saved_vrs; + + /* Call the pr to decide what to do. */ + pr_result = ((personality_routine) UCB_PR_ADDR (ucbp)) + (action, ucbp, (void *) &next_vrs); + + saved_vrs.prev_sp = next_vrs.core.r[R_SP]; + } + else + { + /* Treat any failure as the end of unwinding, to cope more + gracefully with missing EH information. Mixed EH and + non-EH within one object will usually result in failure, + because the .ARM.exidx tables do not indicate the end + of the code to which they apply; but mixed EH and non-EH + shared objects should return an unwind failure at the + entry of a non-EH shared object. */ + action |= _US_END_OF_STACK; + + saved_vrs.prev_sp = saved_vrs.core.r[R_SP]; + } + + stop_code = stop_fn (1, action, ucbp->exception_class, ucbp, + (void *)&saved_vrs, stop_arg); + if (stop_code != _URC_NO_REASON) + return _URC_FAILURE; + + if (entry_code != _URC_OK) + return entry_code; + + saved_vrs = next_vrs; + } + while (pr_result == _URC_CONTINUE_UNWIND); + + if (pr_result != _URC_INSTALL_CONTEXT) + { + /* Some sort of failure has occurred in the pr and probably the + pr returned _URC_FAILURE. */ + return _URC_FAILURE; + } + + restore_core_regs (&saved_vrs.core); +} + +/* This is a very limited implementation of _Unwind_GetCFA. It returns + the stack pointer as it is about to be unwound, and is only valid + while calling the stop function during forced unwinding. If the + current personality routine result is going to run a cleanup, this + will not be the CFA; but when the frame is really unwound, it will + be. */ + +_Unwind_Word +_Unwind_GetCFA (_Unwind_Context *context) +{ + return ((phase1_vrs *) context)->prev_sp; +} + /* Perform phase1 unwinding. UCBP is the exception being thrown, and entry_VRS is the register state on entry to _Unwind_RaiseException. */ @@ -516,7 +619,7 @@ __gnu_Unwind_RaiseException (_Unwind_Control_Block * ucbp, saved_vrs.demand_save_flags = ~(_uw) 0; /* Unwind until we reach a propagation barrier. */ - for (;;) + do { /* Find the entry for this routine. */ if (get_eit_entry (ucbp, saved_vrs.core.r[R_PC]) != _URC_OK) @@ -525,10 +628,8 @@ __gnu_Unwind_RaiseException (_Unwind_Control_Block * ucbp, /* Call the pr to decide what to do. */ pr_result = ((personality_routine) UCB_PR_ADDR (ucbp)) (_US_VIRTUAL_UNWIND_FRAME, ucbp, (void *) &saved_vrs); - - if (pr_result != _URC_CONTINUE_UNWIND) - break; } + while (pr_result == _URC_CONTINUE_UNWIND); /* We've unwound as far as we want to go, so restore the original register state. */ @@ -547,6 +648,24 @@ __gnu_Unwind_RaiseException (_Unwind_Control_Block * ucbp, being thrown and ENTRY_VRS is the register state on entry to _Unwind_Resume. */ _Unwind_Reason_Code +__gnu_Unwind_ForcedUnwind (_Unwind_Control_Block *, + _Unwind_Stop_Fn, void *, phase2_vrs *); + +_Unwind_Reason_Code +__gnu_Unwind_ForcedUnwind (_Unwind_Control_Block *ucbp, + _Unwind_Stop_Fn stop_fn, void *stop_arg, + phase2_vrs *entry_vrs) +{ + UCB_FORCED_STOP_FN (ucbp) = (_uw) stop_fn; + UCB_FORCED_STOP_ARG (ucbp) = (_uw) stop_arg; + + /* Set the pc to the call site. */ + entry_vrs->core.r[R_PC] = entry_vrs->core.r[R_LR]; + + return unwind_phase2_forced (ucbp, entry_vrs, 0); +} + +_Unwind_Reason_Code __gnu_Unwind_Resume (_Unwind_Control_Block *, phase2_vrs *); _Unwind_Reason_Code @@ -556,7 +675,15 @@ __gnu_Unwind_Resume (_Unwind_Control_Block * ucbp, phase2_vrs * entry_vrs) /* Recover the saved address. */ entry_vrs->core.r[R_PC] = UCB_SAVED_CALLSITE_ADDR (ucbp); - + + if (UCB_FORCED_STOP_FN (ucbp)) + { + unwind_phase2_forced (ucbp, entry_vrs, 1); + + /* We can't return failure at this point. */ + abort (); + } + /* Call the cached PR. */ pr_result = ((personality_routine) UCB_PR_ADDR (ucbp)) (_US_UNWIND_FRAME_RESUME, ucbp, (_Unwind_Context *) entry_vrs); @@ -576,6 +703,22 @@ __gnu_Unwind_Resume (_Unwind_Control_Block * ucbp, phase2_vrs * entry_vrs) } } +_Unwind_Reason_Code +__gnu_Unwind_Resume_or_Rethrow (_Unwind_Control_Block *, phase2_vrs *); + +_Unwind_Reason_Code +__gnu_Unwind_Resume_or_Rethrow (_Unwind_Control_Block * ucbp, + phase2_vrs * entry_vrs) +{ + if (!UCB_FORCED_STOP_FN (ucbp)) + return __gnu_Unwind_RaiseException (ucbp, entry_vrs); + + /* Set the pc to the call site. */ + entry_vrs->core.r[R_PC] = entry_vrs->core.r[R_LR]; + /* Continue unwinding the next frame. */ + return unwind_phase2_forced (ucbp, entry_vrs, 0); +} + /* Clean up an exception object when unwinding is complete. */ void _Unwind_Complete (_Unwind_Control_Block * ucbp __attribute__((unused))) @@ -619,6 +762,9 @@ __gnu_unwind_pr_common (_Unwind_State state, _uw rtti_count; int phase2_call_unexpected_after_unwind = 0; int in_range = 0; + int forced_unwind = state & _US_FORCE_UNWIND; + + state &= _US_ACTION_MASK; data = (_uw *) ucbp->pr_cache.ehtp; uws.data = *(data++); @@ -748,9 +894,9 @@ __gnu_unwind_pr_common (_Unwind_State state, /* Exception specification. */ if (state == _US_VIRTUAL_UNWIND_FRAME) { - if (in_range) + if (in_range && (!forced_unwind || !rtti_count)) { - /* Match against teh exception specification. */ + /* Match against the exception specification. */ _uw i; _uw rtti; void *matched; @@ -853,3 +999,16 @@ __aeabi_unwind_cpp_pr2 (_Unwind_State state, { return __gnu_unwind_pr_common (state, ucbp, context, 2); } + +/* These two should never be used. */ +_Unwind_Ptr +_Unwind_GetDataRelBase (_Unwind_Context *context __attribute__ ((unused))) +{ + abort (); +} + +_Unwind_Ptr +_Unwind_GetTextRelBase (_Unwind_Context *context __attribute__ ((unused))) +{ + abort (); +} diff --git a/gcc/config/arm/unwind-arm.h b/gcc/config/arm/unwind-arm.h index 4d86407c73e..dd8d2affe39 100644 --- a/gcc/config/arm/unwind-arm.h +++ b/gcc/config/arm/unwind-arm.h @@ -1,5 +1,5 @@ /* Header file for the ARM EABI unwinder - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Paul Brook This file is free software; you can redistribute it and/or modify it @@ -37,10 +37,6 @@ #ifdef __cplusplus extern "C" { #endif - /* We add a prototype for abort here to avoid creating a dependency on - target headers. */ - extern void abort(); - typedef unsigned _Unwind_Word __attribute__((__mode__(__word__))); typedef signed _Unwind_Sword __attribute__((__mode__(__word__))); typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__))); @@ -54,28 +50,41 @@ extern "C" { { _URC_OK = 0, /* operation completed successfully */ _URC_FOREIGN_EXCEPTION_CAUGHT = 1, + _URC_END_OF_STACK = 5, _URC_HANDLER_FOUND = 6, _URC_INSTALL_CONTEXT = 7, _URC_CONTINUE_UNWIND = 8, _URC_FAILURE = 9 /* unspecified failure of some kind */ } _Unwind_Reason_Code; - + typedef enum { _US_VIRTUAL_UNWIND_FRAME = 0, _US_UNWIND_FRAME_STARTING = 1, - _US_UNWIND_FRAME_RESUME = 2 + _US_UNWIND_FRAME_RESUME = 2, + _US_ACTION_MASK = 3, + _US_FORCE_UNWIND = 8, + _US_END_OF_STACK = 16 } _Unwind_State; - + + /* Provided only for for compatibility with existing code. */ + typedef int _Unwind_Action; +#define _UA_SEARCH_PHASE 1 +#define _UA_CLEANUP_PHASE 2 +#define _UA_HANDLER_FRAME 4 +#define _UA_FORCE_UNWIND 8 +#define _UA_END_OF_STACK 16 +#define _URC_NO_REASON _URC_OK + typedef struct _Unwind_Control_Block _Unwind_Control_Block; typedef struct _Unwind_Context _Unwind_Context; typedef _uw _Unwind_EHT_Header; - - + + /* UCB: */ - + struct _Unwind_Control_Block { char exception_class[8]; @@ -83,10 +92,10 @@ extern "C" { /* Unwinder cache, private fields for the unwinder's use */ struct { - _uw reserved1; /* init reserved1 to 0, then don't touch */ - _uw reserved2; - _uw reserved3; - _uw reserved4; + _uw reserved1; /* Forced unwind stop fn, 0 if not forced */ + _uw reserved2; /* Personality routine address */ + _uw reserved3; /* Saved callsite address */ + _uw reserved4; /* Forced unwind stop arg */ _uw reserved5; } unwinder_cache; @@ -114,14 +123,9 @@ extern "C" { pr_cache; long long int :0; /* Force alignment to 8-byte boundary */ }; - - /* Interface functions: */ - _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Control_Block *ucbp); - void __attribute__((noreturn)) _Unwind_Resume(_Unwind_Control_Block *ucbp); - void _Unwind_Complete(_Unwind_Control_Block *ucbp); /* Virtual Register Set*/ - + typedef enum { _UVRSC_CORE = 0, /* integer register */ @@ -131,7 +135,7 @@ extern "C" { _UVRSC_WMMXC = 4 /* Intel WMMX control register */ } _Unwind_VRS_RegClass; - + typedef enum { _UVRSD_UINT32 = 0, @@ -142,13 +146,13 @@ extern "C" { _UVRSD_DOUBLE = 5 } _Unwind_VRS_DataRepresentation; - + typedef enum { _UVRSR_OK = 0, _UVRSR_NOT_IMPLEMENTED = 1, _UVRSR_FAILED = 2 - } + } _Unwind_VRS_Result; /* Frame unwinding state. */ @@ -171,11 +175,11 @@ extern "C" { _Unwind_VRS_Result _Unwind_VRS_Set(_Unwind_Context *, _Unwind_VRS_RegClass, _uw, _Unwind_VRS_DataRepresentation, void *); - + _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *, _Unwind_VRS_RegClass, _uw, _Unwind_VRS_DataRepresentation, void *); - + _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *, _Unwind_VRS_RegClass, _uw, _Unwind_VRS_DataRepresentation); @@ -187,19 +191,22 @@ extern "C" { void * _Unwind_GetLanguageSpecificData (_Unwind_Context *); _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *); - /* These two should never be used */ - static inline _Unwind_Ptr - _Unwind_GetDataRelBase (_Unwind_Context * context __attribute__ ((unused))) - { - abort (); - } - - static inline _Unwind_Ptr - _Unwind_GetTextRelBase (_Unwind_Context * context __attribute__ ((unused))) - { - abort (); - } + /* These two should never be used. */ + _Unwind_Ptr _Unwind_GetDataRelBase (_Unwind_Context *); + _Unwind_Ptr _Unwind_GetTextRelBase (_Unwind_Context *); + /* Interface functions: */ + _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Control_Block *ucbp); + void __attribute__((noreturn)) _Unwind_Resume(_Unwind_Control_Block *ucbp); + _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (_Unwind_Control_Block *ucbp); + + typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) + (int, _Unwind_Action, _Unwind_Exception_Class, + _Unwind_Control_Block *, struct _Unwind_Context *, void *); + _Unwind_Reason_Code _Unwind_ForcedUnwind (_Unwind_Control_Block *, + _Unwind_Stop_Fn, void *); + _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *); + void _Unwind_Complete(_Unwind_Control_Block *ucbp); void _Unwind_DeleteException (_Unwind_Exception *); _Unwind_Reason_Code __gnu_unwind_frame (_Unwind_Control_Block *, @@ -254,16 +261,6 @@ extern "C" { #define _Unwind_SetIP(context, val) \ _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1)) - /* Provided only for for compatibility with existing code. */ - typedef int _Unwind_Action; -#define _UA_SEARCH_PHASE 1 -#define _UA_CLEANUP_PHASE 2 -#define _UA_HANDLER_FRAME 4 -#define _UA_FORCE_UNWIND 8 -#define _UA_END_OF_STACK 16 - -#define _URC_NO_REASON _URC_OK - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index 18092ad767d..f1a82683aa1 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -212,16 +212,18 @@ legitimize_pic_address (rtx orig, rtx reg, rtx picreg) /* Compute the number of DREGS to save with a push_multiple operation. This could include registers that aren't modified in the function, - since push_multiple only takes a range of registers. */ + since push_multiple only takes a range of registers. + If IS_INTHANDLER, then everything that is live must be saved, even + if normally call-clobbered. */ static int -n_dregs_to_save (void) +n_dregs_to_save (bool is_inthandler) { unsigned i; for (i = REG_R0; i <= REG_R7; i++) { - if (regs_ever_live[i] && ! call_used_regs[i]) + if (regs_ever_live[i] && (is_inthandler || ! call_used_regs[i])) return REG_R7 - i + 1; if (current_function_calls_eh_return) @@ -244,12 +246,12 @@ n_dregs_to_save (void) /* Like n_dregs_to_save, but compute number of PREGS to save. */ static int -n_pregs_to_save (void) +n_pregs_to_save (bool is_inthandler) { unsigned i; for (i = REG_P0; i <= REG_P5; i++) - if ((regs_ever_live[i] && ! call_used_regs[i]) + if ((regs_ever_live[i] && (is_inthandler || ! call_used_regs[i])) || (i == PIC_OFFSET_TABLE_REGNUM && (current_function_uses_pic_offset_table || (TARGET_ID_SHARED_LIBRARY && ! current_function_is_leaf)))) @@ -262,7 +264,7 @@ n_pregs_to_save (void) static bool must_save_fp_p (void) { - return (frame_pointer_needed || regs_ever_live[REG_FP]); + return frame_pointer_needed || regs_ever_live[REG_FP]; } static bool @@ -277,13 +279,14 @@ stack_frame_needed_p (void) /* Emit code to save registers in the prologue. SAVEALL is nonzero if we must save all registers; this is used for interrupt handlers. - SPREG contains (reg:SI REG_SP). */ + SPREG contains (reg:SI REG_SP). IS_INTHANDLER is true if we're doing + this for an interrupt (or exception) handler. */ static void -expand_prologue_reg_save (rtx spreg, int saveall) +expand_prologue_reg_save (rtx spreg, int saveall, bool is_inthandler) { - int ndregs = saveall ? 8 : n_dregs_to_save (); - int npregs = saveall ? 6 : n_pregs_to_save (); + int ndregs = saveall ? 8 : n_dregs_to_save (is_inthandler); + int npregs = saveall ? 6 : n_pregs_to_save (is_inthandler); int dregno = REG_R7 + 1 - ndregs; int pregno = REG_P5 + 1 - npregs; int total = ndregs + npregs; @@ -328,13 +331,14 @@ expand_prologue_reg_save (rtx spreg, int saveall) /* Emit code to restore registers in the epilogue. SAVEALL is nonzero if we must save all registers; this is used for interrupt handlers. - SPREG contains (reg:SI REG_SP). */ + SPREG contains (reg:SI REG_SP). IS_INTHANDLER is true if we're doing + this for an interrupt (or exception) handler. */ static void -expand_epilogue_reg_restore (rtx spreg, int saveall) +expand_epilogue_reg_restore (rtx spreg, bool saveall, bool is_inthandler) { - int ndregs = saveall ? 8 : n_dregs_to_save (); - int npregs = saveall ? 6 : n_pregs_to_save (); + int ndregs = saveall ? 8 : n_dregs_to_save (is_inthandler); + int npregs = saveall ? 6 : n_pregs_to_save (is_inthandler); int total = ndregs + npregs; int i, regno; rtx pat, insn; @@ -449,9 +453,15 @@ static int n_regs_saved_by_prologue (void) { e_funkind fkind = funkind (TREE_TYPE (current_function_decl)); - int n = n_dregs_to_save () + n_pregs_to_save (); + bool is_inthandler = fkind != SUBROUTINE; + tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)); + bool all = (lookup_attribute ("saveall", attrs) != NULL_TREE + || (is_inthandler && !current_function_is_leaf)); + int ndregs = all ? 8 : n_dregs_to_save (is_inthandler); + int npregs = all ? 6 : n_pregs_to_save (is_inthandler); + int n = ndregs + npregs; - if (stack_frame_needed_p ()) + if (all || stack_frame_needed_p ()) /* We use a LINK instruction in this case. */ n += 2; else @@ -464,8 +474,6 @@ n_regs_saved_by_prologue (void) if (fkind != SUBROUTINE) { - tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)); - tree all = lookup_attribute ("saveall", attrs); int i; /* Increment once for ASTAT. */ @@ -640,14 +648,16 @@ arg_area_size (void) return 0; } -/* Save RETS and FP, and allocate a stack frame. */ +/* Save RETS and FP, and allocate a stack frame. ALL is true if the + function must save all its registers (true only for certain interrupt + handlers). */ static void -do_link (rtx spreg, HOST_WIDE_INT frame_size) +do_link (rtx spreg, HOST_WIDE_INT frame_size, bool all) { frame_size += arg_area_size (); - if (stack_frame_needed_p () + if (all || stack_frame_needed_p () || (must_save_fp_p () && ! current_function_is_leaf)) emit_link_insn (spreg, frame_size); else @@ -675,11 +685,11 @@ do_link (rtx spreg, HOST_WIDE_INT frame_size) /* Like do_link, but used for epilogues to deallocate the stack frame. */ static void -do_unlink (rtx spreg, HOST_WIDE_INT frame_size) +do_unlink (rtx spreg, HOST_WIDE_INT frame_size, bool all) { frame_size += arg_area_size (); - if (stack_frame_needed_p ()) + if (all || stack_frame_needed_p ()) emit_insn (gen_unlink ()); else { @@ -713,7 +723,7 @@ expand_interrupt_handler_prologue (rtx spreg, e_funkind fkind) rtx predec = gen_rtx_MEM (SImode, predec1); rtx insn; tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)); - tree all = lookup_attribute ("saveall", attrs); + bool all = lookup_attribute ("saveall", attrs) != NULL_TREE; tree kspisusp = lookup_attribute ("kspisusp", attrs); if (kspisusp) @@ -733,7 +743,11 @@ expand_interrupt_handler_prologue (rtx spreg, e_funkind fkind) insn = emit_move_insn (predec, gen_rtx_REG (SImode, REG_ASTAT)); RTX_FRAME_RELATED_P (insn) = 1; - expand_prologue_reg_save (spreg, all != NULL_TREE); + /* If we're calling other functions, they won't save their call-clobbered + registers, so we must save everything here. */ + if (!current_function_is_leaf) + all = true; + expand_prologue_reg_save (spreg, all, true); for (i = REG_P7 + 1; i < REG_CC; i++) if (all @@ -757,7 +771,7 @@ expand_interrupt_handler_prologue (rtx spreg, e_funkind fkind) RTX_FRAME_RELATED_P (insn) = 1; } - do_link (spreg, frame_size); + do_link (spreg, frame_size, all); if (fkind == EXCPT_HANDLER) { @@ -792,19 +806,19 @@ expand_interrupt_handler_prologue (rtx spreg, e_funkind fkind) SPREG contains (reg:SI REG_SP). */ static void -expand_interrupt_handler_epilogue (rtx spreg, e_funkind fkind) +expand_interrupt_handler_epilogue (rtx spreg, e_funkind fkind) { int i; rtx postinc1 = gen_rtx_POST_INC (SImode, spreg); rtx postinc = gen_rtx_MEM (SImode, postinc1); tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)); - tree all = lookup_attribute ("saveall", attrs); + bool all = lookup_attribute ("saveall", attrs) != NULL_TREE; /* A slightly crude technique to stop flow from trying to delete "dead" insns. */ MEM_VOLATILE_P (postinc) = 1; - do_unlink (spreg, get_frame_size ()); + do_unlink (spreg, get_frame_size (), all); if (lookup_attribute ("nesting", attrs)) { @@ -814,9 +828,14 @@ expand_interrupt_handler_epilogue (rtx spreg, e_funkind fkind) emit_move_insn (srcreg, postinc); } + /* If we're calling other functions, they won't save their call-clobbered + registers, so we must save (and restore) everything here. */ + if (!current_function_is_leaf) + all = true; + for (i = REG_CC - 1; i > REG_P7; i--) if (all - || regs_ever_live[i] + || regs_ever_live[i] || (!leaf_function_p () && call_used_regs[i])) { if (i == REG_A0 || i == REG_A1) @@ -829,7 +848,7 @@ expand_interrupt_handler_epilogue (rtx spreg, e_funkind fkind) emit_move_insn (gen_rtx_REG (SImode, i), postinc); } - expand_epilogue_reg_restore (spreg, all != NULL_TREE); + expand_epilogue_reg_restore (spreg, all, true); emit_move_insn (gen_rtx_REG (SImode, REG_ASTAT), postinc); @@ -909,9 +928,9 @@ bfin_expand_prologue (void) emit_insn (gen_compare_lt (bfin_cc_rtx, spreg, lim)); emit_insn (gen_trapifcc ()); } - expand_prologue_reg_save (spreg, 0); + expand_prologue_reg_save (spreg, 0, false); - do_link (spreg, frame_size); + do_link (spreg, frame_size, false); if (TARGET_ID_SHARED_LIBRARY && (current_function_uses_pic_offset_table @@ -935,9 +954,9 @@ bfin_expand_epilogue (int need_return, int eh_return) return; } - do_unlink (spreg, get_frame_size ()); + do_unlink (spreg, get_frame_size (), false); - expand_epilogue_reg_restore (spreg, 0); + expand_epilogue_reg_restore (spreg, false, false); /* Omit the return insn if this is for a sibcall. */ if (! need_return) @@ -1469,7 +1488,8 @@ static bool bfin_function_ok_for_sibcall (tree decl ATTRIBUTE_UNUSED, tree exp ATTRIBUTE_UNUSED) { - return true; + e_funkind fkind = funkind (TREE_TYPE (current_function_decl)); + return fkind == SUBROUTINE; } /* Emit RTL insns to initialize the variable parts of a trampoline at @@ -2455,6 +2475,11 @@ bfin_expand_strmov (rtx dst, rtx src, rtx count_exp, rtx align_exp) emit_insn (gen_rep_movsi (destreg, srcreg, countreg, destreg, srcreg)); } + if (count & 2) + { + single_move_for_strmov (dst, src, HImode, offset); + offset += 2; + } } else { @@ -2471,11 +2496,6 @@ bfin_expand_strmov (rtx dst, rtx src, rtx count_exp, rtx align_exp) emit_insn (gen_rep_movhi (destreg, srcreg, countreg, destreg, srcreg)); } } - if (count & 2) - { - single_move_for_strmov (dst, src, HImode, offset); - offset += 2; - } if (count & 1) { single_move_for_strmov (dst, src, QImode, offset); diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index c959e4538b7..0e6da5c08a8 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -220,8 +220,8 @@ extern const char *bfin_library_id_string; #define REGISTER_NAMES { \ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", \ "P0", "P1", "P2", "P3", "P4", "P5", "SP", "FP", \ - "I0", "B0", "L0", "I1", "B1", "L1", "I2", "B2", \ - "L2", "I3", "B3", "L3", "M0", "M1", "M2", "M3", \ + "I0", "I1", "I2", "I3", "B0", "B1", "B2", "B3", \ + "L0", "L1", "L2", "L3", "M0", "M1", "M2", "M3", \ "A0", "A1", \ "CC", \ "RETS", "RETI", "RETX", "RETN", "RETE", "ASTAT", "SEQSTAT", "USP", \ @@ -231,14 +231,14 @@ extern const char *bfin_library_id_string; #define SHORT_REGISTER_NAMES { \ "R0.L", "R1.L", "R2.L", "R3.L", "R4.L", "R5.L", "R6.L", "R7.L", \ "P0.L", "P1.L", "P2.L", "P3.L", "P4.L", "P5.L", "SP.L", "FP.L", \ - "I0.L", "B0.L", "L0.L", "I1.L", "B1.L", "L1.L", "I2.L", "B2.L", \ - "L2.L", "I3.L", "B3.L", "L3.L", "M0.L", "M1.L", "M2.L", "M3.L", } + "I0.L", "I1.L", "I2.L", "I3.L", "B0.L", "B1.L", "B2.L", "B3.L", \ + "L0.L", "L1.L", "L2.L", "L3.L", "M0.L", "M1.L", "M2.L", "M3.L", } #define HIGH_REGISTER_NAMES { \ "R0.H", "R1.H", "R2.H", "R3.H", "R4.H", "R5.H", "R6.H", "R7.H", \ "P0.H", "P1.H", "P2.H", "P3.H", "P4.H", "P5.H", "SP.H", "FP.H", \ - "I0.H", "B0.H", "L0.H", "I1.H", "B1.H", "L1.H", "I2.H", "B2.H", \ - "L2.H", "I3.H", "B3.H", "L3.H", "M0.H", "M1.H", "M2.H", "M3.H", } + "I0.H", "I1.H", "I2.H", "I3.H", "B0.H", "B1.H", "B2.H", "B3.H", \ + "L0.H", "L1.H", "L2.H", "L3.H", "M0.H", "M1.H", "M2.H", "M3.H", } #define DREGS_PAIR_NAMES { \ "R1:0.p", 0, "R3:2.p", 0, "R5:4.p", 0, "R7:6.p", 0, } @@ -253,8 +253,8 @@ extern const char *bfin_library_id_string; #define FIXED_REGISTERS \ /*r0 r1 r2 r3 r4 r5 r6 r7 p0 p1 p2 p3 p4 p5 p6 p7 */ \ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ -/*i0 b0 l0 i1 b1 l1 i2 b2 l2 i3 b3 l3 m0 m1 m2 m3 */ \ - 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, \ +/*i0 i1 i2 i3 b0 b1 b2 b3 l0 l1 l2 l3 m0 m1 m2 m3 */ \ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, \ /*a0 a1 cc rets/i/x/n/e astat seqstat usp argp */ \ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 \ } @@ -269,7 +269,7 @@ extern const char *bfin_library_id_string; #define CALL_USED_REGISTERS \ /*r0 r1 r2 r3 r4 r5 r6 r7 p0 p1 p2 p3 p4 p5 p6 p7 */ \ { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, \ -/*i0 b0 l0 i1 b1 l1 i2 b2 l2 i3 b3 l3 m0 m1 m2 m3 */ \ +/*i0 i1 i2 i3 b0 b1 b2 b3 l0 l1 l2 l3 m0 m1 m2 m3 */ \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ /*a0 a1 cc rets/i/x/n/e astat seqstat usp argp */ \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 \ @@ -285,8 +285,8 @@ extern const char *bfin_library_id_string; { REG_R0, REG_R1, REG_R2, REG_R3, REG_R7, REG_R6, REG_R5, REG_R4, \ REG_P2, REG_P1, REG_P0, REG_P5, REG_P4, REG_P3, REG_P6, REG_P7, \ REG_A0, REG_A1, \ - REG_I0, REG_B0, REG_L0, REG_I1, REG_B1, REG_L1, REG_I2, REG_B2, \ - REG_L2, REG_I3, REG_B3, REG_L3, REG_M0, REG_M1, REG_M2, REG_M3, \ + REG_I0, REG_I1, REG_I2, REG_I3, REG_B0, REG_B1, REG_B2, REG_B3, \ + REG_L0, REG_L1, REG_L2, REG_L3, REG_M0, REG_M1, REG_M2, REG_M3, \ REG_RETS, REG_RETI, REG_RETX, REG_RETN, REG_RETE, \ REG_ASTAT, REG_SEQSTAT, REG_USP, \ REG_CC, REG_ARGP \ @@ -395,9 +395,9 @@ enum reg_class #define REG_CLASS_CONTENTS \ /* 31 - 0 63-32 */ \ { { 0x00000000, 0 }, /* NO_REGS */ \ - { 0x02490000, 0 }, /* IREGS */ \ - { 0x04920000, 0 }, /* BREGS */ \ - { 0x09240000, 0 }, /* LREGS */ \ + { 0x000f0000, 0 }, /* IREGS */ \ + { 0x00f00000, 0 }, /* BREGS */ \ + { 0x0f000000, 0 }, /* LREGS */ \ { 0xf0000000, 0 }, /* MREGS */ \ { 0x0fff0000, 0 }, /* CIRCREGS */ \ { 0xffff0000, 0 }, /* DAGREGS */ \ diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 1bbbacde764..63fc99ca1fe 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -76,16 +76,18 @@ (REG_FP 15) (REG_I0 16) - (REG_B0 17) - (REG_L0 18) - (REG_I1 19) - (REG_B1 20) - (REG_L1 21) - (REG_I2 22) - (REG_B2 23) - (REG_L2 24) - (REG_I3 25) - (REG_B3 26) + (REG_I1 17) + (REG_I2 18) + (REG_I3 19) + + (REG_B0 20) + (REG_B1 21) + (REG_B2 22) + (REG_B3 23) + + (REG_L0 24) + (REG_L1 25) + (REG_L2 26) (REG_L3 27) (REG_M0 28) @@ -906,6 +908,14 @@ "%0 = %h1 * %h2 (FU);" [(set_attr "type" "dsp32")]) +(define_insn "usmulhisi3" + [(set (match_operand:SI 0 "register_operand" "=W") + (mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "W")) + (sign_extend:SI (match_operand:HI 2 "register_operand" "W"))))] + "" + "%0 = %h2 * %h1 (IS,M);" + [(set_attr "type" "dsp32")]) + ;; The processor also supports ireg += mreg or ireg -= mreg, but these ;; are unusable if we don't ensure that the corresponding lreg is zero. ;; The same applies to the add/subtract constant versions involving @@ -1458,7 +1468,7 @@ (use (match_dup 2)) (clobber (match_scratch:HI 5 "=&d"))] "" - "lsetup (1f, 1f) LC1 = %2; %5 = [%4++]; 1: MNOP || [%3++] = %5 || %5 = [%4++]; [%3++] = %5;" + "%5 = [%4++]; lsetup (1f, 1f) LC1 = %2; 1: MNOP || [%3++] = %5 || %5 = [%4++]; [%3++] = %5;" [(set_attr "type" "misc") (set_attr "length" "16")]) @@ -1477,7 +1487,7 @@ (use (match_dup 2)) (clobber (match_scratch:HI 5 "=&d"))] "" - "lsetup (1f, 1f) LC1 = %2; %h5 = W[%4++]; 1: MNOP || W [%3++] = %5 || %h5 = W [%4++]; W [%3++] = %5;" + "%h5 = W[%4++]; lsetup (1f, 1f) LC1 = %2; 1: MNOP || W [%3++] = %5 || %h5 = W [%4++]; W [%3++] = %5;" [(set_attr "type" "misc") (set_attr "length" "16")]) @@ -1999,6 +2009,13 @@ "ssync;" [(set_attr "type" "sync")]) +(define_insn "trap" + [(trap_if (const_int 1) (const_int 3))] + "" + "excpt 3;" + [(set_attr "type" "misc") + (set_attr "length" "2")]) + (define_insn "trapifcc" [(trap_if (reg:BI REG_CC) (const_int 3))] "" diff --git a/gcc/config/bfin/crti.s b/gcc/config/bfin/crti.s index 7324e27ff88..84a98597c23 100644 --- a/gcc/config/bfin/crti.s +++ b/gcc/config/bfin/crti.s @@ -38,10 +38,21 @@ Boston, MA 02110-1301, USA. */ .globl __init .type __init,@function __init: - LINK 0; - +#if defined __PIC__ + [--SP] = P5; +#endif + LINK 12; +#if defined __PIC__ + P5 = [P5 + _current_shared_library_p5_offset_] +#endif .section .fini .globl __fini .type __fini,@function __fini: - LINK 0; +#if defined __PIC__ + [--SP] = P5; +#endif + LINK 12; +#if defined __PIC__ + P5 = [P5 + _current_shared_library_p5_offset_] +#endif diff --git a/gcc/config/bfin/crtlibid.s b/gcc/config/bfin/crtlibid.s new file mode 100644 index 00000000000..f80adfe7ec9 --- /dev/null +++ b/gcc/config/bfin/crtlibid.s @@ -0,0 +1,32 @@ +/* Provide a weak definition of the library ID, for the benefit of certain + configure scripts. + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to +the Free Software Foundation, 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ + +/* As a special exception, if you link this library with files + compiled with GCC to produce an executable, this does not cause + the resulting executable to be covered by the GNU General Public License. + This exception does not however invalidate any other reasons why + the executable file might be covered by the GNU General Public License. */ + + .file "crtlibid.o" + .ident "GNU C crtlibid.o" + +.weak _current_shared_library_p5_offset_ +.set _current_shared_library_p5_offset_, 0 diff --git a/gcc/config/bfin/crtn.s b/gcc/config/bfin/crtn.s index 78ad7bb1221..69421fcfa58 100644 --- a/gcc/config/bfin/crtn.s +++ b/gcc/config/bfin/crtn.s @@ -36,8 +36,14 @@ Boston, MA 02110-1301, USA. */ .section .init unlink; +#if defined __PIC__ + P5 = [SP++]; +#endif rts; .section .fini unlink; +#if defined __PIC__ + P5 = [SP++]; +#endif rts; diff --git a/gcc/config/bfin/elf.h b/gcc/config/bfin/elf.h index 5b0eb20ddf6..621b786c94d 100644 --- a/gcc/config/bfin/elf.h +++ b/gcc/config/bfin/elf.h @@ -7,7 +7,7 @@ sprintf (LABEL, "*%s%s$%d", LOCAL_LABEL_PREFIX, PREFIX, (int) NUM) #undef STARTFILE_SPEC -#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s" +#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s crtlibid%O%s" #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend%O%s crtn%O%s" diff --git a/gcc/config/bfin/t-bfin-elf b/gcc/config/bfin/t-bfin-elf index 662dc4c3e60..64e71b0d3cf 100644 --- a/gcc/config/bfin/t-bfin-elf +++ b/gcc/config/bfin/t-bfin-elf @@ -3,7 +3,7 @@ LIB1ASMSRC = bfin/lib1funcs.asm LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 -EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o +EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o crtlibid.o FPBIT = fp-bit.c DPBIT = dp-bit.c @@ -19,6 +19,11 @@ fp-bit.c: $(srcdir)/config/fp-bit.c # it is fixed in binutils (if it is necessary). GCC_CFLAGS += -N +MULTILIB_OPTIONS=mid-shared-library +MULTILIB_DEFAULTS= +MULTILIB_DIRNAMES= +MULTILIB_EXCEPTIONS= + # Assemble startup files. $(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ @@ -27,3 +32,10 @@ $(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES) $(T)crtn.o: $(srcdir)/config/bfin/crtn.s $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/bfin/crtn.s + +$(T)crtlibid.o: $(srcdir)/config/bfin/crtlibid.s $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crtlibid.o -x assembler-with-cpp \ + $(srcdir)/config/bfin/crtlibid.s + +EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crti.o crtn.o crtlibid.o diff --git a/gcc/config/bfin/uclinux.h b/gcc/config/bfin/uclinux.h index 361a923326c..4372af24257 100644 --- a/gcc/config/bfin/uclinux.h +++ b/gcc/config/bfin/uclinux.h @@ -1,6 +1,6 @@ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ - "crt1%O%s crti%O%s crtbegin%O%s" + "crt1%O%s crti%O%s crtbegin%O%s crtlibid%O%s" #undef ENDFILE_SPEC #define ENDFILE_SPEC \ diff --git a/gcc/config/cris/cris-protos.h b/gcc/config/cris/cris-protos.h index f95a5d115cb..50673d9db33 100644 --- a/gcc/config/cris/cris-protos.h +++ b/gcc/config/cris/cris-protos.h @@ -31,6 +31,7 @@ extern bool cris_simple_epilogue (void); #ifdef RTX_CODE extern const char *cris_op_str (rtx); extern void cris_notice_update_cc (rtx, rtx); +extern bool cris_reload_address_legitimized (rtx, enum machine_mode, int, int, int); extern void cris_print_operand (FILE *, rtx, int); extern void cris_print_operand_address (FILE *, rtx); extern int cris_side_effect_mode_ok (enum rtx_code, rtx *, int, int, diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 4ce3c8bb9c6..0c415391543 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -38,6 +38,7 @@ Boston, MA 02110-1301, USA. */ #include "function.h" #include "toplev.h" #include "recog.h" +#include "reload.h" #include "tm_p.h" #include "debug.h" #include "output.h" @@ -1205,6 +1206,81 @@ cris_initial_elimination_offset (int fromreg, int toreg) gcc_unreachable (); } +/* Worker function for LEGITIMIZE_RELOAD_ADDRESS. */ + +bool +cris_reload_address_legitimized (rtx x, + enum machine_mode mode ATTRIBUTE_UNUSED, + int opnum ATTRIBUTE_UNUSED, + int itype, + int ind_levels ATTRIBUTE_UNUSED) +{ + enum reload_type type = itype; + rtx op0, op1; + rtx *op0p; + rtx *op1p; + + if (GET_CODE (x) != PLUS) + return false; + + op0 = XEXP (x, 0); + op0p = &XEXP (x, 0); + op1 = XEXP (x, 1); + op1p = &XEXP (x, 1); + + if (!REG_P (op1)) + return false; + + if (GET_CODE (op0) == SIGN_EXTEND + && GET_CODE (XEXP (op0, 0)) == MEM) + { + rtx op00 = XEXP (op0, 0); + rtx op000 = XEXP (op00, 0); + rtx *op000p = &XEXP (op00, 0); + + if ((GET_MODE (op00) == HImode || GET_MODE (op00) == QImode) + && (REG_P (op000) + || (GET_CODE (op000) == POST_INC && REG_P (XEXP (op000, 0))))) + { + bool something_reloaded = false; + + if (GET_CODE (op000) == POST_INC + && REG_P (XEXP (op000, 0)) + && REGNO (XEXP (op000, 0)) > CRIS_LAST_GENERAL_REGISTER) + /* No, this gets too complicated and is too rare to care + about trying to improve on the general code Here. + As the return-value is an all-or-nothing indicator, we + punt on the other register too. */ + return false; + + if ((REG_P (op000) + && REGNO (op000) > CRIS_LAST_GENERAL_REGISTER)) + { + /* The address of the inner mem is a pseudo or wrong + reg: reload that. */ + push_reload (op000, NULL_RTX, op000p, NULL, GENERAL_REGS, + GET_MODE (x), VOIDmode, 0, 0, opnum, type); + something_reloaded = true; + } + + if (REGNO (op1) > CRIS_LAST_GENERAL_REGISTER) + { + /* Base register is a pseudo or wrong reg: reload it. */ + push_reload (op1, NULL_RTX, op1p, NULL, GENERAL_REGS, + GET_MODE (x), VOIDmode, 0, 0, + opnum, type); + something_reloaded = true; + } + + gcc_assert (something_reloaded); + + return true; + } + } + + return false; +} + /* This function looks into the pattern to see how this insn affects condition codes. @@ -2160,7 +2236,7 @@ cris_asm_output_mi_thunk (FILE *stream, } } -/* Boilerplate emitted at start of file. +/* Boilerplate emitted at start of file. NO_APP *only at file start* means faster assembly. It also means comments are not allowed. In some cases comments will be output diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index 0ca52da54eb..0d1d8af4e26 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -1055,6 +1055,15 @@ struct cum_args {int regs;}; FIXME: Check and adjust for gcc-2.9x. */ #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {} +/* Fix reloads known to cause suboptimal spilling. */ +#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, INDL, WIN) \ + do \ + { \ + if (cris_reload_address_legitimized (X, MODE, OPNUM, TYPE, INDL)) \ + goto WIN; \ + } \ + while (0) + /* In CRIS, only the postincrement address mode depends thus, since the increment depends on the size of the operand. */ #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \ diff --git a/gcc/config/cris/cris.md b/gcc/config/cris/cris.md index 2f35b06aef4..37bd4ab1306 100644 --- a/gcc/config/cris/cris.md +++ b/gcc/config/cris/cris.md @@ -678,11 +678,15 @@ [(set (mem (plus:SI (match_operand:SI - 0 "cris_bdap_operand" "%r,r,r,r,r,r,r,r,R,R,R,R,R,R") + 0 "cris_bdap_operand" + "%r, r, r,r, r, r,r, R,R, R,R, R") (match_operand:SI - 1 "cris_bdap_operand" "r>Rn,r>Rn,r,>Rn,r>Rn,r>Rn,r,>Rn,r,r,r,r,r,r"))) - (match_operand 2 "register_operand" "r,r,r,r,x,x,x,x,r,r,r,x,x,x")) - (set (match_operand:SI 3 "register_operand" "=*0,!2,r,r,*0,!2,r,r,*1,!*2,r,*1,!*2,r") + 1 "cris_bdap_operand" + "r>Rn,r>Rn,r,>Rn,r>Rn,r,>Rn,r,r, r,r, r"))) + (match_operand 2 "register_operand" + "r, r, r,r, x, x,x, r,r, r,x, x")) + (set (match_operand:SI 3 "register_operand" + "=*0,!2, r,r, *0, r,r, *1,!*2,r,*1,r") (plus:SI (match_dup 0) (match_dup 1)))] "GET_MODE_SIZE (GET_MODE (operands[2])) == UNITS_PER_WORD @@ -696,17 +700,15 @@ || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) return "#"; if (which_alternative == 1 - || which_alternative == 5 + || which_alternative == 7 || which_alternative == 8 - || which_alternative == 9 - || which_alternative == 11 - || which_alternative == 12) + || which_alternative == 10) return "#"; if (which_alternative < 4) return "move.%s2 %2,[%3=%0%S1]"; - if (which_alternative == 10) + if (which_alternative == 9) return "move.%s2 %2,[%3=%1%S0]"; - if (which_alternative == 13) + if (which_alternative == 11) return "move %2,[%3=%1%S0]"; return "move %2,[%3=%0%S1]"; }) diff --git a/gcc/config/cris/linux.h b/gcc/config/cris/linux.h index 57ae745d9d5..09968f42e26 100644 --- a/gcc/config/cris/linux.h +++ b/gcc/config/cris/linux.h @@ -96,11 +96,6 @@ Boston, MA 02110-1301, USA. */ do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ if (flag_leading_underscore <= 0) \ builtin_define ("__NO_UNDERSCORES__"); \ } \ diff --git a/gcc/config/cris/predicates.md b/gcc/config/cris/predicates.md index 90fab8dd7d7..592fcff9dd0 100644 --- a/gcc/config/cris/predicates.md +++ b/gcc/config/cris/predicates.md @@ -79,10 +79,13 @@ ;; The caller needs to use :SI. (define_predicate "cris_bdap_sign_extend_operand" - (and (match_code "sign_extend") - (and (match_test "MEM_P (XEXP (op, 0))") - (match_test "cris_simple_address_operand (XEXP (XEXP (op, 0), 0), - Pmode)")))) +; Disabled until +; or is committed. + (match_test "0")) +; (and (match_code "sign_extend") +; (and (match_test "MEM_P (XEXP (op, 0))") +; (match_test "cris_simple_address_operand (XEXP (XEXP (op, 0), 0), +; Pmode)")))) ;; FIXME: Should not have to test for 1. (define_predicate "cris_scale_int_operand" diff --git a/gcc/config/darwin-c.c b/gcc/config/darwin-c.c index 738f07c81a7..d044deb709c 100644 --- a/gcc/config/darwin-c.c +++ b/gcc/config/darwin-c.c @@ -28,6 +28,7 @@ Boston, MA 02110-1301, USA. */ #include "c-pragma.h" #include "c-tree.h" #include "c-incpath.h" +#include "c-common.h" #include "toplev.h" #include "flags.h" #include "tm_p.h" diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index a4b79c613e5..a78d1d33b07 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -140,14 +140,6 @@ Boston, MA 02110-1301, USA. */ { "-unexported_symbols_list", "-Zunexported_symbols_list" }, \ SUBTARGET_OPTION_TRANSLATE_TABLE -#define SUBTARGET_OS_CPP_BUILTINS() \ - do \ - { \ - if (flag_pic) \ - builtin_define ("__PIC__"); \ - } \ - while (0) - /* These compiler options take n arguments. */ #undef WORD_SWITCH_TAKES_ARG @@ -302,23 +294,31 @@ Boston, MA 02110-1301, USA. */ #define LIB_SPEC "%{!static:-lSystem}" -/* -dynamiclib implies -shared-libgcc just like -shared would on linux. - Support -mmacosx-version-min by supplying different (stub) libgcc_s.dylib - libraries to link against. */ +/* Support -mmacosx-version-min by supplying different (stub) libgcc_s.dylib + libraries to link against, and by not linking against libgcc_s on + earlier-than-10.3.9. + + Note that by default, -lgcc_eh is not linked against! This is + because in a future version of Darwin the EH frame information may + be in a new format, or the fallback routine might be changed; if + you want to explicitly link against the static version of those + routines, because you know you don't need to unwind through system + libraries, you need to explicitly say -static-libgcc. + + If it is linked against, it has to be before -lgcc, because it may + need symbols from -lgcc. */ #undef REAL_LIBGCC_SPEC -#define REAL_LIBGCC_SPEC \ - "%{static|static-libgcc:-lgcc -lgcc_eh; \ - :%{shared-libgcc|Zdynamiclib \ - :%:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \ - %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ - -lgcc; \ - :-lgcc -lgcc_eh}}" - +#define REAL_LIBGCC_SPEC \ + "%{static-libgcc|static: -lgcc_eh -lgcc; \ + shared-libgcc|fexceptions: \ + %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \ + %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ + -lgcc; \ + :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \ + %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \ + -lgcc}" + /* We specify crt0.o as -lcrt0.o so that ld will search the library path. */ -/* We don't want anything to do with crt2.o in the 64-bit case; - testing the PowerPC-specific -m64 flag here is a little irregular, - but it's overkill to make copies of this spec for each target - arch. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ @@ -326,11 +326,11 @@ Boston, MA 02110-1301, USA. */ %{!Zbundle:%{pg:%{static:-lgcrt0.o} \ %{!static:%{object:-lgcrt0.o} \ %{!object:%{preload:-lgcrt0.o} \ - %{!preload:-lgcrt1.o %{!m64: crt2.o%s}}}}} \ + %{!preload:-lgcrt1.o %(darwin_crt2)}}}} \ %{!pg:%{static:-lcrt0.o} \ %{!static:%{object:-lcrt0.o} \ %{!object:%{preload:-lcrt0.o} \ - %{!preload:-lcrt1.o %{!m64: crt2.o%s}}}}}}}" + %{!preload:-lcrt1.o %(darwin_crt2)}}}}}}" /* The native Darwin linker doesn't necessarily place files in the order that they're specified on the link line. Thus, it is pointless diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c index 4c637cb70ae..ccf927e8c3b 100644 --- a/gcc/config/fp-bit.c +++ b/gcc/config/fp-bit.c @@ -186,6 +186,22 @@ flip_sign ( fp_number_type * x) x->sign = !x->sign; } +/* Count leading zeroes in N. */ +INLINE +static int +clzusi (USItype n) +{ + extern int __clzsi2 (USItype); + if (sizeof (USItype) == sizeof (unsigned int)) + return __builtin_clz (n); + else if (sizeof (USItype) == sizeof (unsigned long)) + return __builtin_clzl (n); + else if (sizeof (USItype) == sizeof (unsigned long long)) + return __builtin_clzll (n); + else + return __clzsi2 (n); +} + extern FLO_type pack_d ( fp_number_type * ); #if defined(L_pack_df) || defined(L_pack_sf) || defined(L_pack_tf) @@ -1334,6 +1350,8 @@ si_to_float (SItype arg_a) } else { + USItype uarg; + int shift; in.normal_exp = FRACBITS + NGARDS; if (in.sign) { @@ -1343,15 +1361,17 @@ si_to_float (SItype arg_a) { return (FLO_type)(- MAX_SI_INT - 1); } - in.fraction.ll = (-arg_a); + uarg = (-arg_a); } else - in.fraction.ll = arg_a; + uarg = arg_a; - while (in.fraction.ll < ((fractype)1 << (FRACBITS + NGARDS))) + in.fraction.ll = uarg; + shift = clzusi (uarg) - (BITS_PER_SI - 1 - FRACBITS - NGARDS); + if (shift > 0) { - in.fraction.ll <<= 1; - in.normal_exp -= 1; + in.fraction.ll <<= shift; + in.normal_exp -= shift; } } return pack_d (&in); @@ -1371,19 +1391,23 @@ usi_to_float (USItype arg_a) } else { + int shift; in.class = CLASS_NUMBER; in.normal_exp = FRACBITS + NGARDS; in.fraction.ll = arg_a; - while (in.fraction.ll > ((fractype)1 << (FRACBITS + NGARDS))) - { - in.fraction.ll >>= 1; - in.normal_exp += 1; - } - while (in.fraction.ll < ((fractype)1 << (FRACBITS + NGARDS))) + shift = clzusi (arg_a) - (BITS_PER_SI - 1 - FRACBITS - NGARDS); + if (shift < 0) + { + fractype guard = in.fraction.ll & (((fractype)1 << -shift) - 1); + in.fraction.ll >>= -shift; + in.fraction.ll |= (guard != 0); + in.normal_exp -= shift; + } + else if (shift > 0) { - in.fraction.ll <<= 1; - in.normal_exp -= 1; + in.fraction.ll <<= shift; + in.normal_exp -= shift; } } return pack_d (&in); diff --git a/gcc/config/freebsd-spec.h b/gcc/config/freebsd-spec.h index f0e0bcd2e13..f60e94f3aed 100644 --- a/gcc/config/freebsd-spec.h +++ b/gcc/config/freebsd-spec.h @@ -85,7 +85,6 @@ Boston, MA 02110-1301, USA. */ #define FBSD_CPP_SPEC " \ %(cpp_cpu) \ %(cpp_arch) \ - %{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} \ %{posix:-D_POSIX_SOURCE}" /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add diff --git a/gcc/config/i386/beos-elf.h b/gcc/config/i386/beos-elf.h index 9f86eb7b6a5..f1e2cf8c6e1 100644 --- a/gcc/config/i386/beos-elf.h +++ b/gcc/config/i386/beos-elf.h @@ -67,11 +67,6 @@ Boston, MA 02110-1301, USA. */ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ builtin_assert ("system=beos"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index 7e8b2dcc0d2..89972339855 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -50,6 +50,7 @@ Boston, MA 02110-1301, USA. */ #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ { "darwin_arch", "i386" }, \ + { "darwin_crt2", "" }, \ { "darwin_subarch", "i386" }, /* Use the following macro for any Darwin/x86-specific command-line option diff --git a/gcc/config/i386/gnu.h b/gcc/config/i386/gnu.h index ce80c9821fd..d40ff7d664a 100644 --- a/gcc/config/i386/gnu.h +++ b/gcc/config/i386/gnu.h @@ -8,11 +8,6 @@ do \ { \ HURD_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7b3f8887996..fe96fe150ee 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -1331,7 +1331,8 @@ override_options (void) } if (ix86_asm_string != 0) { - if (!strcmp (ix86_asm_string, "intel")) + if (! TARGET_MACHO + && !strcmp (ix86_asm_string, "intel")) ix86_asm_dialect = ASM_INTEL; else if (!strcmp (ix86_asm_string, "att")) ix86_asm_dialect = ASM_ATT; @@ -3603,7 +3604,7 @@ ix86_value_regno (enum machine_mode mode, tree func, tree fntype) return FIRST_SSE_REG; /* Most things go in %eax, except (unless -mno-fp-ret-in-387) fp values. */ - if (GET_MODE_CLASS (mode) != MODE_FLOAT || !TARGET_FLOAT_RETURNS_IN_80387) + if (!SCALAR_FLOAT_MODE_P (mode) || !TARGET_FLOAT_RETURNS_IN_80387) return 0; /* Floating point return values in %st(0), except for local functions when @@ -6069,7 +6070,11 @@ legitimize_pic_address (rtx orig, rtx reg) { if (INTVAL (op1) < -16*1024*1024 || INTVAL (op1) >= 16*1024*1024) - new = gen_rtx_PLUS (Pmode, force_reg (Pmode, op0), op1); + { + if (!x86_64_immediate_operand (op1, Pmode)) + op1 = force_reg (Pmode, op1); + new = gen_rtx_PLUS (Pmode, force_reg (Pmode, op0), op1); + } } } else @@ -8989,7 +8994,7 @@ ix86_fp_compare_mode (enum rtx_code code ATTRIBUTE_UNUSED) enum machine_mode ix86_cc_mode (enum rtx_code code, rtx op0, rtx op1) { - if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (GET_MODE (op0))) return ix86_fp_compare_mode (code); switch (code) { @@ -9570,7 +9575,7 @@ ix86_expand_compare (enum rtx_code code, rtx *second_test, rtx *bypass_test) ret = gen_rtx_fmt_ee (code, VOIDmode, ix86_compare_emitted, const0_rtx); ix86_compare_emitted = NULL_RTX; } - else if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) + else if (SCALAR_FLOAT_MODE_P (GET_MODE (op0))) ret = ix86_expand_fp_compare (code, op0, op1, NULL_RTX, second_test, bypass_test); else diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 3e417b500da..6229eeafe67 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -312,8 +312,12 @@ (not (match_operand 0 "memory_operand" ""))) (const_int 0) (and (eq_attr "type" "imov") - (and (match_operand 0 "register_operand" "") - (match_operand 1 "immediate_operand" ""))) + (ior (and (match_operand 0 "register_operand" "") + (match_operand 1 "immediate_operand" "")) + (ior (and (match_operand 0 "ax_reg_operand" "") + (match_operand 1 "memory_displacement_only_operand" "")) + (and (match_operand 0 "memory_displacement_only_operand" "") + (match_operand 1 "ax_reg_operand" ""))))) (const_int 0) (and (eq_attr "type" "call") (match_operand 0 "constant_call_address_operand" "")) diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index f85a9ef6cbb..2d6fb680146 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -74,11 +74,6 @@ Boston, MA 02110-1301, USA. */ do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h index d3ab452db32..a3030945126 100644 --- a/gcc/config/i386/linux64.h +++ b/gcc/config/i386/linux64.h @@ -25,11 +25,6 @@ Boston, MA 02110-1301, USA. */ do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/i386/netware.h b/gcc/config/i386/netware.h index d5e79b4a7cf..197bdc5a6a2 100644 --- a/gcc/config/i386/netware.h +++ b/gcc/config/i386/netware.h @@ -142,7 +142,7 @@ Boston, MA 02110-1301, USA. */ differently depending on something about the variable or function named by the symbol (such as what section it is in). - On i386 running NetWare, modify the assembler name with an undercore (_) + On i386 running NetWare, modify the assembler name with an underscore (_) prefix and a suffix consisting of an atsign (@) followed by a string of digits that represents the number of bytes of arguments passed to the function, if it has the attribute STDCALL. Alternatively, if it has the diff --git a/gcc/config/i386/nto.h b/gcc/config/i386/nto.h index 92cf9f49df3..1095a631319 100644 --- a/gcc/config/i386/nto.h +++ b/gcc/config/i386/nto.h @@ -37,11 +37,6 @@ Boston, MA 02110-1301, USA. */ builtin_assert ("system=qnxnto"); \ builtin_assert ("system=nto"); \ builtin_assert ("system=unix"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index b61d2d25bde..4a7d88a7f5d 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -75,6 +75,11 @@ return REGNO (op) > LAST_VIRTUAL_REGISTER || REGNO (op) < 4; }) +;; Return true if op is the AX register. +(define_predicate "ax_reg_operand" + (and (match_code "reg") + (match_test "REGNO (op) == 0"))) + ;; Return true if op is the flags register. (define_predicate "flags_reg_operand" (and (match_code "reg") @@ -741,6 +746,22 @@ return parts.disp != NULL_RTX; }) +;; Returns 1 if OP is memory operand with a displacement only. +(define_predicate "memory_displacement_only_operand" + (match_operand 0 "memory_operand") +{ + struct ix86_address parts; + int ok; + + ok = ix86_decompose_address (XEXP (op, 0), &parts); + gcc_assert (ok); + + if (parts.base || parts.index) + return 0; + + return parts.disp != NULL_RTX; +}) + ;; Returns 1 if OP is memory operand that cannot be represented ;; by the modRM array. (define_predicate "long_memory_operand" diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h index 15d74fab150..026ffd832fb 100644 --- a/gcc/config/i386/sco5.h +++ b/gcc/config/i386/sco5.h @@ -221,11 +221,6 @@ Boston, MA 02110-1301, USA. */ builtin_assert ("system=svr3"); \ if (flag_iso) \ cpp_define (pfile, "_STRICT_ANSI"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 2e1cc1937d0..b11583d19a7 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -176,8 +176,6 @@ static rtx gen_fr_restore_x (rtx, rtx, rtx); static enum machine_mode hfa_element_mode (tree, bool); static void ia64_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); -static bool ia64_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, - tree, bool); static int ia64_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, tree, bool); static bool ia64_function_ok_for_sibcall (tree, tree); @@ -349,8 +347,6 @@ static const struct attribute_spec ia64_attribute_table[] = #undef TARGET_FUNCTION_OK_FOR_SIBCALL #define TARGET_FUNCTION_OK_FOR_SIBCALL ia64_function_ok_for_sibcall -#undef TARGET_PASS_BY_REFERENCE -#define TARGET_PASS_BY_REFERENCE ia64_pass_by_reference #undef TARGET_ARG_PARTIAL_BYTES #define TARGET_ARG_PARTIAL_BYTES ia64_arg_partial_bytes @@ -2117,7 +2113,7 @@ ia64_expand_atomic_op (enum rtx_code code, rtx mem, rtx val, emit_insn (GEN_FCN (icode) (cmp_reg, mem, ar_ccv, new_reg)); - emit_cmp_and_jump_insns (cmp_reg, old_reg, EQ, NULL, DImode, true, label); + emit_cmp_and_jump_insns (cmp_reg, old_reg, NE, NULL, DImode, true, label); } /* Begin the assembly file. */ @@ -4221,17 +4217,6 @@ ia64_function_arg_boundary (enum machine_mode mode, tree type) return PARM_BOUNDARY; } -/* Variable sized types are passed by reference. */ -/* ??? At present this is a GCC extension to the IA-64 ABI. */ - -static bool -ia64_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED, - enum machine_mode mode ATTRIBUTE_UNUSED, - tree type, bool named ATTRIBUTE_UNUSED) -{ - return type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST; -} - /* True if it is OK to do sibling call optimization for the specified call expression EXP. DECL will be the called function, or NULL if this is an indirect call. */ diff --git a/gcc/config/ia64/unwind-ia64.c b/gcc/config/ia64/unwind-ia64.c index 7608507e9e2..c1be3133fbe 100644 --- a/gcc/config/ia64/unwind-ia64.c +++ b/gcc/config/ia64/unwind-ia64.c @@ -2060,6 +2060,12 @@ uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) } } +static void +uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + uw_update_context (context, fs); +} + /* Fill in CONTEXT for top-of-stack. The only valid registers at this level will be the return address and the CFA. Note that CFA = SP+16. */ diff --git a/gcc/config/m32c/cond.md b/gcc/config/m32c/cond.md index 7ef695fa8b6..c6b42c79702 100644 --- a/gcc/config/m32c/cond.md +++ b/gcc/config/m32c/cond.md @@ -28,7 +28,7 @@ ; so instead we invert the conditional and jump around a regular jump. ; Note that we can, at some point in the future, add code to omit the -; "cmp" portion of the insn if the preceeding insn happened to set the +; "cmp" portion of the insn if the preceding insn happened to set the ; right flags already. For example, a mov followed by a "cmp *,0" is ; redundant; the move already set the Z flag. diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 4b85a426406..7f82a1cd3bf 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -112,11 +112,6 @@ builtin_assert ("machine=m32r"); \ builtin_define (TARGET_BIG_ENDIAN \ ? "__BIG_ENDIAN__" : "__LITTLE_ENDIAN__"); \ - if (flag_pic) \ - { \ - builtin_define ("__pic__"); \ - builtin_define ("__PIC__"); \ - } \ } \ while (0) diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h index 5a693d05739..5036af9f24c 100644 --- a/gcc/config/m68k/linux.h +++ b/gcc/config/m68k/linux.h @@ -94,10 +94,10 @@ Boston, MA 02110-1301, USA. */ #undef CPP_SPEC #if TARGET_DEFAULT & MASK_68881 #define CPP_SPEC \ - "%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} %{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" + "%{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" #else #define CPP_SPEC \ - "%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} %{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" + "%{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" #endif /* We override the ASM_SPEC from svr4.h because we must pass -m68040 down diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 5320749b464..3f140d4d127 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -92,12 +92,6 @@ Boston, MA 02110-1301, USA. */ } \ if (TARGET_CF_HWDIV) \ builtin_define ("__mcfhwdiv__"); \ - if (flag_pic) \ - { \ - builtin_define ("__pic__"); \ - if (flag_pic > 1) \ - builtin_define ("__PIC__"); \ - } \ builtin_assert ("cpu=m68k"); \ builtin_assert ("machine=m68k"); \ } \ diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 1a4df3bdf7d..8a6a555681d 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -1206,7 +1206,11 @@ [(set (match_operand:DI 0 "nonimmediate_operand" "") (zero_extend:DI (match_operand:SI 1 "nonimmediate_src_operand" "")))] "" - "") +{ + if (GET_CODE (operands[0]) == MEM + && GET_CODE (operands[1]) == MEM) + operands[1] = force_reg (SImode, operands[1]); +}) (define_insn_and_split "*zero_extendsidi2" [(set (match_operand:DI 0 "nonimmediate_operand" "") diff --git a/gcc/config/m68k/predicates.md b/gcc/config/m68k/predicates.md index 99c57c0bec3..ca97e0b75b0 100644 --- a/gcc/config/m68k/predicates.md +++ b/gcc/config/m68k/predicates.md @@ -76,11 +76,7 @@ ;; "general_src_operand". (define_predicate "pcrel_address" - (match_code "symbol_ref,label_ref,const") -{ - return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == LABEL_REF - || GET_CODE (op) == CONST); -}) + (match_code "symbol_ref,label_ref,const")) ;; Accept integer operands in the range 0..0xffffffff. We have to ;; check the range carefully since this predicate is used in DImode @@ -92,8 +88,7 @@ { /* It doesn't make sense to ask this question with a mode that is not larger than 32 bits. */ - if (GET_MODE_BITSIZE (mode) <= 32) - abort (); + gcc_assert (GET_MODE_BITSIZE (mode) > 32); #if HOST_BITS_PER_WIDE_INT > 32 /* All allowed constants will fit a CONST_INT. */ @@ -114,8 +109,7 @@ { /* It doesn't make sense to ask this question with a mode that is not larger than 32 bits. */ - if (GET_MODE_BITSIZE (mode) <= 32) - abort (); + gcc_assert (GET_MODE_BITSIZE (mode) > 32); /* All allowed constants will fit a CONST_INT. */ return (GET_CODE (op) == CONST_INT @@ -128,27 +122,13 @@ ;; some comparisons when CC_NO_OVERFLOW is set. (define_predicate "valid_dbcc_comparison_p" - (match_code "eq,ne,gtu,ltu,geu,leu,gt,lt,ge,le") -{ - return valid_dbcc_comparison_p_2 (op, mode); -}) + (and (match_code "eq,ne,gtu,ltu,geu,leu,gt,lt,ge,le") + (match_test "valid_dbcc_comparison_p_2 (op, mode)"))) ;; Check for sign_extend or zero_extend. Used for bit-count operands. (define_predicate "extend_operator" - (match_code "sign_extend,zero_extend") -{ - if (mode != VOIDmode && GET_MODE (op) != mode) - return 0; - switch (GET_CODE (op)) - { - case SIGN_EXTEND: - case ZERO_EXTEND: - return 1; - default: - return 0; - } -}) + (match_code "sign_extend,zero_extend")) ;; Returns true if OP is either a symbol reference or a sum of a ;; symbol reference and a constant. @@ -182,15 +162,11 @@ ;; TODO: Add a comment here. (define_predicate "post_inc_operand" - (match_code "mem") -{ - return MEM_P (op) && GET_CODE (XEXP (op, 0)) == POST_INC; -}) + (and (match_code "mem") + (match_test "GET_CODE (XEXP (op, 0)) == POST_INC"))) ;; TODO: Add a comment here. (define_predicate "pre_dec_operand" - (match_code "mem") -{ - return MEM_P (op) && GET_CODE (XEXP (op, 0)) == PRE_DEC; -}) + (and (match_code "mem") + (match_test "GET_CODE (XEXP (op, 0)) == PRE_DEC"))) diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h index a314508e04c..a135bba75a8 100644 --- a/gcc/config/mips/linux.h +++ b/gcc/config/mips/linux.h @@ -56,11 +56,6 @@ Boston, MA 02110-1301, USA. */ #define TARGET_OS_CPP_BUILTINS() \ do { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (TARGET_ABICALLS) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ /* The GNU C++ standard library requires this. */ \ if (c_dialect_cxx ()) \ builtin_define ("_GNU_SOURCE"); \ diff --git a/gcc/config/mn10300/mn10300-protos.h b/gcc/config/mn10300/mn10300-protos.h index b094c853b4d..1566ccc5b8a 100644 --- a/gcc/config/mn10300/mn10300-protos.h +++ b/gcc/config/mn10300/mn10300-protos.h @@ -36,8 +36,8 @@ extern void mn10300_print_reg_list (FILE *, int); extern int mn10300_get_live_callee_saved_regs (void); extern void mn10300_gen_multiple_store (int); extern void notice_update_cc (rtx, rtx); -extern enum reg_class secondary_reload_class (enum reg_class, - enum machine_mode, rtx); +extern enum reg_class mn10300_secondary_reload_class (enum reg_class, + enum machine_mode, rtx); extern const char *output_tst (rtx, rtx); extern int store_multiple_operation (rtx, enum machine_mode); extern int symbolic_operand (rtx, enum machine_mode); diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index cf0fc9fc146..f63d77846db 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -1337,7 +1337,8 @@ store_multiple_operation (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) We might be able to simplify this. */ enum reg_class -secondary_reload_class (enum reg_class class, enum machine_mode mode, rtx in) +mn10300_secondary_reload_class (enum reg_class class, enum machine_mode mode, + rtx in) { /* Memory loads less than a full word wide can't have an address or stack pointer destination. They must use diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index b102c398306..84dd106f994 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -425,7 +425,7 @@ enum reg_class { (!TARGET_AM33 && (MODE == QImode || MODE == HImode) ? DATA_REGS : CLASS) #define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \ - secondary_reload_class(CLASS,MODE,IN) + mn10300_secondary_reload_class(CLASS,MODE,IN) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ diff --git a/gcc/config/ms1/crtn.asm b/gcc/config/ms1/crtn.asm index 1fa42ac56a4..5fbe7ece969 100644 --- a/gcc/config/ms1/crtn.asm +++ b/gcc/config/ms1/crtn.asm @@ -42,6 +42,7 @@ .align 4 ldw r14, sp, #0 addi sp, sp, #4 + nop jal r0, r14 or r0, r0, r0 @@ -50,5 +51,6 @@ ldw r14, sp, #0 addi sp, sp, #4 + nop jal r0, r14 or r0, r0, r0 diff --git a/gcc/config/ms1/ms1.c b/gcc/config/ms1/ms1.c index 25ba78ec40b..19f02a1c746 100644 --- a/gcc/config/ms1/ms1.c +++ b/gcc/config/ms1/ms1.c @@ -84,6 +84,8 @@ struct ms1_frame_info zero_frame_info; /* ms1 doesn't have unsigned compares need a library call for this. */ struct rtx_def * ms1_ucmpsi3_libcall; +static int ms1_flag_delayed_branch; + static rtx ms1_struct_value_rtx (tree fndecl ATTRIBUTE_UNUSED, @@ -125,13 +127,6 @@ ms1_asm_output_opcode (FILE *f ATTRIBUTE_UNUSED, const char *ptr) return ptr; } -/* Return TRUE if INSN is a memory load. */ -static bool -ms1_memory_load (rtx insn) -{ - return ((GET_CODE (insn) == SET) && (GET_CODE (XEXP (insn,1)) == MEM)); -} - /* Given an insn, return whether it's a memory operation or a branch operation, otherwise return TYPE_ARITH. */ static enum attr_type @@ -139,18 +134,24 @@ ms1_get_attr_type (rtx complete_insn) { rtx insn = PATTERN (complete_insn); - if ((GET_CODE (insn) == SET) - && ((GET_CODE (XEXP (insn, 0)) == MEM) - || (GET_CODE (XEXP (insn, 1)) == MEM))) - return TYPE_MEM; - - else if (((GET_CODE (insn) == SET) && (XEXP (insn, 0) == pc_rtx)) - || (GET_CODE (complete_insn) == JUMP_INSN) - || (GET_CODE (complete_insn) == CALL_INSN)) + if (JUMP_P (complete_insn)) + return TYPE_BRANCH; + if (CALL_P (complete_insn)) return TYPE_BRANCH; - else + if (GET_CODE (insn) != SET) return TYPE_ARITH; + + if (SET_DEST (insn) == pc_rtx) + return TYPE_BRANCH; + + if (GET_CODE (SET_DEST (insn)) == MEM) + return TYPE_STORE; + + if (GET_CODE (SET_SRC (insn)) == MEM) + return TYPE_LOAD; + + return TYPE_ARITH; } /* A helper routine for insn_dependent_p called through note_stores. */ @@ -212,35 +213,48 @@ ms1_final_prescan_insn (rtx insn, int noperands ATTRIBUTE_UNUSED) { rtx prev_i; + enum attr_type prev_attr; ms1_nops_required = 0; ms1_nop_reasons = ""; + /* ms2 constraints are dealt with in reorg. */ + if (ms1_cpu == PROCESSOR_MS2) + return; + /* Only worry about real instructions. */ if (! INSN_P (insn)) return; /* Find the previous real instructions. */ - prev_i = PREV_INSN (insn); - while (prev_i != NULL + for (prev_i = PREV_INSN (insn); + prev_i != NULL && (! INSN_P (prev_i) || GET_CODE (PATTERN (prev_i)) == USE - || GET_CODE (PATTERN (prev_i)) == CLOBBER)) - prev_i = PREV_INSN (prev_i); - + || GET_CODE (PATTERN (prev_i)) == CLOBBER); + prev_i = PREV_INSN (prev_i)) + { + /* If we meet a barrier, there is no flow through here. */ + if (BARRIER_P (prev_i)) + return; + } + /* If there isn't one then there is nothing that we need do. */ if (prev_i == NULL || ! INSN_P (prev_i)) return; + prev_attr = ms1_get_attr_type (prev_i); + /* Delayed branch slots already taken care of by delay branch scheduling. */ - if (ms1_get_attr_type (prev_i) == TYPE_BRANCH) + if (prev_attr == TYPE_BRANCH) return; switch (ms1_get_attr_type (insn)) { - case TYPE_MEM: + case TYPE_LOAD: + case TYPE_STORE: /* Avoid consecutive memory operation. */ - if (ms1_get_attr_type (prev_i) == TYPE_MEM + if ((prev_attr == TYPE_LOAD || prev_attr == TYPE_STORE) && ms1_cpu == PROCESSOR_MS1_64_001) { ms1_nops_required = 1; @@ -252,7 +266,7 @@ ms1_final_prescan_insn (rtx insn, case TYPE_COMPLEX: /* One cycle of delay is required between load and the dependent arithmetic instruction. */ - if (ms1_memory_load (PATTERN (prev_i)) + if (prev_attr == TYPE_LOAD && insn_true_dependent_p (prev_i, insn)) { ms1_nops_required = 1; @@ -263,7 +277,7 @@ ms1_final_prescan_insn (rtx insn, case TYPE_BRANCH: if (insn_dependent_p (prev_i, insn)) { - if (ms1_get_attr_type (prev_i) == TYPE_ARITH + if (prev_attr == TYPE_ARITH && ms1_cpu == PROCESSOR_MS1_64_001) { /* One cycle of delay between arith @@ -271,7 +285,7 @@ ms1_final_prescan_insn (rtx insn, ms1_nops_required = 1; ms1_nop_reasons = "arith->branch dependency delay"; } - else if (ms1_memory_load (PATTERN (prev_i))) + else if (prev_attr == TYPE_LOAD) { /* Two cycles of delay are required between load and dependent branch. */ @@ -790,10 +804,9 @@ ms1_override_options (void) else if (!strcasecmp (ms1_cpu_string, "MS1-16-002")) ms1_cpu = PROCESSOR_MS1_16_002; else if (!strcasecmp (ms1_cpu_string, "MS1-16-003")) - { - ms1_cpu = PROCESSOR_MS1_16_003; - target_flags |= MASK_MUL; - } + ms1_cpu = PROCESSOR_MS1_16_003; + else if (!strcasecmp (ms1_cpu_string, "MS2")) + ms1_cpu = PROCESSOR_MS2; else error ("bad value (%s) for -march= switch", ms1_cpu_string); } @@ -806,6 +819,10 @@ ms1_override_options (void) flag_gcse = 0; } + /* We do delayed branch filling in machine dependent reorg */ + ms1_flag_delayed_branch = flag_delayed_branch; + flag_delayed_branch = 0; + init_machine_status = ms1_init_machine_status; } @@ -1631,6 +1648,315 @@ ms1_pass_in_stack (enum machine_mode mode ATTRIBUTE_UNUSED, tree type) || TREE_ADDRESSABLE (type)))); } + +/* Structures to hold branch information during reorg. */ +typedef struct branch_info +{ + rtx insn; /* The branch insn. */ + + struct branch_info *next; +} branch_info; + +typedef struct label_info +{ + rtx label; /* The label. */ + branch_info *branches; /* branches to this label. */ + struct label_info *next; +} label_info; + +/* Chain of labels found in current function, used during reorg. */ +static label_info *ms1_labels; + +/* If *X is a label, add INSN to the list of branches for that + label. */ + +static int +ms1_add_branches (rtx *x, void *insn) +{ + if (GET_CODE (*x) == LABEL_REF) + { + branch_info *branch = xmalloc (sizeof (*branch)); + rtx label = XEXP (*x, 0); + label_info *info; + + for (info = ms1_labels; info; info = info->next) + if (info->label == label) + break; + + if (!info) + { + info = xmalloc (sizeof (*info)); + info->next = ms1_labels; + ms1_labels = info; + + info->label = label; + info->branches = NULL; + } + + branch->next = info->branches; + info->branches = branch; + branch->insn = insn; + } + return 0; +} + +/* If BRANCH has a filled delay slot, check if INSN is dependent upon + it. If so, undo the delay slot fill. Returns the next insn, if + we patch out the branch. Returns the branch insn, if we cannot + patch out the branch (due to anti-dependency in the delay slot). + In that case, the caller must insert nops at the branch target. */ + +static rtx +ms1_check_delay_slot (rtx branch, rtx insn) +{ + rtx slot; + rtx tmp; + rtx p; + rtx jmp; + + gcc_assert (GET_CODE (PATTERN (branch)) == SEQUENCE); + if (INSN_DELETED_P (branch)) + return NULL_RTX; + slot = XVECEXP (PATTERN (branch), 0, 1); + + tmp = PATTERN (insn); + note_stores (PATTERN (slot), insn_dependent_p_1, &tmp); + if (tmp) + /* Not dependent. */ + return NULL_RTX; + + /* Undo the delay slot. */ + jmp = XVECEXP (PATTERN (branch), 0, 0); + + tmp = PATTERN (jmp); + note_stores (PATTERN (slot), insn_dependent_p_1, &tmp); + if (!tmp) + /* Anti dependent. */ + return branch; + + p = PREV_INSN (branch); + NEXT_INSN (p) = slot; + PREV_INSN (slot) = p; + NEXT_INSN (slot) = jmp; + PREV_INSN (jmp) = slot; + NEXT_INSN (jmp) = branch; + PREV_INSN (branch) = jmp; + XVECEXP (PATTERN (branch), 0, 0) = NULL_RTX; + XVECEXP (PATTERN (branch), 0, 1) = NULL_RTX; + delete_insn (branch); + return jmp; +} + +/* Insert nops to satisfy pipeline constraints. We only deal with ms2 + constraints here. Earlier CPUs are dealt with by inserting nops with + final_prescan (but that can lead to inferior code, and is + impractical with ms2's JAL hazard). + + ms2 dynamic constraints + 1) a load and a following use must be separated by one insn + 2) an insn and a following dependent call must be separated by two insns + + only arith insns are placed in delay slots so #1 cannot happen with + a load in a delay slot. #2 can happen with an arith insn in the + delay slot. */ + +static void +ms1_reorg_hazard (void) +{ + rtx insn, next; + + /* Find all the branches */ + for (insn = get_insns (); + insn; + insn = NEXT_INSN (insn)) + { + rtx jmp; + + if (!INSN_P (insn)) + continue; + + jmp = PATTERN (insn); + + if (GET_CODE (jmp) != SEQUENCE) + /* If it's not got a filled delay slot, then it can't + conflict. */ + continue; + + jmp = XVECEXP (jmp, 0, 0); + + if (recog_memoized (jmp) == CODE_FOR_tablejump) + for (jmp = XEXP (XEXP (XVECEXP (PATTERN (jmp), 0, 1), 0), 0); + !JUMP_TABLE_DATA_P (jmp); + jmp = NEXT_INSN (jmp)) + continue; + + for_each_rtx (&PATTERN (jmp), ms1_add_branches, insn); + } + + /* Now scan for dependencies. */ + for (insn = get_insns (); + insn && !INSN_P (insn); + insn = NEXT_INSN (insn)) + continue; + + for (; + insn; + insn = next) + { + rtx jmp, tmp; + enum attr_type attr; + + gcc_assert (INSN_P (insn) && !INSN_DELETED_P (insn)); + for (next = NEXT_INSN (insn); + next && !INSN_P (next); + next = NEXT_INSN (next)) + continue; + + jmp = insn; + if (GET_CODE (PATTERN (insn)) == SEQUENCE) + jmp = XVECEXP (PATTERN (insn), 0, 0); + + attr = recog_memoized (jmp) >= 0 ? get_attr_type (jmp) : TYPE_UNKNOWN; + + if (next && attr == TYPE_LOAD) + { + /* A load. See if NEXT is dependent, and if so insert a + nop. */ + + tmp = PATTERN (next); + if (GET_CODE (tmp) == SEQUENCE) + tmp = PATTERN (XVECEXP (tmp, 0, 0)); + note_stores (PATTERN (insn), insn_dependent_p_1, &tmp); + if (!tmp) + emit_insn_after (gen_nop (), insn); + } + + if (attr == TYPE_CALL) + { + /* A call. Make sure we're not dependent on either of the + previous two dynamic instructions. */ + int nops = 0; + int count; + rtx prev = insn; + rtx rescan = NULL_RTX; + + for (count = 2; count && !nops;) + { + int type; + + prev = PREV_INSN (prev); + if (!prev) + { + /* If we reach the start of the function, we must + presume the caller set the address in the delay + slot of the call instruction. */ + nops = count; + break; + } + + if (BARRIER_P (prev)) + break; + if (LABEL_P (prev)) + { + /* Look at branches to this label. */ + label_info *label; + branch_info *branch; + + for (label = ms1_labels; + label; + label = label->next) + if (label->label == prev) + { + for (branch = label->branches; + branch; + branch = branch->next) + { + tmp = ms1_check_delay_slot (branch->insn, jmp); + + if (tmp == branch->insn) + { + nops = count; + break; + } + + if (tmp && branch->insn == next) + rescan = tmp; + } + break; + } + continue; + } + if (!INSN_P (prev)) + continue; + + if (GET_CODE (PATTERN (prev)) == SEQUENCE) + { + /* Look at the delay slot. */ + tmp = ms1_check_delay_slot (prev, jmp); + if (tmp == prev) + nops = count; + break; + } + + type = (INSN_CODE (prev) >= 0 ? get_attr_type (prev) + : TYPE_COMPLEX); + if (type == TYPE_CALL || type == TYPE_BRANCH) + break; + + if (type == TYPE_LOAD + || type == TYPE_ARITH + || type == TYPE_COMPLEX) + { + tmp = PATTERN (jmp); + note_stores (PATTERN (prev), insn_dependent_p_1, &tmp); + if (!tmp) + { + nops = count; + break; + } + } + count -= INSN_CODE (prev) >= 0; + } + + if (rescan) + for (next = NEXT_INSN (rescan); + next && !INSN_P (next); + next = NEXT_INSN (next)) + continue; + while (nops--) + emit_insn_before (gen_nop (), insn); + } + } + + /* Free the data structures. */ + while (ms1_labels) + { + label_info *label = ms1_labels; + branch_info *branch, *next; + + ms1_labels = label->next; + for (branch = label->branches; branch; branch = next) + { + next = branch->next; + free (branch); + } + free (label); + } +} + +/* Fixup the looping instructions, do delayed branch scheduling, fixup + scheduling hazards. */ + +static void +ms1_machine_reorg (void) +{ + if (ms1_flag_delayed_branch) + dbr_schedule (get_insns (), dump_file); + + if (ms1_cpu == PROCESSOR_MS2) + ms1_reorg_hazard (); +} + /* Initialize the GCC target structure. */ const struct attribute_spec ms1_attribute_table[]; @@ -1646,6 +1972,8 @@ const struct attribute_spec ms1_attribute_table[]; #define TARGET_MUST_PASS_IN_STACK ms1_pass_in_stack #undef TARGET_ARG_PARTIAL_BYTES #define TARGET_ARG_PARTIAL_BYTES ms1_arg_partial_bytes +#undef TARGET_MACHINE_DEPENDENT_REORG +#define TARGET_MACHINE_DEPENDENT_REORG ms1_machine_reorg struct gcc_target targetm = TARGET_INITIALIZER; diff --git a/gcc/config/ms1/ms1.h b/gcc/config/ms1/ms1.h index 477c9ccdbff..aa01831ade4 100644 --- a/gcc/config/ms1/ms1.h +++ b/gcc/config/ms1/ms1.h @@ -25,7 +25,8 @@ enum processor_type { PROCESSOR_MS1_64_001, PROCESSOR_MS1_16_002, - PROCESSOR_MS1_16_003 + PROCESSOR_MS1_16_003, + PROCESSOR_MS2 }; enum epilogue_type @@ -40,9 +41,9 @@ extern enum processor_type ms1_cpu; /* A C string constant that tells the GCC driver program options to pass to the assembler. */ #undef ASM_SPEC -#define ASM_SPEC "%{march=ms1-16-002: -march=ms1-16-002} %{march=ms1-16-003: -march=ms1-16-003} %{!march=*: -march=ms1-16-002}" +#define ASM_SPEC "%{march=ms1-16-002: -march=ms1-16-002} %{march=ms1-16-003: -march=ms1-16-003} %{march=ms2: -march=ms2} %{!march=*: -march=ms1-16-002}" -/* A string to pass to at the end of the comman given to the linker. */ +/* A string to pass to at the end of the command given to the linker. */ #undef LIB_SPEC #define LIB_SPEC "--start-group -lc -lsim --end-group \ %{msim: ; \ @@ -51,7 +52,9 @@ march=MS1-64-001:-T 64-001.ld%s; \ march=ms1-16-002:-T 16-002.ld%s; \ march=MS1-16-002:-T 16-002.ld%s; \ march=ms1-16-003:-T 16-003.ld%s; \ -march=MS1-16-003:-T 16-003.ld%s}" +march=MS1-16-003:-T 16-003.ld%s; \ +march=ms2:-T ms2.ld%s; \ +march=MS2:-T ms2.ld%s}" /* A string to pass at the very beginning of the command given to the linker. */ @@ -62,7 +65,9 @@ march=MS1-64-001:%{!mno-crt0:crt0-64-001.o%s} startup-64-001.o%s; \ march=ms1-16-002:%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s; \ march=MS1-16-002:%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s; \ march=ms1-16-003:%{!mno-crt0:crt0-16-003.o%s} startup-16-003.o%s; \ -march=MS1-16-003:%{!mno-crt0:crt0-16-003.o%s} startup-16-003.o%s} \ +march=MS1-16-003:%{!mno-crt0:crt0-16-003.o%s} startup-16-003.o%s; \ +march=ms2:%{!mno-crt0:crt0-ms2.o%s} startup-ms2.o%s; \ +march=MS2:%{!mno-crt0:crt0-ms2.o%s} startup-ms2.o%s} \ crti.o%s crtbegin.o%s" /* A string to pass at the end of the command given to the linker. */ @@ -73,7 +78,9 @@ march=MS1-64-001:exit-64-001.o%s; \ march=ms1-16-002:exit-16-002.o%s; \ march=MS1-16-002:exit-16-002.o%s; \ march=ms1-16-003:exit-16-003.o%s; \ -march=MS1-16-003:exit-16-003.o%s} \ +march=MS1-16-003:exit-16-003.o%s; \ +march=ms2:exit-ms2.o%s; \ +march=MS2:exit-ms2.o%s} \ crtend.o%s crtn.o%s" /* Run-time target specifications. */ @@ -89,6 +96,7 @@ march=MS1-16-003:exit-16-003.o%s} \ #define TARGET_MS1_64_001 (ms1_cpu == PROCESSOR_MS1_64_001) #define TARGET_MS1_16_002 (ms1_cpu == PROCESSOR_MS1_16_002) #define TARGET_MS1_16_003 (ms1_cpu == PROCESSOR_MS1_16_003) +#define TARGET_MS2 (ms1_cpu == PROCESSOR_MS2) #define TARGET_VERSION fprintf (stderr, " (ms1)"); diff --git a/gcc/config/ms1/ms1.md b/gcc/config/ms1/ms1.md index b96dfc07d60..1d5ff5266f3 100644 --- a/gcc/config/ms1/ms1.md +++ b/gcc/config/ms1/ms1.md @@ -19,8 +19,16 @@ ;; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ;; 02110-1301, USA. +;; UNSPECs +(define_constants + [ + (UNSPEC_BLOCKAGE 0) + (UNSPEC_EI 1) + (UNSPEC_DI 2) + ]) + ;; Attributes -(define_attr "type" "branch,mem,io,arith,complex,unknown" +(define_attr "type" "branch,call,load,store,io,arith,complex,unknown" (const_string "unknown") ) ;; If the attribute takes numeric values, no `enum' type will be defined and @@ -36,7 +44,7 @@ (define_cpu_unit "branch_unit" "other") (define_insn_reservation "mem_access" 2 - (eq_attr "type" "mem") + (ior (eq_attr "type" "load") (eq_attr "type" "store")) "decode_unit+memory_unit*2") (define_insn_reservation "io_access" 2 @@ -44,7 +52,8 @@ "decode_unit+memory_unit*2") (define_insn_reservation "branch_access" 2 - (eq_attr "type" "branch") + (ior (eq_attr "type" "branch") + (eq_attr "type" "call")) "decode_unit+branch_unit*2") (define_insn_reservation "arith_access" 1 @@ -64,7 +73,8 @@ ;; the destination of the branch. Thus, only type that will be acceptable ;; (safe) is the arith type. -(define_delay (eq_attr "type" "branch") +(define_delay (ior (eq_attr "type" "branch") + (eq_attr "type" "call")) [(eq_attr "type" "arith") (nil) (nil)]) @@ -79,7 +89,7 @@ (plus:SI (match_dup 0) (const_int -1))) (clobber (match_scratch:SI 2 "=X,r"))] - "TARGET_MS1_16_003" + "TARGET_MS1_16_003 || TARGET_MS2" "@ dbnz\t%0, %l1%# #" @@ -98,9 +108,10 @@ (set (match_dup 0) (plus:SI (match_dup 0) (const_int -1)))] - "TARGET_MS1_16_003" + "TARGET_MS1_16_003 || TARGET_MS2" "dbnz\t%0, %l1%#" - [(set_attr "length" "4")] + [(set_attr "length" "4") + (set_attr "type" "branch")] ) ;; Split the above to handle the case where operand 0 is in memory @@ -116,7 +127,7 @@ (plus:SI (match_dup 0) (const_int -1))) (clobber (match_scratch:SI 2 ""))] - "TARGET_MS1_16_003" + "TARGET_MS1_16_003 || TARGET_MS2" [(set (match_dup 2) (match_dup 0)) (set (match_dup 2) (plus:SI (match_dup 2) (const_int -1))) (set (match_dup 0) (match_dup 2)) @@ -143,7 +154,7 @@ (label_ref (match_operand 2 "" "")) (pc))) ] - "TARGET_MS1_16_003" + "TARGET_MS1_16_003 || TARGET_MS2" [(parallel [(set (pc) (if_then_else (ne (match_dup 0) (const_int 0)) @@ -308,7 +319,7 @@ stb %1, %0 addi %0, r0, %1" [(set_attr "length" "4,4,4,4") - (set_attr "type" "arith,mem,mem,arith")]) + (set_attr "type" "arith,load,store,arith")]) (define_insn "*movqi_internal_nobyte" [(set (match_operand:QI 0 "register_operand" "=r,r") @@ -566,7 +577,7 @@ nori %0, r0, %N1 ldui %0, %H1\;addui %0, %0, %L1" [(set_attr "length" "4,4,4,4,4,4,4,8") - (set_attr "type" "arith,mem,mem,arith,arith,arith,arith,complex")] + (set_attr "type" "arith,load,store,arith,arith,arith,arith,complex")] ) ;; Floating Point Moves @@ -641,7 +652,7 @@ ldw %0, %1 stw %1, %0" [(set_attr "length" "4,4,4") - (set_attr "type" "arith,mem,mem")] + (set_attr "type" "arith,load,store")] ) (define_expand "movdf" @@ -1269,7 +1280,7 @@ "" "jal r14, %0%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) (define_expand "call_value" [(parallel [(set (match_operand 0 "register_operand" "") @@ -1292,7 +1303,7 @@ "" "jal r14, %1%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) ;; Subroutine return (define_insn "return_internal" @@ -1302,7 +1313,7 @@ "" "jal r0, r14%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) ;; Interrupt return (define_insn "return_interrupt_internal" @@ -1312,7 +1323,7 @@ "" "reti r15%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) ;; Subroutine return (define_insn "eh_return_internal" @@ -1324,7 +1335,7 @@ "" "jal r0, r11%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) ;; Normal unconditional jump @@ -1341,7 +1352,7 @@ "" "jal r0,%0%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) (define_insn "tablejump" [(set (pc) (match_operand:SI 0 "register_operand" "r")) @@ -1349,7 +1360,7 @@ "" "jal r0, %0%#" [(set_attr "length" "4") - (set_attr "type" "branch")]) + (set_attr "type" "call")]) (define_expand "prologue" @@ -1412,7 +1423,7 @@ ;; Pseudo instruction that prevents the scheduler from moving code above this ;; point. (define_insn "blockage" - [(unspec_volatile [(const_int 0)] 0)] + [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)] "" "" [(set_attr "length" "0")]) @@ -1442,14 +1453,14 @@ ;; Enable interrupts template (define_insn "ei" - [(unspec_volatile [(const_int 0)] 1)] + [(unspec_volatile [(const_int 0)] UNSPEC_EI)] "" "ei" [(set_attr "length" "4")]) ;; Enable interrupts template (define_insn "di" - [(unspec_volatile [(const_int 0)] 2)] + [(unspec_volatile [(const_int 0)] UNSPEC_DI)] "" "di" [(set_attr "length" "4")]) diff --git a/gcc/config/pa/hpux-unwind.h b/gcc/config/pa/hpux-unwind.h new file mode 100644 index 00000000000..aa443bfba0b --- /dev/null +++ b/gcc/config/pa/hpux-unwind.h @@ -0,0 +1,316 @@ +/* DWARF2 EH unwinding support for PA HP-UX. + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file with other programs, and to distribute +those programs without any restriction coming from the use of this +file. (The General Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into another program.) + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to +the Free Software Foundation, 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ + +/* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + +#include +#include +#include + +/* FIXME: We currently ignore the high halves of general, space and + control registers on PA 2.0 machines for applications using the + 32-bit runtime. We don't restore space registers or the floating + point status registers. */ + +#define MD_FALLBACK_FRAME_STATE_FOR pa_fallback_frame_state + +/* HP-UX 10.X doesn't define GetSSReg. */ +#ifndef GetSSReg +#define GetSSReg(ssp, ss_reg) \ + ((UseWideRegs (ssp)) \ + ? (ssp)->ss_wide.ss_32.ss_reg ## _lo \ + : (ssp)->ss_narrow.ss_reg) +#endif + +#if TARGET_64BIT +#define GetSSRegAddr(ssp, ss_reg) ((long) &((ssp)->ss_wide.ss_64.ss_reg)) +#else +#define GetSSRegAddr(ssp, ss_reg) \ + ((UseWideRegs (ssp)) \ + ? (long) &((ssp)->ss_wide.ss_32.ss_reg ## _lo) \ + : (long) &((ssp)->ss_narrow.ss_reg)) +#endif + +#define UPDATE_FS_FOR_SAR(FS, N) \ + (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[N].loc.offset = GetSSRegAddr (mc, ss_cr11) - new_cfa + +#define UPDATE_FS_FOR_GR(FS, GRN, N) \ + (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[N].loc.offset = GetSSRegAddr (mc, ss_gr##GRN) - new_cfa + +#define UPDATE_FS_FOR_FR(FS, FRN, N) \ + (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[N].loc.offset = (long) &(mc->ss_fr##FRN) - new_cfa; + +#define UPDATE_FS_FOR_PC(FS, N) \ + (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[N].loc.offset = GetSSRegAddr (mc, ss_pcoq_head) - new_cfa + +/* Extract bit field from word using HP's numbering (MSB = 0). */ +#define GET_FIELD(X, FROM, TO) \ + ((X) >> (31 - (TO)) & ((1 << ((TO) - (FROM) + 1)) - 1)) + +static inline int +sign_extend (int x, int len) +{ + int signbit = (1 << (len - 1)); + int mask = (signbit << 1) - 1; + return ((x & mask) ^ signbit) - signbit; +} + +/* Extract a 17-bit signed constant from branch instructions. */ +static inline int +extract_17 (unsigned word) +{ + return sign_extend (GET_FIELD (word, 19, 28) + | GET_FIELD (word, 29, 29) << 10 + | GET_FIELD (word, 11, 15) << 11 + | (word & 0x1) << 16, 17); +} + +/* Extract a 22-bit signed constant from branch instructions. */ +static inline int +extract_22 (unsigned word) +{ + return sign_extend (GET_FIELD (word, 19, 28) + | GET_FIELD (word, 29, 29) << 10 + | GET_FIELD (word, 11, 15) << 11 + | GET_FIELD (word, 6, 10) << 16 + | (word & 0x1) << 21, 22); +} + +static _Unwind_Reason_Code +pa_fallback_frame_state (struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + static long cpu; + unsigned int *pc = (unsigned int *) context->ra; + + if (pc == 0) + return _URC_END_OF_STACK; + + /* Check if the return address points to an export stub (PA 1.1 or 2.0). */ + if ((!TARGET_64BIT + && *(pc + 0) == 0x4bc23fd1 /* ldw -18(sp),rp */ + && *(pc + 1) == 0x004010a1 /* ldsid (rp),r1 */ + && *(pc + 2) == 0x00011820 /* mtsp r1,sr0 */ + && *(pc + 3) == 0xe0400002) /* be,n 0(sr0,rp) */ + || + (!TARGET_64BIT + && *(pc + 0) == 0x4bc23fd1 /* ldw -18(sp),rp */ + && *(pc + 1) == 0xe840d002)) /* bve,n (rp) */ + { + fs->cfa_how = CFA_REG_OFFSET; + fs->cfa_reg = 30; + fs->cfa_offset = 0; + + fs->retaddr_column = 0; + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = -24; + + return _URC_NO_REASON; + } + + /* Check if the return address is an export stub as signal handlers + may return via an export stub. */ + if (!TARGET_64BIT + && (*pc & 0xffe0e002) == 0xe8400000 /* bl x,r2 */ + && *(pc + 1) == 0x08000240 /* nop */ + && *(pc + 2) == 0x4bc23fd1 /* ldw -18(sp),rp */ + && *(pc + 3) == 0x004010a1 /* ldsid (rp),r1 */ + && *(pc + 4) == 0x00011820 /* mtsp r1,sr0 */ + && *(pc + 5) == 0xe0400002) /* be,n 0(sr0,rp) */ + /* Extract target address from PA 1.x 17-bit branch. */ + pc += extract_17 (*pc) + 2; + else if (!TARGET_64BIT + && (*pc & 0xfc00e002) == 0xe800a000 /* b,l x,r2 */ + && *(pc + 1) == 0x08000240 /* nop */ + && *(pc + 2) == 0x4bc23fd1 /* ldw -18(sp),rp */ + && *(pc + 3) == 0xe840d002) /* bve,n (rp) */ + /* Extract target address from PA 2.0 22-bit branch. */ + pc += extract_22 (*pc) + 2; + + /* Now check if the return address is one of the signal handler + returns, _sigreturn or _sigsetreturn. */ + if ((TARGET_64BIT + && *(pc + 0) == 0x53db3f51 /* ldd -58(sp),dp */ + && *(pc + 8) == 0x34160116 /* ldi 8b,r22 */ + && *(pc + 9) == 0x08360ac1 /* shladd,l r22,3,r1,r1 */ + && *(pc + 10) == 0x0c2010c1 /* ldd 0(r1),r1 */ + && *(pc + 11) == 0xe4202000) /* be,l 0(sr4,r1) */ + || + (TARGET_64BIT + && *(pc + 0) == 0x36dc0000 /* ldo 0(r22),ret0 */ + && *(pc + 6) == 0x341601c0 /* ldi e0,r22 */ + && *(pc + 7) == 0x08360ac1 /* shladd,l r22,3,r1,r1 */ + && *(pc + 8) == 0x0c2010c1 /* ldd 0(r1),r1 */ + && *(pc + 9) == 0xe4202000) /* be,l 0(sr4,r1) */ + || + (!TARGET_64BIT + && *(pc + 0) == 0x379a0000 /* ldo 0(ret0),r26 */ + && *(pc + 1) == 0x6bd33fc9 /* stw r19,-1c(sp) */ + && *(pc + 2) == 0x20200801 /* ldil L%-40000000,r1 */ + && *(pc + 3) == 0xe420e008 /* be,l 4(sr7,r1) */ + && *(pc + 4) == 0x34160116) /* ldi 8b,r22 */ + || + (!TARGET_64BIT + && *(pc + 0) == 0x6bd33fc9 /* stw r19,-1c(sp) */ + && *(pc + 1) == 0x20200801 /* ldil L%-40000000,r1 */ + && *(pc + 2) == 0xe420e008 /* be,l 4(sr7,r1) */ + && *(pc + 3) == 0x341601c0)) /* ldi e0,r22 */ + { + /* The previous stack pointer is saved at (long *)SP - 1. The + ucontext structure is offset from the start of the previous + frame by the siglocal_misc structure. */ + struct siglocalx *sl = (struct siglocalx *) + (*((long *) context->cfa - 1)); + mcontext_t *mc = &(sl->sl_uc.uc_mcontext); + + long new_cfa = GetSSReg (mc, ss_sp); + + fs->cfa_how = CFA_REG_OFFSET; + fs->cfa_reg = 30; + fs->cfa_offset = new_cfa - (long) context->cfa; + + UPDATE_FS_FOR_GR (fs, 1, 1); + UPDATE_FS_FOR_GR (fs, 2, 2); + UPDATE_FS_FOR_GR (fs, 3, 3); + UPDATE_FS_FOR_GR (fs, 4, 4); + UPDATE_FS_FOR_GR (fs, 5, 5); + UPDATE_FS_FOR_GR (fs, 6, 6); + UPDATE_FS_FOR_GR (fs, 7, 7); + UPDATE_FS_FOR_GR (fs, 8, 8); + UPDATE_FS_FOR_GR (fs, 9, 9); + UPDATE_FS_FOR_GR (fs, 10, 10); + UPDATE_FS_FOR_GR (fs, 11, 11); + UPDATE_FS_FOR_GR (fs, 12, 12); + UPDATE_FS_FOR_GR (fs, 13, 13); + UPDATE_FS_FOR_GR (fs, 14, 14); + UPDATE_FS_FOR_GR (fs, 15, 15); + UPDATE_FS_FOR_GR (fs, 16, 16); + UPDATE_FS_FOR_GR (fs, 17, 17); + UPDATE_FS_FOR_GR (fs, 18, 18); + UPDATE_FS_FOR_GR (fs, 19, 19); + UPDATE_FS_FOR_GR (fs, 20, 20); + UPDATE_FS_FOR_GR (fs, 21, 21); + UPDATE_FS_FOR_GR (fs, 22, 22); + UPDATE_FS_FOR_GR (fs, 23, 23); + UPDATE_FS_FOR_GR (fs, 24, 24); + UPDATE_FS_FOR_GR (fs, 25, 25); + UPDATE_FS_FOR_GR (fs, 26, 26); + UPDATE_FS_FOR_GR (fs, 27, 27); + UPDATE_FS_FOR_GR (fs, 28, 28); + UPDATE_FS_FOR_GR (fs, 29, 29); + UPDATE_FS_FOR_GR (fs, 30, 30); + UPDATE_FS_FOR_GR (fs, 31, 31); + + if (TARGET_64BIT) + { + UPDATE_FS_FOR_FR (fs, 4, 32); + UPDATE_FS_FOR_FR (fs, 5, 33); + UPDATE_FS_FOR_FR (fs, 6, 34); + UPDATE_FS_FOR_FR (fs, 7, 35); + UPDATE_FS_FOR_FR (fs, 8, 36); + UPDATE_FS_FOR_FR (fs, 9, 37); + UPDATE_FS_FOR_FR (fs, 10, 38); + UPDATE_FS_FOR_FR (fs, 11, 39); + UPDATE_FS_FOR_FR (fs, 12, 40); + UPDATE_FS_FOR_FR (fs, 13, 41); + UPDATE_FS_FOR_FR (fs, 14, 42); + UPDATE_FS_FOR_FR (fs, 15, 43); + UPDATE_FS_FOR_FR (fs, 16, 44); + UPDATE_FS_FOR_FR (fs, 17, 45); + UPDATE_FS_FOR_FR (fs, 18, 46); + UPDATE_FS_FOR_FR (fs, 19, 47); + UPDATE_FS_FOR_FR (fs, 20, 48); + UPDATE_FS_FOR_FR (fs, 21, 49); + UPDATE_FS_FOR_FR (fs, 22, 50); + UPDATE_FS_FOR_FR (fs, 23, 51); + UPDATE_FS_FOR_FR (fs, 24, 52); + UPDATE_FS_FOR_FR (fs, 25, 53); + UPDATE_FS_FOR_FR (fs, 26, 54); + UPDATE_FS_FOR_FR (fs, 27, 55); + UPDATE_FS_FOR_FR (fs, 28, 56); + UPDATE_FS_FOR_FR (fs, 29, 57); + UPDATE_FS_FOR_FR (fs, 30, 58); + UPDATE_FS_FOR_FR (fs, 31, 59); + + UPDATE_FS_FOR_SAR (fs, 60); + } + else + { + UPDATE_FS_FOR_FR (fs, 4, 32); + UPDATE_FS_FOR_FR (fs, 5, 34); + UPDATE_FS_FOR_FR (fs, 6, 36); + UPDATE_FS_FOR_FR (fs, 7, 38); + UPDATE_FS_FOR_FR (fs, 8, 40); + UPDATE_FS_FOR_FR (fs, 9, 44); + UPDATE_FS_FOR_FR (fs, 10, 44); + UPDATE_FS_FOR_FR (fs, 11, 46); + UPDATE_FS_FOR_FR (fs, 12, 48); + UPDATE_FS_FOR_FR (fs, 13, 50); + UPDATE_FS_FOR_FR (fs, 14, 52); + UPDATE_FS_FOR_FR (fs, 15, 54); + + if (!cpu) + cpu = sysconf (_SC_CPU_VERSION); + + /* PA-RISC 1.0 only has 16 floating point registers. */ + if (cpu != CPU_PA_RISC1_0) + { + UPDATE_FS_FOR_FR (fs, 16, 56); + UPDATE_FS_FOR_FR (fs, 17, 58); + UPDATE_FS_FOR_FR (fs, 18, 60); + UPDATE_FS_FOR_FR (fs, 19, 62); + UPDATE_FS_FOR_FR (fs, 20, 64); + UPDATE_FS_FOR_FR (fs, 21, 66); + UPDATE_FS_FOR_FR (fs, 22, 68); + UPDATE_FS_FOR_FR (fs, 23, 70); + UPDATE_FS_FOR_FR (fs, 24, 72); + UPDATE_FS_FOR_FR (fs, 25, 74); + UPDATE_FS_FOR_FR (fs, 26, 76); + UPDATE_FS_FOR_FR (fs, 27, 78); + UPDATE_FS_FOR_FR (fs, 28, 80); + UPDATE_FS_FOR_FR (fs, 29, 82); + UPDATE_FS_FOR_FR (fs, 30, 84); + UPDATE_FS_FOR_FR (fs, 31, 86); + } + + UPDATE_FS_FOR_SAR (fs, 88); + } + + fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN; + UPDATE_FS_FOR_PC (fs, DWARF_ALT_FRAME_RETURN_COLUMN); + + return _URC_NO_REASON; + } + + return _URC_END_OF_STACK; +} diff --git a/gcc/config/pa/linux-unwind.h b/gcc/config/pa/linux-unwind.h index 62fa065cf0e..36b9b382708 100644 --- a/gcc/config/pa/linux-unwind.h +++ b/gcc/config/pa/linux-unwind.h @@ -131,8 +131,9 @@ pa32_fallback_frame_state (struct _Unwind_Context *context, } fs->regs.reg[88].how = REG_SAVED_OFFSET; fs->regs.reg[88].loc.offset = (long) &sc->sc_sar - new_cfa; - fs->regs.reg[0].how = REG_SAVED_OFFSET; - fs->regs.reg[0].loc.offset = (long) &sc->sc_iaoq[0] - new_cfa; - fs->retaddr_column = 0; + fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_OFFSET; + fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset + = (long) &sc->sc_iaoq[0] - new_cfa; + fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN; return _URC_NO_REASON; } diff --git a/gcc/config/pa/pa-hpux.h b/gcc/config/pa/pa-hpux.h index 0aa3361459e..4b6c91092f3 100644 --- a/gcc/config/pa/pa-hpux.h +++ b/gcc/config/pa/pa-hpux.h @@ -124,3 +124,5 @@ Boston, MA 02110-1301, USA. */ /* Define this so we can compile MS code for use with WINE. */ #undef HANDLE_PRAGMA_PACK_PUSH_POP #define HANDLE_PRAGMA_PACK_PUSH_POP + +#define MD_UNWIND_SUPPORT "config/pa/hpux-unwind.h" diff --git a/gcc/config/pa/pa-hpux11.h b/gcc/config/pa/pa-hpux11.h index 7b34fe1ad47..ad16bb41e3f 100644 --- a/gcc/config/pa/pa-hpux11.h +++ b/gcc/config/pa/pa-hpux11.h @@ -134,7 +134,7 @@ Boston, MA 02110-1301, USA. */ #define LIB_SPEC \ "%{!shared:\ %{mt|pthread:-lpthread} -lc \ - %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}" + %{static:%{!nolibdld:-a shared -ldld -a archive -lpthread -lc}}}" #undef STARTFILE_SPEC #define STARTFILE_SPEC \ diff --git a/gcc/config/pa/pa-linux.h b/gcc/config/pa/pa-linux.h index 4115577dc62..527977f15e2 100644 --- a/gcc/config/pa/pa-linux.h +++ b/gcc/config/pa/pa-linux.h @@ -19,50 +19,12 @@ the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/* A C expression whose value is RTL representing the location of the - incoming return address at the beginning of any function, before the - prologue. You only need to define this macro if you want to support - call frame debugging information like that provided by DWARF 2. */ -#define INCOMING_RETURN_ADDR_RTX (gen_rtx_REG (word_mode, 2)) -#define DWARF_FRAME_RETURN_COLUMN (DWARF_FRAME_REGNUM (2)) - -/* This macro chooses the encoding of pointers embedded in the exception - handling sections. If at all possible, this should be defined such - that the exception handling section will not require dynamic relocations, - and so may be read-only. - - FIXME: We use DW_EH_PE_aligned to output a PLABEL constructor for - global function pointers. */ -#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ - (CODE == 2 && GLOBAL ? DW_EH_PE_aligned : DW_EH_PE_absptr) - -/* Handle special EH pointer encodings. Absolute, pc-relative, and - indirect are handled automatically. Since pc-relative encoding is - not possible on the PA and we don't have the infrastructure for - data relative encoding, we use aligned plabels for global function - pointers. */ -#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ - do { \ - if (((ENCODING) & 0x0F) == DW_EH_PE_aligned) \ - { \ - fputs (integer_asm_op (SIZE, FALSE), FILE); \ - fputs ("P%", FILE); \ - assemble_name (FILE, XSTR (ADDR, 0)); \ - goto DONE; \ - } \ - } while (0) - #undef TARGET_OS_CPP_BUILTINS #define TARGET_OS_CPP_BUILTINS() \ do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ builtin_assert ("machine=bigendian"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/pa/pa-protos.h b/gcc/config/pa/pa-protos.h index 7422cd9d378..d0daf72f6ba 100644 --- a/gcc/config/pa/pa-protos.h +++ b/gcc/config/pa/pa-protos.h @@ -106,8 +106,8 @@ extern int emit_move_sequence (rtx *, enum machine_mode, rtx); extern int emit_hpdiv_const (rtx *, int); extern int is_function_label_plus_const (rtx); extern int jump_in_call_delay (rtx); -extern enum reg_class secondary_reload_class (enum reg_class, - enum machine_mode, rtx); +extern enum reg_class pa_secondary_reload_class (enum reg_class, + enum machine_mode, rtx); extern int hppa_fpstore_bypass_p (rtx, rtx); extern int attr_length_millicode_call (rtx); extern int attr_length_call (rtx, int); diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 6f77f4ffdb3..0eeb163ea58 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -3265,20 +3265,18 @@ store_reg (int reg, HOST_WIDE_INT disp, int base) rtx tmpreg = gen_rtx_REG (Pmode, 1); emit_move_insn (tmpreg, delta); - emit_move_insn (tmpreg, gen_rtx_PLUS (Pmode, tmpreg, basereg)); - dest = gen_rtx_MEM (word_mode, tmpreg); - insn = emit_move_insn (dest, src); + insn = emit_move_insn (tmpreg, gen_rtx_PLUS (Pmode, tmpreg, basereg)); if (DO_FRAME_NOTES) { REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - gen_rtx_SET (VOIDmode, - gen_rtx_MEM (word_mode, - gen_rtx_PLUS (word_mode, basereg, - delta)), - src), + gen_rtx_SET (VOIDmode, tmpreg, + gen_rtx_PLUS (Pmode, basereg, delta)), REG_NOTES (insn)); + RTX_FRAME_RELATED_P (insn) = 1; } + dest = gen_rtx_MEM (word_mode, tmpreg); + insn = emit_move_insn (dest, src); } else { @@ -3358,6 +3356,12 @@ set_reg_plus_d (int reg, int base, HOST_WIDE_INT disp, int note) emit_move_insn (tmpreg, delta); insn = emit_move_insn (gen_rtx_REG (Pmode, reg), gen_rtx_PLUS (Pmode, tmpreg, basereg)); + if (DO_FRAME_NOTES) + REG_NOTES (insn) + = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, + gen_rtx_SET (VOIDmode, tmpreg, + gen_rtx_PLUS (Pmode, basereg, delta)), + REG_NOTES (insn)); } else { @@ -5572,7 +5576,7 @@ output_arg_descriptor (rtx call_insn) It might be worthwhile to try and make this a leaf function too. */ enum reg_class -secondary_reload_class (enum reg_class class, enum machine_mode mode, rtx in) +pa_secondary_reload_class (enum reg_class class, enum machine_mode mode, rtx in) { int regno, is_symbolic; @@ -5585,7 +5589,7 @@ secondary_reload_class (enum reg_class class, enum machine_mode mode, rtx in) return R1_REGS; /* Profiling showed the PA port spends about 1.3% of its compilation - time in true_regnum from calls inside secondary_reload_class. */ + time in true_regnum from calls inside pa_secondary_reload_class. */ if (GET_CODE (in) == REG) { @@ -5624,7 +5628,7 @@ secondary_reload_class (enum reg_class class, enum machine_mode mode, rtx in) in = XEXP (in, 0); /* Profiling has showed GCC spends about 2.6% of its compilation - time in symbolic_operand from calls inside secondary_reload_class. + time in symbolic_operand from calls inside pa_secondary_reload_class. We use an inline copy and only compute its return value once to avoid useless work. */ diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index fa43828225e..17870385cf5 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -404,12 +404,72 @@ extern struct rtx_def *hppa_pic_save_rtx (void); gen_rtx_MEM (word_mode, \ gen_rtx_PLUS (word_mode, frame_pointer_rtx, \ TARGET_64BIT ? GEN_INT (-16) : GEN_INT (-20))) - -/* Offset from the argument pointer register value to the top of - stack. This is different from FIRST_PARM_OFFSET because of the - frame marker. */ -#define ARG_POINTER_CFA_OFFSET(FNDECL) 0 +/* Offset from the frame pointer register value to the top of stack. */ +#define FRAME_POINTER_CFA_OFFSET(FNDECL) 0 + +/* A C expression whose value is RTL representing the location of the + incoming return address at the beginning of any function, before the + prologue. You only need to define this macro if you want to support + call frame debugging information like that provided by DWARF 2. */ +#define INCOMING_RETURN_ADDR_RTX (gen_rtx_REG (word_mode, 2)) +#define DWARF_FRAME_RETURN_COLUMN (DWARF_FRAME_REGNUM (2)) + +/* A C expression whose value is an integer giving a DWARF 2 column + number that may be used as an alternate return column. This should + be defined only if DWARF_FRAME_RETURN_COLUMN is set to a general + register, but an alternate column needs to be used for signal frames. + + Column 0 is not used but unfortunately its register size is set to + 4 bytes (sizeof CCmode) so it can't be used on 64-bit targets. */ +#define DWARF_ALT_FRAME_RETURN_COLUMN FIRST_PSEUDO_REGISTER + +/* This macro chooses the encoding of pointers embedded in the exception + handling sections. If at all possible, this should be defined such + that the exception handling section will not require dynamic relocations, + and so may be read-only. + + Because the HP assembler auto aligns, it is necessary to use + DW_EH_PE_aligned. It's not possible to make the data read-only + on the HP-UX SOM port since the linker requires fixups for label + differences in different sections to be word aligned. However, + the SOM linker can do unaligned fixups for absolute pointers. + We also need aligned pointers for global and function pointers. + + Although the HP-UX 64-bit ELF linker can handle unaligned pc-relative + fixups, the runtime doesn't have a consistent relationship between + text and data for dynamically loaded objects. Thus, it's not possible + to use pc-relative encoding for pointers on this target. It may be + possible to use segment relative encodings but GAS doesn't currently + have a mechanism to generate these encodings. For other targets, we + use pc-relative encoding for pointers. If the pointer might require + dynamic relocation, we make it indirect. */ +#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ + (TARGET_GAS && !TARGET_HPUX \ + ? (DW_EH_PE_pcrel \ + | ((GLOBAL) || (CODE) == 2 ? DW_EH_PE_indirect : 0) \ + | (TARGET_64BIT ? DW_EH_PE_sdata8 : DW_EH_PE_sdata4)) \ + : (!TARGET_GAS || (GLOBAL) || (CODE) == 2 \ + ? DW_EH_PE_aligned : DW_EH_PE_absptr)) + +/* Handle special EH pointer encodings. Absolute, pc-relative, and + indirect are handled automatically. We output pc-relative, and + indirect pc-relative ourself since we need some special magic to + generate pc-relative relocations, and to handle indirect function + pointers. */ +#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ + do { \ + if (((ENCODING) & 0x70) == DW_EH_PE_pcrel) \ + { \ + fputs (integer_asm_op (SIZE, FALSE), FILE); \ + if ((ENCODING) & DW_EH_PE_indirect) \ + output_addr_const (FILE, get_deferred_plabel (ADDR)); \ + else \ + assemble_name (FILE, XSTR ((ADDR), 0)); \ + fputs ("+8-$PIC_pcrel$0", FILE); \ + goto DONE; \ + } \ + } while (0) /* The letters I, J, K, L and M in a register constraint string can be used to stand for particular ranges of immediate operands. @@ -475,7 +535,7 @@ extern struct rtx_def *hppa_pic_save_rtx (void); #define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \ ((CLASS == BASE_REG_CLASS && GET_CODE (IN) == REG \ && REGNO (IN) < FIRST_PSEUDO_REGISTER) \ - ? NO_REGS : secondary_reload_class (CLASS, MODE, IN)) + ? NO_REGS : pa_secondary_reload_class (CLASS, MODE, IN)) #define MAYBE_FP_REG_CLASS_P(CLASS) \ reg_classes_intersect_p ((CLASS), FP_REGS) diff --git a/gcc/config/pa/pa64-hpux.h b/gcc/config/pa/pa64-hpux.h index 056f3d83d8b..9f51f66ae31 100644 --- a/gcc/config/pa/pa64-hpux.h +++ b/gcc/config/pa/pa64-hpux.h @@ -56,23 +56,25 @@ Boston, MA 02110-1301, USA. */ #if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GNU_LD) #define LIB_SPEC \ "%{!shared:\ - %{!p:%{!pg: -lc %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ + %{!p:%{!pg: %{static:-lpthread} -lc\ + %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ %{p:%{!pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\ - -lprof %{static:-a archive} -lc\ + -lprof %{static:-a archive -lpthread} -lc\ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ %{pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\ - -lgprof %{static:-a archive} -lc\ + -lgprof %{static:-a archive -lpthread} -lc\ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ /usr/lib/pa20_64/milli.a" #else #define LIB_SPEC \ "%{!shared:\ - %{!p:%{!pg: -lc %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ + %{!p:%{!pg: %{static:-lpthread} -lc\ + %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ %{p:%{!pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\ - -lprof %{static:-a archive} -lc\ + -lprof %{static:-a archive -lpthread} -lc\ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ %{pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\ - -lgprof %{static:-a archive} -lc\ + -lgprof %{static:-a archive -lpthread} -lc\ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\ /usr/lib/pa20_64/milli.a" #endif diff --git a/gcc/config/pa/som.h b/gcc/config/pa/som.h index 109e2a16476..e397b9dfd8e 100644 --- a/gcc/config/pa/som.h +++ b/gcc/config/pa/som.h @@ -34,15 +34,6 @@ Boston, MA 02110-1301, USA. */ #define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END -/* Select a format to encode pointers in exception handling data. CODE - is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is - true if the symbol may be affected by dynamic relocations. Because - the HP assembler does auto alignment, it is necessary to use - DW_EH_PE_aligned instead of the default DW_EH_PE_absptr. */ - -#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ - (TARGET_GAS ? DW_EH_PE_absptr : DW_EH_PE_aligned) - /* HPUX has a program 'chatr' to list the dependencies of dynamically linked executables and shared libraries. */ #define LDD_SUFFIX "chatr" diff --git a/gcc/config/rs6000/aix52.h b/gcc/config/rs6000/aix52.h index d793d643141..21f38f4e0f1 100644 --- a/gcc/config/rs6000/aix52.h +++ b/gcc/config/rs6000/aix52.h @@ -61,6 +61,7 @@ do { \ %{mcpu=power3: -m620} \ %{mcpu=power4: -m620} \ %{mcpu=power5: -m620} \ +%{mcpu=power5+: -m620} \ %{mcpu=powerpc: -mppc} \ %{mcpu=rs64a: -mppc} \ %{mcpu=603: -m603} \ diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index 056a8160150..26ec2be5cae 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -57,9 +57,7 @@ (UNSPEC_VPKUHUM 93) (UNSPEC_VPKUWUM 94) (UNSPEC_VPKPX 95) - (UNSPEC_VPKUHSS 96) (UNSPEC_VPKSHSS 97) - (UNSPEC_VPKUWSS 98) (UNSPEC_VPKSWSS 99) (UNSPEC_VPKUHUS 100) (UNSPEC_VPKSHUS 101) @@ -204,18 +202,6 @@ }) (define_split - [(set (match_operand:V4SI 0 "altivec_register_operand" "") - (match_operand:V4SI 1 "easy_vector_constant_add_self" ""))] - "TARGET_ALTIVEC && reload_completed" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) - (plus:V4SI (match_dup 0) - (match_dup 0)))] -{ - operands[3] = gen_easy_vector_constant_add_self (operands[1]); -}) - -(define_split [(set (match_operand:V8HI 0 "nonimmediate_operand" "") (match_operand:V8HI 1 "input_operand" ""))] "TARGET_ALTIVEC && reload_completed @@ -224,18 +210,6 @@ { rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) (define_split - [(set (match_operand:V8HI 0 "altivec_register_operand" "") - (match_operand:V8HI 1 "easy_vector_constant_add_self" ""))] - "TARGET_ALTIVEC && reload_completed" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) - (plus:V8HI (match_dup 0) - (match_dup 0)))] -{ - operands[3] = gen_easy_vector_constant_add_self (operands[1]); -}) - -(define_split [(set (match_operand:V16QI 0 "nonimmediate_operand" "") (match_operand:V16QI 1 "input_operand" ""))] "TARGET_ALTIVEC && reload_completed @@ -244,18 +218,6 @@ { rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) (define_split - [(set (match_operand:V16QI 0 "altivec_register_operand" "") - (match_operand:V16QI 1 "easy_vector_constant_add_self" ""))] - "TARGET_ALTIVEC && reload_completed" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) - (plus:V16QI (match_dup 0) - (match_dup 0)))] -{ - operands[3] = gen_easy_vector_constant_add_self (operands[1]); -}) - -(define_split [(set (match_operand:V4SF 0 "nonimmediate_operand" "") (match_operand:V4SF 1 "input_operand" ""))] "TARGET_ALTIVEC && reload_completed @@ -265,6 +227,29 @@ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) +(define_split + [(set (match_operand:VI 0 "altivec_register_operand" "") + (match_operand:VI 1 "easy_vector_constant_add_self" ""))] + "TARGET_ALTIVEC && reload_completed" + [(set (match_dup 0) (match_dup 3)) + (set (match_dup 0) (plus:VI (match_dup 0) + (match_dup 0)))] +{ + rtx dup = gen_easy_altivec_constant (operands[1]); + rtx const_vec; + + /* Divide the operand of the resulting VEC_DUPLICATE, and use + simplify_rtx to make a CONST_VECTOR. */ + XEXP (dup, 0) = simplify_const_binary_operation (ASHIFTRT, QImode, + XEXP (dup, 0), const1_rtx); + const_vec = simplify_rtx (dup); + + if (GET_MODE (const_vec) == mode) + operands[3] = const_vec; + else + operands[3] = gen_lowpart (mode, const_vec); +}) + (define_insn "get_vrsave_internal" [(set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(reg:SI 109)] UNSPEC_GET_VRSAVE))] @@ -1105,16 +1090,6 @@ "vpkpx %0,%1,%2" [(set_attr "type" "vecperm")]) -(define_insn "altivec_vpkuhss" - [(set (match_operand:V16QI 0 "register_operand" "=v") - (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") - (match_operand:V8HI 2 "register_operand" "v")] - UNSPEC_VPKUHSS)) - (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))] - "TARGET_ALTIVEC" - "vpkuhss %0,%1,%2" - [(set_attr "type" "vecperm")]) - (define_insn "altivec_vpkshss" [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") @@ -1125,16 +1100,6 @@ "vpkshss %0,%1,%2" [(set_attr "type" "vecperm")]) -(define_insn "altivec_vpkuwss" - [(set (match_operand:V8HI 0 "register_operand" "=v") - (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") - (match_operand:V4SI 2 "register_operand" "v")] - UNSPEC_VPKUWSS)) - (set (reg:SI 110) (unspec:SI [(const_int 0)] UNSPEC_SET_VSCR))] - "TARGET_ALTIVEC" - "vpkuwss %0,%1,%2" - [(set_attr "type" "vecperm")]) - (define_insn "altivec_vpkswss" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h index 0d633efed41..bb0302930d5 100644 --- a/gcc/config/rs6000/darwin.h +++ b/gcc/config/rs6000/darwin.h @@ -55,7 +55,6 @@ builtin_define ("__POWERPC__"); \ builtin_define ("__NATURAL_ALIGNMENT__"); \ darwin_cpp_builtins (pfile); \ - SUBTARGET_OS_CPP_BUILTINS (); \ } \ while (0) @@ -124,9 +123,14 @@ do { \ mcpu=G5:ppc970; \ :ppc}}" +/* crt2.o is at least partially required for 10.3.x and earlier. */ +#define DARWIN_CRT2_SPEC \ + "%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}" + #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ { "darwin_arch", "%{m64:ppc64;:ppc}" }, \ + { "darwin_crt2", DARWIN_CRT2_SPEC }, \ { "darwin_subarch", DARWIN_SUBARCH_SPEC }, /* Output a .machine directive. */ diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 1c4dc1f312a..1555d2968a7 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -289,7 +289,6 @@ extern int dot_symbols; builtin_define ("__PPC64__"); \ builtin_define ("__powerpc__"); \ builtin_define ("__powerpc64__"); \ - builtin_define ("__PIC__"); \ builtin_assert ("cpu=powerpc64"); \ builtin_assert ("machine=powerpc64"); \ } \ @@ -458,12 +457,12 @@ extern int dot_symbols; && ((TARGET_64BIT \ && (TARGET_POWERPC64 \ || TARGET_MINIMAL_TOC \ - || (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ + || (SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ && ! TARGET_NO_FP_IN_TOC))) \ || (!TARGET_64BIT \ && !TARGET_NO_FP_IN_TOC \ && !TARGET_RELOCATABLE \ - && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ + && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ && BITS_PER_WORD == HOST_BITS_PER_INT))))) /* This ABI cannot use DBX_LINES_FUNCTION_RELATIVE, nor can it use diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index ff475053cad..2b0716e658c 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -55,7 +55,7 @@ (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 31"))) ;; Return 1 if op is a signed 8-bit constant integer. -;; Integer multiplcation complete more quickly +;; Integer multiplication complete more quickly (define_predicate "s8bit_cint_operand" (and (match_code "const_int") (match_test "INTVAL (op) >= -128 && INTVAL (op) <= 127"))) @@ -187,7 +187,7 @@ REAL_VALUE_TYPE rv; if (GET_MODE (op) != mode - || (GET_MODE_CLASS (mode) != MODE_FLOAT && mode != DImode)) + || (!SCALAR_FLOAT_MODE_P (mode) && mode != DImode)) return 0; /* Consider all constants with -msoft-float to be easy. */ @@ -271,59 +271,55 @@ (define_predicate "easy_vector_constant" (match_code "const_vector") { - int cst, cst2; - - if (!TARGET_ALTIVEC && !TARGET_SPE) - return 0; - - if (zero_constant (op, mode) - && ((TARGET_ALTIVEC && ALTIVEC_VECTOR_MODE (mode)) - || (TARGET_SPE && SPE_VECTOR_MODE (mode)))) - return 1; - - if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT) - return 0; - - if (TARGET_SPE && mode == V1DImode) - return 0; + if (ALTIVEC_VECTOR_MODE (mode)) + { + if (zero_constant (op, mode)) + return true; + if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT) + return false; - cst = INTVAL (CONST_VECTOR_ELT (op, 0)); - cst2 = INTVAL (CONST_VECTOR_ELT (op, 1)); - - /* Limit SPE vectors to 15 bits signed. These we can generate with: - li r0, CONSTANT1 - evmergelo r0, r0, r0 - li r0, CONSTANT2 - - I don't know how efficient it would be to allow bigger constants, - considering we'll have an extra 'ori' for every 'li'. I doubt 5 - instructions is better than a 64-bit memory load, but I don't - have the e500 timing specs. */ - if (TARGET_SPE && mode == V2SImode - && cst >= -0x7fff && cst <= 0x7fff - && cst2 >= -0x7fff && cst2 <= 0x7fff) - return 1; + return easy_altivec_constant (op, mode); + } - if (TARGET_ALTIVEC - && easy_vector_same (op, mode)) + if (SPE_VECTOR_MODE (mode)) { - cst = easy_vector_splat_const (cst, mode); - if (EASY_VECTOR_15_ADD_SELF (cst) - || EASY_VECTOR_15 (cst)) - return 1; + int cst, cst2; + if (zero_constant (op, mode)) + return true; + if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT) + return false; + + /* Limit SPE vectors to 15 bits signed. These we can generate with: + li r0, CONSTANT1 + evmergelo r0, r0, r0 + li r0, CONSTANT2 + + I don't know how efficient it would be to allow bigger constants, + considering we'll have an extra 'ori' for every 'li'. I doubt 5 + instructions is better than a 64-bit memory load, but I don't + have the e500 timing specs. */ + if (mode == V2SImode) + { + cst = INTVAL (CONST_VECTOR_ELT (op, 0)); + cst2 = INTVAL (CONST_VECTOR_ELT (op, 1)); + return cst >= -0x7fff && cst <= 0x7fff + && cst2 >= -0x7fff && cst2 <= 0x7fff; + } } - return 0; + + return false; }) ;; Same as easy_vector_constant but only for EASY_VECTOR_15_ADD_SELF. (define_predicate "easy_vector_constant_add_self" (and (match_code "const_vector") (and (match_test "TARGET_ALTIVEC") - (and (match_test "easy_vector_same (op, mode)") - (match_test "EASY_VECTOR_15_ADD_SELF - (easy_vector_splat_const - (INTVAL (CONST_VECTOR_ELT (op, 0)), - mode))"))))) + (match_test "easy_altivec_constant (op, mode)"))) +{ + rtx last = CONST_VECTOR_ELT (op, GET_MODE_NUNITS (mode) - 1); + HOST_WIDE_INT val = ((INTVAL (last) & 0xff) ^ 0x80) - 0x80; + return EASY_VECTOR_15_ADD_SELF (val); +}) ;; Return 1 if operand is constant zero (scalars and vectors). (define_predicate "zero_constant" @@ -334,7 +330,7 @@ ;; or non-special register register field no cr0 (define_predicate "zero_fp_constant" (and (match_code "const_double") - (match_test "GET_MODE_CLASS (mode) == MODE_FLOAT + (match_test "SCALAR_FLOAT_MODE_P (mode) && op == CONST0_RTX (mode)"))) ;; Return 1 if the operand is in volatile memory. Note that during the @@ -711,7 +707,7 @@ return 1; /* For floating-point, easy constants are valid. */ - if (GET_MODE_CLASS (mode) == MODE_FLOAT + if (SCALAR_FLOAT_MODE_P (mode) && CONSTANT_P (op) && easy_fp_constant (op, mode)) return 1; @@ -729,7 +725,7 @@ /* For floating-point or multi-word mode, the only remaining valid type is a register. */ - if (GET_MODE_CLASS (mode) == MODE_FLOAT + if (SCALAR_FLOAT_MODE_P (mode) || GET_MODE_SIZE (mode) > UNITS_PER_WORD) return register_operand (op, mode); @@ -1038,14 +1034,14 @@ if (count <= 1 || GET_CODE (XVECEXP (op, 0, 0)) != SET || GET_CODE (SET_DEST (XVECEXP (op, 0, 0))) != REG - || GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != UNSPEC_VOLATILE) + || GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != UNSPEC_VOLATILE + || XINT (SET_SRC (XVECEXP (op, 0, 0)), 1) != UNSPECV_SET_VRSAVE) return 0; dest_regno = REGNO (SET_DEST (XVECEXP (op, 0, 0))); - src_regno = REGNO (SET_SRC (XVECEXP (op, 0, 0))); + src_regno = REGNO (XVECEXP (SET_SRC (XVECEXP (op, 0, 0)), 0, 1)); - if (dest_regno != VRSAVE_REGNO - && src_regno != VRSAVE_REGNO) + if (dest_regno != VRSAVE_REGNO || src_regno != VRSAVE_REGNO) return 0; for (i = 1; i < count; i++) diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index bfe542f641e..ecd403da758 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -94,8 +94,18 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile) builtin_define ("_ARCH_PWR"); if (TARGET_POWERPC) builtin_define ("_ARCH_PPC"); + if (TARGET_PPC_GPOPT) + builtin_define ("_ARCH_PPCSQ"); + if (TARGET_PPC_GFXOPT) + builtin_define ("_ARCH_PPCGR"); if (TARGET_POWERPC64) builtin_define ("_ARCH_PPC64"); + if (TARGET_MFCRF) + builtin_define ("_ARCH_PWR4"); + if (TARGET_POPCNTB) + builtin_define ("_ARCH_PWR5"); + if (TARGET_FPRND) + builtin_define ("_ARCH_PWR5X"); if (! TARGET_POWER && ! TARGET_POWER2 && ! TARGET_POWERPC) builtin_define ("_ARCH_COM"); if (TARGET_ALTIVEC) diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h index b946c90d939..fe04d81f43e 100644 --- a/gcc/config/rs6000/rs6000-protos.h +++ b/gcc/config/rs6000/rs6000-protos.h @@ -32,8 +32,7 @@ extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, int, int, int); extern void rs6000_va_start (tree, rtx); #endif /* TREE_CODE */ -extern int easy_vector_same (rtx, enum machine_mode); -extern int easy_vector_splat_const (int, enum machine_mode); +extern bool easy_altivec_constant (rtx, enum machine_mode); extern bool macho_lo_sum_memory_operand (rtx, enum machine_mode); extern int num_insns_constant (rtx, enum machine_mode); extern int num_insns_constant_wide (HOST_WIDE_INT); @@ -48,7 +47,7 @@ extern bool rs6000_legitimate_small_data_p (enum machine_mode, rtx); extern rtx rs6000_got_register (rtx); extern rtx find_addr_reg (rtx); -extern rtx gen_easy_vector_constant_add_self (rtx); +extern rtx gen_easy_altivec_constant (rtx); extern const char *output_vec_const_move (rtx *); extern void rs6000_expand_vector_init (rtx, rtx); extern void rs6000_expand_vector_set (rtx, rtx, int); @@ -65,8 +64,8 @@ extern int insvdi_rshift_rlwimi_p (rtx, rtx, rtx); extern int registers_ok_for_quad_peep (rtx, rtx); extern int mems_ok_for_quad_peep (rtx, rtx); extern bool gpr_or_gpr_p (rtx, rtx); -extern enum reg_class secondary_reload_class (enum reg_class, - enum machine_mode, rtx); +extern enum reg_class rs6000_secondary_reload_class (enum reg_class, + enum machine_mode, rtx); extern int ccr_bit (rtx, int); extern int extract_MB (rtx); extern int extract_ME (rtx); diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 3c33a81c0ca..072df4fdff1 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -54,6 +54,7 @@ #include "sched-int.h" #include "tree-gimple.h" #include "intl.h" +#include "params.h" #if TARGET_XCOFF #include "xcoffout.h" /* get declarations of xcoff_*_section_name */ #endif @@ -1027,7 +1028,7 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode) /* The float registers can only hold floating modes and DImode. */ if (FP_REGNO_P (regno)) return - (GET_MODE_CLASS (mode) == MODE_FLOAT + (SCALAR_FLOAT_MODE_P (mode) && FP_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1)) || (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == UNITS_PER_FP_WORD); @@ -1106,10 +1107,12 @@ rs6000_override_options (const char *default_cpu) = {{"401", PROCESSOR_PPC403, POWERPC_BASE_MASK | MASK_SOFT_FLOAT}, {"403", PROCESSOR_PPC403, POWERPC_BASE_MASK | MASK_SOFT_FLOAT | MASK_STRICT_ALIGN}, - {"405", PROCESSOR_PPC405, POWERPC_BASE_MASK | MASK_SOFT_FLOAT}, - {"405fp", PROCESSOR_PPC405, POWERPC_BASE_MASK}, - {"440", PROCESSOR_PPC440, POWERPC_BASE_MASK | MASK_SOFT_FLOAT}, - {"440fp", PROCESSOR_PPC440, POWERPC_BASE_MASK}, + {"405", PROCESSOR_PPC405, + POWERPC_BASE_MASK | MASK_SOFT_FLOAT | MASK_MULHW}, + {"405fp", PROCESSOR_PPC405, POWERPC_BASE_MASK | MASK_MULHW}, + {"440", PROCESSOR_PPC440, + POWERPC_BASE_MASK | MASK_SOFT_FLOAT | MASK_MULHW}, + {"440fp", PROCESSOR_PPC440, POWERPC_BASE_MASK | MASK_MULHW}, {"505", PROCESSOR_MPCCORE, POWERPC_BASE_MASK}, {"601", PROCESSOR_PPC601, MASK_POWER | POWERPC_BASE_MASK | MASK_MULTIPLE | MASK_STRING}, @@ -1151,6 +1154,9 @@ rs6000_override_options (const char *default_cpu) {"power5", PROCESSOR_POWER5, POWERPC_BASE_MASK | MASK_POWERPC64 | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB}, + {"power5+", PROCESSOR_POWER5, + POWERPC_BASE_MASK | MASK_POWERPC64 | MASK_PPC_GFXOPT + | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND}, {"powerpc", PROCESSOR_POWERPC, POWERPC_BASE_MASK}, {"powerpc64", PROCESSOR_POWERPC64, POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_POWERPC64}, @@ -1176,7 +1182,7 @@ rs6000_override_options (const char *default_cpu) POWER_MASKS = MASK_POWER | MASK_POWER2 | MASK_MULTIPLE | MASK_STRING, POWERPC_MASKS = (POWERPC_BASE_MASK | MASK_PPC_GPOPT | MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_ALTIVEC - | MASK_MFCRF) + | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND | MASK_MULHW) }; rs6000_init_hard_regno_mode_ok (); @@ -1573,6 +1579,9 @@ optimization_options (int level ATTRIBUTE_UNUSED, int size ATTRIBUTE_UNUSED) /* The Darwin libraries never set errno, so we might as well avoid calling them when that's the only reason we would. */ flag_errno_math = 0; + + /* Double growth factor to counter reduced min jump length. */ + set_param_value ("max-grow-copy-bb-insns", 16); } /* Implement TARGET_HANDLE_OPTION. */ @@ -1620,9 +1629,9 @@ rs6000_handle_option (size_t code, const char *arg, int value) #else case OPT_m64: #endif - target_flags |= MASK_POWERPC64 | MASK_POWERPC | MASK_PPC_GFXOPT; - target_flags_explicit |= MASK_POWERPC64 | MASK_POWERPC - | MASK_PPC_GFXOPT; + target_flags |= MASK_POWERPC64 | MASK_POWERPC; + target_flags |= ~target_flags_explicit & MASK_PPC_GFXOPT; + target_flags_explicit |= MASK_POWERPC64 | MASK_POWERPC; break; #ifdef TARGET_USES_AIX64_OPT @@ -2038,73 +2047,150 @@ num_insns_constant (rtx op, enum machine_mode mode) } } -/* Returns the constant for the splat instruction, if exists. */ -int -easy_vector_splat_const (int cst, enum machine_mode mode) +/* Return true if OP can be synthesized with a particular vspltisb, vspltish + or vspltisw instruction. OP is a CONST_VECTOR. Which instruction is used + depends on STEP and COPIES, one of which will be 1. If COPIES > 1, + all items are set to the same value and contain COPIES replicas of the + vsplt's operand; if STEP > 1, one in STEP elements is set to the vsplt's + operand and the others are set to the value of the operand's msb. */ + +static bool +vspltis_constant (rtx op, unsigned step, unsigned copies) { - switch (mode) + enum machine_mode mode = GET_MODE (op); + enum machine_mode inner = GET_MODE_INNER (mode); + + unsigned i; + unsigned nunits = GET_MODE_NUNITS (mode); + unsigned bitsize = GET_MODE_BITSIZE (inner); + unsigned mask = GET_MODE_MASK (inner); + + rtx last = CONST_VECTOR_ELT (op, nunits - 1); + HOST_WIDE_INT val = INTVAL (last); + HOST_WIDE_INT splat_val = val; + HOST_WIDE_INT msb_val = val > 0 ? 0 : -1; + + /* Construct the value to be splatted, if possible. If not, return 0. */ + for (i = 2; i <= copies; i *= 2) { - case V4SImode: - if (EASY_VECTOR_15 (cst) - || EASY_VECTOR_15_ADD_SELF (cst)) - return cst; - if ((cst & 0xffff) != ((cst >> 16) & 0xffff)) - break; - cst = cst >> 16; - /* Fall thru */ + HOST_WIDE_INT small_val; + bitsize /= 2; + small_val = splat_val >> bitsize; + mask >>= bitsize; + if (splat_val != ((small_val << bitsize) | (small_val & mask))) + return false; + splat_val = small_val; + } - case V8HImode: - if (EASY_VECTOR_15 (cst) - || EASY_VECTOR_15_ADD_SELF (cst)) - return cst; - if ((cst & 0xff) != ((cst >> 8) & 0xff)) - break; - cst = cst >> 8; - /* Fall thru */ + /* Check if SPLAT_VAL can really be the operand of a vspltis[bhw]. */ + if (EASY_VECTOR_15 (splat_val)) + ; - case V16QImode: - if (EASY_VECTOR_15 (cst) - || EASY_VECTOR_15_ADD_SELF (cst)) - return cst; - default: - break; + /* Also check if we can splat, and then add the result to itself. Do so if + the value is positive, of if the splat instruction is using OP's mode; + for splat_val < 0, the splat and the add should use the same mode. */ + else if (EASY_VECTOR_15_ADD_SELF (splat_val) + && (splat_val >= 0 || (step == 1 && copies == 1))) + ; + + else + return false; + + /* Check if VAL is present in every STEP-th element, and the + other elements are filled with its most significant bit. */ + for (i = 0; i < nunits - 1; ++i) + { + HOST_WIDE_INT desired_val; + if (((i + 1) & (step - 1)) == 0) + desired_val = val; + else + desired_val = msb_val; + + if (desired_val != INTVAL (CONST_VECTOR_ELT (op, i))) + return false; } - return 0; + + return true; } -/* Return nonzero if all elements of a vector have the same value. */ -int -easy_vector_same (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) +/* Return true if OP is of the given MODE and can be synthesized + with a vspltisb, vspltish or vspltisw. */ + +bool +easy_altivec_constant (rtx op, enum machine_mode mode) { - int units, i, cst; + unsigned step, copies; + + if (mode == VOIDmode) + mode = GET_MODE (op); + else if (mode != GET_MODE (op)) + return false; - units = CONST_VECTOR_NUNITS (op); + /* Start with a vspltisw. */ + step = GET_MODE_NUNITS (mode) / 4; + copies = 1; - cst = INTVAL (CONST_VECTOR_ELT (op, 0)); - for (i = 1; i < units; ++i) - if (INTVAL (CONST_VECTOR_ELT (op, i)) != cst) - break; - if (i == units && easy_vector_splat_const (cst, mode)) - return 1; - return 0; + if (vspltis_constant (op, step, copies)) + return true; + + /* Then try with a vspltish. */ + if (step == 1) + copies <<= 1; + else + step >>= 1; + + if (vspltis_constant (op, step, copies)) + return true; + + /* And finally a vspltisb. */ + if (step == 1) + copies <<= 1; + else + step >>= 1; + + if (vspltis_constant (op, step, copies)) + return true; + + return false; } -/* Generate easy_vector_constant out of a easy_vector_constant_add_self. */ +/* Generate a VEC_DUPLICATE representing a vspltis[bhw] instruction whose + result is OP. Abort if it is not possible. */ rtx -gen_easy_vector_constant_add_self (rtx op) +gen_easy_altivec_constant (rtx op) { - int i, units; - rtvec v; - units = GET_MODE_NUNITS (GET_MODE (op)); - v = rtvec_alloc (units); + enum machine_mode mode = GET_MODE (op); + int nunits = GET_MODE_NUNITS (mode); + rtx last = CONST_VECTOR_ELT (op, nunits - 1); + unsigned step = nunits / 4; + unsigned copies = 1; + + /* Start with a vspltisw. */ + if (vspltis_constant (op, step, copies)) + return gen_rtx_VEC_DUPLICATE (V4SImode, gen_lowpart (SImode, last)); + + /* Then try with a vspltish. */ + if (step == 1) + copies <<= 1; + else + step >>= 1; + + if (vspltis_constant (op, step, copies)) + return gen_rtx_VEC_DUPLICATE (V8HImode, gen_lowpart (HImode, last)); + + /* And finally a vspltisb. */ + if (step == 1) + copies <<= 1; + else + step >>= 1; + + if (vspltis_constant (op, step, copies)) + return gen_rtx_VEC_DUPLICATE (V16QImode, gen_lowpart (QImode, last)); - for (i = 0; i < units; i++) - RTVEC_ELT (v, i) = - GEN_INT (INTVAL (CONST_VECTOR_ELT (op, i)) >> 1); - return gen_rtx_raw_CONST_VECTOR (GET_MODE (op), v); + gcc_unreachable (); } const char * @@ -2116,51 +2202,30 @@ output_vec_const_move (rtx *operands) dest = operands[0]; vec = operands[1]; - - cst = INTVAL (CONST_VECTOR_ELT (vec, 0)); - cst2 = INTVAL (CONST_VECTOR_ELT (vec, 1)); mode = GET_MODE (dest); if (TARGET_ALTIVEC) { + rtx splat_vec; if (zero_constant (vec, mode)) return "vxor %0,%0,%0"; - gcc_assert (easy_vector_constant (vec, mode)); + splat_vec = gen_easy_altivec_constant (vec); + gcc_assert (GET_CODE (splat_vec) == VEC_DUPLICATE); + operands[1] = XEXP (splat_vec, 0); + if (!EASY_VECTOR_15 (INTVAL (operands[1]))) + return "#"; - operands[1] = GEN_INT (cst); - switch (mode) + switch (GET_MODE (splat_vec)) { case V4SImode: - if (EASY_VECTOR_15 (cst)) - { - operands[1] = GEN_INT (cst); - return "vspltisw %0,%1"; - } - else if (EASY_VECTOR_15_ADD_SELF (cst)) - return "#"; - cst = cst >> 16; - /* Fall thru */ + return "vspltisw %0,%1"; case V8HImode: - if (EASY_VECTOR_15 (cst)) - { - operands[1] = GEN_INT (cst); - return "vspltish %0,%1"; - } - else if (EASY_VECTOR_15_ADD_SELF (cst)) - return "#"; - cst = cst >> 8; - /* Fall thru */ + return "vspltish %0,%1"; case V16QImode: - if (EASY_VECTOR_15 (cst)) - { - operands[1] = GEN_INT (cst); - return "vspltisb %0,%1"; - } - else if (EASY_VECTOR_15_ADD_SELF (cst)) - return "#"; + return "vspltisb %0,%1"; default: gcc_unreachable (); @@ -2174,8 +2239,10 @@ output_vec_const_move (rtx *operands) FIXME: We should probably return # and add post reload splitters for these, but this way is so easy ;-). */ - operands[1] = GEN_INT (cst); - operands[2] = GEN_INT (cst2); + cst = INTVAL (CONST_VECTOR_ELT (vec, 0)); + cst2 = INTVAL (CONST_VECTOR_ELT (vec, 1)); + operands[1] = CONST_VECTOR_ELT (vec, 0); + operands[2] = CONST_VECTOR_ELT (vec, 1); if (cst == cst2) return "li %0,%1\n\tevmergelo %0,%0,%0"; else @@ -2216,11 +2283,10 @@ rs6000_expand_vector_init (rtx target, rtx vals) gen_rtx_XOR (mode, target, target))); return; } - else if (mode != V4SFmode && easy_vector_same (vals, mode)) + else if (mode != V4SFmode && easy_vector_constant (vals, mode)) { /* Splat immediate. */ - x = gen_rtx_VEC_DUPLICATE (mode, CONST_VECTOR_ELT (vals, 0)); - emit_insn (gen_rtx_SET (VOIDmode, target, x)); + emit_insn (gen_rtx_SET (VOIDmode, target, vals)); return; } else if (all_same) @@ -4060,7 +4126,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode) /* Nonzero if we can use a floating-point register to pass this arg. */ #define USE_FP_FOR_ARG_P(CUM,MODE,TYPE) \ - (GET_MODE_CLASS (MODE) == MODE_FLOAT \ + (SCALAR_FLOAT_MODE_P (MODE) \ && (CUM)->fregno <= FP_ARG_MAX_REG \ && TARGET_HARD_FLOAT && TARGET_FPRS) @@ -4584,7 +4650,7 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode, cum->words = align_words + n_words; - if (GET_MODE_CLASS (mode) == MODE_FLOAT + if (SCALAR_FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS) cum->fregno += (GET_MODE_SIZE (mode) + 7) >> 3; @@ -5971,9 +6037,7 @@ static struct builtin_description bdesc_2arg[] = { MASK_ALTIVEC, CODE_FOR_altivec_vpkuhum, "__builtin_altivec_vpkuhum", ALTIVEC_BUILTIN_VPKUHUM }, { MASK_ALTIVEC, CODE_FOR_altivec_vpkuwum, "__builtin_altivec_vpkuwum", ALTIVEC_BUILTIN_VPKUWUM }, { MASK_ALTIVEC, CODE_FOR_altivec_vpkpx, "__builtin_altivec_vpkpx", ALTIVEC_BUILTIN_VPKPX }, - { MASK_ALTIVEC, CODE_FOR_altivec_vpkuhss, "__builtin_altivec_vpkuhss", ALTIVEC_BUILTIN_VPKUHSS }, { MASK_ALTIVEC, CODE_FOR_altivec_vpkshss, "__builtin_altivec_vpkshss", ALTIVEC_BUILTIN_VPKSHSS }, - { MASK_ALTIVEC, CODE_FOR_altivec_vpkuwss, "__builtin_altivec_vpkuwss", ALTIVEC_BUILTIN_VPKUWSS }, { MASK_ALTIVEC, CODE_FOR_altivec_vpkswss, "__builtin_altivec_vpkswss", ALTIVEC_BUILTIN_VPKSWSS }, { MASK_ALTIVEC, CODE_FOR_altivec_vpkuhus, "__builtin_altivec_vpkuhus", ALTIVEC_BUILTIN_VPKUHUS }, { MASK_ALTIVEC, CODE_FOR_altivec_vpkshus, "__builtin_altivec_vpkshus", ALTIVEC_BUILTIN_VPKSHUS }, @@ -9697,9 +9761,9 @@ mems_ok_for_quad_peep (rtx mem1, rtx mem2) NO_REGS is returned. */ enum reg_class -secondary_reload_class (enum reg_class class, - enum machine_mode mode ATTRIBUTE_UNUSED, - rtx in) +rs6000_secondary_reload_class (enum reg_class class, + enum machine_mode mode ATTRIBUTE_UNUSED, + rtx in) { int regno; @@ -11634,7 +11698,7 @@ rs6000_emit_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond) return 0; } else if (TARGET_E500 && TARGET_HARD_FLOAT && !TARGET_FPRS - && GET_MODE_CLASS (compare_mode) == MODE_FLOAT) + && SCALAR_FLOAT_MODE_P (compare_mode)) return 0; is_against_zero = op1 == CONST0_RTX (compare_mode); @@ -11644,7 +11708,7 @@ rs6000_emit_cmove (rtx dest, rtx op, rtx true_cond, rtx false_cond) can't be generated if we care about that. It's safe if one side of the construct is zero, since then no subtract will be generated. */ - if (GET_MODE_CLASS (compare_mode) == MODE_FLOAT + if (SCALAR_FLOAT_MODE_P (compare_mode) && flag_trapping_math && ! is_against_zero) return 0; @@ -15185,7 +15249,7 @@ rs6000_output_function_epilogue (FILE *file, if (GET_CODE (parameter) == REG) { - if (GET_MODE_CLASS (mode) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (mode)) { int bits; @@ -15588,7 +15652,7 @@ output_toc (FILE *file, rtx x, int labelno, enum machine_mode mode) const char *name = buf; const char *real_name; rtx base = x; - int offset = 0; + HOST_WIDE_INT offset = 0; gcc_assert (!TARGET_NO_TOC); @@ -15855,9 +15919,9 @@ output_toc (FILE *file, rtx x, int labelno, enum machine_mode mode) fprintf (file, "\t.tc %s", real_name); if (offset < 0) - fprintf (file, ".N%d", - offset); + fprintf (file, ".N" HOST_WIDE_INT_PRINT_UNSIGNED, - offset); else if (offset) - fprintf (file, ".P%d", offset); + fprintf (file, ".P" HOST_WIDE_INT_PRINT_UNSIGNED, offset); fputs ("[TC],", file); } @@ -15872,9 +15936,9 @@ output_toc (FILE *file, rtx x, int labelno, enum machine_mode mode) { RS6000_OUTPUT_BASENAME (file, name); if (offset < 0) - fprintf (file, "%d", offset); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, offset); else if (offset > 0) - fprintf (file, "+%d", offset); + fprintf (file, "+" HOST_WIDE_INT_PRINT_DEC, offset); } else output_addr_const (file, x); @@ -18857,7 +18921,7 @@ rs6000_libcall_value (enum machine_mode mode) GEN_INT (4)))); } - if (GET_MODE_CLASS (mode) == MODE_FLOAT + if (SCALAR_FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS) regno = FP_ARG_RETURN; else if (ALTIVEC_VECTOR_MODE (mode) diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 679ccee8144..8dc2d023010 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -72,6 +72,7 @@ %{mcpu=power3: -mppc64} \ %{mcpu=power4: -mpower4} \ %{mcpu=power5: -mpower4} \ +%{mcpu=power5+: -mpower4} \ %{mcpu=powerpc: -mppc} \ %{mcpu=rios: -mpwr} \ %{mcpu=rios1: -mpwr} \ @@ -151,6 +152,14 @@ #define TARGET_POPCNTB 0 #endif +/* Define TARGET_FPRND if the target assembler does not support the + fp rounding instructions. */ + +#ifndef HAVE_AS_FPRND +#undef TARGET_FPRND +#define TARGET_FPRND 0 +#endif + #ifndef TARGET_SECURE_PLT #define TARGET_SECURE_PLT 0 #endif @@ -805,10 +814,10 @@ extern enum rs6000_nop_insertion rs6000_sched_insert_nops; If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, for any hard reg, then this must be 0 for correct output. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ - (GET_MODE_CLASS (MODE1) == MODE_FLOAT \ - ? GET_MODE_CLASS (MODE2) == MODE_FLOAT \ - : GET_MODE_CLASS (MODE2) == MODE_FLOAT \ - ? GET_MODE_CLASS (MODE1) == MODE_FLOAT \ + (SCALAR_FLOAT_MODE_P (MODE1) \ + ? SCALAR_FLOAT_MODE_P (MODE2) \ + : SCALAR_FLOAT_MODE_P (MODE2) \ + ? SCALAR_FLOAT_MODE_P (MODE1) \ : GET_MODE_CLASS (MODE1) == MODE_CC \ ? GET_MODE_CLASS (MODE2) == MODE_CC \ : GET_MODE_CLASS (MODE2) == MODE_CC \ @@ -1178,7 +1187,7 @@ enum reg_class NO_REGS is returned. */ #define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \ - secondary_reload_class (CLASS, MODE, IN) + rs6000_secondary_reload_class (CLASS, MODE, IN) /* If we are copying between FP or AltiVec registers and anything else, we need a memory location. */ @@ -1689,7 +1698,8 @@ typedef struct rs6000_args && !rs6000_tls_referenced_p (X)) #define EASY_VECTOR_15(n) ((n) >= -16 && (n) <= 15) -#define EASY_VECTOR_15_ADD_SELF(n) ((n) >= 0x10 && (n) <= 0x1e && !((n) & 1)) +#define EASY_VECTOR_15_ADD_SELF(n) (!EASY_VECTOR_15((n)) \ + && EASY_VECTOR_15((n) >> 1)) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. @@ -1941,7 +1951,7 @@ do { \ comparison. CCmode should be used in all other cases. */ #define SELECT_CC_MODE(OP,X,Y) \ - (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CCFPmode \ + (SCALAR_FLOAT_MODE_P (GET_MODE (X)) ? CCFPmode \ : (OP) == GTU || (OP) == LTU || (OP) == GEU || (OP) == LEU ? CCUNSmode \ : (((OP) == EQ || (OP) == NE) && COMPARISON_P (X) \ ? CCEQmode : CCmode)) @@ -2023,6 +2033,26 @@ extern int toc_initialized; while (0) #endif +#if HAVE_GAS_WEAKREF +#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE) \ + do \ + { \ + fputs ("\t.weakref\t", (FILE)); \ + RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ + fputs (", ", (FILE)); \ + RS6000_OUTPUT_BASENAME ((FILE), (VALUE)); \ + if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \ + && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \ + { \ + fputs ("\n\t.weakref\t.", (FILE)); \ + RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ + fputs (", .", (FILE)); \ + RS6000_OUTPUT_BASENAME ((FILE), (VALUE)); \ + } \ + fputc ('\n', (FILE)); \ + } while (0) +#endif + /* This implements the `alias' attribute. */ #undef ASM_OUTPUT_DEF_FROM_DECLS #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \ diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 70a620f5569..14e1fb80531 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -34,6 +34,10 @@ (UNSPEC_MOVSI_GOT 8) (UNSPEC_MV_CR_OV 9) ; move_from_CR_ov_bit (UNSPEC_FCTIWZ 10) + (UNSPEC_FRIM 11) + (UNSPEC_FRIN 12) + (UNSPEC_FRIP 13) + (UNSPEC_FRIZ 14) (UNSPEC_LD_MPIC 15) ; load_macho_picbase (UNSPEC_MPIC_CORRECT 16) ; macho_correct_pic (UNSPEC_TLSGD 17) @@ -874,6 +878,470 @@ [(set_attr "type" "compare") (set_attr "length" "4,8")]) +;; IBM 405 and 440 half-word multiplication operations. + +(define_insn "*macchwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (plus:SI (mult:SI (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))) + (match_operand:SI 4 "gpc_reg_operand" "0")) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (ashiftrt:SI + (match_dup 2) + (const_int 16)) + (sign_extend:SI + (match_dup 1))) + (match_dup 4)))] + "TARGET_MULHW" + "macchw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*macchw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))) + (match_operand:SI 3 "gpc_reg_operand" "0")))] + "TARGET_MULHW" + "macchw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*macchwuc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (plus:SI (mult:SI (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))) + (match_operand:SI 4 "gpc_reg_operand" "0")) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (lshiftrt:SI + (match_dup 2) + (const_int 16)) + (zero_extend:SI + (match_dup 1))) + (match_dup 4)))] + "TARGET_MULHW" + "macchwu. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*macchwu" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))) + (match_operand:SI 3 "gpc_reg_operand" "0")))] + "TARGET_MULHW" + "macchwu %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*machhwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (plus:SI (mult:SI (ashiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))) + (match_operand:SI 4 "gpc_reg_operand" "0")) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (ashiftrt:SI + (match_dup 1) + (const_int 16)) + (ashiftrt:SI + (match_dup 2) + (const_int 16))) + (match_dup 4)))] + "TARGET_MULHW" + "machhw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*machhw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (ashiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))) + (match_operand:SI 3 "gpc_reg_operand" "0")))] + "TARGET_MULHW" + "machhw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*machhwuc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (plus:SI (mult:SI (lshiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))) + (match_operand:SI 4 "gpc_reg_operand" "0")) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (lshiftrt:SI + (match_dup 1) + (const_int 16)) + (lshiftrt:SI + (match_dup 2) + (const_int 16))) + (match_dup 4)))] + "TARGET_MULHW" + "machhwu. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*machhwu" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (lshiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))) + (match_operand:SI 3 "gpc_reg_operand" "0")))] + "TARGET_MULHW" + "machhwu %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*maclhwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (plus:SI (mult:SI (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (sign_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))) + (match_operand:SI 4 "gpc_reg_operand" "0")) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (sign_extend:SI + (match_dup 1)) + (sign_extend:SI + (match_dup 2))) + (match_dup 4)))] + "TARGET_MULHW" + "maclhw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*maclhw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (sign_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))) + (match_operand:SI 3 "gpc_reg_operand" "0")))] + "TARGET_MULHW" + "maclhw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*maclhwuc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (plus:SI (mult:SI (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (zero_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))) + (match_operand:SI 4 "gpc_reg_operand" "0")) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (zero_extend:SI + (match_dup 1)) + (zero_extend:SI + (match_dup 2))) + (match_dup 4)))] + "TARGET_MULHW" + "maclhwu. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*maclhwu" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (plus:SI (mult:SI (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (zero_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))) + (match_operand:SI 3 "gpc_reg_operand" "0")))] + "TARGET_MULHW" + "maclhwu %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*nmacchwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (minus:SI (match_operand:SI 4 "gpc_reg_operand" "0") + (mult:SI (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r")))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (match_dup 4) + (mult:SI (ashiftrt:SI + (match_dup 2) + (const_int 16)) + (sign_extend:SI + (match_dup 1)))))] + "TARGET_MULHW" + "nmacchw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*nmacchw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (match_operand:SI 3 "gpc_reg_operand" "0") + (mult:SI (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r")))))] + "TARGET_MULHW" + "nmacchw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*nmachhwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (minus:SI (match_operand:SI 4 "gpc_reg_operand" "0") + (mult:SI (ashiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (match_dup 4) + (mult:SI (ashiftrt:SI + (match_dup 1) + (const_int 16)) + (ashiftrt:SI + (match_dup 2) + (const_int 16)))))] + "TARGET_MULHW" + "nmachhw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*nmachhw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (match_operand:SI 3 "gpc_reg_operand" "0") + (mult:SI (ashiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)))))] + "TARGET_MULHW" + "nmachhw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*nmaclhwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (minus:SI (match_operand:SI 4 "gpc_reg_operand" "0") + (mult:SI (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (sign_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r")))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (match_dup 4) + (mult:SI (sign_extend:SI + (match_dup 1)) + (sign_extend:SI + (match_dup 2)))))] + "TARGET_MULHW" + "nmaclhw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*nmaclhw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (match_operand:SI 3 "gpc_reg_operand" "0") + (mult:SI (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (sign_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r")))))] + "TARGET_MULHW" + "nmaclhw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulchwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (mult:SI (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (ashiftrt:SI + (match_dup 2) + (const_int 16)) + (sign_extend:SI + (match_dup 1))))] + "TARGET_MULHW" + "mulchw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulchw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))))] + "TARGET_MULHW" + "mulchw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulchwuc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (mult:SI (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (lshiftrt:SI + (match_dup 2) + (const_int 16)) + (zero_extend:SI + (match_dup 1))))] + "TARGET_MULHW" + "mulchwu. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulchwu" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16)) + (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "r"))))] + "TARGET_MULHW" + "mulchwu %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulhhwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (mult:SI (ashiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (ashiftrt:SI + (match_dup 1) + (const_int 16)) + (ashiftrt:SI + (match_dup 2) + (const_int 16))))] + "TARGET_MULHW" + "mulhhw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulhhw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (ashiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (ashiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))))] + "TARGET_MULHW" + "mulhhw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulhhwuc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (mult:SI (lshiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (lshiftrt:SI + (match_dup 1) + (const_int 16)) + (lshiftrt:SI + (match_dup 2) + (const_int 16))))] + "TARGET_MULHW" + "mulhhwu. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mulhhwu" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (lshiftrt:SI + (match_operand:SI 1 "gpc_reg_operand" "%r") + (const_int 16)) + (lshiftrt:SI + (match_operand:SI 2 "gpc_reg_operand" "r") + (const_int 16))))] + "TARGET_MULHW" + "mulhhwu %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mullhwc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (mult:SI (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (sign_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (sign_extend:SI + (match_dup 1)) + (sign_extend:SI + (match_dup 2))))] + "TARGET_MULHW" + "mullhw. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mullhw" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (sign_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (sign_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))))] + "TARGET_MULHW" + "mullhw %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mullhwuc" + [(set (match_operand:CC 3 "cc_reg_operand" "=x") + (compare:CC (mult:SI (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (zero_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))) + (const_int 0))) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (zero_extend:SI + (match_dup 1)) + (zero_extend:SI + (match_dup 2))))] + "TARGET_MULHW" + "mullhwu. %0, %1, %2" + [(set_attr "type" "imul3")]) + +(define_insn "*mullhwu" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (mult:SI (zero_extend:SI + (match_operand:HI 1 "gpc_reg_operand" "%r")) + (zero_extend:SI + (match_operand:HI 2 "gpc_reg_operand" "r"))))] + "TARGET_MULHW" + "mullhwu %0, %1, %2" + [(set_attr "type" "imul3")]) + (define_split [(set (match_operand:CC 2 "cc_reg_not_cr0_operand" "") (compare:CC (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "")) @@ -5317,6 +5785,62 @@ "{fcirz|fctiwz} %0,%1" [(set_attr "type" "fp")]) +(define_insn "btruncdf2" + [(set (match_operand:DF 0 "gpc_reg_operand" "=f") + (unspec:DF [(match_operand:DF 1 "gpc_reg_operand" "f")] UNSPEC_FRIZ))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "friz %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "btruncsf2" + [(set (match_operand:SF 0 "gpc_reg_operand" "=f") + (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] UNSPEC_FRIZ))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "friz %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "ceildf2" + [(set (match_operand:DF 0 "gpc_reg_operand" "=f") + (unspec:DF [(match_operand:DF 1 "gpc_reg_operand" "f")] UNSPEC_FRIP))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "frip %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "ceilsf2" + [(set (match_operand:SF 0 "gpc_reg_operand" "=f") + (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] UNSPEC_FRIP))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "frip %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "floordf2" + [(set (match_operand:DF 0 "gpc_reg_operand" "=f") + (unspec:DF [(match_operand:DF 1 "gpc_reg_operand" "f")] UNSPEC_FRIM))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "frim %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "floorsf2" + [(set (match_operand:SF 0 "gpc_reg_operand" "=f") + (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] UNSPEC_FRIM))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "frim %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "rounddf2" + [(set (match_operand:DF 0 "gpc_reg_operand" "=f") + (unspec:DF [(match_operand:DF 1 "gpc_reg_operand" "f")] UNSPEC_FRIN))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "frin %0,%1" + [(set_attr "type" "fp")]) + +(define_insn "roundsf2" + [(set (match_operand:SF 0 "gpc_reg_operand" "=f") + (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] UNSPEC_FRIN))] + "TARGET_FPRND && TARGET_HARD_FLOAT && TARGET_FPRS" + "frin %0,%1" + [(set_attr "type" "fp")]) + ; An UNSPEC is used so we don't have to support SImode in FP registers. (define_insn "stfiwx" [(set (match_operand:SI 0 "memory_operand" "=Z") @@ -11264,7 +11788,7 @@ (plus:SI (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r") (match_operand:SI 2 "scc_eq_operand" "r,O,K,L,I")) (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r")))] - "TARGET_32BIT && optimize_size" + "TARGET_32BIT" "@ xor %0,%1,%2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3 {sfi|subfic} %0,%1,0\;{aze|addze} %0,%3 @@ -11364,7 +11888,7 @@ [(set (match_operand:P 0 "gpc_reg_operand" "=r") (neg:P (eq:P (match_operand:P 1 "gpc_reg_operand" "r") (const_int 0))))] - "optimize_size || TARGET_POWER" + "" "{ai|addic} %0,%1,-1\;{sfe|subfe} %0,%0,%0" [(set_attr "type" "two") (set_attr "length" "8")]) @@ -11373,9 +11897,9 @@ [(set (match_operand:P 0 "gpc_reg_operand" "=r") (neg:P (eq:P (match_operand:P 1 "gpc_reg_operand" "%r") (match_operand:P 2 "scc_eq_operand" ""))))] - "optimize_size || TARGET_POWER" + "" "#" - "optimize_size || TARGET_POWER" + "" [(set (match_dup 0) (neg:P (eq:P (match_dup 3) (const_int 0))))] { if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0) diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index 43392ddd8ea..d50cc3ae601 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -54,16 +54,24 @@ Use PowerPC Graphics group optional instructions mmfcrf Target Report Mask(MFCRF) -Generate single field mfcr instruction +Use PowerPC V2.01 single field mfcr instruction mpopcntb Target Report Mask(POPCNTB) -Use PowerPC/AS popcntb instruction +Use PowerPC V2.02 popcntb instruction + +mfprnd +Target Report Mask(FPRND) +Use PowerPC V2.02 floating point rounding instructions maltivec Target Report Mask(ALTIVEC) Use AltiVec instructions +mmulhw +Target Report Mask(MULHW) +Use 4xx half-word multiply instructions + mmultiple Target Report Mask(MULTIPLE) Generate load/store multiple instructions diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index d5388320c7c..238b497250f 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -508,7 +508,7 @@ fini_section (void) \ || (!TARGET_NO_FP_IN_TOC \ && !TARGET_RELOCATABLE \ && GET_CODE (X) == CONST_DOUBLE \ - && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ + && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ && BITS_PER_WORD == HOST_BITS_PER_INT))) /* These macros generate the special .type and .size directives which @@ -685,16 +685,6 @@ extern int fixuplabelno; #define TARGET_OS_SYSV_CPP_BUILTINS() \ do \ { \ - if (flag_pic == 1) \ - { \ - builtin_define ("__pic__=1"); \ - builtin_define ("__PIC__=1"); \ - } \ - else if (flag_pic == 2) \ - { \ - builtin_define ("__pic__=2"); \ - builtin_define ("__PIC__=2"); \ - } \ if (target_flags_explicit \ & MASK_RELOCATABLE) \ builtin_define ("_RELOCATABLE"); \ diff --git a/gcc/config/rs6000/t-fprules b/gcc/config/rs6000/t-fprules index 4fb09a2789a..d311d8c3187 100644 --- a/gcc/config/rs6000/t-fprules +++ b/gcc/config/rs6000/t-fprules @@ -13,6 +13,7 @@ fp-bit.c: $(srcdir)/config/fp-bit.c MULTILIB_MATCHES_FLOAT = msoft-float=mcpu?401 \ msoft-float=mcpu?403 \ msoft-float=mcpu?405 \ + msoft-float=mcpu?440 \ msoft-float=mcpu?ec603e \ msoft-float=mcpu?801 \ msoft-float=mcpu?821 \ diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h index d389ace8d45..273a4357a28 100644 --- a/gcc/config/rs6000/vxworks.h +++ b/gcc/config/rs6000/vxworks.h @@ -41,16 +41,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA builtin_define ("__VXWORKS__"); \ if (!TARGET_SOFT_FLOAT) \ builtin_define ("__hardfp"); \ - if (flag_pic == 2) \ - { \ - builtin_define ("__PIC__=2"); \ - builtin_define ("__pic__=2"); \ - } \ - else if (flag_pic == 1) \ - { \ - builtin_define ("__PIC__=1"); \ - builtin_define ("__pic__=1"); \ - } \ \ /* C89 namespace violation! */ \ builtin_define ("CPU_FAMILY=PPC"); \ diff --git a/gcc/config/rs6000/xcoff.h b/gcc/config/rs6000/xcoff.h index e954705c347..822b5a0de5e 100644 --- a/gcc/config/rs6000/xcoff.h +++ b/gcc/config/rs6000/xcoff.h @@ -164,7 +164,7 @@ toc_section (void) \ || (GET_CODE (X) == CONST_DOUBLE \ && (TARGET_POWERPC64 \ || TARGET_MINIMAL_TOC \ - || (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ + || (SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ && ! TARGET_NO_FP_IN_TOC))))) #define TARGET_ASM_GLOBALIZE_LABEL rs6000_xcoff_asm_globalize_label diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h index 4f58c734547..7fd5711a8a4 100644 --- a/gcc/config/s390/linux.h +++ b/gcc/config/s390/linux.h @@ -54,11 +54,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 009c17828d8..04cc741348b 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -233,7 +233,12 @@ struct s390_frame_layout GTY (()) HOST_WIDE_INT f4_offset; HOST_WIDE_INT f8_offset; HOST_WIDE_INT backchain_offset; - + + /* Number of first and last gpr where slots in the register + save area are reserved for. */ + int first_save_gpr_slot; + int last_save_gpr_slot; + /* Number of first and last gpr to be saved, restored. */ int first_save_gpr; int first_restore_gpr; @@ -283,8 +288,8 @@ struct machine_function GTY(()) #define cfun_frame_layout (cfun->machine->frame_layout) #define cfun_save_high_fprs_p (!!cfun_frame_layout.high_fprs) -#define cfun_gprs_save_area_size ((cfun_frame_layout.last_save_gpr - \ - cfun_frame_layout.first_save_gpr + 1) * UNITS_PER_WORD) +#define cfun_gprs_save_area_size ((cfun_frame_layout.last_save_gpr_slot - \ + cfun_frame_layout.first_save_gpr_slot + 1) * UNITS_PER_WORD) #define cfun_set_fpr_bit(BITNUM) (cfun->machine->frame_layout.fpr_bitmap |= \ (1 << (BITNUM))) #define cfun_fpr_bit_p(BITNUM) (!!(cfun->machine->frame_layout.fpr_bitmap & \ @@ -3823,7 +3828,7 @@ s390_expand_insv (rtx dest, rtx op1, rtx op2, rtx src) int bitsize = INTVAL (op1); int bitpos = INTVAL (op2); - /* We need byte alignement. */ + /* We need byte alignment. */ if (bitsize % BITS_PER_UNIT) return false; @@ -5974,7 +5979,10 @@ s390_regs_ever_clobbered (int *regs_ever_clobbered) deal with this automatically. */ if (current_function_calls_eh_return || cfun->machine->has_landing_pad_p) for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM ; i++) - regs_ever_clobbered[EH_RETURN_DATA_REGNO (i)] = 1; + if (current_function_calls_eh_return + || (cfun->machine->has_landing_pad_p + && regs_ever_live [EH_RETURN_DATA_REGNO (i)])) + regs_ever_clobbered[EH_RETURN_DATA_REGNO (i)] = 1; /* For nonlocal gotos all call-saved registers have to be saved. This flag is also set for the unwinding code in libgcc. @@ -6097,15 +6105,17 @@ s390_register_info (int clobbered_regs[]) || current_function_stdarg); for (i = 6; i < 16; i++) - if (clobbered_regs[i]) + if (regs_ever_live[i] || clobbered_regs[i]) break; for (j = 15; j > i; j--) - if (clobbered_regs[j]) + if (regs_ever_live[j] || clobbered_regs[j]) break; if (i == 16) { /* Nothing to save/restore. */ + cfun_frame_layout.first_save_gpr_slot = -1; + cfun_frame_layout.last_save_gpr_slot = -1; cfun_frame_layout.first_save_gpr = -1; cfun_frame_layout.first_restore_gpr = -1; cfun_frame_layout.last_save_gpr = -1; @@ -6113,11 +6123,36 @@ s390_register_info (int clobbered_regs[]) } else { - /* Save / Restore from gpr i to j. */ - cfun_frame_layout.first_save_gpr = i; - cfun_frame_layout.first_restore_gpr = i; - cfun_frame_layout.last_save_gpr = j; - cfun_frame_layout.last_restore_gpr = j; + /* Save slots for gprs from i to j. */ + cfun_frame_layout.first_save_gpr_slot = i; + cfun_frame_layout.last_save_gpr_slot = j; + + for (i = cfun_frame_layout.first_save_gpr_slot; + i < cfun_frame_layout.last_save_gpr_slot + 1; + i++) + if (clobbered_regs[i]) + break; + + for (j = cfun_frame_layout.last_save_gpr_slot; j > i; j--) + if (clobbered_regs[j]) + break; + + if (i == cfun_frame_layout.last_save_gpr_slot + 1) + { + /* Nothing to save/restore. */ + cfun_frame_layout.first_save_gpr = -1; + cfun_frame_layout.first_restore_gpr = -1; + cfun_frame_layout.last_save_gpr = -1; + cfun_frame_layout.last_restore_gpr = -1; + } + else + { + /* Save / Restore from gpr i to j. */ + cfun_frame_layout.first_save_gpr = i; + cfun_frame_layout.first_restore_gpr = i; + cfun_frame_layout.last_save_gpr = j; + cfun_frame_layout.last_restore_gpr = j; + } } if (current_function_stdarg) @@ -6133,11 +6168,17 @@ s390_register_info (int clobbered_regs[]) if (cfun_frame_layout.first_save_gpr == -1 || cfun_frame_layout.first_save_gpr > 2 + min_gpr) - cfun_frame_layout.first_save_gpr = 2 + min_gpr; + { + cfun_frame_layout.first_save_gpr = 2 + min_gpr; + cfun_frame_layout.first_save_gpr_slot = 2 + min_gpr; + } if (cfun_frame_layout.last_save_gpr == -1 || cfun_frame_layout.last_save_gpr < 2 + max_gpr - 1) - cfun_frame_layout.last_save_gpr = 2 + max_gpr - 1; + { + cfun_frame_layout.last_save_gpr = 2 + max_gpr - 1; + cfun_frame_layout.last_save_gpr_slot = 2 + max_gpr - 1; + } } /* Mark f0, f2 for 31 bit and f0-f4 for 64 bit to be saved. */ @@ -6182,7 +6223,7 @@ s390_frame_info (void) cfun_frame_layout.f0_offset = 16 * UNITS_PER_WORD; cfun_frame_layout.f4_offset = cfun_frame_layout.f0_offset + 2 * 8; cfun_frame_layout.f8_offset = -cfun_frame_layout.high_fprs * 8; - cfun_frame_layout.gprs_offset = (cfun_frame_layout.first_save_gpr + cfun_frame_layout.gprs_offset = (cfun_frame_layout.first_save_gpr_slot * UNITS_PER_WORD); } else if (TARGET_BACKCHAIN) /* kernel stack layout */ @@ -6191,7 +6232,7 @@ s390_frame_info (void) - UNITS_PER_WORD); cfun_frame_layout.gprs_offset = (cfun_frame_layout.backchain_offset - - (STACK_POINTER_REGNUM - cfun_frame_layout.first_save_gpr + 1) + - (STACK_POINTER_REGNUM - cfun_frame_layout.first_save_gpr_slot + 1) * UNITS_PER_WORD); if (TARGET_64BIT) @@ -6422,7 +6463,7 @@ s390_initial_elimination_offset (int from, int to) case RETURN_ADDRESS_POINTER_REGNUM: s390_init_frame_layout (); - index = RETURN_REGNUM - cfun_frame_layout.first_save_gpr; + index = RETURN_REGNUM - cfun_frame_layout.first_save_gpr_slot; gcc_assert (index >= 0); offset = cfun_frame_layout.frame_size + cfun_frame_layout.gprs_offset; offset += index * UNITS_PER_WORD; @@ -6667,7 +6708,9 @@ s390_emit_prologue (void) if (cfun_frame_layout.first_save_gpr != -1) { insn = save_gprs (stack_pointer_rtx, - cfun_frame_layout.gprs_offset, + cfun_frame_layout.gprs_offset + + UNITS_PER_WORD * (cfun_frame_layout.first_save_gpr + - cfun_frame_layout.first_save_gpr_slot), cfun_frame_layout.first_save_gpr, cfun_frame_layout.last_save_gpr); emit_insn (insn); @@ -7021,7 +7064,7 @@ s390_emit_epilogue (bool sibcall) { addr = plus_constant (frame_pointer, offset + cfun_frame_layout.gprs_offset - + (i - cfun_frame_layout.first_save_gpr) + + (i - cfun_frame_layout.first_save_gpr_slot) * UNITS_PER_WORD); addr = gen_rtx_MEM (Pmode, addr); set_mem_alias_set (addr, get_frame_alias_set ()); @@ -7046,7 +7089,7 @@ s390_emit_epilogue (bool sibcall) addr = plus_constant (frame_pointer, offset + cfun_frame_layout.gprs_offset + (RETURN_REGNUM - - cfun_frame_layout.first_save_gpr) + - cfun_frame_layout.first_save_gpr_slot) * UNITS_PER_WORD); addr = gen_rtx_MEM (Pmode, addr); set_mem_alias_set (addr, get_frame_alias_set ()); @@ -7057,7 +7100,7 @@ s390_emit_epilogue (bool sibcall) insn = restore_gprs (frame_pointer, offset + cfun_frame_layout.gprs_offset + (cfun_frame_layout.first_restore_gpr - - cfun_frame_layout.first_save_gpr) + - cfun_frame_layout.first_save_gpr_slot) * UNITS_PER_WORD, cfun_frame_layout.first_restore_gpr, cfun_frame_layout.last_restore_gpr); diff --git a/gcc/config/s390/tpf.h b/gcc/config/s390/tpf.h index 02fa8f2640e..f0a63f7d255 100644 --- a/gcc/config/s390/tpf.h +++ b/gcc/config/s390/tpf.h @@ -72,11 +72,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA builtin_define_std ("tpf"); \ builtin_assert ("system=tpf"); \ builtin_define ("__ELF__"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h index c38055208c8..6956e4dfccd 100644 --- a/gcc/config/sh/linux.h +++ b/gcc/config/sh/linux.h @@ -38,11 +38,6 @@ Boston, MA 02110-1301, USA. */ do \ { \ LINUX_TARGET_OS_CPP_BUILTINS(); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 486cc97544d..7f541fbda8b 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -92,11 +92,6 @@ do { \ builtin_define ("__HITACHI__"); \ builtin_define (TARGET_LITTLE_ENDIAN \ ? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \ - if (flag_pic) \ - { \ - builtin_define ("__pic__"); \ - builtin_define ("__PIC__"); \ - } \ } while (0) /* We can not debug without a frame pointer. */ diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index 176d23b5ea1..51f9bd82e97 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -72,11 +72,6 @@ Boston, MA 02110-1301, USA. */ builtin_define ("_LARGEFILE64_SOURCE=1"); \ builtin_define ("__EXTENSIONS__"); \ } \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ TARGET_SUB_OS_CPP_BUILTINS(); \ } while (0) diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h index 813a18dc01a..10edd746f7f 100644 --- a/gcc/config/sparc/linux.h +++ b/gcc/config/sparc/linux.h @@ -29,11 +29,6 @@ Boston, MA 02110-1301, USA. */ builtin_assert ("system=linux"); \ builtin_assert ("system=unix"); \ builtin_assert ("system=posix"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h index dc89408d526..e4fe918e6a4 100644 --- a/gcc/config/sparc/linux64.h +++ b/gcc/config/sparc/linux64.h @@ -30,11 +30,6 @@ Boston, MA 02110-1301, USA. */ builtin_assert ("system=linux"); \ builtin_assert ("system=unix"); \ builtin_assert ("system=posix"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } \ while (0) diff --git a/gcc/config/t-darwin b/gcc/config/t-darwin index df1b6320e5d..d59f0b7a162 100644 --- a/gcc/config/t-darwin +++ b/gcc/config/t-darwin @@ -6,7 +6,7 @@ darwin.o: $(srcdir)/config/darwin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ darwin-c.o: $(srcdir)/config/darwin-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(CPPLIB_H) tree.h c-pragma.h $(C_TREE_H) toplev.h $(TM_P_H) \ - c-incpath.h flags.h + c-incpath.h flags.h $(C_COMMON_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/darwin-c.c $(PREPROCESSOR_DEFINES) gt-darwin.h : s-gtype ; @true diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 3329ec605d3..bfa90823f99 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -90,11 +90,6 @@ extern unsigned xtensa_current_frame_size; builtin_define (TARGET_BIG_ENDIAN ? "__XTENSA_EB__" : "__XTENSA_EL__"); \ if (!TARGET_HARD_FLOAT) \ builtin_define ("__XTENSA_SOFT_FLOAT__"); \ - if (flag_pic) \ - { \ - builtin_define ("__PIC__"); \ - builtin_define ("__pic__"); \ - } \ } while (0) #define CPP_SPEC " %(subtarget_cpp_spec) " diff --git a/gcc/configure b/gcc/configure index 3e58a337308..f9bb1e9015f 100755 --- a/gcc/configure +++ b/gcc/configure @@ -13988,6 +13988,43 @@ _ACEOF fi +echo "$as_me:$LINENO: checking assembler for .weakref" >&5 +echo $ECHO_N "checking assembler for .weakref... $ECHO_C" >&6 +if test "${gcc_cv_as_weakref+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gcc_cv_as_weakref=no + if test $in_tree_gas = yes; then + if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 17 \) \* 1000 + 0` + then gcc_cv_as_weakref=yes +fi + elif test x$gcc_cv_as != x; then + echo ' .weakref foobar, barfnot' > conftest.s + if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } + then + gcc_cv_as_weakref=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +echo "$as_me:$LINENO: result: $gcc_cv_as_weakref" >&5 +echo "${ECHO_T}$gcc_cv_as_weakref" >&6 +if test $gcc_cv_as_weakref = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GAS_WEAKREF 1 +_ACEOF + +fi + echo "$as_me:$LINENO: checking assembler for .nsubspa comdat" >&5 echo $ECHO_N "checking assembler for .nsubspa comdat... $ECHO_C" >&6 if test "${gcc_cv_as_nsubspa_comdat+set}" = set; then @@ -14523,6 +14560,19 @@ foo: .long 25 tls_first_minor=15 tls_as_opt=--fatal-warnings ;; + arm*-*-*) + conftest_s=' + .section ".tdata","awT",%progbits +foo: .long 25 + .text +.word foo(gottpoff) +.word foo(tpoff) +.word foo(tlsgd) +.word foo(tlsldm) +.word foo(tlsldo)' + tls_first_major=2 + tls_first_minor=17 + ;; i[34567]86-*-*) conftest_s=' .section ".tdata","awT",@progbits @@ -15527,6 +15577,52 @@ _ACEOF fi case $target in + *-*-aix*) conftest_s=' .machine "pwr5x" + .csect .text[PR] + frin 1,1';; + *) conftest_s=' .machine power5 + .text + frin 1,1';; + esac + + echo "$as_me:$LINENO: checking assembler for fp round support" >&5 +echo $ECHO_N "checking assembler for fp round support... $ECHO_C" >&6 +if test "${gcc_cv_as_powerpc_fprnd+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gcc_cv_as_powerpc_fprnd=no + if test $in_tree_gas = yes; then + if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 17 \) \* 1000 + 0` + then gcc_cv_as_powerpc_fprnd=yes +fi + elif test x$gcc_cv_as != x; then + echo "$conftest_s" > conftest.s + if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } + then + gcc_cv_as_powerpc_fprnd=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +echo "$as_me:$LINENO: result: $gcc_cv_as_powerpc_fprnd" >&5 +echo "${ECHO_T}$gcc_cv_as_powerpc_fprnd" >&6 +if test $gcc_cv_as_powerpc_fprnd = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_AS_FPRND 1 +_ACEOF + +fi + + case $target in *-*-aix*) conftest_s=' .csect .text[PR] LCF..0: addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';; @@ -15642,7 +15738,7 @@ esac case "$target" in i?86*-*-* | mips*-*-* | alpha*-*-* | powerpc*-*-* | sparc*-*-* | m68*-*-* \ | x86_64*-*-* | hppa*-*-* | arm*-*-* | strongarm*-*-* | xscale*-*-* \ - | xstormy16*-*-* | cris-*-* | xtensa-*-*) + | xstormy16*-*-* | cris-*-* | xtensa-*-* | bfin-*-*) insn="nop" ;; ia64*-*-* | s390*-*-*) diff --git a/gcc/configure.ac b/gcc/configure.ac index 7070c114fd7..169a7cb9c4e 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1,7 +1,7 @@ # configure.ac for GCC # Process this file with autoconf to generate a configuration script. -# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. #This file is part of GCC. @@ -1947,6 +1947,11 @@ gcc_GAS_CHECK_FEATURE([.weak], gcc_cv_as_weak, [ .weak foobar],, [AC_DEFINE(HAVE_GAS_WEAK, 1, [Define if your assembler supports .weak.])]) +gcc_GAS_CHECK_FEATURE([.weakref], gcc_cv_as_weakref, + [2,17,0],, + [ .weakref foobar, barfnot],, +[AC_DEFINE(HAVE_GAS_WEAKREF, 1, [Define if your assembler supports .weakref.])]) + gcc_GAS_CHECK_FEATURE([.nsubspa comdat], gcc_cv_as_nsubspa_comdat, [2,15,91],, [ .SPACE $TEXT$ @@ -2236,6 +2241,19 @@ foo: .long 25 tls_first_minor=15 tls_as_opt=--fatal-warnings ;; + arm*-*-*) + conftest_s=' + .section ".tdata","awT",%progbits +foo: .long 25 + .text +.word foo(gottpoff) +.word foo(tpoff) +.word foo(tlsgd) +.word foo(tlsldm) +.word foo(tlsldo)' + tls_first_major=2 + tls_first_minor=17 + ;; i[34567]86-*-*) conftest_s=' .section ".tdata","awT",@progbits @@ -2745,6 +2763,21 @@ foo: nop [Define if your assembler supports popcntb field.])]) case $target in + *-*-aix*) conftest_s=' .machine "pwr5x" + .csect .text[[PR]] + frin 1,1';; + *) conftest_s=' .machine power5 + .text + frin 1,1';; + esac + + gcc_GAS_CHECK_FEATURE([fp round support], + gcc_cv_as_powerpc_fprnd, [2,17,0],, + [$conftest_s],, + [AC_DEFINE(HAVE_AS_FPRND, 1, + [Define if your assembler supports fprnd.])]) + + case $target in *-*-aix*) conftest_s=' .csect .text[[PR]] LCF..0: addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';; @@ -2801,7 +2834,7 @@ esac case "$target" in i?86*-*-* | mips*-*-* | alpha*-*-* | powerpc*-*-* | sparc*-*-* | m68*-*-* \ | x86_64*-*-* | hppa*-*-* | arm*-*-* | strongarm*-*-* | xscale*-*-* \ - | xstormy16*-*-* | cris-*-* | xtensa-*-*) + | xstormy16*-*-* | cris-*-* | xtensa-*-* | bfin-*-*) insn="nop" ;; ia64*-*-* | s390*-*-*) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8776b1f5b65..17094dd3f69 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,221 @@ +2005-11-21 Gabriel Dos Reis + + PR c++/22238 + * error.c (resolve_virtual_fun_from_obj_type_ref): New. + (dump_expr): Use it in . + +2005-11-21 Richard Henderson + + * cp-objcp-common.h, name-lookup.c, name-lookup.h: Revert 11-18 patch. + + * name-lookup.c (lookup_name): Remove prefer_type argument. + (lookup_name_prefer_type): New. + * decl.c (lookup_and_check_tag): Use them. + * pt.c (tsubst_friend_class): Likewise. + (lookup_template_class): Likewise. + (tsubst_copy_and_build): Likewise. + * name-lookup.h (lookup_name_prefer_type): New. + (lookup_name): Remove declaration. + +2005-11-18 Mark Mitchell + + PR c++/8355 + * decl.c (grokfndecl): Set up DECL_TEMPLATE_INFO before calling + set_decl_namespace. + * name-lookup.c (set_decl_namespace): + +2005-11-18 Mike Stump + + * cp-objcp-common.h (LANG_HOOKS_LOOKUP_NAME): Add. + * name-lookup.c (lookup_name_two): Remove. + (lookup_name_one): Add. + * name-lookup.h (lookup_name_two): Remove. + (lookup_name_one): Add. + +2005-11-15 Jason Merrill + + PR c++/24580 + * method.c (locate_copy): Also use skip_artificial_parms here. + (synthesize_exception_spec): Use CLASS_TYPE_P rather than checking + for RECORD_TYPE. + (locate_ctor): Abort if we fail to find a default constructor. + +2005-11-15 Mike Stump + + * name-lookup.c (lookup_name_two): Add. + * name-lookup.h: Likewise. + +2005-11-15 Mark Mitchell + + PR c++/24667 + * typeck.c (check_for_casting_away_constness): Use the diag_fn. + (build_const_cast_1): Call it, for C-style casts. + +2005-11-14 Mark Mitchell + + PR c++/24687 + * pt.c (check_explicit_specialization): Don't check for C linkage. + (push_template_decl_real): Likewise. + * parser.c (cp_parser_explicit_specialization): Check here. + (cp_parser_template_declaration_after_export): And here. + + * parser.c (cp_lexer_get_preprocessor_token): Initialize keyword + field. + +2005-11-14 Jason Merrill + + PR c++/24580 + * method.c (locate_ctor): Skip all artificial parms, not just + 'this'. + +2005-11-14 Mark Mitchell + + * parser.c (eof_token): Add initializer for ambiguous_p. + +2005-11-13 Mark Mitchell + + PR c++/24817 + * decl.c (check_redeclaration_exception_specification): New + function. + (duplicate_decls): Use it. + * error.c (fndecl_to_string): Print the template parameter list. + + PR c++/20293 + * cxx-pretty-print.c (pp_cxx_statement): Print qualifying scopes + for namespaces. + (pp_cxx_original_namespace_definition): Likewise. + * name-lookup.c (ambiguous_decl): Don't issue error messages; + instead return lists of ambiguous candidates. + (select_decl): Handle ambiguous namespace lookups. + * parser.c (cp_token): Add ambiguous_p. + (cp_lexer_get_preprocessor_token): Set it. + (cp_parser_diagnose_invalid_type_name): Avoid duplicate messages + when a qualified name uses an invalid scope. + (cp_parser_primary_expression): Print ambiguous candidates. + (cp_parser_type_parameter): Adjust comment to reflect new + parameter name for cp_parser_lookup_name. + (cp_parser_template_argument): Likewise. + (cp_parser_elaborated_type_specifier): Likewise. + (cp_parser_namespace_name): Likewise. + (cp_parser_class_name): Print ambiguous candidates. + (cp_parser_lookup_name): Rename ambiguous_p parameter to + ambiguous_decls. Use it to return a list of ambiguous candiates + when a lookup is ambiguous. + (cp_parser_lookup_name_simple): Adjust comment to reflect new + parameter name for cp_parser_lookup_name. + +2005-11-12 Jakub Jelinek + + PR c++/24780 + * typeck.c (complete_type): Set TYPE_NEEDS_CONSTRUCTING + and TYPE_HAS_NONTRIVIAL_DESTRUCTOR flags for all variants + of array type. + + PR c++/24761 + * pt.c (tsubst_copy_asm_operands): New function. + (tsubst_expr) : Use it. + +2005-11-08 Jakub Jelinek + + PR c++/19450 + * decl.c (redeclaration_error_message): Issue diagnostics about + olddecl and newdecl disagreement on __thread property. + (grokdeclarator): Set DECL_TLS_MODEL on class static variables. + +2005-11-08 Jason Merrill + + PR c++/21123 + * method.c (use_thunk): Use build_cplus_new instead of + force_target_expr. + +2005-11-06 Jason Merrill + James A. Morrison + + PR c++/17256 + * decl2.c (cp_finish_file): Fix conditions for undefined warning. + Set TREE_NO_WARNING instead of TREE_PUBLIC. + * pt.c (instantiate_pending_templates): Set DECL_INITIAL to avoid + a warning on a function we didn't instantiate because of excessive + recursion. + +2005-11-06 Mark Mitchell + + * class.c (record_subobject_offsets): Don't record offsets past + biggest empty class for non-empty base classes. + (layout_class_type): Use TYPE_SIZE_UNIT, not TYPE_SIZE, when + keeping track of the size of emptyclasses. + + PR c++/21308 + * class.c (sizeof_biggest_empty_class): New variable. + (record_subobject_offsets): Don't record offsets past biggest + empty class for data members. Replace vbases_p parameter with + is_data_member parameter. + (build_base_field): Adjust call. + (layout_class_type): Likewise. Maintain + sizeof_biggest_empty_class. + +2005-11-05 Kazu Hirata + + * decl2.c, init.c, typeck.c: Fix comment typos. + +2005-11-04 Richard Guenther + + PR c++/22487 + * init.c (build_vec_init): Build comparison of matching + types. + +2005-11-03 Josh Conner + + PR c++/19989 + pt.c (tsubst): Accept zero-length array if tf_error is set + in complain flags. Change error message for negative- + length array. + +2005-11-04 Joseph S. Myers + + * cp-tree.h (cp_cpp_error), error.c (cp_cpp_error): Take va_list* + parameter. + +2005-11-03 Joseph S. Myers + + PR c++/17964 + * error.c (cp_cpp_error): New function. + * cp-tree.h (cp_cpp_error): Declare. + * parser.c (cp_lexer_new_main): Set CPP option client_diagnostic + and error callback after lexing. + +2005-11-03 Mark Mitchell + + PR c++/21627 + * pt.c (register_specialization): Update inline flags on clones.y + +2005-11-03 Andrew Pinski + + PR c++/24582 + * decl.c (declare_local_label): Return 0 for variables + with error_mark_node as their types. + +2005-11-02 Mark Mitchell + + PR c++/22434 + * call.c (build_conditional_expr): Do bad conversions, if there's + no other choice. + + PR c++/24560 + * parser.c (cp_parser_postfix_dot_deref_expression): Improve error + message for use of overloaded functions on LHS of "." operator. + + PR c++/19253 + * parser.c (cp_parser_postfix_expression): Use + cp_parser_elaborated_type_specifier to handle typename-types in + functional casts. + (cp_parser_enclosed_argument_list): Skip ahead to the end of the + template argument list if the closing ">" is not found. + + PR c++/24569 + * pt.c (instantiate_decl): Use cp_finish_decl, not + finish_static_data_member_decl. + 2005-10-28 Andrew Pinski * decl.c (grokfndecl): Remove the setting diff --git a/gcc/cp/class.c b/gcc/cp/class.c index ff5190ab7d6..7c43d3b242e 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -103,6 +103,9 @@ typedef int (*subobject_offset_fn) (tree, tree, splay_tree); static int current_class_stack_size; static class_stack_node_t current_class_stack; +/* The size of the largest empty class seen in this translation unit. */ +static GTY (()) tree sizeof_biggest_empty_class; + /* An array of all local classes present in this translation unit, in declaration order. */ VEC(tree,gc) *local_classes; @@ -192,7 +195,7 @@ static int record_subobject_offset (tree, tree, splay_tree); static int check_subobject_offset (tree, tree, splay_tree); static int walk_subobject_offsets (tree, subobject_offset_fn, tree, splay_tree, tree, int); -static void record_subobject_offsets (tree, tree, splay_tree, int); +static void record_subobject_offsets (tree, tree, splay_tree, bool); static int layout_conflict_p (tree, tree, splay_tree, int); static int splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2); @@ -3283,18 +3286,38 @@ walk_subobject_offsets (tree type, return 0; } -/* Record all of the empty subobjects of TYPE (located at OFFSET) in - OFFSETS. If VBASES_P is nonzero, virtual bases of TYPE are - examined. */ +/* Record all of the empty subobjects of TYPE (either a type or a + binfo). If IS_DATA_MEMBER is true, then a non-static data member + is being placed at OFFSET; otherwise, it is a base class that is + being placed at OFFSET. */ static void record_subobject_offsets (tree type, tree offset, splay_tree offsets, - int vbases_p) -{ + bool is_data_member) +{ + tree max_offset; + /* If recording subobjects for a non-static data member or a + non-empty base class , we do not need to record offsets beyond + the size of the biggest empty class. Additional data members + will go at the end of the class. Additional base classes will go + either at offset zero (if empty, in which case they cannot + overlap with offsets past the size of the biggest empty class) or + at the end of the class. + + However, if we are placing an empty base class, then we must record + all offsets, as either the empty class is at offset zero (where + other empty classes might later be placed) or at the end of the + class (where other objects might then be placed, so other empty + subobjects might later overlap). */ + if (is_data_member + || !is_empty_class (BINFO_TYPE (type))) + max_offset = sizeof_biggest_empty_class; + else + max_offset = NULL_TREE; walk_subobject_offsets (type, record_subobject_offset, offset, - offsets, /*max_offset=*/NULL_TREE, vbases_p); + offsets, max_offset, is_data_member); } /* Returns nonzero if any of the empty subobjects of TYPE (located at @@ -3553,7 +3576,7 @@ build_base_field (record_layout_info rli, tree binfo, { if (atend) CLASSTYPE_NEARLY_EMPTY_P (t) = 0; - /* The check above (used in G++ 3.2) is insufficient because + /* The check above (used in G++ 3.2) is insufficient because an empty class placed at offset zero might itself have an empty base at a nonzero offset. */ else if (walk_subobject_offsets (basetype, @@ -3587,7 +3610,7 @@ build_base_field (record_layout_info rli, tree binfo, record_subobject_offsets (binfo, BINFO_OFFSET (binfo), offsets, - /*vbases_p=*/0); + /*is_data_member=*/false); return next_field; } @@ -4649,7 +4672,7 @@ layout_class_type (tree t, tree *virtuals_p) record_subobject_offsets (TREE_TYPE (field), byte_position(field), empty_base_offsets, - /*vbases_p=*/1); + /*is_data_member=*/true); /* If a bit-field does not immediately follow another bit-field, and yet it starts in the middle of a byte, we have failed to @@ -4827,6 +4850,11 @@ layout_class_type (tree t, tree *virtuals_p) /* Clean up. */ splay_tree_delete (empty_base_offsets); + + if (CLASSTYPE_EMPTY_P (t) + && tree_int_cst_lt (sizeof_biggest_empty_class, + TYPE_SIZE_UNIT (t))) + sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t); } /* Determine the "key method" for the class type indicated by TYPE, @@ -5308,6 +5336,7 @@ init_class_processing (void) current_class_stack = xmalloc (current_class_stack_size * sizeof (struct class_stack_node)); local_classes = VEC_alloc (tree, gc, 8); + sizeof_biggest_empty_class = size_zero_node; ridpointers[(int) RID_PUBLIC] = access_public_node; ridpointers[(int) RID_PRIVATE] = access_private_node; diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 97cc064110c..978a95f85af 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -4437,5 +4437,8 @@ extern void cp_genericize (tree); #else #define ATTRIBUTE_GCC_CXXDIAG(m, n) ATTRIBUTE_NONNULL(m) #endif +extern void cp_cpp_error (cpp_reader *, int, + const char *, va_list *) + ATTRIBUTE_GCC_CXXDIAG(3,0); #endif /* ! GCC_CP_TREE_H */ diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index f4f8819d1ed..cdaf470ce26 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -1514,6 +1514,8 @@ pp_cxx_statement (cxx_pretty_printer *pp, tree t) case USING_STMT: pp_cxx_identifier (pp, "using"); pp_cxx_identifier (pp, "namespace"); + if (DECL_CONTEXT (t)) + pp_cxx_nested_name_specifier (pp, DECL_CONTEXT (t)); pp_cxx_qualified_id (pp, USING_STMT_NAMESPACE (t)); break; @@ -1701,6 +1703,8 @@ static void pp_cxx_original_namespace_definition (cxx_pretty_printer *pp, tree t) { pp_cxx_identifier (pp, "namespace"); + if (DECL_CONTEXT (t)) + pp_cxx_nested_name_specifier (pp, DECL_CONTEXT (t)); if (DECL_NAME (t)) pp_cxx_unqualified_id (pp, t); pp_cxx_whitespace (pp); @@ -1723,10 +1727,15 @@ static void pp_cxx_namespace_alias_definition (cxx_pretty_printer *pp, tree t) { pp_cxx_identifier (pp, "namespace"); + if (DECL_CONTEXT (t)) + pp_cxx_nested_name_specifier (pp, DECL_CONTEXT (t)); pp_cxx_unqualified_id (pp, t); pp_cxx_whitespace (pp); pp_equal (pp); pp_cxx_whitespace (pp); + if (DECL_CONTEXT (DECL_NAMESPACE_ALIAS (t))) + pp_cxx_nested_name_specifier (pp, + DECL_CONTEXT (DECL_NAMESPACE_ALIAS (t))); pp_cxx_qualified_id (pp, DECL_NAMESPACE_ALIAS (t)); pp_cxx_semicolon (pp); } diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 7e38ec3dff1..d87983c1cb9 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1004,6 +1004,41 @@ warn_extern_redeclared_static (tree newdecl, tree olddecl) pedwarn ("previous declaration of %q+D", olddecl); } +/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or + function templates. If their exception specifications do not + match, issue an a diagnostic. */ + +static void +check_redeclaration_exception_specification (tree new_decl, + tree old_decl) +{ + tree new_type; + tree old_type; + tree new_exceptions; + tree old_exceptions; + + new_type = TREE_TYPE (new_decl); + new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type); + old_type = TREE_TYPE (old_decl); + old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type); + + /* [except.spec] + + If any declaration of a function has an exception-specification, + all declarations, including the definition and an explicit + specialization, of that function shall have an + exception-specification with the same set of type-ids. */ + if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl)) + && ! DECL_IS_BUILTIN (old_decl) + && flag_exceptions + && !comp_except_specs (new_exceptions, old_exceptions, + /*exact=*/true)) + { + error ("declaration of %qF throws different exceptions", new_decl); + error ("from previous declaration %q+F", old_decl); + } +} + /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations. If the redeclaration is invalid, a diagnostic is issued, and the error_mark_node is returned. Otherwise, OLDDECL is returned. @@ -1495,30 +1530,35 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) if (TREE_CODE (newdecl) == TEMPLATE_DECL) { - TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)); + tree old_result; + tree new_result; + old_result = DECL_TEMPLATE_RESULT (olddecl); + new_result = DECL_TEMPLATE_RESULT (newdecl); + TREE_TYPE (olddecl) = TREE_TYPE (old_result); DECL_TEMPLATE_SPECIALIZATIONS (olddecl) = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl), DECL_TEMPLATE_SPECIALIZATIONS (newdecl)); + if (DECL_FUNCTION_TEMPLATE_P (newdecl)) + { + DECL_INLINE (old_result) + |= DECL_INLINE (new_result); + DECL_DECLARED_INLINE_P (old_result) + |= DECL_DECLARED_INLINE_P (new_result); + check_redeclaration_exception_specification (newdecl, olddecl); + } + /* If the new declaration is a definition, update the file and line information on the declaration. */ - if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE - && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE) + if (DECL_INITIAL (old_result) == NULL_TREE + && DECL_INITIAL (new_result) != NULL_TREE) { DECL_SOURCE_LOCATION (olddecl) - = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl)) + = DECL_SOURCE_LOCATION (old_result) = DECL_SOURCE_LOCATION (newdecl); if (DECL_FUNCTION_TEMPLATE_P (newdecl)) - DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl)) - = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl)); - } - - if (DECL_FUNCTION_TEMPLATE_P (newdecl)) - { - DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl)) - |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl)); - DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl)) - |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl)); + DECL_ARGUMENTS (old_result) + = DECL_ARGUMENTS (new_result); } return olddecl; @@ -1550,26 +1590,8 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) /* Do this after calling `merge_types' so that default parameters don't confuse us. */ - else if (TREE_CODE (newdecl) == FUNCTION_DECL - && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)) - != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)))) - { - TREE_TYPE (newdecl) = build_exception_variant (newtype, - TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))); - TREE_TYPE (olddecl) = build_exception_variant (newtype, - TYPE_RAISES_EXCEPTIONS (oldtype)); - - if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl)) - && ! DECL_IS_BUILTIN (olddecl) - && flag_exceptions - && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)), - TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1)) - { - error ("declaration of %qF throws different exceptions", - newdecl); - error ("than previous declaration %q+F", olddecl); - } - } + else if (TREE_CODE (newdecl) == FUNCTION_DECL) + check_redeclaration_exception_specification (newdecl, olddecl); TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype; /* Lay the type out, unless already done. */ @@ -2014,6 +2036,18 @@ redeclaration_error_message (tree newdecl, tree olddecl) return NULL; } + else if (TREE_CODE (newdecl) == VAR_DECL + && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)) + { + /* Only variables can be thread-local, and all declarations must + agree on this property. */ + if (DECL_THREAD_LOCAL_P (newdecl)) + return "thread-local declaration of %q#D follows " + "non-thread-local declaration"; + else + return "non-thread-local declaration of %q#D follows " + "thread-local declaration"; + } else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl)) { /* Objects declared at top level: */ @@ -2147,7 +2181,8 @@ declare_local_label (tree id) static int decl_jump_unsafe (tree decl) { - if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)) + if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl) + || TREE_TYPE (decl) == error_mark_node) return 0; if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)) @@ -5661,7 +5696,6 @@ grokfndecl (tree ctype, { tree decl; int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE; - int has_default_arg = 0; tree t; if (raises) @@ -5673,6 +5707,67 @@ grokfndecl (tree ctype, if (TYPE_VOLATILE (type)) TREE_THIS_VOLATILE (decl) = 1; + if (friendp + && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR) + { + if (funcdef_flag) + error + ("defining explicit specialization %qD in friend declaration", + orig_declarator); + else + { + tree fns = TREE_OPERAND (orig_declarator, 0); + tree args = TREE_OPERAND (orig_declarator, 1); + + if (PROCESSING_REAL_TEMPLATE_DECL_P ()) + { + /* Something like `template friend void f()'. */ + error ("invalid use of template-id %qD in declaration " + "of primary template", + orig_declarator); + return NULL_TREE; + } + + + /* A friend declaration of the form friend void f<>(). Record + the information in the TEMPLATE_ID_EXPR. */ + SET_DECL_IMPLICIT_INSTANTIATION (decl); + + if (TREE_CODE (fns) == COMPONENT_REF) + { + /* Due to bison parser ickiness, we will have already looked + up an operator_name or PFUNCNAME within the current class + (see template_id in parse.y). If the current class contains + such a name, we'll get a COMPONENT_REF here. Undo that. */ + + gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0)) + == current_class_type); + fns = TREE_OPERAND (fns, 1); + } + gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE + || TREE_CODE (fns) == OVERLOAD); + DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE); + + for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) + if (TREE_PURPOSE (t) + && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG) + { + error ("default arguments are not allowed in declaration " + "of friend template specialization %qD", + decl); + return NULL_TREE; + } + + if (inlinep) + { + error ("% is not allowed in declaration of friend " + "template specialization %qD", + decl); + return NULL_TREE; + } + } + } + /* If this decl has namespace scope, set that up. */ if (in_namespace) set_decl_namespace (decl, in_namespace, friendp); @@ -5793,73 +5888,6 @@ grokfndecl (tree ctype, if (ctype && decl_function_context (decl)) DECL_NO_STATIC_CHAIN (decl) = 1; - for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) - if (TREE_PURPOSE (t) - && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG) - { - has_default_arg = 1; - break; - } - - if (friendp - && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR) - { - if (funcdef_flag) - error - ("defining explicit specialization %qD in friend declaration", - orig_declarator); - else - { - tree fns = TREE_OPERAND (orig_declarator, 0); - tree args = TREE_OPERAND (orig_declarator, 1); - - if (PROCESSING_REAL_TEMPLATE_DECL_P ()) - { - /* Something like `template friend void f()'. */ - error ("invalid use of template-id %qD in declaration " - "of primary template", - orig_declarator); - return NULL_TREE; - } - - - /* A friend declaration of the form friend void f<>(). Record - the information in the TEMPLATE_ID_EXPR. */ - SET_DECL_IMPLICIT_INSTANTIATION (decl); - - if (TREE_CODE (fns) == COMPONENT_REF) - { - /* Due to bison parser ickiness, we will have already looked - up an operator_name or PFUNCNAME within the current class - (see template_id in parse.y). If the current class contains - such a name, we'll get a COMPONENT_REF here. Undo that. */ - - gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0)) - == current_class_type); - fns = TREE_OPERAND (fns, 1); - } - gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE - || TREE_CODE (fns) == OVERLOAD); - DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE); - - if (has_default_arg) - { - error ("default arguments are not allowed in declaration " - "of friend template specialization %qD", - decl); - return NULL_TREE; - } - - if (inlinep) - { - error ("% is not allowed in declaration of friend " - "template specialization %qD", - decl); - return NULL_TREE; - } - } - } - if (funcdef_flag) /* Make the init_value nonzero so pushdecl knows this is not tentative. error_mark_node is replaced later with the BLOCK. */ @@ -8215,6 +8243,17 @@ grokdeclarator (const cp_declarator *declarator, is considered undefined until an out-of-class definition is provided. */ DECL_EXTERNAL (decl) = 1; + + if (thread_p) + { + if (targetm.have_tls) + DECL_TLS_MODEL (decl) = decl_default_tls_model (decl); + else + /* A mere warning is sure to result in improper + semantics at runtime. Don't bother to allow this to + compile. */ + error ("thread-local storage not supported for this target"); + } } else { @@ -9254,7 +9293,7 @@ lookup_and_check_tag (enum tag_types tag_code, tree name, { /* First try ordinary name lookup, ignoring hidden class name injected via friend declaration. */ - decl = lookup_name (name, 2); + decl = lookup_name_prefer_type (name, 2); /* If that fails, the name will be placed in the smallest non-class, non-function-prototype scope according to 3.3.1/5. We may already have a hidden name declared as friend in this diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 70ca017d9e4..dcf3217dfb3 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2320,7 +2320,7 @@ get_priority_info (int priority) ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \ ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl)) -/* Wether a DECL needs a guard to protect it against multiple +/* Whether a DECL needs a guard to protect it against multiple initialization. */ #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl) \ @@ -3062,8 +3062,6 @@ cp_finish_file (void) { if (/* Check online inline functions that were actually used. */ TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl) - /* But not defined. */ - && DECL_REALLY_EXTERN (decl) /* If the definition actually was available here, then the fact that the function was not defined merely represents that for some reason (use of a template repository, @@ -3076,10 +3074,8 @@ cp_finish_file (void) && !DECL_EXPLICIT_INSTANTIATION (decl)) { warning (0, "inline function %q+D used but never defined", decl); - /* This symbol is effectively an "extern" declaration now. - This is not strictly necessary, but removes a duplicate - warning. */ - TREE_PUBLIC (decl) = 1; + /* Avoid a duplicate warning from check_global_declaration_1. */ + TREE_NO_WARNING (decl) = 1; } } diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 8e39ccadd1e..be0ee5968ee 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1278,6 +1278,23 @@ dump_expr_init_vec (VEC(constructor_elt,gc) *v, int flags) } +/* We've gotten an indirect REFERENCE (an OBJ_TYPE_REF) to a virtual + function. Resolve it to a close relative -- in the sense of static + type -- variant being overridden. That is close to what was written in + the source code. Subroutine of dump_expr. */ + +static tree +resolve_virtual_fun_from_obj_type_ref (tree ref) +{ + tree obj_type = TREE_TYPE (OBJ_TYPE_REF_OBJECT (ref)); + int index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1); + tree fun = BINFO_VIRTUALS (TYPE_BINFO (TREE_TYPE (obj_type))); + while (index--) + fun = TREE_CHAIN (fun); + + return BV_FN (fun); +} + /* Print out an expression E under control of FLAGS. */ static void @@ -1386,6 +1403,10 @@ dump_expr (tree t, int flags) if (TREE_CODE (fn) == ADDR_EXPR) fn = TREE_OPERAND (fn, 0); + /* Nobody is interested in seeing the guts of vcalls. */ + if (TREE_CODE (fn) == OBJ_TYPE_REF) + fn = resolve_virtual_fun_from_obj_type_ref (fn); + if (TREE_TYPE (fn) != NULL_TREE && NEXT_CODE (fn) == METHOD_TYPE) { tree ob = TREE_VALUE (args); @@ -2008,7 +2029,8 @@ fndecl_to_string (tree fndecl, int verbose) { int flags; - flags = TFF_EXCEPTION_SPECIFICATION | TFF_DECL_SPECIFIERS; + flags = TFF_EXCEPTION_SPECIFICATION | TFF_DECL_SPECIFIERS + | TFF_TEMPLATE_HEADER; if (verbose) flags |= TFF_FUNCTION_DEFAULT_ARGUMENTS; reinit_cxx_pp (); @@ -2327,3 +2349,36 @@ cp_printer (pretty_printer *pp, text_info *text, const char *spec, #undef next_lang #undef next_int } + +/* Callback from cpp_error for PFILE to print diagnostics arising from + interpreting strings. The diagnostic is of type LEVEL; MSG is the + translated message and AP the arguments. */ + +void +cp_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level, + const char *msg, va_list *ap) +{ + diagnostic_info diagnostic; + diagnostic_t dlevel; + switch (level) + { + case CPP_DL_WARNING: + case CPP_DL_WARNING_SYSHDR: + dlevel = DK_WARNING; + break; + case CPP_DL_PEDWARN: + dlevel = pedantic_error_kind (); + break; + case CPP_DL_ERROR: + dlevel = DK_ERROR; + break; + case CPP_DL_ICE: + dlevel = DK_ICE; + break; + default: + gcc_unreachable (); + } + diagnostic_set_info_translated (&diagnostic, msg, ap, + input_location, dlevel); + report_diagnostic (&diagnostic); +} diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 44cfc440628..f43846719e5 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1604,7 +1604,7 @@ constant_value_1 (tree decl, bool integral_p) : (!TREE_CONSTANT (init) /* Do not return an aggregate constant (of which string literals are a special case), as we do not - want to make inadvertant copies of such entities, + want to make inadvertent copies of such entities, and we must be sure that their addresses are the same everywhere. */ || TREE_CODE (init) == CONSTRUCTOR @@ -2613,8 +2613,8 @@ build_vec_init (tree base, tree maxindex, tree init, for_stmt = begin_for_stmt (); finish_for_init_stmt (for_stmt); - finish_for_cond (build2 (NE_EXPR, boolean_type_node, - iterator, integer_minus_one_node), + finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator, + build_int_cst (TREE_TYPE (iterator), -1)), for_stmt); finish_for_expr (build_unary_op (PREDECREMENT_EXPR, iterator, 0), for_stmt); diff --git a/gcc/cp/method.c b/gcc/cp/method.c index d68423ce8fe..f3c86d3178d 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -502,7 +502,8 @@ use_thunk (tree thunk_fndecl, bool emit_p) t = build3 (COND_EXPR, TREE_TYPE (t), cond, t, cp_convert (TREE_TYPE (t), integer_zero_node)); } - t = force_target_expr (TREE_TYPE (t), t); + if (IS_AGGR_TYPE (TREE_TYPE (t))) + t = build_cplus_new (TREE_TYPE (t), t); finish_return_stmt (t); } @@ -846,7 +847,7 @@ synthesize_exception_spec (tree type, tree (*extractor) (tree, void*), continue; while (TREE_CODE (type) == ARRAY_TYPE) type = TREE_TYPE (type); - if (TREE_CODE (type) != RECORD_TYPE) + if (!CLASS_TYPE_P (type)) continue; fn = (*extractor) (type, client); @@ -888,10 +889,12 @@ locate_ctor (tree type, void *client ATTRIBUTE_UNUSED) tree fn = OVL_CURRENT (fns); tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn)); - if (sufficient_parms_p (TREE_CHAIN (parms))) + parms = skip_artificial_parms_for (fn, parms); + + if (sufficient_parms_p (parms)) return fn; } - return NULL_TREE; + gcc_unreachable (); } struct copy_data @@ -938,7 +941,7 @@ locate_copy (tree type, void *client_) int excess; int quals; - parms = TREE_CHAIN (parms); + parms = skip_artificial_parms_for (fn, parms); if (!parms) continue; src_type = non_reference (TREE_VALUE (parms)); diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 13d789b1f56..49830c61979 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -2880,6 +2880,10 @@ set_decl_namespace (tree decl, tree scope, bool friendp) match. But, we'll check later, when we construct the template. */ return; + /* Instantiations or specializations of templates may be declared as + friends in any namespace. */ + if (friendp && DECL_USE_TEMPLATE (decl)) + return; if (is_overloaded_fn (old)) { for (; old; old = OVL_NEXT (old)) @@ -3400,20 +3404,9 @@ ambiguous_decl (tree name, struct scope_binding *old, cxx_binding *new, old->value = merge_functions (old->value, val); else { - /* Some declarations are functions, some are not. */ - if (flags & LOOKUP_COMPLAIN) - { - /* If we've already given this error for this lookup, - old->value is error_mark_node, so let's not - repeat ourselves. */ - if (old->value != error_mark_node) - { - error ("use of %qD is ambiguous", name); - error (" first declared as %q+#D here", old->value); - } - error (" also declared as %q+#D here", val); - } - old->value = error_mark_node; + old->value = tree_cons (NULL_TREE, old->value, + build_tree_list (NULL_TREE, new->value)); + TREE_TYPE (old->value) = error_mark_node; } } /* ... and copy the type. */ @@ -3609,7 +3602,8 @@ select_decl (const struct scope_binding *binding, int flags) if (LOOKUP_NAMESPACES_ONLY (flags)) { /* We are not interested in types. */ - if (val && TREE_CODE (val) == NAMESPACE_DECL) + if (val && (TREE_CODE (val) == NAMESPACE_DECL + || TREE_CODE (val) == TREE_LIST)) POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val); POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE); } @@ -4004,7 +3998,13 @@ lookup_function_nonclass (tree name, tree args, bool block_p) } tree -lookup_name (tree name, int prefer_type) +lookup_name (tree name) +{ + return lookup_name_real (name, 0, 0, /*block_p=*/true, 0, LOOKUP_COMPLAIN); +} + +tree +lookup_name_prefer_type (tree name, int prefer_type) { return lookup_name_real (name, prefer_type, 0, /*block_p=*/true, 0, LOOKUP_COMPLAIN); diff --git a/gcc/cp/name-lookup.h b/gcc/cp/name-lookup.h index fa2a760bd94..5a1dc8e34f5 100644 --- a/gcc/cp/name-lookup.h +++ b/gcc/cp/name-lookup.h @@ -312,7 +312,7 @@ extern void pop_nested_namespace (tree); extern void pushlevel_class (void); extern void poplevel_class (void); extern tree pushdecl_with_scope (tree, cxx_scope *, bool); -extern tree lookup_name (tree, int); +extern tree lookup_name_prefer_type (tree, int); extern tree lookup_name_real (tree, int, int, bool, int, int); extern tree lookup_type_scope (tree, tag_scope); extern tree namespace_binding (tree, tree); diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a065c2569ac..9c85f12b5b2 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -59,6 +59,10 @@ typedef struct cp_token GTY (()) BOOL_BITFIELD in_system_header : 1; /* True if this token is from a context where it is implicitly extern "C" */ BOOL_BITFIELD implicit_extern_c : 1; + /* True for a CPP_NAME token that is not a keyword (i.e., for which + KEYWORD is RID_MAX) iff this name was looked up and found to be + ambiguous. An error has already been reported. */ + BOOL_BITFIELD ambiguous_p : 1; /* The value associated with this token, if any. */ tree value; /* The location at which this token was found. */ @@ -72,7 +76,7 @@ DEF_VEC_ALLOC_P (cp_token_position,heap); static const cp_token eof_token = { - CPP_EOF, RID_MAX, 0, 0, 0, NULL_TREE, + CPP_EOF, RID_MAX, 0, 0, 0, false, NULL_TREE, #if USE_MAPPED_LOCATION 0 #else @@ -297,6 +301,11 @@ cp_lexer_new_main (void) string constant concatenation. */ c_lex_return_raw_strings = false; + /* Subsequent preprocessor diagnostics should use compiler + diagnostic functions to get the compiler source location. */ + cpp_get_options (parse_in)->client_diagnostic = true; + cpp_get_callbacks (parse_in)->error = cp_cpp_error; + gcc_assert (lexer->next_token->type != CPP_PURGED); return lexer; } @@ -396,18 +405,25 @@ cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED , token->implicit_extern_c = is_extern_c > 0; /* Check to see if this token is a keyword. */ - if (token->type == CPP_NAME - && C_IS_RESERVED_WORD (token->value)) + if (token->type == CPP_NAME) { - /* Mark this token as a keyword. */ - token->type = CPP_KEYWORD; - /* Record which keyword. */ - token->keyword = C_RID_CODE (token->value); - /* Update the value. Some keywords are mapped to particular - entities, rather than simply having the value of the - corresponding IDENTIFIER_NODE. For example, `__const' is - mapped to `const'. */ - token->value = ridpointers[token->keyword]; + if (C_IS_RESERVED_WORD (token->value)) + { + /* Mark this token as a keyword. */ + token->type = CPP_KEYWORD; + /* Record which keyword. */ + token->keyword = C_RID_CODE (token->value); + /* Update the value. Some keywords are mapped to particular + entities, rather than simply having the value of the + corresponding IDENTIFIER_NODE. For example, `__const' is + mapped to `const'. */ + token->value = ridpointers[token->keyword]; + } + else + { + token->ambiguous_p = false; + token->keyword = RID_MAX; + } } /* Handle Objective-C++ keywords. */ else if (token->type == CPP_AT_NAME) @@ -1694,7 +1710,7 @@ static tree cp_parser_objc_statement /* Utility Routines */ static tree cp_parser_lookup_name - (cp_parser *, tree, enum tag_types, bool, bool, bool, bool *); + (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *); static tree cp_parser_lookup_name_simple (cp_parser *, tree); static tree cp_parser_maybe_treat_template_as_class @@ -2047,7 +2063,7 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id) if (TREE_CODE (decl) == TEMPLATE_DECL) error ("invalid use of template-name %qE without an argument list", decl); - else if (!parser->scope || parser->scope == error_mark_node) + else if (!parser->scope) { /* Issue an error message. */ error ("%qE does not name a type", id); @@ -2094,7 +2110,7 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id) } /* Here we diagnose qualified-ids where the scope is actually correct, but the identifier does not resolve to a valid type name. */ - else + else if (parser->scope != error_mark_node) { if (TREE_CODE (parser->scope) == NAMESPACE_DECL) error ("%qE in namespace %qE does not name a type", @@ -2989,17 +3005,17 @@ cp_parser_primary_expression (cp_parser *parser, /* Look up the name. */ else { - bool ambiguous_p; + tree ambiguous_decls; decl = cp_parser_lookup_name (parser, id_expression, none_type, template_p, /*is_namespace=*/false, /*check_dependency=*/true, - &ambiguous_p); + &ambiguous_decls); /* If the lookup was ambiguous, an error will already have been issued. */ - if (ambiguous_p) + if (ambiguous_decls) return error_mark_node; /* In Objective-C++, an instance variable (ivar) may be preferred @@ -3605,16 +3621,32 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser, token = cp_lexer_consume_token (parser->lexer); if (!error_p) { - tree decl; - - decl = cp_parser_lookup_name_simple (parser, token->value); - if (TREE_CODE (decl) == TEMPLATE_DECL) - error ("%qD used without template parameters", decl); - else - cp_parser_name_lookup_error - (parser, token->value, decl, - "is not a class or namespace"); - parser->scope = NULL_TREE; + if (!token->ambiguous_p) + { + tree decl; + tree ambiguous_decls; + + decl = cp_parser_lookup_name (parser, token->value, + none_type, + /*is_template=*/false, + /*is_namespace=*/false, + /*check_dependency=*/true, + &ambiguous_decls); + if (TREE_CODE (decl) == TEMPLATE_DECL) + error ("%qD used without template parameters", decl); + else if (ambiguous_decls) + { + error ("reference to %qD is ambiguous", + token->value); + print_candidates (ambiguous_decls); + decl = error_mark_node; + } + else + cp_parser_name_lookup_error + (parser, token->value, decl, + "is not a class or namespace"); + } + parser->scope = error_mark_node; error_p = true; /* Treat this as a successful nested-name-specifier due to: @@ -8489,7 +8521,7 @@ cp_parser_type_parameter (cp_parser* parser) /*is_template=*/is_template, /*is_namespace=*/false, /*check_dependency=*/true, - /*ambiguous_p=*/NULL); + /*ambiguous_decls=*/NULL); /* See if the default argument is valid. */ default_argument = check_template_template_default_arg (default_argument); @@ -8845,7 +8877,7 @@ cp_parser_template_name (cp_parser* parser, /*is_template=*/false, /*is_namespace=*/false, check_dependency_p, - /*ambiguous_p=*/NULL); + /*ambiguous_decls=*/NULL); decl = maybe_get_template_decl_from_type_decl (decl); /* If DECL is a template, then the name was a template-name. */ @@ -9046,7 +9078,7 @@ cp_parser_template_argument (cp_parser* parser) /*is_template=*/template_p, /*is_namespace=*/false, /*check_dependency=*/true, - /*ambiguous_p=*/NULL); + /*ambiguous_decls=*/NULL); if (TREE_CODE (argument) != TEMPLATE_DECL && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE) cp_parser_error (parser, "expected template-name"); @@ -9300,6 +9332,7 @@ cp_parser_explicit_instantiation (cp_parser* parser) static void cp_parser_explicit_specialization (cp_parser* parser) { + bool need_lang_pop; /* Look for the `template' keyword. */ cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"); /* Look for the `<'. */ @@ -9308,9 +9341,22 @@ cp_parser_explicit_specialization (cp_parser* parser) cp_parser_require (parser, CPP_GREATER, "`>'"); /* We have processed another parameter list. */ ++parser->num_template_parameter_lists; + /* [temp] + + A template ... explicit specialization ... shall not have C + linkage. */ + if (current_lang_name == lang_name_c) + { + error ("template specialization with C linkage"); + /* Give it C++ linkage to avoid confusing other parts of the + front end. */ + push_lang_context (lang_name_cplusplus); + need_lang_pop = true; + } + else + need_lang_pop = false; /* Let the front end know that we are beginning a specialization. */ begin_specialization (); - /* If the next keyword is `template', we need to figure out whether or not we're looking a template-declaration. */ if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE)) @@ -9327,9 +9373,12 @@ cp_parser_explicit_specialization (cp_parser* parser) cp_parser_single_declaration (parser, /*member_p=*/false, /*friend_p=*/NULL); - /* We're done with the specialization. */ end_specialization (); + /* For the erroneous case of a template with C linkage, we pushed an + implicit C++ linkage scope; exit that scope now. */ + if (need_lang_pop) + pop_lang_context (); /* We're done with this parameter list. */ --parser->num_template_parameter_lists; } @@ -9969,7 +10018,7 @@ cp_parser_elaborated_type_specifier (cp_parser* parser, /*is_template=*/false, /*is_namespace=*/false, /*check_dependency=*/true, - /*ambiguous_p=*/NULL); + /*ambiguous_decls=*/NULL); /* If we are parsing friend declaration, DECL may be a TEMPLATE_DECL tree node here. However, we need to check @@ -10265,7 +10314,7 @@ cp_parser_namespace_name (cp_parser* parser) /*is_template=*/false, /*is_namespace=*/true, /*check_dependency=*/true, - /*ambiguous_p=*/NULL); + /*ambiguous_decls=*/NULL); /* If it's not a namespace, issue an error. */ if (namespace_decl == error_mark_node || TREE_CODE (namespace_decl) != NAMESPACE_DECL) @@ -12501,9 +12550,13 @@ cp_parser_class_name (cp_parser *parser, if (token->type == CPP_NAME && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2)) { + cp_token *identifier_token; tree identifier; + bool ambiguous_p; /* Look for the identifier. */ + identifier_token = cp_lexer_peek_token (parser->lexer); + ambiguous_p = identifier_token->ambiguous_p; identifier = cp_parser_identifier (parser); /* If the next token isn't an identifier, we are certainly not looking at a class-name. */ @@ -12515,6 +12568,15 @@ cp_parser_class_name (cp_parser *parser, decl = identifier; else { + tree ambiguous_decls; + /* If we already know that this lookup is ambiguous, then + we've already issued an error message; there's no reason + to check again. */ + if (ambiguous_p) + { + cp_parser_simulate_error (parser); + return error_mark_node; + } /* If the next token is a `::', then the name must be a type name. @@ -12531,7 +12593,18 @@ cp_parser_class_name (cp_parser *parser, /*is_template=*/false, /*is_namespace=*/false, check_dependency_p, - /*ambiguous_p=*/NULL); + &ambiguous_decls); + if (ambiguous_decls) + { + error ("reference to %qD is ambiguous", identifier); + print_candidates (ambiguous_decls); + if (cp_parser_parsing_tentatively (parser)) + { + identifier_token->ambiguous_p = true; + cp_parser_simulate_error (parser); + } + return error_mark_node; + } } } else @@ -14470,8 +14543,9 @@ cp_parser_label_declaration (cp_parser* parser) If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent types. - If AMBIGUOUS_P is non-NULL, it is set to true if name-lookup - results in an ambiguity, and false otherwise. */ + If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a + TREE_LIST of candiates if name-lookup results in an ambiguity, and + NULL_TREE otherwise. */ static tree cp_parser_lookup_name (cp_parser *parser, tree name, @@ -14479,7 +14553,7 @@ cp_parser_lookup_name (cp_parser *parser, tree name, bool is_template, bool is_namespace, bool check_dependency, - bool *ambiguous_p) + tree *ambiguous_decls) { int flags = 0; tree decl; @@ -14489,8 +14563,8 @@ cp_parser_lookup_name (cp_parser *parser, tree name, flags |= LOOKUP_COMPLAIN; /* Assume that the lookup will be unambiguous. */ - if (ambiguous_p) - *ambiguous_p = false; + if (ambiguous_decls) + *ambiguous_decls = NULL_TREE; /* Now that we have looked up the name, the OBJECT_TYPE (if any) is no longer valid. Note that if we are parsing tentatively, and @@ -14647,8 +14721,8 @@ cp_parser_lookup_name (cp_parser *parser, tree name, /* If it's a TREE_LIST, the result of the lookup was ambiguous. */ if (TREE_CODE (decl) == TREE_LIST) { - if (ambiguous_p) - *ambiguous_p = true; + if (ambiguous_decls) + *ambiguous_decls = decl; /* The error message we have to print is too complicated for cp_parser_error, so we incorporate its actions directly. */ if (!cp_parser_simulate_error (parser)) @@ -14690,7 +14764,7 @@ cp_parser_lookup_name_simple (cp_parser* parser, tree name) /*is_template=*/false, /*is_namespace=*/false, /*check_dependency=*/true, - /*ambiguous_p=*/NULL); + /*ambiguous_decls=*/NULL); } /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in @@ -15148,6 +15222,7 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) tree decl = NULL_TREE; tree parameter_list; bool friend_p = false; + bool need_lang_pop; /* Look for the `template' keyword. */ if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'")) @@ -15156,7 +15231,19 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) /* And the `<'. */ if (!cp_parser_require (parser, CPP_LESS, "`<'")) return; - + /* [temp] + + A template ... shall not have C linkage. */ + if (current_lang_name == lang_name_c) + { + error ("template with C linkage"); + /* Give it C++ linkage to avoid confusing other parts of the + front end. */ + push_lang_context (lang_name_cplusplus); + need_lang_pop = true; + } + else + need_lang_pop = false; /* If the next token is `>', then we have an invalid specialization. Rather than complain about an invalid template parameter, issue an error message here. */ @@ -15217,7 +15304,10 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) /* Register member declarations. */ if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl)) finish_member_declaration (decl); - + /* For the erroneous case of a template with C linkage, we pushed an + implicit C++ linkage scope; exit that scope now. */ + if (need_lang_pop) + pop_lang_context (); /* If DECL is a function template, we must return to parse it later. (Even though there is no definition, there might be default arguments that need handling.) */ diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 62db1229b21..3fac7f3749d 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1179,6 +1179,7 @@ register_specialization (tree spec, tree tmpl, tree args, bool is_friend) } else { + tree clone; /* This situation should occur only if the first specialization is an implicit instantiation, the second is an explicit specialization, and the @@ -1204,6 +1205,23 @@ register_specialization (tree spec, tree tmpl, tree args, bool is_friend) there were no definition, and vice versa. */ DECL_INITIAL (fn) = NULL_TREE; duplicate_decls (spec, fn, is_friend); + /* The call to duplicate_decls will have applied + [temp.expl.spec]: + + An explicit specialization of a function template + is inline only if it is explicitly declared to be, + and independently of whether its function tempalte + is. + + to the primary function; now copy the inline bits to + the various clones. */ + FOR_EACH_CLONE (clone, fn) + { + DECL_DECLARED_INLINE_P (clone) + = DECL_DECLARED_INLINE_P (fn); + DECL_INLINE (clone) + = DECL_INLINE (fn); + } check_specialization_namespace (fn); return fn; @@ -1877,8 +1895,6 @@ check_explicit_specialization (tree declarator, ("default argument specified in explicit specialization"); break; } - if (current_lang_name == lang_name_c) - error ("template specialization with C linkage"); } if (specialization || member_specialization || explicit_instantiation) @@ -2967,10 +2983,8 @@ push_template_decl_real (tree decl, bool is_friend) { if (DECL_CLASS_SCOPE_P (decl)) member_template_p = true; - if (current_lang_name == lang_name_c) - error ("template with C linkage"); - else if (TREE_CODE (decl) == TYPE_DECL - && ANON_AGGRNAME_P (DECL_NAME (decl))) + if (TREE_CODE (decl) == TYPE_DECL + && ANON_AGGRNAME_P (DECL_NAME (decl))) error ("template class without a name"); else if (TREE_CODE (decl) == FUNCTION_DECL) { @@ -4338,7 +4352,7 @@ lookup_template_class (tree d1, { if (context) push_decl_namespace (context); - template = lookup_name (d1, /*prefer_type=*/0); + template = lookup_name (d1); template = maybe_get_template_decl_from_type_decl (template); if (context) pop_decl_namespace (); @@ -5370,7 +5384,7 @@ tsubst_friend_class (tree friend_tmpl, tree args) } /* First, we look for a class template. */ - tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0); + tmpl = lookup_name (DECL_NAME (friend_tmpl)); /* But, if we don't find one, it might be because we're in a situation like this: @@ -5385,7 +5399,7 @@ tsubst_friend_class (tree friend_tmpl, tree args) for `S', not the TEMPLATE_DECL. */ if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl)) { - tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1); + tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1); tmpl = maybe_get_template_decl_from_type_decl (tmpl); } @@ -7065,25 +7079,24 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl) max = tsubst_template_arg (omax, args, complain, in_decl); max = fold_decl_constant_value (max); - if (integer_zerop (omax)) - { - /* Still allow an explicit array of size zero. */ - if (pedantic) - pedwarn ("creating array with size zero"); - } - else if (integer_zerop (max) - || (TREE_CODE (max) == INTEGER_CST - && INT_CST_LT (max, integer_zero_node))) - { - /* [temp.deduct] + /* [temp.deduct] - Type deduction may fail for any of the following - reasons: + Type deduction may fail for any of the following + reasons: + + Attempting to create an array with a size that is + zero or negative. */ + if (integer_zerop (max) && !(complain & tf_error)) + /* We must fail if performing argument deduction (as + indicated by the state of complain), so that + another substitution can be found. */ + return error_mark_node; - Attempting to create an array with a size that is - zero or negative. */ + else if (TREE_CODE (max) == INTEGER_CST + && INT_CST_LT (max, integer_zero_node)) + { if (complain & tf_error) - error ("creating array with size zero (%qE)", max); + error ("creating array with negative size (%qE)", max); return error_mark_node; } @@ -8119,6 +8132,39 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl) } } +/* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */ + +static tree +tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain, + tree in_decl) +{ +#define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl) + + tree purpose, value, chain; + + if (t == NULL) + return t; + + if (TREE_CODE (t) != TREE_LIST) + return tsubst_copy_and_build (t, args, complain, in_decl, + /*function_p=*/false); + + if (t == void_list_node) + return t; + + purpose = TREE_PURPOSE (t); + if (purpose) + purpose = RECUR (purpose); + value = TREE_VALUE (t); + if (value) + value = RECUR (value); + chain = TREE_CHAIN (t); + if (chain && chain != void_type_node) + chain = RECUR (chain); + return tree_cons (purpose, value, chain); +#undef RECUR +} + /* Like tsubst_copy for expressions, etc. but also does semantic processing. */ @@ -8336,9 +8382,9 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) tmp = finish_asm_stmt (ASM_VOLATILE_P (t), tsubst_expr (ASM_STRING (t), args, complain, in_decl), - tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl), - tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), - tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl)); + tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl), + tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl), + tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl)); { tree asm_expr = tmp; if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR) @@ -8470,7 +8516,7 @@ tsubst_copy_and_build (tree t, } /* Look up the name. */ - decl = lookup_name (t, 0); + decl = lookup_name (t); /* By convention, expressions use ERROR_MARK_NODE to indicate failure, not NULL_TREE. */ @@ -11797,10 +11843,15 @@ instantiate_pending_templates (int retries) to avoid infinite loop. */ if (pending_templates && retries >= max_tinst_depth) { + tree decl = TREE_VALUE (pending_templates); + error ("template instantiation depth exceeds maximum of %d" - " instantiating %q+D, possibly from virtual table generation" - " (use -ftemplate-depth-NN to increase the maximum)", - max_tinst_depth, TREE_VALUE (pending_templates)); + " instantiating %q+D, possibly from virtual table generation" + " (use -ftemplate-depth-NN to increase the maximum)", + max_tinst_depth, decl); + if (TREE_CODE (decl) == FUNCTION_DECL) + /* Pretend that we defined it. */ + DECL_INITIAL (decl) = error_mark_node; return; } diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index a7edfc12e7f..a86ee6a516e 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -107,12 +107,18 @@ complete_type (tree type) else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type)) { tree t = complete_type (TREE_TYPE (type)); + unsigned int needs_constructing, has_nontrivial_dtor; if (COMPLETE_TYPE_P (t) && !dependent_type_p (type)) layout_type (type); - TYPE_NEEDS_CONSTRUCTING (type) + needs_constructing = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t)); - TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type) + has_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t)); + for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) + { + TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing; + TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor; + } } else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type)) instantiate_class_template (TYPE_MAIN_VARIANT (type)); @@ -1858,7 +1864,7 @@ check_template_keyword (tree decl) DR 228 removed the restriction that the template be a member template. - DR 96, if accepted would add the further restriction that explcit + DR 96, if accepted would add the further restriction that explicit template arguments must be provided if the template keyword is used, but, as of 2005-10-16, that DR is still in "drafting". If this DR is accepted, then the semantic checks here can be @@ -4553,8 +4559,8 @@ check_for_casting_away_constness (tree src_type, tree dest_type, const char *description) { if (diag_fn && casts_away_constness (src_type, dest_type)) - error ("%s from type %qT to type %qT casts away constness", - description, src_type, dest_type); + diag_fn ("%s from type %qT to type %qT casts away constness", + description, src_type, dest_type); } /* Convert EXPR (an expression with pointer-to-member type) to TYPE @@ -5079,9 +5085,9 @@ build_reinterpret_cast (tree type, tree expr) /* Perform a const_cast from EXPR to TYPE. If the cast is valid, return an appropriate expression. Otherwise, return error_mark_node. If the cast is not valid, and COMPLAIN is true, - then a diagnostic will be issued. If VALID_P is non-NULL, its - value upon return will indicate whether or not the conversion - succeeded. */ + then a diagnostic will be issued. If VALID_P is non-NULL, we are + performing a C-style cast, its value upon return will indicate + whether or not the conversion succeeded. */ static tree build_const_cast_1 (tree dst_type, tree expr, bool complain, @@ -5157,7 +5163,15 @@ build_const_cast_1 (tree dst_type, tree expr, bool complain, && comp_ptr_ttypes_const (dst_type, src_type)) { if (valid_p) - *valid_p = true; + { + *valid_p = true; + /* This cast is actually a C-style cast. Issue a warning if + the user is making a potentially unsafe cast. */ + if (warn_cast_qual) + check_for_casting_away_constness (src_type, dst_type, + warning0, + "cast"); + } if (reference_type) { expr = build_unary_op (ADDR_EXPR, expr, 0); diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c index d969ee9160e..cde75573132 100644 --- a/gcc/crtstuff.c +++ b/gcc/crtstuff.c @@ -58,6 +58,12 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA identified the set of defines that need to go into auto-target.h, this will have to do. */ #include "auto-host.h" +#undef gid_t +#undef pid_t +#undef rlim_t +#undef ssize_t +#undef uid_t +#undef vfork #include "tconfig.h" #include "tsystem.h" #include "coretypes.h" diff --git a/gcc/cse.c b/gcc/cse.c index defa56185e6..284f3fd5bea 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -3088,7 +3088,7 @@ find_comparison_args (enum rtx_code code, rtx *parg1, rtx *parg2, || (GET_MODE_CLASS (GET_MODE (arg1)) == MODE_INT && code == LT && STORE_FLAG_VALUE == -1) #ifdef FLOAT_STORE_FLAG_VALUE - || (GET_MODE_CLASS (GET_MODE (arg1)) == MODE_FLOAT + || (SCALAR_FLOAT_MODE_P (GET_MODE (arg1)) && (fsfv = FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)), REAL_VALUE_NEGATIVE (fsfv))) #endif @@ -3098,7 +3098,7 @@ find_comparison_args (enum rtx_code code, rtx *parg1, rtx *parg2, || (GET_MODE_CLASS (GET_MODE (arg1)) == MODE_INT && code == GE && STORE_FLAG_VALUE == -1) #ifdef FLOAT_STORE_FLAG_VALUE - || (GET_MODE_CLASS (GET_MODE (arg1)) == MODE_FLOAT + || (SCALAR_FLOAT_MODE_P (GET_MODE (arg1)) && (fsfv = FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)), REAL_VALUE_NEGATIVE (fsfv))) #endif @@ -3161,7 +3161,7 @@ find_comparison_args (enum rtx_code code, rtx *parg1, rtx *parg2, << (GET_MODE_BITSIZE (inner_mode) - 1)))) #ifdef FLOAT_STORE_FLAG_VALUE || (code == LT - && GET_MODE_CLASS (inner_mode) == MODE_FLOAT + && SCALAR_FLOAT_MODE_P (inner_mode) && (fsfv = FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)), REAL_VALUE_NEGATIVE (fsfv))) #endif @@ -3181,7 +3181,7 @@ find_comparison_args (enum rtx_code code, rtx *parg1, rtx *parg2, << (GET_MODE_BITSIZE (inner_mode) - 1)))) #ifdef FLOAT_STORE_FLAG_VALUE || (code == GE - && GET_MODE_CLASS (inner_mode) == MODE_FLOAT + && SCALAR_FLOAT_MODE_P (inner_mode) && (fsfv = FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)), REAL_VALUE_NEGATIVE (fsfv))) #endif @@ -3946,7 +3946,7 @@ fold_rtx (rtx x, rtx insn) enum machine_mode mode_arg1; #ifdef FLOAT_STORE_FLAG_VALUE - if (GET_MODE_CLASS (mode) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (mode)) { true_rtx = (CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE (mode), mode)); @@ -4061,7 +4061,7 @@ fold_rtx (rtx x, rtx insn) rtx true_rtx = const_true_rtx, false_rtx = const0_rtx; #ifdef FLOAT_STORE_FLAG_VALUE - if (GET_MODE_CLASS (mode) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (mode)) { true_rtx = (CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE (mode), mode)); @@ -5506,6 +5506,22 @@ cse_insn (rtx insn, rtx libcall_insn) break; } + /* Reject certain invalid forms of CONST that we create. */ + else if (CONSTANT_P (trial) + && GET_CODE (trial) == CONST + /* Reject cases that will cause decode_rtx_const to + die. On the alpha when simplifying a switch, we + get (const (truncate (minus (label_ref) + (label_ref)))). */ + && (GET_CODE (XEXP (trial, 0)) == TRUNCATE + /* Likewise on IA-64, except without the + truncate. */ + || (GET_CODE (XEXP (trial, 0)) == MINUS + && GET_CODE (XEXP (XEXP (trial, 0), 0)) == LABEL_REF + && GET_CODE (XEXP (XEXP (trial, 0), 1)) == LABEL_REF))) + /* Do nothing for this case. */ + ; + /* Look for a substitution that makes a valid insn. */ else if (validate_change (insn, &SET_SRC (sets[i].rtl), trial, 0)) { @@ -5541,17 +5557,6 @@ cse_insn (rtx insn, rtx libcall_insn) else if (constant_pool_entries_cost && CONSTANT_P (trial) - /* Reject cases that will cause decode_rtx_const to - die. On the alpha when simplifying a switch, we - get (const (truncate (minus (label_ref) - (label_ref)))). */ - && ! (GET_CODE (trial) == CONST - && GET_CODE (XEXP (trial, 0)) == TRUNCATE) - /* Likewise on IA-64, except without the truncate. */ - && ! (GET_CODE (trial) == CONST - && GET_CODE (XEXP (trial, 0)) == MINUS - && GET_CODE (XEXP (XEXP (trial, 0), 0)) == LABEL_REF - && GET_CODE (XEXP (XEXP (trial, 0), 1)) == LABEL_REF) && (src_folded == 0 || (!MEM_P (src_folded) && ! src_folded_force_flag)) @@ -6890,7 +6895,7 @@ cse_basic_block (rtx from, rtx to, struct branch_path *next_branch) ??? This is a real kludge and needs to be done some other way. Perhaps for 2.9. */ - if (code != NOTE && num_insns++ > 1000) + if (code != NOTE && num_insns++ > PARAM_VALUE (PARAM_MAX_CSE_INSNS)) { flush_hash_table (); num_insns = 0; diff --git a/gcc/defaults.h b/gcc/defaults.h index 9ac1afc6c11..38dab339e34 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -166,6 +166,27 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #endif #endif +/* This is how we tell the assembler that a symbol is a weak alias to + another symbol that doesn't require the other symbol to be defined. + Uses of the former will turn into weak uses of the latter, i.e., + uses that, in case the latter is undefined, will not cause errors, + and will add it to the symbol table as weak undefined. However, if + the latter is referenced directly, a strong reference prevails. */ +#ifndef ASM_OUTPUT_WEAKREF +#if defined HAVE_GAS_WEAKREF +#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE) \ + do \ + { \ + fprintf ((FILE), "\t.weakref\t"); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ","); \ + assemble_name ((FILE), (VALUE)); \ + fprintf ((FILE), "\n"); \ + } \ + while (0) +#endif +#endif + /* How to emit a .type directive. */ #ifndef ASM_OUTPUT_TYPE_DIRECTIVE #if defined TYPE_ASM_OP && defined TYPE_OPERAND_FMT diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index c416010b223..7f4d8147340 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -112,19 +112,31 @@ diagnostic_initialize (diagnostic_context *context) context->lock = 0; } +/* Initialize DIAGNOSTIC, where the message MSG has already been + translated. */ void -diagnostic_set_info (diagnostic_info *diagnostic, const char *gmsgid, - va_list *args, location_t location, - diagnostic_t kind) +diagnostic_set_info_translated (diagnostic_info *diagnostic, const char *msg, + va_list *args, location_t location, + diagnostic_t kind) { diagnostic->message.err_no = errno; diagnostic->message.args_ptr = args; - diagnostic->message.format_spec = _(gmsgid); + diagnostic->message.format_spec = msg; diagnostic->location = location; diagnostic->kind = kind; diagnostic->option_index = 0; } +/* Initialize DIAGNOSTIC, where the message GMSGID has not yet been + translated. */ +void +diagnostic_set_info (diagnostic_info *diagnostic, const char *gmsgid, + va_list *args, location_t location, + diagnostic_t kind) +{ + diagnostic_set_info_translated (diagnostic, _(gmsgid), args, location, kind); +} + /* Return a malloc'd string describing a location. The caller is responsible for freeing the memory. */ char * diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index e44d68028eb..3a3204bdcc3 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -184,6 +184,10 @@ extern void diagnostic_report_diagnostic (diagnostic_context *, #ifdef ATTRIBUTE_GCC_DIAG extern void diagnostic_set_info (diagnostic_info *, const char *, va_list *, location_t, diagnostic_t) ATTRIBUTE_GCC_DIAG(2,0); +extern void diagnostic_set_info_translated (diagnostic_info *, const char *, + va_list *, location_t, + diagnostic_t) + ATTRIBUTE_GCC_DIAG(2,0); #endif extern char *diagnostic_build_prefix (diagnostic_info *); diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 52a8cc27142..a796da62685 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -2364,6 +2364,38 @@ also be used with non-function declarations. Weak symbols are supported for ELF targets, and also for a.out targets when using the GNU assembler and linker. +@item weakref +@itemx weakref ("@var{target}") +@cindex @code{weakref} attribute +The @code{weakref} attribute marks a declaration as a weak reference. +Without arguments, it should be accompanied by an @code{alias} attribute +naming the target symbol. Optionally, the @var{target} may be given as +an argument to @code{weakref} itself. In either case, @code{weakref} +implicitly marks the declaration as @code{weak}. Without a +@var{target}, given as an argument to @code{weakref} or to @code{alias}, +@code{weakref} is equivalent to @code{weak}. + +@smallexample +extern int x() __attribute__ ((weakref ("y"))); +/* is equivalent to... */ +extern int x() __attribute__ ((weak, weakref, alias ("y"))); +/* and to... */ +extern int x() __attribute__ ((weakref)); +extern int x() __attribute__ ((alias ("y"))); +@end smallexample + +A weak reference is an alias that does not by itself require a +definition to be given for the target symbol. If the target symbol is +only referenced through weak references, then the becomes a @code{weak} +undefined symbol. If it is directly referenced, however, then such +strong references prevail, and a definition will be required for the +symbol, not necessarily in the same translation unit. + +The effect is equivalent to moving all references to the alias to a +separate translation unit, renaming the alias to the aliased symbol, +declaring it as weak, compiling the two separate translation units and +performing a reloadable link on them. + @item externally_visible @cindex @code{externally_visible} attribute. This attribute, attached to a global variable or function nullify diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8bbbb04dfb3..66a7b5daabf 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -4,6 +4,10 @@ @c For copying conditions, see the file gcc.texi. @ignore +@c man begin INCLUDE +@include gcc-vers.texi +@c man end + @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. @@ -36,7 +40,7 @@ gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}] [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}] - [@option{-o} @var{outfile}] @var{infile}@dots{} + [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{} Only the most useful options are listed here; see below for the remainder. @samp{g++} accepts mostly the same options as @samp{gcc}. @@ -156,7 +160,7 @@ in the following sections. @item Overall Options @xref{Overall Options,,Options Controlling the Kind of Output}. @gccoptlist{-c -S -E -o @var{file} -combine -pipe -pass-exit-codes @gol --x @var{language} -v -### --help --target-help --version} +-x @var{language} -v -### --help --target-help --version @@@var{file}} @item C Language Options @xref{C Dialect Options,,Options Controlling C Dialect}. @@ -245,7 +249,7 @@ Objective-C and Objective-C++ Dialects}. -Wunknown-pragmas -Wno-pragmas -Wunreachable-code @gol -Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol -Wunused-value -Wunused-variable -Wvariadic-macros @gol --Wwrite-strings} +-Wvolatile-register-var -Wwrite-strings} @item C-only Warning Options @gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol @@ -412,7 +416,8 @@ Objective-C and Objective-C++ Dialects}. -mpoke-function-name @gol -mthumb -marm @gol -mtpcs-frame -mtpcs-leaf-frame @gol --mcaller-super-interworking -mcallee-super-interworking} +-mcaller-super-interworking -mcallee-super-interworking @gol +-mtp=@var{name}} @emph{AVR Options} @gccoptlist{-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol @@ -635,6 +640,7 @@ See RS/6000 and PowerPC Options. -maltivec -mno-altivec @gol -mpowerpc-gpopt -mno-powerpc-gpopt @gol -mpowerpc-gfxopt -mno-powerpc-gfxopt @gol +-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd @gol -mnew-mnemonics -mold-mnemonics @gol -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol -m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol @@ -657,6 +663,7 @@ See RS/6000 and PowerPC Options. -mspe -mno-spe @gol -mspe=yes -mspe=no @gol -mvrsave -mno-vrsave @gol +-mmulhw -mno-mulhw @gol -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol -mprototype -mno-prototype @gol -msim -mmvme -mads -myellowknife -memb -msdata @gol @@ -852,25 +859,21 @@ C++ header file to be turned into a precompiled header. @item @var{file}.f @itemx @var{file}.for @itemx @var{file}.FOR -Fortran source code which should not be preprocessed. +Fixed form Fortran source code which should not be preprocessed. @item @var{file}.F @itemx @var{file}.fpp @itemx @var{file}.FPP -Fortran source code which must be preprocessed (with the traditional +Fixed form Fortran source code which must be preprocessed (with the traditional preprocessor). -@item @var{file}.r -Fortran source code which must be preprocessed with a RATFOR -preprocessor (not included with GCC)@. - @item @var{file}.f90 @itemx @var{file}.f95 -Fortran 90/95 source code which should not be preprocessed. +Free form Fortran source code which should not be preprocessed. @item @var{file}.F90 @itemx @var{file}.F95 -Fortran 90/95 source code which must be preprocessed (with the +Free form Fortran source code which must be preprocessed (with the traditional preprocessor). @c FIXME: Descriptions of Java file types. @@ -894,6 +897,8 @@ package body). Such files are also called @dfn{bodies}. @c Pascal: @c @var{file}.p @c @var{file}.pas +@c Ratfor: +@c @var{file}.r @item @var{file}.s Assembler code. @@ -922,7 +927,7 @@ objective-c objective-c-header objective-c-cpp-output objective-c++ objective-c++-header objective-c++-cpp-output assembler assembler-with-cpp ada -f77 f77-cpp-input ratfor +f77 f77-cpp-input f95 f95-cpp-input java treelang @@ -1048,6 +1053,8 @@ line options for each tool. @item --version @opindex version Display the version number and copyrights of the invoked GCC@. + +@include @value{srcdir}/../libiberty/at-file.texi @end table @node Invoking G++ @@ -3369,6 +3376,13 @@ Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU alternate syntax when in pedantic ISO C99 mode. This is default. To inhibit the warning messages, use @option{-Wno-variadic-macros}. +@item -Wvolatile-register-var +@opindex Wvolatile-register-var +@opindex Wno-volatile-register-var +Warn if a register variable is declared volatile. The volatile +modifier does not inhibit all optimizations that may eliminate reads +and/or writes to register variables. + @item -Wdisabled-optimization @opindex Wdisabled-optimization Warn if a requested optimization pass is disabled. This warning does @@ -5813,6 +5827,17 @@ This parameter is ignored when @option{-funit-at-a-time} is not used. The default value is 100 which limits large function growth to 2.0 times the original size. +@item large-unit-insns +The limit specifying large translation unit. Growth caused by inlining of +units larger than this limit is limited by @option{--param inline-unit-growth}. +For small units this might be too tight (consider unit consisting of function A +that is inline and B that just calls A three time. If B is small relative to +A, the growth of unit is 300\% and yet such inlining is very sane. For very +large units consisting of small inlininable functions however the overall unit +growth limit is needed to avoid exponential explosion of code size. Thus for +smaller units, the size is increased to @option{--param large-unit-insns} +before aplying @option{--param inline-unit-growth}. The default is 10000 + @item inline-unit-growth Specifies maximal overall growth of the compilation unit caused by inlining. This parameter is ignored when @option{-funit-at-a-time} is not used. @@ -5934,6 +5959,13 @@ given basic block needs to have to be considered hot. Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot +@item max-predicted-iterations +The maximum number of loop iterations we predict statically. This is useful +in cases where function contain single loop with known bound and other loop +with unknown. We predict the known number of iterations correctly, while +the unknown number of iterations average to roughly 10. This means that the +loop without bounds would appear artificially cold relative to the other one. + @item tracer-dynamic-coverage @itemx tracer-dynamic-coverage-feedback @@ -5971,6 +6003,9 @@ order to make tracer effective. Maximum number of basic blocks on path that cse considers. The default is 10. +@item max-cse-insns +The maximum instructions CSE process before flushing. The default is 1000. + @item global-var-threshold Counts the number of function calls (@var{n}) and the number of @@ -6032,6 +6067,10 @@ The maximum number of memory locations cselib should take into acount. Increasing values mean more aggressive optimization, making the compile time increase with probably slightly better performance. The default value is 500. +@item max-flow-memory-location +Similar as @option{max-cselib-memory-location} but for dataflow liveness. +The default value is 100. + @item reorder-blocks-duplicate @itemx reorder-blocks-duplicate-feedback @@ -6084,6 +6123,9 @@ ratio is 3. The minimum size of buffers (i.e. arrays) that will receive stack smashing protection when @option{-fstack-protection} is used. +@item max-jump-thread-duplication-stmts +Maximum number of statements allowed in a block that needs to be +duplicated when threading jumps. @end table @end table @@ -7456,6 +7498,15 @@ execute correctly regardless of whether the target code has been compiled for interworking or not. There is a small overhead in the cost of executing a function pointer if this option is enabled. +@item -mtp=@var{name} +@opindex mtp +Specify the access model for the thread local storage pointer. The valid +models are @option{soft}, which generates calls to @code{__aeabi_read_tp}, +@option{cp15}, which fetches the thread pointer from @code{cp15} directly +(supported in the arm6k architecture), and @option{auto}, which uses the +best available method for the selected processor. The default setting is +@option{auto}. + @end table @node AVR Options @@ -9069,8 +9120,9 @@ functional units well resulting in instable performance. @item -masm=@var{dialect} @opindex masm=@var{dialect} -Output asm instructions using selected @var{dialect}. Supported choices are -@samp{intel} or @samp{att} (the default one). +Output asm instructions using selected @var{dialect}. Supported +choices are @samp{intel} or @samp{att} (the default one). Darwin does +not support @samp{intel}. @item -mieee-fp @itemx -mno-ieee-fp @@ -10795,6 +10847,12 @@ These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: @itemx -mno-powerpc-gfxopt @itemx -mpowerpc64 @itemx -mno-powerpc64 +@itemx -mmfcrf +@itemx -mno-mfcrf +@itemx -mpopcntb +@itemx -mno-popcntb +@itemx -mfprnd +@itemx -mno-fprnd @opindex mpower @opindex mno-power @opindex mpower2 @@ -10807,12 +10865,18 @@ These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: @opindex mno-powerpc-gfxopt @opindex mpowerpc64 @opindex mno-powerpc64 +@opindex mmfcrf +@opindex mno-mfcrf +@opindex mpopcntb +@opindex mno-popcntb +@opindex mfprnd +@opindex mno-fprnd GCC supports two related instruction set architectures for the RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those instructions supported by the @samp{rios} chip set used in the original RS/6000 systems and the @dfn{PowerPC} instruction set is the -architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and -the IBM 4xx microprocessors. +architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and +the IBM 4xx, 6xx, and follow-on microprocessors. Neither architecture is a subset of the other. However there is a large common subset of instructions supported by both. An MQ @@ -10840,6 +10904,18 @@ General Purpose group, including floating-point square root. Specifying use the optional PowerPC architecture instructions in the Graphics group, including floating-point select. +The @option{-mmfcrf} option allows GCC to generate the move from +condition register field instruction implemented on the POWER4 +processor and other processors that support the PowerPC V2.01 +architecture. +The @option{-mpopcntb} option allows GCC to generate the popcount and +double precision FP reciprocal estimate instruction implemented on the +POWER5 processor and other processors that support the PowerPC V2.02 +architecture. +The @option{-mfprnd} option allows GCC to generate the FP round to +integer instructions implemented on the POWER5+ processor and other +processors that support the PowerPC V2.03 architecture. + The @option{-mpowerpc64} option allows GCC to generate the additional 64-bit instructions that are found in the full PowerPC64 architecture and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to @@ -10878,9 +10954,10 @@ Supported values for @var{cpu_type} are @samp{401}, @samp{403}, @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823}, -@samp{860}, @samp{970}, @samp{8540}, @samp{common}, @samp{ec603e}, @samp{G3}, +@samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3}, -@samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64}, +@samp{power4}, @samp{power5}, @samp{power5+}, +@samp{common}, @samp{powerpc}, @samp{powerpc64}, @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}. @option{-mcpu=common} selects a completely generic processor. Code @@ -10900,19 +10977,21 @@ those options will run best on that processor, and may not run at all on others. The @option{-mcpu} options automatically enable or disable the -following options: @option{-maltivec}, @option{-mhard-float}, -@option{-mmfcrf}, @option{-mmultiple}, @option{-mnew-mnemonics}, -@option{-mpower}, @option{-mpower2}, @option{-mpowerpc64}, -@option{-mpowerpc-gpopt}, @option{-mpowerpc-gfxopt}, -@option{-mstring}. The particular options set for any particular CPU -will vary between compiler versions, depending on what setting seems -to produce optimal code for that CPU; it doesn't necessarily reflect -the actual hardware's capabilities. If you wish to set an individual -option to a particular value, you may specify it after the -@option{-mcpu} option, like @samp{-mcpu=970 -mno-altivec}. +following options: @option{-maltivec}, @option{-mfprnd}, +@option{-mhard-float}, @option{-mmfcrf}, @option{-mmultiple}, +@option{-mnew-mnemonics}, @option{-mpopcntb}, @option{-mpower}, +@option{-mpower2}, @option{-mpowerpc64}, @option{-mpowerpc-gpopt}, +@option{-mpowerpc-gfxopt}, @option{-mstring}, @option{-mmulhw}. +The particular options +set for any particular CPU will vary between compiler versions, +depending on what setting seems to produce optimal code for that CPU; +it doesn't necessarily reflect the actual hardware's capabilities. If +you wish to set an individual option to a particular value, you may +specify it after the @option{-mcpu} option, like @samp{-mcpu=970 +-mno-altivec}. On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are -not enabled or disabled by the @option{-mcpu} option at present, since +not enabled or disabled by the @option{-mcpu} option at present because AIX does not have full support for these options. You may still enable or disable them individually if you're sure it'll work in your environment. @@ -11165,6 +11244,15 @@ Generate code that uses (does not use) the floating point multiply and accumulate instructions. These instructions are generated by default if hardware floating is used. +@item -mmulhw +@itemx -mno-mulhw +@opindex mmulhw +@opindex mno-mulhw +Generate code that uses (does not use) the half-word multiply and +multiply-accumulate instructions on the IBM 405 and 440 processors. +These instructions are generated by default when targetting those +processors. + @item -mno-bit-align @itemx -mbit-align @opindex mno-bit-align @@ -12800,6 +12888,9 @@ only on certain machines. For the 386, GCC supports PIC for System V but not for the Sun 386i. Code generated for the IBM RS/6000 is always position-independent. +When this flag is set, the macros @code{__pic__} and @code{__PIC__} +are defined to 1. + @item -fPIC @opindex fPIC If supported for the target machine, emit position-independent code, @@ -12810,6 +12901,9 @@ PowerPC and SPARC@. Position-independent code requires special support, and therefore works only on certain machines. +When this flag is set, the macros @code{__pic__} and @code{__PIC__} +are defined to 2. + @item -fpie @itemx -fPIE @opindex fpie diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 36b02739070..115de4a2aba 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -3125,6 +3125,14 @@ Similar widening-multiplication instructions of other widths. Similar widening-multiplication instructions that do unsigned multiplication. +@cindex @code{usmulqihi3} instruction pattern +@cindex @code{usmulhisi3} instruction pattern +@cindex @code{usmulsidi3} instruction pattern +@item @samp{usmulqihi3}, @samp{usmulhisi3}, @samp{usmulsidi3} +Similar widening-multiplication instructions that interpret the first +operand as unsigned and the second operand as signed, then do a signed +multiplication. + @cindex @code{smul@var{m}3_highpart} instruction pattern @item @samp{smul@var{m}3_highpart} Perform a signed multiplication of operands 1 and 2, which have mode @@ -3306,6 +3314,16 @@ corresponds to the C data type @code{double} and the @code{rintf} built-in function uses the mode which corresponds to the C data type @code{float}. +@cindex @code{copysign@var{m}3} instruction pattern +@item @samp{copysign@var{m}3} +Store a value with the magnitude of operand 1 and the sign of operand +2 into operand 0. + +The @code{copysign} built-in function of C always uses the mode which +corresponds to the C data type @code{double} and the @code{copysignf} +built-in function uses the mode which corresponds to the C data +type @code{float}. + @cindex @code{ffs@var{m}2} instruction pattern @item @samp{ffs@var{m}2} Store into operand 0 one plus the index of the least significant 1-bit @@ -3551,7 +3569,7 @@ Operand 1 may have mode @code{byte_mode} or @code{word_mode}; often be valid for @code{word_mode}. The RTL generation pass generates this instruction only with constants -for operands 2 and 3. +for operands 2 and 3 and the constant is never zero for operand 2. The bit-field value is sign-extended to a full word integer before it is stored in operand 0. @@ -3569,7 +3587,7 @@ operand 2 the starting bit. Operand 0 may have mode @code{byte_mode} or Operands 1 and 2 must be valid for @code{word_mode}. The RTL generation pass generates this instruction only with constants -for operands 1 and 2. +for operands 1 and 2 and the constant is never zero for operand 1. @cindex @code{mov@var{mode}cc} instruction pattern @item @samp{mov@var{mode}cc} diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 46d24b6b789..488a07f341e 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -2938,6 +2938,21 @@ want to support call frame debugging information like that provided by DWARF 2. @end defmac +@defmac FRAME_POINTER_CFA_OFFSET (@var{fundecl}) +If defined, a C expression whose value is an integer giving the offset +in bytes from the frame pointer to the canonical frame address (cfa). +The final value should conincide with that calculated by +@code{INCOMING_FRAME_SP_OFFSET}. + +Normally the CFA is calculated as an offset from the argument pointer, +via @code{ARG_POINTER_CFA_OFFSET}, but if the argument pointer is +variable due to the ABI, this may not be possible. If this macro is +defined, it imples that the virtual register instantiation should be +based on the frame pointer instead of the argument pointer. Only one +of @code{FRAME_POINTER_CFA_OFFSET} and @code{ARG_POINTER_CFA_OFFSET} +should be defined. +@end defmac + @node Exception Handling @subsection Exception Handling Support @cindex exception handling @@ -6763,6 +6778,12 @@ defines (equates) the weak symbol @var{name} to have the value to make @var{name} weak. @end defmac +@defmac ASM_OUTPUT_WEAKREF (@var{stream}, @var{decl}, @var{name}, @var{value}) +Outputs a directive that enables @var{name} to be used to refer to +symbol @var{value} with weak-symbol semantics. @code{decl} is the +declaration of @code{name}. +@end defmac + @defmac SUPPORTS_WEAK A C expression which evaluates to true if the target supports weak symbols. diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h index d1b3b1b652b..6fdfb5cb875 100644 --- a/gcc/dwarf2.h +++ b/gcc/dwarf2.h @@ -1,7 +1,7 @@ /* Declarations and definitions of codes relating to the DWARF2 symbolic debugging information format. Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, - 2003, 2004 Free Software Foundation, Inc. + 2003, 2004, 2005 Free Software Foundation, Inc. Written by Gary Funck (gary@intrepid.com) The Ada Joint Program Office (AJPO), Florida State University and Silicon Graphics Inc. @@ -547,6 +547,7 @@ enum dwarf_type DW_ATE_unsigned_char = 0x8, /* DWARF 3. */ DW_ATE_imaginary_float = 0x9, + DW_ATE_decimal_float = 0xf, /* HP extensions. */ DW_ATE_HP_float80 = 0x80, /* Floating-point (80 bit). */ DW_ATE_HP_complex_float80 = 0x81, /* Complex floating-point (80 bit). */ diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c index 1bbadc52b61..f4cd52be2d9 100644 --- a/gcc/dwarf2asm.c +++ b/gcc/dwarf2asm.c @@ -683,7 +683,7 @@ dw2_asm_output_delta_sleb128 (const char *lab1 ATTRIBUTE_UNUSED, } #endif /* 0 */ -static rtx dw2_force_const_mem (rtx); +static rtx dw2_force_const_mem (rtx, bool); static int dw2_output_indirect_constant_1 (splay_tree_node, void *); static GTY((param1_is (char *), param2_is (tree))) splay_tree indirect_pool; @@ -699,10 +699,11 @@ static GTY(()) int dw2_const_labelno; /* Put X, a SYMBOL_REF, in memory. Return a SYMBOL_REF to the allocated memory. Differs from force_const_mem in that a single pool is used for the entire unit of translation, and the memory is not guaranteed to be - "near" the function in any interesting sense. */ + "near" the function in any interesting sense. PUBLIC controls whether + the symbol can be shared across the entire application (or DSO). */ static rtx -dw2_force_const_mem (rtx x) +dw2_force_const_mem (rtx x, bool public) { splay_tree_node node; const char *str; @@ -721,7 +722,7 @@ dw2_force_const_mem (rtx x) { tree id; - if (USE_LINKONCE_INDIRECT) + if (public && USE_LINKONCE_INDIRECT) { char *ref_name = alloca (strlen (str) + sizeof "DW.ref."); @@ -768,12 +769,14 @@ dw2_output_indirect_constant_1 (splay_tree_node node, { const char *sym; rtx sym_ref; + tree decl; sym = (const char *) node->key; + decl = (tree) node->value; sym_ref = gen_rtx_SYMBOL_REF (Pmode, sym); - if (USE_LINKONCE_INDIRECT) + if (TREE_PUBLIC (decl) && USE_LINKONCE_INDIRECT) fprintf (asm_out_file, "\t.hidden %sDW.ref.%s\n", user_label_prefix, sym); - assemble_variable ((tree) node->value, 1, 1, 1); + assemble_variable (decl, 1, 1, 1); assemble_integer (sym_ref, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); return 0; @@ -788,10 +791,12 @@ dw2_output_indirect_constants (void) splay_tree_foreach (indirect_pool, dw2_output_indirect_constant_1, NULL); } -/* Like dw2_asm_output_addr_rtx, but encode the pointer as directed. */ +/* Like dw2_asm_output_addr_rtx, but encode the pointer as directed. + If PUBLIC is set and the encoding is DW_EH_PE_indirect, the indirect + reference is shared across the entire application (or DSO). */ void -dw2_asm_output_encoded_addr_rtx (int encoding, rtx addr, +dw2_asm_output_encoded_addr_rtx (int encoding, rtx addr, bool public, const char *comment, ...) { int size; @@ -830,9 +835,9 @@ dw2_asm_output_encoded_addr_rtx (int encoding, rtx addr, /* It is very tempting to use force_const_mem so that we share data with the normal constant pool. However, we've already emitted the constant pool for this function. Moreover, we'd like to - share these constants across the entire unit of translation, - or better, across the entire application (or DSO). */ - addr = dw2_force_const_mem (addr); + share these constants across the entire unit of translation and + even, if possible, across the entire application (or DSO). */ + addr = dw2_force_const_mem (addr, public); encoding &= ~DW_EH_PE_indirect; goto restart; } diff --git a/gcc/dwarf2asm.h b/gcc/dwarf2asm.h index b81a89b527f..c57e3e94b6c 100644 --- a/gcc/dwarf2asm.h +++ b/gcc/dwarf2asm.h @@ -38,9 +38,9 @@ extern void dw2_asm_output_addr (int, const char *, const char *, ...) extern void dw2_asm_output_addr_rtx (int, rtx, const char *, ...) ATTRIBUTE_NULL_PRINTF_3; -extern void dw2_asm_output_encoded_addr_rtx (int, rtx, +extern void dw2_asm_output_encoded_addr_rtx (int, rtx, bool, const char *, ...) - ATTRIBUTE_NULL_PRINTF_3; + ATTRIBUTE_NULL_PRINTF_4; extern void dw2_asm_output_nstring (const char *, size_t, const char *, ...) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 8a5c4c255be..12cb61215dd 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -214,7 +214,7 @@ enum dw_cfi_oprnd_type { typedef union dw_cfi_oprnd_struct GTY(()) { - unsigned long GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num; + unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num; HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset; const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr; struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc; @@ -671,6 +671,10 @@ lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc) case DW_CFA_def_cfa_offset: loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset; break; + case DW_CFA_def_cfa_offset_sf: + loc->offset + = cfi->dw_cfi_oprnd1.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT; + break; case DW_CFA_def_cfa_register: loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num; break; @@ -678,6 +682,11 @@ lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc) loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num; loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset; break; + case DW_CFA_def_cfa_sf: + loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num; + loc->offset + = cfi->dw_cfi_oprnd2.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT; + break; case DW_CFA_def_cfa_expression: get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc); break; @@ -775,11 +784,21 @@ def_cfa_1 (const char *label, dw_cfa_location *loc_p) if (loc.reg == old_cfa.reg && !loc.indirect) { - /* Construct a "DW_CFA_def_cfa_offset " instruction, - indicating the CFA register did not change but the offset - did. */ - cfi->dw_cfi_opc = DW_CFA_def_cfa_offset; - cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset; + /* Construct a "DW_CFA_def_cfa_offset " instruction, indicating + the CFA register did not change but the offset did. */ + if (loc.offset < 0) + { + HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT; + gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset); + + cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf; + cfi->dw_cfi_oprnd1.dw_cfi_offset = f_offset; + } + else + { + cfi->dw_cfi_opc = DW_CFA_def_cfa_offset; + cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset; + } } #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */ @@ -800,9 +819,21 @@ def_cfa_1 (const char *label, dw_cfa_location *loc_p) /* Construct a "DW_CFA_def_cfa " instruction, indicating the CFA register has changed to with the specified offset. */ - cfi->dw_cfi_opc = DW_CFA_def_cfa; - cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg; - cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset; + if (loc.offset < 0) + { + HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT; + gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset); + + cfi->dw_cfi_opc = DW_CFA_def_cfa_sf; + cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg; + cfi->dw_cfi_oprnd2.dw_cfi_offset = f_offset; + } + else + { + cfi->dw_cfi_opc = DW_CFA_def_cfa; + cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg; + cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset; + } } else { @@ -1981,7 +2012,7 @@ output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh) dw2_asm_output_encoded_addr_rtx ( ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0), gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr), - NULL); + false, NULL); else dw2_asm_output_addr (DWARF2_ADDR_SIZE, cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL); @@ -2237,7 +2268,8 @@ output_call_frame_info (int for_eh) dw2_asm_output_data (1, per_encoding, "Personality (%s)", eh_data_format_name (per_encoding)); dw2_asm_output_encoded_addr_rtx (per_encoding, - eh_personality_libfunc, NULL); + eh_personality_libfunc, + true, NULL); } if (any_lsda_needed) @@ -2289,6 +2321,7 @@ output_call_frame_info (int for_eh) SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL; dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, + false, "FDE initial location"); if (fde->dw_fde_switched_sections) { @@ -2298,13 +2331,13 @@ output_call_frame_info (int for_eh) fde->dw_fde_hot_section_label); SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL; SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL; - dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, + dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false, "FDE initial location"); dw2_asm_output_delta (size_of_encoded_value (fde_encoding), fde->dw_fde_hot_section_end_label, fde->dw_fde_hot_section_label, "FDE address range"); - dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, + dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false, "FDE initial location"); dw2_asm_output_delta (size_of_encoded_value (fde_encoding), fde->dw_fde_unlikely_section_end_label, @@ -2369,7 +2402,7 @@ output_call_frame_info (int for_eh) fde->funcdef_number); dw2_asm_output_encoded_addr_rtx ( lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1), - "Language Specific Data Area"); + false, "Language Specific Data Area"); } else { @@ -8434,12 +8467,6 @@ dbx_reg_number (rtx rtl) { unsigned regno = REGNO (rtl); - /* We do not want to see registers that should have been eliminated. */ - gcc_assert (HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM - || rtl != arg_pointer_rtx); - gcc_assert (HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM - || rtl != frame_pointer_rtx); - gcc_assert (regno < FIRST_PSEUDO_REGISTER); #ifdef LEAF_REG_REMAP @@ -8510,7 +8537,11 @@ multiple_reg_loc_descriptor (rtx rtl, rtx regs) unsigned reg; dw_loc_descr_ref loc_result = NULL; - reg = dbx_reg_number (rtl); + reg = REGNO (rtl); +#ifdef LEAF_REG_REMAP + reg = LEAF_REG_REMAP (reg); +#endif + gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl)); nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)]; /* Simple, contiguous registers. */ @@ -8523,7 +8554,7 @@ multiple_reg_loc_descriptor (rtx rtl, rtx regs) { dw_loc_descr_ref t; - t = one_reg_loc_descriptor (reg); + t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg)); add_loc_descr (&loc_result, t); add_loc_descr_op_piece (&loc_result, size); ++reg; @@ -8589,32 +8620,12 @@ int_loc_descriptor (HOST_WIDE_INT i) return new_loc_descr (op, i, 0); } -/* Return an offset from an eliminable register to the post-prologue - frame pointer. */ - -static HOST_WIDE_INT -eliminate_reg_to_offset (rtx reg) -{ - HOST_WIDE_INT offset = 0; - - reg = eliminate_regs (reg, VOIDmode, NULL_RTX); - if (GET_CODE (reg) == PLUS) - { - offset = INTVAL (XEXP (reg, 1)); - reg = XEXP (reg, 0); - } - gcc_assert (reg == (frame_pointer_needed ? hard_frame_pointer_rtx - : stack_pointer_rtx)); - - return offset; -} - /* Return a location descriptor that designates a base+offset location. */ static dw_loc_descr_ref based_loc_descr (rtx reg, HOST_WIDE_INT offset) { - dw_loc_descr_ref loc_result; + unsigned int regno; /* We only use "frame base" when we're sure we're talking about the post-prologue local stack frame. We do this by *not* running @@ -8622,22 +8633,28 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset) argument pointer and soft frame pointer rtx's. */ if (reg == arg_pointer_rtx || reg == frame_pointer_rtx) { - offset += eliminate_reg_to_offset (reg); - offset += frame_pointer_cfa_offset; + rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX); - loc_result = new_loc_descr (DW_OP_fbreg, offset, 0); - } - else - { - unsigned int regno = dbx_reg_number (reg); + if (elim != reg) + { + if (GET_CODE (elim) == PLUS) + { + offset += INTVAL (XEXP (elim, 1)); + elim = XEXP (elim, 0); + } + gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx + : stack_pointer_rtx)); + offset += frame_pointer_cfa_offset; - if (regno <= 31) - loc_result = new_loc_descr (DW_OP_breg0 + regno, offset, 0); - else - loc_result = new_loc_descr (DW_OP_bregx, regno, offset); + return new_loc_descr (DW_OP_fbreg, offset, 0); + } } - return loc_result; + regno = dbx_reg_number (reg); + if (regno <= 31) + return new_loc_descr (DW_OP_breg0 + regno, offset, 0); + else + return new_loc_descr (DW_OP_bregx, regno, offset); } /* Return true if this RTL expression describes a base+offset calculation. */ @@ -9746,7 +9763,7 @@ add_const_value_attribute (dw_die_ref die, rtx rtl) { enum machine_mode mode = GET_MODE (rtl); - if (GET_MODE_CLASS (mode) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (mode)) { unsigned int length = GET_MODE_SIZE (mode); unsigned char *array = ggc_alloc (length); @@ -10375,9 +10392,24 @@ static void compute_frame_pointer_to_cfa_displacement (void) { HOST_WIDE_INT offset; + rtx reg, elim; - offset = eliminate_reg_to_offset (arg_pointer_rtx); - offset += ARG_POINTER_CFA_OFFSET (current_function_decl); +#ifdef FRAME_POINTER_CFA_OFFSET + reg = frame_pointer_rtx; + offset = FRAME_POINTER_CFA_OFFSET (current_function_decl); +#else + reg = arg_pointer_rtx; + offset = ARG_POINTER_CFA_OFFSET (current_function_decl); +#endif + + elim = eliminate_regs (reg, VOIDmode, NULL_RTX); + if (GET_CODE (elim) == PLUS) + { + offset += INTVAL (XEXP (elim, 1)); + elim = XEXP (elim, 0); + } + gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx + : stack_pointer_rtx)); frame_pointer_cfa_offset = -offset; } @@ -10777,7 +10809,8 @@ add_name_and_src_coords_attributes (dw_die_ref die, tree decl) if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL) && TREE_PUBLIC (decl) && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl) - && !DECL_ABSTRACT (decl)) + && !DECL_ABSTRACT (decl) + && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))) add_AT_string (die, DW_AT_MIPS_linkage_name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); } @@ -11445,6 +11478,14 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) gcc_assert (!old_die); } + /* Now that the C++ front end lazily declares artificial member fns, we + might need to retrofit the declaration into its class. */ + if (!declaration && !origin && !old_die + && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl)) + && !class_or_namespace_scope_p (context_die) + && debug_info_level > DINFO_LEVEL_TERSE) + old_die = force_decl_die (decl); + if (origin != NULL) { gcc_assert (!declaration || local_scope_p (context_die)); @@ -11546,7 +11587,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) Note that force_decl_die() forces function declaration die. It is later reused to represent definition. */ - equate_decl_number_to_die (decl, subr_die); + equate_decl_number_to_die (decl, subr_die); } } else if (DECL_ABSTRACT (decl)) @@ -12745,6 +12786,10 @@ force_decl_die (tree decl) else context_die = comp_unit_die; + decl_die = lookup_decl_die (decl); + if (decl_die) + return decl_die; + switch (TREE_CODE (decl)) { case FUNCTION_DECL: @@ -12795,13 +12840,18 @@ force_type_die (tree type) { dw_die_ref context_die; if (TYPE_CONTEXT (type)) - if (TYPE_P (TYPE_CONTEXT (type))) - context_die = force_type_die (TYPE_CONTEXT (type)); - else - context_die = force_decl_die (TYPE_CONTEXT (type)); + { + if (TYPE_P (TYPE_CONTEXT (type))) + context_die = force_type_die (TYPE_CONTEXT (type)); + else + context_die = force_decl_die (TYPE_CONTEXT (type)); + } else context_die = comp_unit_die; + type_die = lookup_type_die (type); + if (type_die) + return type_die; gen_type_die (type, context_die); type_die = lookup_type_die (type); gcc_assert (type_die); diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 53bff455054..d17258795fb 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1162,7 +1162,7 @@ gen_lowpart_common (enum machine_mode mode, rtx x) return 0; /* Don't allow generating paradoxical FLOAT_MODE subregs. */ - if (GET_MODE_CLASS (mode) == MODE_FLOAT && msize > xsize) + if (SCALAR_FLOAT_MODE_P (mode) && msize > xsize) return 0; offset = subreg_lowpart_offset (mode, innermode); diff --git a/gcc/except.c b/gcc/except.c index 7f317625924..34dddfeacbf 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -3463,6 +3463,7 @@ static void output_ttype (tree type, int tt_format, int tt_format_size) { rtx value; + bool public = true; if (type == NULL_TREE) value = const0_rtx; @@ -3485,6 +3486,7 @@ output_ttype (tree type, int tt_format, int tt_format_size) node = cgraph_varpool_node (type); if (node) cgraph_varpool_mark_needed_node (node); + public = TREE_PUBLIC (type); } } else if (TREE_CODE (type) != INTEGER_CST) @@ -3499,7 +3501,7 @@ output_ttype (tree type, int tt_format, int tt_format_size) assemble_integer (value, tt_format_size, tt_format_size * BITS_PER_UNIT, 1); else - dw2_asm_output_encoded_addr_rtx (tt_format, value, NULL); + dw2_asm_output_encoded_addr_rtx (tt_format, value, public, NULL); } void diff --git a/gcc/expmed.c b/gcc/expmed.c index 19d972d2ad3..d591b6bc7c2 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -430,14 +430,11 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, || (offset * BITS_PER_UNIT % bitsize == 0 && MEM_ALIGN (op0) % GET_MODE_BITSIZE (fieldmode) == 0)))) { - if (GET_MODE (op0) != fieldmode) - { - if (MEM_P (op0)) - op0 = adjust_address (op0, fieldmode, offset); - else - op0 = simplify_gen_subreg (fieldmode, op0, GET_MODE (op0), - byte_offset); - } + if (MEM_P (op0)) + op0 = adjust_address (op0, fieldmode, offset); + else if (GET_MODE (op0) != fieldmode) + op0 = simplify_gen_subreg (fieldmode, op0, GET_MODE (op0), + byte_offset); emit_move_insn (op0, value); return value; } @@ -608,8 +605,8 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, if (HAVE_insv && GET_MODE (value) != BLKmode && !(bitsize == 1 && GET_CODE (value) == CONST_INT) - /* Ensure insv's size is wide enough for this field. */ - && (GET_MODE_BITSIZE (op_mode) >= bitsize) + && bitsize > 0 + && GET_MODE_BITSIZE (op_mode) >= bitsize && ! ((REG_P (op0) || GET_CODE (op0) == SUBREG) && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode)))) { @@ -646,6 +643,7 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, bestmode = GET_MODE (op0); if (bestmode == VOIDmode + || GET_MODE_SIZE (bestmode) < GET_MODE_SIZE (fieldmode) || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (op0)) && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (op0))) goto insv_loses; @@ -1356,7 +1354,8 @@ extract_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, if (unsignedp) { if (HAVE_extzv - && (GET_MODE_BITSIZE (extzv_mode) >= bitsize) + && bitsize > 0 + && GET_MODE_BITSIZE (extzv_mode) >= bitsize && ! ((REG_P (op0) || GET_CODE (op0) == SUBREG) && (bitsize + bitpos > GET_MODE_BITSIZE (extzv_mode)))) { @@ -1409,6 +1408,11 @@ extract_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, xbitpos = bitnum % unit; xop0 = adjust_address (xop0, bestmode, xoffset); + /* Make sure register is big enough for the whole field. */ + if (xoffset * BITS_PER_UNIT + unit + < offset * BITS_PER_UNIT + bitsize) + goto extzv_loses; + /* Fetch it to a register in that size. */ xop0 = force_reg (bestmode, xop0); @@ -1488,7 +1492,8 @@ extract_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, else { if (HAVE_extv - && (GET_MODE_BITSIZE (extv_mode) >= bitsize) + && bitsize > 0 + && GET_MODE_BITSIZE (extv_mode) >= bitsize && ! ((REG_P (op0) || GET_CODE (op0) == SUBREG) && (bitsize + bitpos > GET_MODE_BITSIZE (extv_mode)))) { @@ -1537,6 +1542,11 @@ extract_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, xbitpos = bitnum % unit; xop0 = adjust_address (xop0, bestmode, xoffset); + /* Make sure register is big enough for the whole field. */ + if (xoffset * BITS_PER_UNIT + unit + < offset * BITS_PER_UNIT + bitsize) + goto extv_loses; + /* Fetch it to a register in that size. */ xop0 = force_reg (bestmode, xop0); @@ -3146,7 +3156,7 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target, /* Expand x*2.0 as x+x. */ if (GET_CODE (op1) == CONST_DOUBLE - && GET_MODE_CLASS (mode) == MODE_FLOAT) + && SCALAR_FLOAT_MODE_P (mode)) { REAL_VALUE_TYPE d; REAL_VALUE_FROM_CONST_DOUBLE (d, op1); diff --git a/gcc/expr.c b/gcc/expr.c index 9743c2a6082..44ef18223f0 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -349,8 +349,8 @@ convert_move (rtx to, rtx from, int unsignedp) { enum machine_mode to_mode = GET_MODE (to); enum machine_mode from_mode = GET_MODE (from); - int to_real = GET_MODE_CLASS (to_mode) == MODE_FLOAT; - int from_real = GET_MODE_CLASS (from_mode) == MODE_FLOAT; + int to_real = SCALAR_FLOAT_MODE_P (to_mode); + int from_real = SCALAR_FLOAT_MODE_P (from_mode); enum insn_code code; rtx libcall; @@ -6488,7 +6488,7 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode, information. It would be better of the diagnostic routines used the file/line information embedded in the tree nodes rather than globals. */ - if (cfun && EXPR_HAS_LOCATION (exp)) + if (cfun && cfun->ib_boundaries_block && EXPR_HAS_LOCATION (exp)) { location_t saved_location = input_location; input_location = EXPR_LOCATION (exp); @@ -6543,7 +6543,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, optab this_optab; rtx subtarget, original_target; int ignore; - tree context; + tree context, subexp0, subexp1; bool reduce_bit_field = false; #define REDUCE_BIT_FIELD(expr) (reduce_bit_field && !ignore \ ? reduce_to_bit_field_precision ((expr), \ @@ -7824,7 +7824,43 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, from a narrower type. If this machine supports multiplying in that narrower type with a result in the desired type, do it that way, and avoid the explicit type-conversion. */ - if (TREE_CODE (TREE_OPERAND (exp, 0)) == NOP_EXPR + + subexp0 = TREE_OPERAND (exp, 0); + subexp1 = TREE_OPERAND (exp, 1); + /* First, check if we have a multiplication of one signed and one + unsigned operand. */ + if (TREE_CODE (subexp0) == NOP_EXPR + && TREE_CODE (subexp1) == NOP_EXPR + && TREE_CODE (type) == INTEGER_TYPE + && (TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (subexp0, 0))) + < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (exp, 0)))) + && (TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (subexp0, 0))) + == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (subexp1, 0)))) + && (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (subexp0, 0))) + != TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (subexp1, 0))))) + { + enum machine_mode innermode + = TYPE_MODE (TREE_TYPE (TREE_OPERAND (subexp0, 0))); + this_optab = usmul_widen_optab; + if (mode == GET_MODE_WIDER_MODE (innermode)) + { + if (this_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) + { + if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (subexp0, 0)))) + expand_operands (TREE_OPERAND (subexp0, 0), + TREE_OPERAND (subexp1, 0), + NULL_RTX, &op0, &op1, 0); + else + expand_operands (TREE_OPERAND (subexp0, 0), + TREE_OPERAND (subexp1, 0), + NULL_RTX, &op1, &op0, 0); + + goto binop2; + } + } + } + /* Check for a multiplication with matching signedness. */ + else if (TREE_CODE (TREE_OPERAND (exp, 0)) == NOP_EXPR && TREE_CODE (type) == INTEGER_TYPE && (TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))) < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (exp, 0)))) @@ -8020,69 +8056,92 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (! CONSTANT_P (op1)) op1 = force_reg (mode, op1); -#ifdef HAVE_conditional_move - /* Use a conditional move if possible. */ - if (can_conditionally_move_p (mode)) - { - enum rtx_code comparison_code; - rtx insn; + { + enum rtx_code comparison_code; + rtx cmpop1 = op1; - if (code == MAX_EXPR) - comparison_code = unsignedp ? GEU : GE; - else - comparison_code = unsignedp ? LEU : LE; + if (code == MAX_EXPR) + comparison_code = unsignedp ? GEU : GE; + else + comparison_code = unsignedp ? LEU : LE; - /* ??? Same problem as in expmed.c: emit_conditional_move - forces a stack adjustment via compare_from_rtx, and we - lose the stack adjustment if the sequence we are about - to create is discarded. */ - do_pending_stack_adjust (); + /* Canonicalize to comparsions against 0. */ + if (op1 == const1_rtx) + { + /* Converting (a >= 1 ? a : 1) into (a > 0 ? a : 1) + or (a != 0 ? a : 1) for unsigned. + For MIN we are safe converting (a <= 1 ? a : 1) + into (a <= 0 ? a : 1) */ + cmpop1 = const0_rtx; + if (code == MAX_EXPR) + comparison_code = unsignedp ? NE : GT; + } + if (op1 == constm1_rtx && !unsignedp) + { + /* Converting (a >= -1 ? a : -1) into (a >= 0 ? a : -1) + and (a <= -1 ? a : -1) into (a < 0 ? a : -1) */ + cmpop1 = const0_rtx; + if (code == MIN_EXPR) + comparison_code = LT; + } +#ifdef HAVE_conditional_move + /* Use a conditional move if possible. */ + if (can_conditionally_move_p (mode)) + { + rtx insn; - start_sequence (); + /* ??? Same problem as in expmed.c: emit_conditional_move + forces a stack adjustment via compare_from_rtx, and we + lose the stack adjustment if the sequence we are about + to create is discarded. */ + do_pending_stack_adjust (); - /* Try to emit the conditional move. */ - insn = emit_conditional_move (target, comparison_code, - op0, op1, mode, - op0, op1, mode, - unsignedp); + start_sequence (); - /* If we could do the conditional move, emit the sequence, - and return. */ - if (insn) - { - rtx seq = get_insns (); - end_sequence (); - emit_insn (seq); - return target; - } + /* Try to emit the conditional move. */ + insn = emit_conditional_move (target, comparison_code, + op0, cmpop1, mode, + op0, op1, mode, + unsignedp); - /* Otherwise discard the sequence and fall back to code with - branches. */ - end_sequence (); - } + /* If we could do the conditional move, emit the sequence, + and return. */ + if (insn) + { + rtx seq = get_insns (); + end_sequence (); + emit_insn (seq); + return target; + } + + /* Otherwise discard the sequence and fall back to code with + branches. */ + end_sequence (); + } #endif - if (target != op0) - emit_move_insn (target, op0); + if (target != op0) + emit_move_insn (target, op0); - temp = gen_label_rtx (); + temp = gen_label_rtx (); - /* If this mode is an integer too wide to compare properly, - compare word by word. Rely on cse to optimize constant cases. */ - if (GET_MODE_CLASS (mode) == MODE_INT - && ! can_compare_p (GE, mode, ccp_jump)) - { - if (code == MAX_EXPR) - do_jump_by_parts_greater_rtx (mode, unsignedp, target, op1, - NULL_RTX, temp); - else - do_jump_by_parts_greater_rtx (mode, unsignedp, op1, target, - NULL_RTX, temp); - } - else - { - do_compare_rtx_and_jump (target, op1, code == MAX_EXPR ? GE : LE, - unsignedp, mode, NULL_RTX, NULL_RTX, temp); - } + /* If this mode is an integer too wide to compare properly, + compare word by word. Rely on cse to optimize constant cases. */ + if (GET_MODE_CLASS (mode) == MODE_INT + && ! can_compare_p (GE, mode, ccp_jump)) + { + if (code == MAX_EXPR) + do_jump_by_parts_greater_rtx (mode, unsignedp, target, op1, + NULL_RTX, temp); + else + do_jump_by_parts_greater_rtx (mode, unsignedp, op1, target, + NULL_RTX, temp); + } + else + { + do_compare_rtx_and_jump (target, cmpop1, comparison_code, + unsignedp, mode, NULL_RTX, NULL_RTX, temp); + } + } emit_move_insn (target, op1); emit_label (temp); return target; diff --git a/gcc/final.c b/gcc/final.c index ddd339b3688..ed1327dc0a4 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -141,6 +141,9 @@ static int high_function_linenum; /* Filename of last NOTE. */ static const char *last_filename; +/* Whether to force emission of a line note before the next insn. */ +static bool force_source_line = false; + extern int length_unit_log; /* This is defined in insn-attrtab.c. */ /* Nonzero while outputting an `asm' with operands. @@ -1739,7 +1742,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, if ((*seen & (SEEN_EMITTED | SEEN_BB)) == SEEN_BB) { *seen |= SEEN_EMITTED; - last_filename = NULL; + force_source_line = true; } else *seen |= SEEN_BB; @@ -1763,7 +1766,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, if ((*seen & (SEEN_EMITTED | SEEN_NOTE)) == SEEN_NOTE) { *seen |= SEEN_EMITTED; - last_filename = NULL; + force_source_line = true; } else *seen |= SEEN_NOTE; @@ -1781,7 +1784,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, if ((*seen & (SEEN_EMITTED | SEEN_NOTE)) == SEEN_NOTE) { *seen |= SEEN_EMITTED; - last_filename = NULL; + force_source_line = true; } else *seen |= SEEN_NOTE; @@ -2501,8 +2504,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, return NEXT_INSN (insn); } -/* Output debugging info to the assembler file FILE - based on the NOTE-insn INSN, assumed to be a line number. */ +/* Return whether a source line note needs to be emitted before INSN. */ static bool notice_source_line (rtx insn) @@ -2510,8 +2512,12 @@ notice_source_line (rtx insn) const char *filename = insn_file (insn); int linenum = insn_line (insn); - if (filename && (filename != last_filename || last_linenum != linenum)) + if (filename + && (force_source_line + || filename != last_filename + || last_linenum != linenum)) { + force_source_line = false; last_filename = filename; last_linenum = linenum; high_block_linenum = MAX (last_linenum, high_block_linenum); diff --git a/gcc/flow.c b/gcc/flow.c index aa45def3e7c..bdb40323b02 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -141,6 +141,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "obstack.h" #include "splay-tree.h" #include "tree-pass.h" +#include "params.h" #ifndef HAVE_epilogue #define HAVE_epilogue 0 @@ -283,10 +284,6 @@ static int ndead; static int *reg_deaths; -/* Maximum length of pbi->mem_set_list before we start dropping - new elements on the floor. */ -#define MAX_MEM_SET_LIST_LEN 100 - /* Forward declarations */ static int verify_wide_reg_1 (rtx *, void *); static void verify_wide_reg (int, basic_block); @@ -630,7 +627,7 @@ update_life_info (sbitmap blocks, enum update_life_extent extent, /* We repeat regardless of what cleanup_cfg says. If there were instructions deleted above, that might have been only a - partial improvement (see MAX_MEM_SET_LIST_LEN usage). + partial improvement (see PARAM_MAX_FLOW_MEMORY_LOCATIONS usage). Further improvement may be possible. */ cleanup_cfg (CLEANUP_EXPENSIVE); @@ -2515,7 +2512,7 @@ add_to_mem_set_list (struct propagate_block_info *pbi, rtx mem) } } - if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN) + if (pbi->mem_set_list_len < PARAM_VALUE (PARAM_MAX_FLOW_MEMORY_LOCATIONS)) { #ifdef AUTO_INC_DEC /* Store a copy of mem, otherwise the address may be @@ -2819,7 +2816,7 @@ mark_set_1 (struct propagate_block_info *pbi, enum rtx_code code, rtx reg, rtx c else SET_REGNO_REG_SET (pbi->local_set, i); } - if (code != CLOBBER) + if (code != CLOBBER || needed_regno) SET_REGNO_REG_SET (pbi->new_set, i); some_was_live |= needed_regno; diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 16e7eb30b30..ce71d3a085f 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1537,6 +1537,16 @@ const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc) inexact = real_arithmetic (&value, code, &d1, &d2); real_convert (&result, mode, &value); + /* Don't constant fold this floating point operation if + the result has overflowed and flag_trapping_math. */ + + if (flag_trapping_math + && MODE_HAS_INFINITIES (mode) + && REAL_VALUE_ISINF (result) + && !REAL_VALUE_ISINF (d1) + && !REAL_VALUE_ISINF (d2)) + return NULL_TREE; + /* Don't constant fold this floating point operation if the result may dependent upon the run-time rounding mode and flag_rounding_math is set, or if GCC's software emulation @@ -4046,10 +4056,22 @@ build_range_check (tree type, tree exp, int in_p, tree low, tree high) } if (value != 0 && ! TREE_OVERFLOW (value)) - return build_range_check (type, - fold_build2 (MINUS_EXPR, etype, exp, low), - 1, fold_convert (etype, integer_zero_node), - value); + { + /* There is no requirement that LOW be within the range of ETYPE + if the latter is a subtype. It must, however, be within the base + type of ETYPE. So be sure we do the subtraction in that type. */ + if (INTEGRAL_TYPE_P (etype) && TREE_TYPE (etype)) + { + etype = TREE_TYPE (etype); + exp = fold_convert (etype, exp); + low = fold_convert (etype, low); + value = fold_convert (etype, value); + } + + return build_range_check (type, + fold_build2 (MINUS_EXPR, etype, exp, low), + 1, build_int_cst (etype, 0), value); + } return 0; } @@ -5521,7 +5543,8 @@ constant_boolean_node (int value, tree type) offset to the appropriate trees. If there is no offset, offset is set to NULL_TREE. Base will be canonicalized to something you can get the element type from using - TREE_TYPE (TREE_TYPE (base)). */ + TREE_TYPE (TREE_TYPE (base)). Offset will be the offset + in bytes to the base. */ static bool extract_array_ref (tree expr, tree *base, tree *offset) @@ -5557,8 +5580,10 @@ extract_array_ref (tree expr, tree *base, tree *offset) tree op0 = TREE_OPERAND (expr, 0); if (TREE_CODE (op0) == ARRAY_REF) { + tree idx = TREE_OPERAND (op0, 1); *base = TREE_OPERAND (op0, 0); - *offset = TREE_OPERAND (op0, 1); + *offset = fold_build2 (MULT_EXPR, TREE_TYPE (idx), idx, + array_ref_element_size (op0)); } else { @@ -6525,6 +6550,104 @@ fold_to_nonsharp_ineq_using_bound (tree ineq, tree bound) return fold_build2 (GE_EXPR, type, a, y); } +/* Fold a sum or difference of at least one multiplication. + Returns the folded tree or NULL if no simplification could be made. */ + +static tree +fold_plusminus_mult_expr (enum tree_code code, tree type, tree arg0, tree arg1) +{ + tree arg00, arg01, arg10, arg11; + tree alt0 = NULL_TREE, alt1 = NULL_TREE, same; + + /* (A * C) +- (B * C) -> (A+-B) * C. + (A * C) +- A -> A * (C+-1). + We are most concerned about the case where C is a constant, + but other combinations show up during loop reduction. Since + it is not difficult, try all four possibilities. */ + + if (TREE_CODE (arg0) == MULT_EXPR) + { + arg00 = TREE_OPERAND (arg0, 0); + arg01 = TREE_OPERAND (arg0, 1); + } + else + { + arg00 = arg0; + if (!FLOAT_TYPE_P (type)) + arg01 = build_int_cst (type, 1); + else + arg01 = build_real (type, dconst1); + } + if (TREE_CODE (arg1) == MULT_EXPR) + { + arg10 = TREE_OPERAND (arg1, 0); + arg11 = TREE_OPERAND (arg1, 1); + } + else + { + arg10 = arg1; + if (!FLOAT_TYPE_P (type)) + arg11 = build_int_cst (type, 1); + else + arg11 = build_real (type, dconst1); + } + same = NULL_TREE; + + if (operand_equal_p (arg01, arg11, 0)) + same = arg01, alt0 = arg00, alt1 = arg10; + else if (operand_equal_p (arg00, arg10, 0)) + same = arg00, alt0 = arg01, alt1 = arg11; + else if (operand_equal_p (arg00, arg11, 0)) + same = arg00, alt0 = arg01, alt1 = arg10; + else if (operand_equal_p (arg01, arg10, 0)) + same = arg01, alt0 = arg00, alt1 = arg11; + + /* No identical multiplicands; see if we can find a common + power-of-two factor in non-power-of-two multiplies. This + can help in multi-dimensional array access. */ + else if (host_integerp (arg01, 0) + && host_integerp (arg11, 0)) + { + HOST_WIDE_INT int01, int11, tmp; + bool swap = false; + tree maybe_same; + int01 = TREE_INT_CST_LOW (arg01); + int11 = TREE_INT_CST_LOW (arg11); + + /* Move min of absolute values to int11. */ + if ((int01 >= 0 ? int01 : -int01) + < (int11 >= 0 ? int11 : -int11)) + { + tmp = int01, int01 = int11, int11 = tmp; + alt0 = arg00, arg00 = arg10, arg10 = alt0; + maybe_same = arg01; + swap = true; + } + else + maybe_same = arg11; + + if (exact_log2 (int11) > 0 && int01 % int11 == 0) + { + alt0 = fold_build2 (MULT_EXPR, TREE_TYPE (arg00), arg00, + build_int_cst (TREE_TYPE (arg00), + int01 / int11)); + alt1 = arg10; + same = maybe_same; + if (swap) + maybe_same = alt0, alt0 = alt1, alt1 = maybe_same; + } + } + + if (same) + return fold_build2 (MULT_EXPR, type, + fold_build2 (code, type, + fold_convert (type, alt0), + fold_convert (type, alt1)), + fold_convert (type, same)); + + return NULL_TREE; +} + /* Fold a unary expression of code CODE and type TYPE with operand OP0. Return the folded expression if folding is successful. Otherwise, return NULL_TREE. */ @@ -6642,6 +6765,12 @@ fold_unary (enum tree_code code, tree type, tree op0) case FIX_ROUND_EXPR: if (TREE_TYPE (op0) == type) return op0; + + /* If we have (type) (a CMP b) and type is an integal type, return + new expression involving the new type. */ + if (COMPARISON_CLASS_P (op0) && INTEGRAL_TYPE_P (type)) + return fold_build2 (TREE_CODE (op0), type, TREE_OPERAND (op0, 0), + TREE_OPERAND (op0, 1)); /* Handle cases of two conversions in a row. */ if (TREE_CODE (op0) == NOP_EXPR @@ -7174,6 +7303,17 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) && integer_onep (arg1)) return fold_build1 (NEGATE_EXPR, type, TREE_OPERAND (arg0, 0)); + /* Handle (A1 * C1) + (A2 * C2) with A1, A2 or C1, C2 being the + same or one. */ + if ((TREE_CODE (arg0) == MULT_EXPR + || TREE_CODE (arg1) == MULT_EXPR) + && (!FLOAT_TYPE_P (type) || flag_unsafe_math_optimizations)) + { + tree tem = fold_plusminus_mult_expr (code, type, arg0, arg1); + if (tem) + return tem; + } + if (! FLOAT_TYPE_P (type)) { if (integer_zerop (arg1)) @@ -7235,70 +7375,6 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) parg1))); } - if (TREE_CODE (arg0) == MULT_EXPR && TREE_CODE (arg1) == MULT_EXPR) - { - tree arg00, arg01, arg10, arg11; - tree alt0 = NULL_TREE, alt1 = NULL_TREE, same; - - /* (A * C) + (B * C) -> (A+B) * C. - We are most concerned about the case where C is a constant, - but other combinations show up during loop reduction. Since - it is not difficult, try all four possibilities. */ - - arg00 = TREE_OPERAND (arg0, 0); - arg01 = TREE_OPERAND (arg0, 1); - arg10 = TREE_OPERAND (arg1, 0); - arg11 = TREE_OPERAND (arg1, 1); - same = NULL_TREE; - - if (operand_equal_p (arg01, arg11, 0)) - same = arg01, alt0 = arg00, alt1 = arg10; - else if (operand_equal_p (arg00, arg10, 0)) - same = arg00, alt0 = arg01, alt1 = arg11; - else if (operand_equal_p (arg00, arg11, 0)) - same = arg00, alt0 = arg01, alt1 = arg10; - else if (operand_equal_p (arg01, arg10, 0)) - same = arg01, alt0 = arg00, alt1 = arg11; - - /* No identical multiplicands; see if we can find a common - power-of-two factor in non-power-of-two multiplies. This - can help in multi-dimensional array access. */ - else if (TREE_CODE (arg01) == INTEGER_CST - && TREE_CODE (arg11) == INTEGER_CST - && TREE_INT_CST_HIGH (arg01) == 0 - && TREE_INT_CST_HIGH (arg11) == 0) - { - HOST_WIDE_INT int01, int11, tmp; - int01 = TREE_INT_CST_LOW (arg01); - int11 = TREE_INT_CST_LOW (arg11); - - /* Move min of absolute values to int11. */ - if ((int01 >= 0 ? int01 : -int01) - < (int11 >= 0 ? int11 : -int11)) - { - tmp = int01, int01 = int11, int11 = tmp; - alt0 = arg00, arg00 = arg10, arg10 = alt0; - alt0 = arg01, arg01 = arg11, arg11 = alt0; - } - - if (exact_log2 (int11) > 0 && int01 % int11 == 0) - { - alt0 = fold_build2 (MULT_EXPR, type, arg00, - build_int_cst (NULL_TREE, - int01 / int11)); - alt1 = arg10; - same = arg11; - } - } - - if (same) - return fold_build2 (MULT_EXPR, type, - fold_build2 (PLUS_EXPR, type, - fold_convert (type, alt0), - fold_convert (type, alt1)), - fold_convert (type, same)); - } - /* Try replacing &a[i1] + c * i2 with &a[i1 + i2], if c is step of the array. Loop optimizer sometimes produce this type of expressions. */ @@ -7348,56 +7424,6 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) return fold_build2 (MULT_EXPR, type, arg0, build_real (type, dconst2)); - /* Convert x*c+x into x*(c+1). */ - if (flag_unsafe_math_optimizations - && TREE_CODE (arg0) == MULT_EXPR - && TREE_CODE (TREE_OPERAND (arg0, 1)) == REAL_CST - && ! TREE_CONSTANT_OVERFLOW (TREE_OPERAND (arg0, 1)) - && operand_equal_p (TREE_OPERAND (arg0, 0), arg1, 0)) - { - REAL_VALUE_TYPE c; - - c = TREE_REAL_CST (TREE_OPERAND (arg0, 1)); - real_arithmetic (&c, PLUS_EXPR, &c, &dconst1); - return fold_build2 (MULT_EXPR, type, arg1, - build_real (type, c)); - } - - /* Convert x+x*c into x*(c+1). */ - if (flag_unsafe_math_optimizations - && TREE_CODE (arg1) == MULT_EXPR - && TREE_CODE (TREE_OPERAND (arg1, 1)) == REAL_CST - && ! TREE_CONSTANT_OVERFLOW (TREE_OPERAND (arg1, 1)) - && operand_equal_p (TREE_OPERAND (arg1, 0), arg0, 0)) - { - REAL_VALUE_TYPE c; - - c = TREE_REAL_CST (TREE_OPERAND (arg1, 1)); - real_arithmetic (&c, PLUS_EXPR, &c, &dconst1); - return fold_build2 (MULT_EXPR, type, arg0, - build_real (type, c)); - } - - /* Convert x*c1+x*c2 into x*(c1+c2). */ - if (flag_unsafe_math_optimizations - && TREE_CODE (arg0) == MULT_EXPR - && TREE_CODE (arg1) == MULT_EXPR - && TREE_CODE (TREE_OPERAND (arg0, 1)) == REAL_CST - && ! TREE_CONSTANT_OVERFLOW (TREE_OPERAND (arg0, 1)) - && TREE_CODE (TREE_OPERAND (arg1, 1)) == REAL_CST - && ! TREE_CONSTANT_OVERFLOW (TREE_OPERAND (arg1, 1)) - && operand_equal_p (TREE_OPERAND (arg0, 0), - TREE_OPERAND (arg1, 0), 0)) - { - REAL_VALUE_TYPE c1, c2; - - c1 = TREE_REAL_CST (TREE_OPERAND (arg0, 1)); - c2 = TREE_REAL_CST (TREE_OPERAND (arg1, 1)); - real_arithmetic (&c1, PLUS_EXPR, &c1, &c2); - return fold_build2 (MULT_EXPR, type, - TREE_OPERAND (arg0, 0), - build_real (type, c1)); - } /* Convert a + (b*c + d*e) into (a + b*c) + d*e. */ if (flag_unsafe_math_optimizations && TREE_CODE (arg1) == PLUS_EXPR @@ -7740,26 +7766,15 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) && (tem = distribute_real_division (code, type, arg0, arg1))) return tem; - if (TREE_CODE (arg0) == MULT_EXPR - && TREE_CODE (arg1) == MULT_EXPR + /* Handle (A1 * C1) - (A2 * C2) with A1, A2 or C1, C2 being the + same or one. */ + if ((TREE_CODE (arg0) == MULT_EXPR + || TREE_CODE (arg1) == MULT_EXPR) && (!FLOAT_TYPE_P (type) || flag_unsafe_math_optimizations)) - { - /* (A * C) - (B * C) -> (A-B) * C. */ - if (operand_equal_p (TREE_OPERAND (arg0, 1), - TREE_OPERAND (arg1, 1), 0)) - return fold_build2 (MULT_EXPR, type, - fold_build2 (MINUS_EXPR, type, - TREE_OPERAND (arg0, 0), - TREE_OPERAND (arg1, 0)), - TREE_OPERAND (arg0, 1)); - /* (A * C1) - (A * C2) -> A * (C1-C2). */ - if (operand_equal_p (TREE_OPERAND (arg0, 0), - TREE_OPERAND (arg1, 0), 0)) - return fold_build2 (MULT_EXPR, type, - TREE_OPERAND (arg0, 0), - fold_build2 (MINUS_EXPR, type, - TREE_OPERAND (arg0, 1), - TREE_OPERAND (arg1, 1))); + { + tree tem = fold_plusminus_mult_expr (code, type, arg0, arg1); + if (tem) + return tem; } goto associate; @@ -8212,6 +8227,17 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) && real_zerop (arg1)) return NULL_TREE; + /* Optimize A / A to 1.0 if we don't care about + NaNs or Infinities. */ + if (! HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))) + && ! HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg0))) + && operand_equal_p (arg0, arg1, 0)) + { + tree r = build_real (TREE_TYPE (arg0), dconst1); + + return omit_two_operands (type, r, arg0, arg1); + } + /* (-A) / (-B) -> A / B */ if (TREE_CODE (arg0) == NEGATE_EXPR && negate_expr_p (arg1)) return fold_build2 (RDIV_EXPR, type, @@ -8872,25 +8898,21 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) && extract_array_ref (arg1, &base1, &offset1) && operand_equal_p (base0, base1, 0)) { - if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (base0))) - && integer_zerop (TYPE_SIZE (TREE_TYPE (TREE_TYPE (base0))))) - offset0 = NULL_TREE; - if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (base1))) - && integer_zerop (TYPE_SIZE (TREE_TYPE (TREE_TYPE (base1))))) - offset1 = NULL_TREE; + /* Handle no offsets on both sides specially. */ if (offset0 == NULL_TREE && offset1 == NULL_TREE) + return fold_build2 (code, type, integer_zero_node, + integer_zero_node); + + if (!offset0 || !offset1 + || TREE_TYPE (offset0) == TREE_TYPE (offset1)) { - offset0 = integer_zero_node; - offset1 = integer_zero_node; + if (offset0 == NULL_TREE) + offset0 = build_int_cst (TREE_TYPE (offset1), 0); + if (offset1 == NULL_TREE) + offset1 = build_int_cst (TREE_TYPE (offset0), 0); + return fold_build2 (code, type, offset0, offset1); } - else if (offset0 == NULL_TREE) - offset0 = build_int_cst (TREE_TYPE (offset1), 0); - else if (offset1 == NULL_TREE) - offset1 = build_int_cst (TREE_TYPE (offset0), 0); - - if (TREE_TYPE (offset0) == TREE_TYPE (offset1)) - return fold_build2 (code, type, offset0, offset1); } } @@ -11512,9 +11534,15 @@ fold_indirect_ref_1 (tree type, tree op0) { tree op = TREE_OPERAND (sub, 0); tree optype = TREE_TYPE (op); - /* *&p => p */ + /* *&p => p; make sure to handle *&"str"[cst] here. */ if (type == optype) - return op; + { + tree fop = fold_read_from_constant_string (op); + if (fop) + return fop; + else + return op; + } /* *(foo *)&fooarray => fooarray[0] */ else if (TREE_CODE (optype) == ARRAY_TYPE && type == TREE_TYPE (optype)) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d3757933f96..4a124d3b3ad 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,345 @@ +2005-11-21 Jakub Jelinek + + PR fortran/14943 + PR fortran/21647 + * Make-lang.in (fortran/trans-io.o): Depend on fortran/ioparm.def. + * dump-parse-tree.c (gfc_show_code_node): Dump c->block for + EXEC_{READ,WRITE,IOLENGTH} nodes. + * io.c (terminate_io, match_io, gfc_match_inquire): Put data + transfer commands into EXEC_{READ,WRITE,IOLENGTH}'s code->block. + * resolve.c (resolve_blocks): Handle EXEC_{READ,WRITE,IOLENGTH}. + * trans-io.c (ioparm_unit, ioparm_err, ioparm_end, ioparm_eor, + ioparm_list_format, ioparm_library_return, ioparm_iostat, + ioparm_exist, ioparm_opened, ioparm_number, ioparm_named, + ioparm_rec, ioparm_nextrec, ioparm_size, ioparm_recl_in, + ioparm_recl_out, ioparm_iolength, ioparm_file, ioparm_file_len, + ioparm_status, ioparm_status_len, ioparm_access, ioparm_access_len, + ioparm_form, ioparm_form_len, ioparm_blank, ioparm_blank_len, + ioparm_position, ioparm_position_len, ioparm_action, + ioparm_action_len, ioparm_delim, ioparm_delim_len, ioparm_pad, + ioparm_pad_len, ioparm_format, ioparm_format_len, ioparm_advance, + ioparm_advance_len, ioparm_name, ioparm_name_len, + ioparm_internal_unit, ioparm_internal_unit_len, + ioparm_internal_unit_desc, ioparm_sequential, ioparm_sequential_len, + ioparm_direct, ioparm_direct_len, ioparm_formatted, + ioparm_formatted_len, ioparm_unformatted, ioparm_unformatted_len, + ioparm_read, ioparm_read_len, ioparm_write, ioparm_write_len, + ioparm_readwrite, ioparm_readwrite_len, ioparm_namelist_name, + ioparm_namelist_name_len, ioparm_namelist_read_mode, ioparm_iomsg, + ioparm_iomsg_len, ioparm_var): Remove. + (enum ioparam_type, enum iofield_type, enum iofield, + enum iocall): New enums. + (gfc_st_parameter_field, gfc_st_parameter): New typedefs. + (st_parameter, st_parameter_field, iocall): New variables. + (ADD_FIELD, ADD_STRING): Remove. + (dt_parm, dt_post_end_block): New variables. + (gfc_build_st_parameter): New function. + (gfc_build_io_library_fndecls): Use it. Initialize iocall + array rather than ioparm_*, add extra first arguments to + the function types. + (set_parameter_const): New function. + (set_parameter_value): Add type argument, return a bitmask. + Changed to set a field in automatic structure variable rather + than set a field in a global _gfortran_ioparm variable. + (set_parameter_ref): Likewise. If requested var has different + size than what field should point to, call with a temporary and + then copy into the user variable. Add postblock argument. + (set_string): Remove var_len argument, add type argument, return + a bitmask. Changed to set fields in automatic structure variable + rather than set a field in a global _gfortran_ioparm variable. + (set_internal_unit): Remove iunit, iunit_len, iunit_desc arguments, + add var argument. Return a bitmask. Changed to set fields in + automatic structure variable rather than set a field in a global + _gfortran_ioparm variable. + (set_flag): Removed. + (io_result): Add var argument. Changed to read common.flags field + from automatic structure variable and bitwise AND it with 3. + (set_error_locus): Add var argument. Changed to set fields in + automatic structure variable rather than set a field in a global + _gfortran_{filename,line} variables. + (gfc_trans_open): Use gfc_start_block rather than gfc_init_block. + Create a temporary st_parameter_* structure. Adjust callers of + all above mentioned functions. Pass address of the temporary + variable as first argument to the generated function call. + Use iocall array rather than ioparm_* separate variables. + (gfc_trans_close, build_filepos, gfc_trans_inquire): Likewise. + (build_dt): Likewise. Change first argument to tree from tree *. + Don't dereference code->ext.dt if last_dt == INQUIRE. Emit + IOLENGTH argument setup here. Set dt_parm/dt_post_end_block + variables and gfc_trans_code the nested data transfer commands + in code->block. + (gfc_trans_iolength): Just set last_dt and call build_dt immediately. + (transfer_namelist_element): Pass address of dt_parm variable + to generated functions. Use iocall array rather than ioparm_* + separate variables. + (gfc_trans_backspace, gfc_trans_endfile, gfc_trans_rewind, + gfc_trans_flush, gfc_trans_read, gfc_trans_write): Use iocall array + rather than ioparm_* separate variables. + (gfc_trans_dt_end): Likewise. Pass address of dt_parm variable + as first argument to generated function. Adjust io_result caller. + Prepend dt_post_end_block before io_result code. + (transfer_expr): Use iocall array rather than ioparm_* separate + variables. Pass address of dt_parm variables as first argument + to generated functions. + * ioparm.def: New file. + +2005-11-21 Paul Thomas + + PR fortran/24223 + * resolve.c (resolve_contained_fntype) Error if an internal + function is assumed character length. + + PR fortran/24705 + * trans-decl.c (gfc_create_module_variable) Skip ICE in + when backend decl has been built and the symbol is marked + as being in an equivalence statement. + +2005-11-20 Toon Moene + + * invoke.texi: Remove superfluous @item. + +2005-11-19 Janne Blomqvist + + PR fortran/24862 + * trans-io.c (gfc_trans_transfer): Handle arrays of derived type. + +2005-11-17 Francois-Xavier Coudert + + PR fortran/20811 + * scanner.c (gfc_open_included_file): Add an extra include_cwd + argument. Only include files in the current working directory if + its value is true. + * gfortran.h: Change prototype for gfc_open_included_file. + (load_file): Don't search for include files in the current working + directory. + * options.c (gfc_post_options): Add the directory of the source file + to the list of paths for included files. + * module.c (gfc_use_module): Look for module files in the current + directory. + +2005-11-16 Alan Modra + + PR fortran/24096 + * trans-types.c (gfc_init_kinds): Use one less for max_exponent + of IBM extended double format. + +2005-11-13 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add COMPLEX, FTELL, FGETC, FGET, + FPUTC, FPUT, AND, XOR and OR intrinsic functions. + (add_subroutines): Add FGETC, FGET, FPUTC, FPUT and FTELL intrinsic + subroutines. + * gfortran.h: Add GFC_ISYM_AND, GFC_ISYM_COMPLEX, GFC_ISYM_FGET, + GFC_ISYM_FGETC, GFC_ISYM_FPUT, GFC_ISYM_FPUTC, GFC_ISYM_FTELL, + GFC_ISYM_OR, GFC_ISYM_XOR. + * iresolve.c (gfc_resolve_and, gfc_resolve_complex, + gfc_resolve_or, gfc_resolve_fgetc, gfc_resolve_fget, + gfc_resolve_fputc, gfc_resolve_fput, gfc_resolve_ftell, + gfc_resolve_xor, gfc_resolve_fgetc_sub, gfc_resolve_fget_sub, + gfc_resolve_fputc_sub, gfc_resolve_fput_sub, gfc_resolve_ftell_sub): + New functions. + * check.c (gfc_check_complex, gfc_check_fgetputc_sub, + gfc_check_fgetputc, gfc_check_fgetput_sub, gfc_check_fgetput, + gfc_check_ftell, gfc_check_ftell_sub, gfc_check_and): New functions. + * simplify.c (gfc_simplify_and, gfc_simplify_complex, gfc_simplify_or, + gfc_simplify_xor): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Add cases for + GFC_ISYM_AND, GFC_ISYM_COMPLEX, GFC_ISYM_FGET, GFC_ISYM_FGETC, + GFC_ISYM_FPUT, GFC_ISYM_FPUTC, GFC_ISYM_FTELL, GFC_ISYM_OR and + GFC_ISYM_XOR. + * intrinsic.h: Add prototypes for all functions added to iresolve.c, + simplify.c and check.c. + +2005-11-10 Paul Thomas + Steven G. Kargl + + PR fortran/15976 + * resolve.c (resolve_symbol): Disallow automatic arrays in module scope. + +2005-11-10 Paul Thomas + + PR fortran/24655 + PR fortran/24755 + * match.c (recursive_stmt_fcn): Add checks that symtree exists + for the expression to weed out inline intrinsic functions and + parameters. + + PR fortran/24409 + * module.c (mio_symtree_ref): Correct the patch of 0923 so that + a symbol is not substituted for by a the symbol for the module + itself and to prevent the promotion of a formal argument. + +2005-11-10 Tobias Schl"uter + + PR fortran/24643 + * primary.c (match_varspec): Check for implicitly typed CHARACTER + variables before matching substrings. + +2005-11-09 Steven G. Kargl + + * trans-intrinsic.c: Typo in comment. + +2005-11-09 Erik Edelmann + + PR fortran/22607 + * trans-decl.c(build_function_decl): Don't set + DECL_IS_PURE (fndecl) = 1 for return-by-reference + functions. + +2005-11-08 Tobias Schl"uter + + * dump-parse-tree.c: Fix comment typo, add a few blank lines. + +2005-11-07 Steven G. Kargl + + * error.c: Use flag_fatal_error. + * invoke.texi: Remove -Werror from list of options. + +2005-11-06 Paul Thomas + + PR fortran/24534 + * resolve.c (resolve_symbol): Exclude case of PRIVATE declared + within derived type from error associated with PRIVATE type + components within derived type. + + PR fortran/20838 + PR fortran/20840 + * gfortran.h: Add prototype for gfc_has_vector_index. + * io.c (gfc_resolve_dt): Error if internal unit has a vector index. + * expr.c (gfc_has_vector_index): New function to check if any of + the array references of an expression have vector inidices. + (gfc_check_pointer_assign): Error if internal unit has a vector index. + + PR fortran/17737 + * data.c (gfc_assign_data_value): Remove gcc_assert that caused the ICE + and replace by a standard dependent warning/error if overwriting an + existing initialization. + * decl.c (gfc_data_variable): Remove old error for already initialized + variable and the unused error check for common block variables. Add + error for hots associated variable and standard dependent error for + common block variables, outside of blockdata. + * symbol.c (check_conflict): Add constraints for DATA statement. + +2005-11-06 Janne Blomqvist + + PR fortran/24174 + PR fortran/24305 + * fortran/trans-io.c (gfc_build_io_library_fndecls): Add kind + argument to transfer_array. + (transfer_array_desc): Add kind argument. + +2005-11-06 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add ctime and fdate intrinsics. + (add_subroutines): Likewise. + * intrinsic.h: Prototypes for gfc_check_ctime, + gfc_check_ctime_sub, gfc_check_fdate_sub, gfc_resolve_ctime, + gfc_resolve_fdate, gfc_resolve_ctime_sub, gfc_resolve_fdate_sub. + * gfortran.h: Add GFC_ISYM_CTIME and GFC_ISYM_FDATE. + * iresolve.c (gfc_resolve_ctime, gfc_resolve_fdate, + gfc_resolve_ctime_sub, gfc_resolve_fdate_sub): New functions. + * trans-decl.c (gfc_build_intrinsic_function_decls): Add + gfor_fndecl_fdate and gfor_fndecl_ctime. + * check.c (gfc_check_ctime, gfc_check_ctime_sub, + gfc_check_fdate_sub): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_ctime, + gfc_conv_intrinsic_fdate): New functions. + (gfc_conv_intrinsic_function): Add cases for GFC_ISYM_CTIME + and GFC_ISYM_FDATE. + * intrinsic.texi: Documentation for the new CTIME and FDATE + intrinsics. + * trans.h: Declarations for gfor_fndecl_ctime and gfor_fndecl_fdate. + +2005-11-05 Kazu Hirata + + * decl.c, trans-decl.c: Fix comment typos. + * gfortran.texi: Fix a typo. + +2005-11-05 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add function version of TTYNAM. + * intrinsic.h: Add prototypes for gfc_check_ttynam and + gfc_resolve_ttynam. + * gfortran.h: Add case for GFC_ISYM_TTYNAM. + * iresolve.c (gfc_resolve_ttynam): New function. + * trans-decl.c (gfc_build_intrinsic_function_decls): Add a tree + for function call to library ttynam. + * check.c (gfc_check_ttynam): New function. + * trans-intrinsic.c (gfc_conv_intrinsic_ttynam): New function. + (): Call gfc_conv_intrinsic_ttynam. + * trans.h: Add prototype for gfor_fndecl_ttynam. + +2005-11-04 Steven G. Kargl + + PR fortran/24636 + * match.c (gfc_match_stopcode): Set stop_code = -1. + +2005-11-04 Francois-Xavier Coudert + + PR fortran/18452 + * lang-specs.h: Pass -lang-fortran to the preprocessor. + +2005-11-02 Andrew Pinski + + PR fortran/18157 + * trans-array.c (gfc_conv_resolve_dependencies): Use the correct + type for the temporary array. + * trans-expr.c (gfc_trans_assignment): Pass lss + instead of lss_section + to gfc_conv_resolve_dependencies to get the + correct type. + +2005-11-02 Tobias Schl"uter + + * decl.c (gfc_match_entry): Function entries don't need an argument + list if there's no RESULT clause. + +2005-11-01 Tobias Schl"uter + + PR fortran/24008 + * decl.c (gfc_match_entry): Function entries need an argument list. + +2005-11-01 Erik Edelmann + + PR 24245 + * trans.c (gfc_generate_code): Move code to create a main + program symbol from here ... + * parse.c (main_program_symbol): ... to this new + function, setting the locus from gfc_current_locus + instead of ns->code->loc. + (gfc_parse_file): Call main_program_symbol for main programs. + +2005-11-01 Tobias Schl"uter + + PR fortran/24404 + * resolve.c (resolve_symbol): Output symbol names in more error + messages, clarify error message. + +2005-11-01 Tobias Schl"uter + + * dump-parse-tree.c (show_symtree): Revert change unintentionally + committed in r106246. + +2005-11-01 Paul Thomas + + PR fortran/21565 + * symbol.c (check_conflict): An object cannot be in a namelist and in + block data. + + PR fortran/18737 + * resolve.c (resolve_symbol): Set the error flag to + gfc_set_default_type, in the case of an external symbol, so that + an error message is emitted if IMPLICIT NONE is set. + + PR fortran/14994 + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_SECNDS to enum. + * check.c (gfc_check_secnds): New function. + * intrinsic.c (add_functions): Add call to secnds. + * iresolve.c (gfc_resolve_secnds): New function. + * trans-intrinsic (gfc_conv_intrinsic_function): Add call to + secnds via case GFC_ISYM_SECNDS. + * intrinsic.texi: Add documentation for secnds. + 2005-10-31 Andreas Schwab * Make-lang.in (GFORTRAN_TARGET_INSTALL_NAME): Define. diff --git a/gcc/fortran/Make-lang.in b/gcc/fortran/Make-lang.in index 96b6e252110..5d3a0e0ef5f 100644 --- a/gcc/fortran/Make-lang.in +++ b/gcc/fortran/Make-lang.in @@ -287,7 +287,8 @@ fortran/trans-types.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-types.h \ fortran/trans-const.o: $(GFORTRAN_TRANS_DEPS) fortran/trans-expr.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h fortran/trans-stmt.o: $(GFORTRAN_TRANS_DEPS) -fortran/trans-io.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-io.h +fortran/trans-io.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-io.h \ + fortran/ioparm.def fortran/trans-array.o: $(GFORTRAN_TRANS_DEPS) fortran/trans-intrinsic.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \ gt-fortran-trans-intrinsic.h diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 6d2c65b5f96..3478526692f 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -632,6 +632,33 @@ gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind) try +gfc_check_complex (gfc_expr * x, gfc_expr * y) +{ + if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL) + { + gfc_error ( + "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where); + return FAILURE; + } + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL) + { + gfc_error ( + "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL", + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where); + return FAILURE; + } + if (scalar_check (y, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_count (gfc_expr * mask, gfc_expr * dim) { if (logical_array_check (mask, 0) == FAILURE) @@ -667,6 +694,19 @@ gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim) try +gfc_check_ctime (gfc_expr * time) +{ + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + + if (type_check (time, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_dcmplx (gfc_expr * x, gfc_expr * y) { if (numeric_check (x, 0) == FAILURE) @@ -1973,6 +2013,64 @@ gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies) } +/* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and + functions). */ +try +gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (c, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE + || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE + || scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c) +{ + return gfc_check_fgetputc_sub (unit, c, NULL); +} + + +try +gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status) +{ + if (type_check (c, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 1, BT_INTEGER) == FAILURE + || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE + || scalar_check (status, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_fgetput (gfc_expr * c) +{ + return gfc_check_fgetput_sub (c, NULL); +} + + try gfc_check_fstat (gfc_expr * unit, gfc_expr * array) { @@ -2024,6 +2122,38 @@ gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status) try +gfc_check_ftell (gfc_expr * unit) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (offset, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (offset, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_stat (gfc_expr * name, gfc_expr * array) { if (type_check (name, 0, BT_CHARACTER) == FAILURE) @@ -2165,6 +2295,19 @@ gfc_check_trim (gfc_expr * x) } +try +gfc_check_ttynam (gfc_expr * unit) +{ + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + /* Common check function for the half a dozen intrinsics that have a single real argument. */ @@ -2510,6 +2653,21 @@ gfc_check_srand (gfc_expr * x) } try +gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result) +{ + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + + if (type_check (time, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (result, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + +try gfc_check_etime (gfc_expr * x) { if (array_check (x, 0) == FAILURE) @@ -2562,6 +2720,16 @@ gfc_check_etime_sub (gfc_expr * values, gfc_expr * time) try +gfc_check_fdate_sub (gfc_expr * date) +{ + if (type_check (date, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_gerror (gfc_expr * msg) { if (type_check (msg, 0, BT_CHARACTER) == FAILURE) @@ -2854,3 +3022,42 @@ gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status) return SUCCESS; } + + +/* This is used for the GNU intrinsics AND, OR and XOR. */ +try +gfc_check_and (gfc_expr * i, gfc_expr * j) +{ + if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL) + { + gfc_error ( + "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where); + return FAILURE; + } + + if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL) + { + gfc_error ( + "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL", + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where); + return FAILURE; + } + + if (i->ts.type != j->ts.type) + { + gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must " + "have the same type", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, + &j->where); + return FAILURE; + } + + if (scalar_check (i, 0) == FAILURE) + return FAILURE; + + if (scalar_check (j, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c index d614db4a084..fdb98569c7a 100644 --- a/gcc/fortran/data.c +++ b/gcc/fortran/data.c @@ -315,8 +315,19 @@ gfc_assign_data_value (gfc_expr * lvalue, gfc_expr * rvalue, mpz_t index) expr = create_character_intializer (init, last_ts, ref, rvalue); else { - /* We should never be overwriting an existing initializer. */ - gcc_assert (!init); + /* Overwriting an existing initializer is non-standard but usually only + provokes a warning from other compilers. */ + if (init != NULL) + { + /* Order in which the expressions arrive here depends on whether they + are from data statements or F95 style declarations. Therefore, + check which is the most recent. */ + expr = (init->where.lb->linenum > rvalue->where.lb->linenum) ? + init : rvalue; + gfc_notify_std (GFC_STD_GNU, "Extension: re-initialization " + "of '%s' at %L", symbol->name, &expr->where); + return; + } expr = gfc_copy_expr (rvalue); if (!gfc_compare_types (&lvalue->ts, &expr->ts)) diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 7516057bfee..422a4e80f3b 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -203,24 +203,19 @@ var_element (gfc_data_variable * new) sym = new->expr->symtree->n.sym; - if(sym->value != NULL) + if (!sym->attr.function && gfc_current_ns->parent && gfc_current_ns->parent == sym->ns) { - gfc_error ("Variable '%s' at %C already has an initialization", - sym->name); + gfc_error ("Host associated variable '%s' may not be in the DATA " + "statement at %C.", sym->name); return MATCH_ERROR; } -#if 0 /* TODO: Find out where to move this message */ - if (sym->attr.in_common) - /* See if sym is in the blank common block. */ - for (t = &sym->ns->blank_common; t; t = t->common_next) - if (sym == t->head) - { - gfc_error ("DATA statement at %C may not initialize variable " - "'%s' from blank COMMON", sym->name); - return MATCH_ERROR; - } -#endif + if (gfc_current_state () != COMP_BLOCK_DATA + && sym->attr.in_common + && gfc_notify_std (GFC_STD_GNU, "Extension: initialization of " + "common block variable '%s' in DATA statement at %C", + sym->name) == FAILURE) + return MATCH_ERROR; if (gfc_add_data (&sym->attr, sym->name, &new->expr->where) == FAILURE) return MATCH_ERROR; @@ -702,7 +697,7 @@ gfc_set_constant_character_len (int len, gfc_expr * expr) } -/* Function to create and update the enumumerator history +/* Function to create and update the enumerator history using the information passed as arguments. Pointer "max_enum" is also updated, to point to enum history node containing largest initializer. @@ -1982,7 +1977,7 @@ match_attr_spec (void) } } - /* If we are parsing an enumeration and have enusured that no other + /* If we are parsing an enumeration and have ensured that no other attributes are present we can now set the parameter attribute. */ if (gfc_current_state () == COMP_ENUM) { diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index 8068b10d35f..f4765db4b5f 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -61,6 +61,7 @@ code_indent (int level, gfc_st_label * label) /* Simple indentation at the current level. This one is used to show symbols. */ + static inline void show_indent (void) { @@ -70,6 +71,7 @@ show_indent (void) /* Show type-specific information. */ + static void gfc_show_typespec (gfc_typespec * ts) { @@ -686,6 +688,7 @@ gfc_show_symbol (gfc_symbol * sym) /* Show a user-defined operator. Just prints an operator and the name of the associated subroutine, really. */ + static void show_uop (gfc_user_op * uop) { @@ -746,6 +749,7 @@ show_common (gfc_symtree * st) gfc_status_char ('\n'); } + /* Worker function to display the symbol tree. */ static void @@ -1355,6 +1359,7 @@ gfc_show_code_node (int level, gfc_code * c) case EXEC_IOLENGTH: gfc_status ("IOLENGTH "); gfc_show_expr (c->expr); + goto show_dt_code; break; case EXEC_READ: @@ -1409,7 +1414,11 @@ gfc_show_code_node (int level, gfc_code * c) gfc_show_expr (dt->advance); } - break; + show_dt_code: + gfc_status_char ('\n'); + for (c = c->block->next; c; c = c->next) + gfc_show_code_node (level + (c->next != NULL), c); + return; case EXEC_TRANSFER: gfc_status ("TRANSFER "); @@ -1436,7 +1445,7 @@ gfc_show_code_node (int level, gfc_code * c) } -/* Show and equivalence chain. */ +/* Show an equivalence chain. */ static void gfc_show_equiv (gfc_equiv *eq) diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index 3f38c3b6802..aa23330020c 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -621,6 +621,9 @@ gfc_error_now (const char *nocmsgid, ...) error_char ('\0'); buffer_flag = i; + + if (flag_fatal_errors) + exit (1); } @@ -687,6 +690,9 @@ gfc_error_check (void) if (error_buffer.message != NULL) fputs (error_buffer.message, stderr); error_buffer.flag = 0; + + if (flag_fatal_errors) + exit (1); } return rc; diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 80099df5ad4..1ceec01eae0 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -311,6 +311,23 @@ copy_ref (gfc_ref * src) } +/* Detect whether an expression has any vector index array + references. */ + +int +gfc_has_vector_index (gfc_expr *e) +{ + gfc_ref * ref; + int i; + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY) + for (i = 0; i < ref->u.ar.dimen; i++) + if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR) + return 1; + return 0; +} + + /* Copy a shape array. */ mpz_t * @@ -1962,6 +1979,13 @@ gfc_check_pointer_assign (gfc_expr * lvalue, gfc_expr * rvalue) return FAILURE; } + if (gfc_has_vector_index (rvalue)) + { + gfc_error ("Pointer assignment with vector subscript " + "on rhs at %L", &rvalue->where); + return FAILURE; + } + return SUCCESS; } diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 083fc33f147..8787c8f87a0 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -291,6 +291,7 @@ enum gfc_generic_isym_id GFC_ISYM_ALL, GFC_ISYM_ALLOCATED, GFC_ISYM_ANINT, + GFC_ISYM_AND, GFC_ISYM_ANY, GFC_ISYM_ASIN, GFC_ISYM_ASINH, @@ -310,11 +311,13 @@ enum gfc_generic_isym_id GFC_ISYM_CHDIR, GFC_ISYM_CMPLX, GFC_ISYM_COMMAND_ARGUMENT_COUNT, + GFC_ISYM_COMPLEX, GFC_ISYM_CONJG, GFC_ISYM_COS, GFC_ISYM_COSH, GFC_ISYM_COUNT, GFC_ISYM_CSHIFT, + GFC_ISYM_CTIME, GFC_ISYM_DBLE, GFC_ISYM_DIM, GFC_ISYM_DOT_PRODUCT, @@ -325,10 +328,16 @@ enum gfc_generic_isym_id GFC_ISYM_ETIME, GFC_ISYM_EXP, GFC_ISYM_EXPONENT, + GFC_ISYM_FDATE, + GFC_ISYM_FGET, + GFC_ISYM_FGETC, GFC_ISYM_FLOOR, GFC_ISYM_FNUM, + GFC_ISYM_FPUT, + GFC_ISYM_FPUTC, GFC_ISYM_FRACTION, GFC_ISYM_FSTAT, + GFC_ISYM_FTELL, GFC_ISYM_GETCWD, GFC_ISYM_GETGID, GFC_ISYM_GETPID, @@ -377,6 +386,7 @@ enum gfc_generic_isym_id GFC_ISYM_NEAREST, GFC_ISYM_NINT, GFC_ISYM_NOT, + GFC_ISYM_OR, GFC_ISYM_PACK, GFC_ISYM_PRESENT, GFC_ISYM_PRODUCT, @@ -412,11 +422,13 @@ enum gfc_generic_isym_id GFC_ISYM_TRANSFER, GFC_ISYM_TRANSPOSE, GFC_ISYM_TRIM, + GFC_ISYM_TTYNAM, GFC_ISYM_UBOUND, GFC_ISYM_UMASK, GFC_ISYM_UNLINK, GFC_ISYM_UNPACK, GFC_ISYM_VERIFY, + GFC_ISYM_XOR, GFC_ISYM_CONVERSION }; typedef enum gfc_generic_isym_id gfc_generic_isym_id; @@ -1535,7 +1547,7 @@ void gfc_scanner_init_1 (void); void gfc_add_include_path (const char *); void gfc_release_include_path (void); -FILE *gfc_open_included_file (const char *); +FILE *gfc_open_included_file (const char *, bool); int gfc_at_end (void); int gfc_at_eof (void); @@ -1786,6 +1798,7 @@ void gfc_free_ref_list (gfc_ref *); void gfc_type_convert_binary (gfc_expr *); int gfc_is_constant_expr (gfc_expr *); try gfc_simplify_expr (gfc_expr *, int); +int gfc_has_vector_index (gfc_expr *); gfc_expr *gfc_get_expr (void); void gfc_free_expr (gfc_expr *); diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index 5b71f244911..92a6d5f4593 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -780,7 +780,7 @@ are stored as byte strings, one character per byte. @command{gfortran} supports Hollerith constants. They can be used as the right hands in the @code{DATA} statement and @code{ASSIGN} statement, also as the arguments. The left hands can be of Integer, Real, Complex and Logical type. -The constant will be padded or trancated to fit the size of left hand. +The constant will be padded or truncated to fit the size of left hand. Valid Hollerith constants examples: @smallexample diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index e96ccbb406f..5081e902c0e 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -872,7 +872,7 @@ add_functions (void) *x = "x", *sh = "shift", *stg = "string", *ssg = "substring", *y = "y", *sz = "size", *sta = "string_a", *stb = "string_b", *z = "z", *ln = "len", *ut = "unit", *han = "handler", - *num = "number"; + *num = "number", *tm = "time"; int di, dr, dd, dl, dc, dz, ii; @@ -1152,6 +1152,12 @@ add_functions (void) make_generic ("cmplx", GFC_ISYM_CMPLX, GFC_STD_F77); + add_sym_2 ("complex", 1, 1, BT_COMPLEX, dz, GFC_STD_GNU, + gfc_check_complex, gfc_simplify_complex, gfc_resolve_complex, + x, BT_UNKNOWN, dr, REQUIRED, y, BT_UNKNOWN, dr, REQUIRED); + + make_generic ("complex", GFC_ISYM_COMPLEX, GFC_STD_GNU); + /* Making dcmplx a specific of cmplx causes cmplx to return a double complex instead of the default complex. */ @@ -1214,6 +1220,12 @@ add_functions (void) make_generic ("cshift", GFC_ISYM_CSHIFT, GFC_STD_F95); + add_sym_1 ("ctime", 0, 1, BT_CHARACTER, 0, GFC_STD_GNU, + gfc_check_ctime, NULL, gfc_resolve_ctime, + tm, BT_INTEGER, di, REQUIRED); + + make_generic ("ctime", GFC_ISYM_CTIME, GFC_STD_GNU); + add_sym_1 ("dble", 1, 1, BT_REAL, dd, GFC_STD_F77, gfc_check_dble, gfc_simplify_dble, gfc_resolve_dble, a, BT_REAL, dr, REQUIRED); @@ -1329,6 +1341,11 @@ add_functions (void) make_generic ("exponent", GFC_ISYM_EXPONENT, GFC_STD_F95); + add_sym_0 ("fdate", 1, 0, BT_CHARACTER, dc, GFC_STD_GNU, + NULL, NULL, gfc_resolve_fdate); + + make_generic ("fdate", GFC_ISYM_FDATE, GFC_STD_GNU); + add_sym_2 ("floor", 1, 1, BT_INTEGER, di, GFC_STD_F95, gfc_check_a_ikind, gfc_simplify_floor, gfc_resolve_floor, a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); @@ -1354,6 +1371,36 @@ add_functions (void) make_generic ("fstat", GFC_ISYM_FSTAT, GFC_STD_GNU); + add_sym_1 ("ftell", 0, 1, BT_INTEGER, ii, GFC_STD_GNU, + gfc_check_ftell, NULL, gfc_resolve_ftell, + ut, BT_INTEGER, di, REQUIRED); + + make_generic ("ftell", GFC_ISYM_FTELL, GFC_STD_GNU); + + add_sym_2 ("fgetc", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetputc, NULL, gfc_resolve_fgetc, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fgetc", GFC_ISYM_FGETC, GFC_STD_GNU); + + add_sym_1 ("fget", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetput, NULL, gfc_resolve_fget, + c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fget", GFC_ISYM_FGET, GFC_STD_GNU); + + add_sym_2 ("fputc", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetputc, NULL, gfc_resolve_fputc, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fputc", GFC_ISYM_FPUTC, GFC_STD_GNU); + + add_sym_1 ("fput", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetput, NULL, gfc_resolve_fput, + c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fput", GFC_ISYM_FPUT, GFC_STD_GNU); + /* Unix IDs (g77 compatibility) */ add_sym_1 ("getcwd", 0, 1, BT_INTEGER, di, GFC_STD_GNU, NULL, NULL, gfc_resolve_getcwd, @@ -1400,6 +1447,12 @@ add_functions (void) make_generic ("iand", GFC_ISYM_IAND, GFC_STD_F95); + add_sym_2 ("and", 1, 0, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_and, gfc_simplify_and, gfc_resolve_and, + i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("and", GFC_ISYM_AND, GFC_STD_GNU); + add_sym_0 ("iargc", 1, 1, BT_INTEGER, di, GFC_STD_GNU, NULL, NULL, NULL); @@ -1442,6 +1495,12 @@ add_functions (void) make_generic ("ieor", GFC_ISYM_IEOR, GFC_STD_F95); + add_sym_2 ("xor", 1, 0, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_and, gfc_simplify_xor, gfc_resolve_xor, + i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("xor", GFC_ISYM_XOR, GFC_STD_GNU); + add_sym_0 ("ierrno", 1, 0, BT_INTEGER, di, GFC_STD_GNU, NULL, NULL, gfc_resolve_ierrno); @@ -1474,6 +1533,12 @@ add_functions (void) make_generic ("ior", GFC_ISYM_IOR, GFC_STD_F95); + add_sym_2 ("or", 1, 0, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_and, gfc_simplify_or, gfc_resolve_or, + i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("or", GFC_ISYM_OR, GFC_STD_GNU); + /* The following function is for G77 compatibility. */ add_sym_1 ("irand", 0, 1, BT_INTEGER, 4, GFC_STD_GNU, gfc_check_irand, NULL, NULL, @@ -2077,6 +2142,12 @@ add_functions (void) make_generic ("trim", GFC_ISYM_TRIM, GFC_STD_F95); + add_sym_1 ("ttynam", 0, 1, BT_CHARACTER, 0, GFC_STD_GNU, + gfc_check_ttynam, NULL, gfc_resolve_ttynam, + ut, BT_INTEGER, di, REQUIRED); + + make_generic ("ttynam", GFC_ISYM_TTYNAM, GFC_STD_GNU); + add_sym_2 ("ubound", 0, 1, BT_INTEGER, di, GFC_STD_F95, gfc_check_ubound, gfc_simplify_ubound, gfc_resolve_ubound, ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL); @@ -2134,7 +2205,7 @@ add_subroutines (void) *com = "command", *length = "length", *st = "status", *val = "value", *num = "number", *name = "name", *trim_name = "trim_name", *ut = "unit", *han = "handler", - *sec = "seconds"; + *sec = "seconds", *res = "result", *of = "offset"; int di, dr, dc, dl, ii; @@ -2153,6 +2224,10 @@ add_subroutines (void) tm, BT_REAL, dr, REQUIRED); /* More G77 compatibility garbage. */ + add_sym_2s ("ctime", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ctime_sub, NULL, gfc_resolve_ctime_sub, + tm, BT_INTEGER, di, REQUIRED, res, BT_CHARACTER, dc, REQUIRED); + add_sym_1s ("second", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_second_sub, NULL, gfc_resolve_second_sub, tm, BT_REAL, dr, REQUIRED); @@ -2175,6 +2250,10 @@ add_subroutines (void) gfc_check_etime_sub, NULL, gfc_resolve_etime_sub, vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED); + add_sym_1s ("fdate", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fdate_sub, NULL, gfc_resolve_fdate_sub, + dt, BT_CHARACTER, dc, REQUIRED); + add_sym_1s ("gerror", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_gerror, NULL, gfc_resolve_gerror, c, BT_CHARACTER, dc, REQUIRED); @@ -2246,13 +2325,35 @@ add_subroutines (void) make_noreturn(); + add_sym_3s ("fgetc", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetputc_sub, NULL, gfc_resolve_fgetc_sub, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("fget", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetput_sub, NULL, gfc_resolve_fget_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + add_sym_1s ("flush", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_flush, NULL, gfc_resolve_flush, c, BT_INTEGER, di, OPTIONAL); + add_sym_3s ("fputc", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetputc_sub, NULL, gfc_resolve_fputc_sub, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("fput", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetput_sub, NULL, gfc_resolve_fput_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + add_sym_1s ("free", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_free, NULL, gfc_resolve_free, c, BT_INTEGER, ii, REQUIRED); + add_sym_2s ("ftell", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ftell_sub, NULL, gfc_resolve_ftell_sub, + ut, BT_INTEGER, di, REQUIRED, of, BT_INTEGER, ii, REQUIRED); + add_sym_2s ("hostnm", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_hostnm_sub, NULL, gfc_resolve_hostnm_sub, c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h index eb2517136cc..ca6562efcb5 100644 --- a/gcc/fortran/intrinsic.h +++ b/gcc/fortran/intrinsic.h @@ -42,15 +42,20 @@ try gfc_check_btest (gfc_expr *, gfc_expr *); try gfc_check_char (gfc_expr *, gfc_expr *); try gfc_check_chdir (gfc_expr *); try gfc_check_cmplx (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_complex (gfc_expr *, gfc_expr *); try gfc_check_count (gfc_expr *, gfc_expr *); try gfc_check_cshift (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_ctime (gfc_expr *); try gfc_check_dcmplx (gfc_expr *, gfc_expr *); try gfc_check_dble (gfc_expr *); try gfc_check_digits (gfc_expr *); try gfc_check_dot_product (gfc_expr *, gfc_expr *); try gfc_check_eoshift (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_etime (gfc_expr *); +try gfc_check_fgetputc (gfc_expr *, gfc_expr *); +try gfc_check_fgetput (gfc_expr *); try gfc_check_fstat (gfc_expr *, gfc_expr *); +try gfc_check_ftell (gfc_expr *); try gfc_check_fn_c (gfc_expr *); try gfc_check_fn_r (gfc_expr *); try gfc_check_fn_rc (gfc_expr *); @@ -60,6 +65,7 @@ try gfc_check_hostnm (gfc_expr *); try gfc_check_huge (gfc_expr *); try gfc_check_i (gfc_expr *); try gfc_check_iand (gfc_expr *, gfc_expr *); +try gfc_check_and (gfc_expr *, gfc_expr *); try gfc_check_ibclr (gfc_expr *, gfc_expr *); try gfc_check_ibits (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_ibset (gfc_expr *, gfc_expr *); @@ -119,6 +125,7 @@ try gfc_check_symlnk (gfc_expr *, gfc_expr *); try gfc_check_transfer (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_transpose (gfc_expr *); try gfc_check_trim (gfc_expr *); +try gfc_check_ttynam (gfc_expr *); try gfc_check_ubound (gfc_expr *, gfc_expr *); try gfc_check_umask (gfc_expr *); try gfc_check_unlink (gfc_expr *); @@ -131,9 +138,11 @@ try gfc_check_x (gfc_expr *); try gfc_check_alarm_sub (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_chdir_sub (gfc_expr *, gfc_expr *); try gfc_check_cpu_time (gfc_expr *); +try gfc_check_ctime_sub (gfc_expr *, gfc_expr *); try gfc_check_system_clock (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_date_and_time (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_exit (gfc_expr *); +try gfc_check_fdate_sub (gfc_expr *); try gfc_check_flush (gfc_expr *); try gfc_check_free (gfc_expr *); try gfc_check_fstat_sub (gfc_expr *, gfc_expr *, gfc_expr *); @@ -144,6 +153,9 @@ try gfc_check_mvbits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, try gfc_check_random_number (gfc_expr *); try gfc_check_random_seed (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_etime_sub (gfc_expr *, gfc_expr *); +try gfc_check_fgetputc_sub (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_fgetput_sub (gfc_expr *, gfc_expr *); +try gfc_check_ftell_sub (gfc_expr *, gfc_expr *); try gfc_check_getcwd_sub (gfc_expr *, gfc_expr *); try gfc_check_hostnm_sub (gfc_expr *, gfc_expr *); try gfc_check_kill_sub (gfc_expr *, gfc_expr *, gfc_expr *); @@ -172,6 +184,7 @@ gfc_expr *gfc_simplify_aint (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_dint (gfc_expr *); gfc_expr *gfc_simplify_anint (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_dnint (gfc_expr *); +gfc_expr *gfc_simplify_and (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_asin (gfc_expr *); gfc_expr *gfc_simplify_asinh (gfc_expr *); gfc_expr *gfc_simplify_atan (gfc_expr *); @@ -182,6 +195,7 @@ gfc_expr *gfc_simplify_btest (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_ceiling (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_char (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_cmplx (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_complex (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_conjg (gfc_expr *); gfc_expr *gfc_simplify_cos (gfc_expr *); gfc_expr *gfc_simplify_cosh (gfc_expr *); @@ -235,6 +249,7 @@ gfc_expr *gfc_simplify_nint (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_null (gfc_expr *); gfc_expr *gfc_simplify_idnint (gfc_expr *); gfc_expr *gfc_simplify_not (gfc_expr *); +gfc_expr *gfc_simplify_or (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_precision (gfc_expr *); gfc_expr *gfc_simplify_radix (gfc_expr *); gfc_expr *gfc_simplify_range (gfc_expr *); @@ -263,6 +278,7 @@ gfc_expr *gfc_simplify_tiny (gfc_expr *); gfc_expr *gfc_simplify_trim (gfc_expr *); gfc_expr *gfc_simplify_ubound (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_verify (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_xor (gfc_expr *, gfc_expr *); /* Constant conversion simplification. */ gfc_expr *gfc_convert_constant (gfc_expr *, bt, int); @@ -278,6 +294,7 @@ void gfc_resolve_dint (gfc_expr *, gfc_expr *); void gfc_resolve_all (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_anint (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_dnint (gfc_expr *, gfc_expr *); +void gfc_resolve_and (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_any (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_asin (gfc_expr *, gfc_expr *); void gfc_resolve_asinh (gfc_expr *, gfc_expr *); @@ -291,11 +308,13 @@ void gfc_resolve_char (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_chdir (gfc_expr *, gfc_expr *); void gfc_resolve_cmplx (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_dcmplx (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_complex (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_conjg (gfc_expr *, gfc_expr *); void gfc_resolve_cos (gfc_expr *, gfc_expr *); void gfc_resolve_cosh (gfc_expr *, gfc_expr *); void gfc_resolve_count (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_cshift (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ctime (gfc_expr *, gfc_expr *); void gfc_resolve_dble (gfc_expr *, gfc_expr *); void gfc_resolve_dim (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_dot_product (gfc_expr *, gfc_expr *, gfc_expr *); @@ -305,10 +324,16 @@ void gfc_resolve_eoshift (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, void gfc_resolve_etime_sub (gfc_code *); void gfc_resolve_exp (gfc_expr *, gfc_expr *); void gfc_resolve_exponent (gfc_expr *, gfc_expr *); +void gfc_resolve_fdate (gfc_expr *); void gfc_resolve_floor (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_fnum (gfc_expr *, gfc_expr *); void gfc_resolve_fraction (gfc_expr *, gfc_expr *); void gfc_resolve_fstat (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ftell (gfc_expr *, gfc_expr *); +void gfc_resolve_fgetc (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_fget (gfc_expr *, gfc_expr *); +void gfc_resolve_fputc (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_fput (gfc_expr *, gfc_expr *); void gfc_resolve_g77_math1 (gfc_expr *, gfc_expr *); void gfc_resolve_getcwd (gfc_expr *, gfc_expr *); void gfc_resolve_getgid (gfc_expr *); @@ -351,6 +376,7 @@ void gfc_resolve_modulo (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_nearest (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_nint (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_not (gfc_expr *, gfc_expr *); +void gfc_resolve_or (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_pack (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_product (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_real (gfc_expr *, gfc_expr *, gfc_expr *); @@ -384,21 +410,30 @@ void gfc_resolve_time8 (gfc_expr *); void gfc_resolve_transfer (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_transpose (gfc_expr *, gfc_expr *); void gfc_resolve_trim (gfc_expr *, gfc_expr *); +void gfc_resolve_ttynam (gfc_expr *, gfc_expr *); void gfc_resolve_ubound (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_umask (gfc_expr *, gfc_expr *); void gfc_resolve_unlink (gfc_expr *, gfc_expr *); void gfc_resolve_unpack (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_verify (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_xor (gfc_expr *, gfc_expr *, gfc_expr *); /* Intrinsic subroutine resolution. */ void gfc_resolve_alarm_sub (gfc_code *); void gfc_resolve_chdir_sub (gfc_code *); void gfc_resolve_cpu_time (gfc_code *); +void gfc_resolve_ctime_sub (gfc_code *); void gfc_resolve_exit (gfc_code *); +void gfc_resolve_fdate_sub (gfc_code *); void gfc_resolve_flush (gfc_code *); void gfc_resolve_free (gfc_code *); void gfc_resolve_fstat_sub (gfc_code *); +void gfc_resolve_ftell_sub (gfc_code *); +void gfc_resolve_fgetc_sub (gfc_code *); +void gfc_resolve_fget_sub (gfc_code *); +void gfc_resolve_fputc_sub (gfc_code *); +void gfc_resolve_fput_sub (gfc_code *); void gfc_resolve_gerror (gfc_code *); void gfc_resolve_getarg (gfc_code *); void gfc_resolve_getcwd_sub (gfc_code *); diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 025b3f1a2b0..0f62aea4548 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -68,6 +68,7 @@ and editing. All contributions and corrections are strongly encouraged. * @code{COUNT}: COUNT, Count occurrences of .TRUE. in an array * @code{CPU_TIME}: CPU_TIME, CPU time subroutine * @code{CSHIFT}: CSHIFT, Circular array shift function +* @code{CTIME}: CTIME, Subroutine (or function) to convert a time into a string * @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine * @code{DBLE}: DBLE, Double precision conversion function * @code{DCMPLX}: DCMPLX, Double complex conversion function @@ -86,6 +87,7 @@ and editing. All contributions and corrections are strongly encouraged. * @code{EXIT}: EXIT, Exit the program with status. * @code{EXP}: EXP, Exponential function * @code{EXPONENT}: EXPONENT, Exponent function +* @code{FDATE}: FDATE, Subroutine (or function) to get the current time as a string * @code{FLOOR}: FLOOR, Integer floor function * @code{FNUM}: FNUM, File number function * @code{FREE}: FREE, Memory de-allocation subroutine @@ -1832,6 +1834,58 @@ end program test_cshift @end table +@node CTIME +@section @code{CTIME} --- Convert a time into a string +@findex @code{CTIME} intrinsic +@cindex ctime subroutine + +@table @asis +@item @emph{Description}: +@code{CTIME(T,S)} converts @var{T}, a system time value, such as returned +by @code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 +1995}, and returns that string into @var{S}. + +If @code{CTIME} is invoked as a function, it can not be invoked as a +subroutine, and vice versa. + +@var{T} is an @code{INTENT(IN)} @code{INTEGER(KIND=8)} variable. +@var{S} is an @code{INTENT(OUT)} @code{CHARACTER} variable. + +@item @emph{Option}: +gnu + +@item @emph{Class}: +subroutine + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL CTIME(T,S)}. +@item @code{S = CTIME(T)}, (not recommended). +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{S}@tab The type shall be of type @code{CHARACTER}. +@item @var{T}@tab The type shall be of type @code{INTEGER(KIND=8)}. +@end multitable + +@item @emph{Return value}: +The converted date and time as a string. + +@item @emph{Example}: +@smallexample +program test_ctime + integer(8) :: i + character(len=30) :: date + i = time8() + + ! Do something, main part of the program + + call ctime(i,date) + print *, 'Program was started on ', date +end program test_ctime +@end smallexample +@end table @node DATE_AND_TIME @section @code{DATE_AND_TIME} --- Date and time subroutine @@ -2735,6 +2789,59 @@ See @code{MALLOC} for an example. @end table +@node FDATE +@section @code{FDATE} --- Get the current time as a string +@findex @code{FDATE} intrinsic +@cindex fdate subroutine + +@table @asis +@item @emph{Description}: +@code{FDATE(DATE)} returns the current date (using the same format as +@code{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE, +TIME8())}. + +If @code{FDATE} is invoked as a function, it can not be invoked as a +subroutine, and vice versa. + +@var{DATE} is an @code{INTENT(OUT)} @code{CHARACTER} variable. + +@item @emph{Option}: +gnu + +@item @emph{Class}: +subroutine + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL FDATE(DATE)}. +@item @code{DATE = FDATE()}, (not recommended). +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{DATE}@tab The type shall be of type @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +The current date and time as a string. + +@item @emph{Example}: +@smallexample +program test_fdate + integer(8) :: i, j + character(len=30) :: date + call fdate(date) + print *, 'Program started on ', date + do i = 1, 100000000 ! Just a delay + j = i * i - i + end do + call fdate(date) + print *, 'Program ended on ', date +end program test_fdate +@end smallexample +@end table + + @node FLOOR @section @code{FLOOR} --- Integer floor function @findex @code{FLOOR} intrinsic diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 3a5fe8736d3..d482b32a54e 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -128,8 +128,7 @@ by type. Explanations are in the following sections. -fsyntax-only -pedantic -pedantic-errors @gol -w -Wall -Waliasing -Wconversion @gol -Wimplicit-interface -Wnonstd-intrinsics -Wsurprising -Wunderflow @gol --Wunused-labels -Wline-truncation @gol --Werror -W} +-Wunused-labels -Wline-truncation -W} @item Debugging Options @xref{Debugging Options,,Options for Debugging Your Program or GCC}. @@ -226,7 +225,6 @@ Allow @samp{$} as a valid character in a symbol name. @item -fno-backslash @cindex backslash @cindex escape characters -@item Compile switch to change the interpretation of a backslash from ``C''-style escape characters to a single backslash character. diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 9f459c68363..26c335688fc 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -1787,6 +1787,13 @@ gfc_resolve_dt (gfc_dt * dt) /* Sanity checks on data transfer statements. */ if (e->ts.type == BT_CHARACTER) { + if (gfc_has_vector_index (e)) + { + gfc_error ("Internal unit with vector subscript at %L", + &e->where); + return FAILURE; + } + if (dt->rec != NULL) { gfc_error ("REC tag at %L is incompatible with internal file", @@ -2140,7 +2147,7 @@ terminate_io (gfc_code * io_code) gfc_code *c; if (io_code == NULL) - io_code = &new_st; + io_code = new_st.block; c = gfc_get_code (); c->op = EXEC_DT_END; @@ -2346,7 +2353,9 @@ get_io_list: new_st.op = (k == M_READ) ? EXEC_READ : EXEC_WRITE; new_st.ext.dt = dt; - new_st.next = io_code; + new_st.block = gfc_get_code (); + new_st.block->op = new_st.op; + new_st.block->next = io_code; terminate_io (io_code); @@ -2515,8 +2524,6 @@ gfc_match_inquire (void) if (m == MATCH_NO) goto syntax; - terminate_io (code); - new_st.op = EXEC_IOLENGTH; new_st.expr = inquire->iolength; new_st.ext.inquire = inquire; @@ -2528,7 +2535,10 @@ gfc_match_inquire (void) return MATCH_ERROR; } - new_st.next = code; + new_st.block = gfc_get_code (); + new_st.block->op = EXEC_IOLENGTH; + terminate_io (code); + new_st.block->next = code; return MATCH_YES; } diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def new file mode 100644 index 00000000000..9ca0cf659b1 --- /dev/null +++ b/gcc/fortran/ioparm.def @@ -0,0 +1,67 @@ +#ifndef IOPARM_common_libreturn_mask +#define IOPARM_common_libreturn_mask 3 +#define IOPARM_common_libreturn_ok 0 +#define IOPARM_common_libreturn_error 1 +#define IOPARM_common_libreturn_end 2 +#define IOPARM_common_libreturn_eor 3 +#define IOPARM_common_err (1 << 2) +#define IOPARM_common_end (1 << 3) +#define IOPARM_common_eor (1 << 4) +#endif +IOPARM (common, flags, 0, int4) +IOPARM (common, unit, 0, int4) +IOPARM (common, filename, 0, pchar) +IOPARM (common, line, 0, int4) +IOPARM (common, iomsg, 1 << 6, char2) +IOPARM (common, iostat, 1 << 5, pint4) +IOPARM (open, common, 0, common) +IOPARM (open, recl_in, 1 << 7, int4) +IOPARM (open, file, 1 << 8, char2) +IOPARM (open, status, 1 << 9, char1) +IOPARM (open, access, 1 << 10, char2) +IOPARM (open, form, 1 << 11, char1) +IOPARM (open, blank, 1 << 12, char2) +IOPARM (open, position, 1 << 13, char1) +IOPARM (open, action, 1 << 14, char2) +IOPARM (open, delim, 1 << 15, char1) +IOPARM (open, pad, 1 << 16, char2) +IOPARM (close, common, 0, common) +IOPARM (close, status, 1 << 7, char1) +IOPARM (filepos, common, 0, common) +IOPARM (inquire, common, 0, common) +IOPARM (inquire, exist, 1 << 7, pint4) +IOPARM (inquire, opened, 1 << 8, pint4) +IOPARM (inquire, number, 1 << 9, pint4) +IOPARM (inquire, named, 1 << 10, pint4) +IOPARM (inquire, nextrec, 1 << 11, pint4) +IOPARM (inquire, recl_out, 1 << 12, pint4) +IOPARM (inquire, file, 1 << 13, char1) +IOPARM (inquire, access, 1 << 14, char2) +IOPARM (inquire, form, 1 << 15, char1) +IOPARM (inquire, blank, 1 << 16, char2) +IOPARM (inquire, position, 1 << 17, char1) +IOPARM (inquire, action, 1 << 18, char2) +IOPARM (inquire, delim, 1 << 19, char1) +IOPARM (inquire, pad, 1 << 20, char2) +IOPARM (inquire, name, 1 << 21, char1) +IOPARM (inquire, sequential, 1 << 22, char2) +IOPARM (inquire, direct, 1 << 23, char1) +IOPARM (inquire, formatted, 1 << 24, char2) +IOPARM (inquire, unformatted, 1 << 25, char1) +IOPARM (inquire, read, 1 << 26, char2) +IOPARM (inquire, write, 1 << 27, char1) +IOPARM (inquire, readwrite, 1 << 28, char2) +#ifndef IOPARM_dt_list_format +#define IOPARM_dt_list_format (1 << 7) +#define IOPARM_dt_namelist_read_mode (1 << 8) +#endif +IOPARM (dt, common, 0, common) +IOPARM (dt, rec, 1 << 9, int4) +IOPARM (dt, size, 1 << 10, pint4) +IOPARM (dt, iolength, 1 << 11, pint4) +IOPARM (dt, internal_unit_desc, 0, parray) +IOPARM (dt, format, 1 << 12, char1) +IOPARM (dt, advance, 1 << 13, char2) +IOPARM (dt, internal_unit, 1 << 14, char1) +IOPARM (dt, namelist_name, 1 << 15, char2) +IOPARM (dt, u, 0, pad) diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 5650c0fb9b7..50f24786c27 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -118,6 +118,26 @@ gfc_resolve_aimag (gfc_expr * f, gfc_expr * x) void +gfc_resolve_and (gfc_expr * f, gfc_expr * i, gfc_expr * j) +{ + f->ts.type = i->ts.type; + f->ts.kind = gfc_kind_max (i,j); + + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i,j)) + gfc_convert_type(j, &i->ts, 2); + else + gfc_convert_type(i, &j->ts, 2); + } + + f->value.function.name = gfc_get_string ("__and_%c%d", + gfc_type_letter (i->ts.type), + f->ts.kind); +} + + +void gfc_resolve_aint (gfc_expr * f, gfc_expr * a, gfc_expr * kind) { gfc_typespec ts; @@ -357,6 +377,36 @@ gfc_resolve_dcmplx (gfc_expr * f, gfc_expr * x, gfc_expr * y) } void +gfc_resolve_complex (gfc_expr * f, gfc_expr * x, gfc_expr * y) +{ + int kind; + + if (x->ts.type == BT_INTEGER) + { + if (y->ts.type == BT_INTEGER) + kind = gfc_default_real_kind; + else + kind = y->ts.kind; + } + else + { + if (y->ts.type == BT_REAL) + kind = (x->ts.kind > y->ts.kind) ? x->ts.kind : y->ts.kind; + else + kind = x->ts.kind; + } + + f->ts.type = BT_COMPLEX; + f->ts.kind = kind; + + f->value.function.name = + gfc_get_string ("__cmplx1_%d_%c%d_%c%d", f->ts.kind, + gfc_type_letter (x->ts.type), x->ts.kind, + gfc_type_letter (y->ts.type), y->ts.kind); +} + + +void gfc_resolve_conjg (gfc_expr * f, gfc_expr * x) { f->ts = x->ts; @@ -441,6 +491,28 @@ gfc_resolve_cshift (gfc_expr * f, gfc_expr * array, void +gfc_resolve_ctime (gfc_expr * f, gfc_expr * time) +{ + gfc_typespec ts; + + f->ts.type = BT_CHARACTER; + f->ts.kind = gfc_default_character_kind; + + /* ctime TIME argument is a INTEGER(KIND=8), says the doc */ + if (time->ts.kind != 8) + { + ts.type = BT_INTEGER; + ts.kind = 8; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (time, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX("ctime")); +} + + +void gfc_resolve_dble (gfc_expr * f, gfc_expr * a) { f->ts.type = BT_REAL; @@ -561,6 +633,15 @@ gfc_resolve_exponent (gfc_expr * f, gfc_expr * x) void +gfc_resolve_fdate (gfc_expr * f) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = gfc_default_character_kind; + f->value.function.name = gfc_get_string (PREFIX("fdate")); +} + + +void gfc_resolve_floor (gfc_expr * f, gfc_expr * a, gfc_expr * kind) { f->ts.type = BT_INTEGER; @@ -1147,6 +1228,26 @@ gfc_resolve_not (gfc_expr * f, gfc_expr * i) void +gfc_resolve_or (gfc_expr * f, gfc_expr * i, gfc_expr * j) +{ + f->ts.type = i->ts.type; + f->ts.kind = gfc_kind_max (i,j); + + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i,j)) + gfc_convert_type(j, &i->ts, 2); + else + gfc_convert_type(i, &j->ts, 2); + } + + f->value.function.name = gfc_get_string ("__or_%c%d", + gfc_type_letter (i->ts.type), + f->ts.kind); +} + + +void gfc_resolve_pack (gfc_expr * f, gfc_expr * array, gfc_expr * mask, gfc_expr * vector ATTRIBUTE_UNUSED) { @@ -1514,6 +1615,84 @@ gfc_resolve_fstat (gfc_expr * f, gfc_expr * n, gfc_expr * a ATTRIBUTE_UNUSED) void +gfc_resolve_fgetc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED) +{ + gfc_typespec ts; + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX("fgetc")); +} + + +void +gfc_resolve_fget (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + f->value.function.name = gfc_get_string (PREFIX("fget")); +} + + +void +gfc_resolve_fputc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED) +{ + gfc_typespec ts; + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX("fputc")); +} + + +void +gfc_resolve_fput (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + f->value.function.name = gfc_get_string (PREFIX("fput")); +} + + +void +gfc_resolve_ftell (gfc_expr * f, gfc_expr * u) +{ + gfc_typespec ts; + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_index_integer_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX("ftell")); +} + + +void gfc_resolve_sum (gfc_expr * f, gfc_expr * array, gfc_expr * dim, gfc_expr * mask) { @@ -1713,6 +1892,28 @@ gfc_resolve_unlink (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED) f->value.function.name = gfc_get_string (PREFIX("unlink")); } + +void +gfc_resolve_ttynam (gfc_expr * f, gfc_expr * unit) +{ + gfc_typespec ts; + + f->ts.type = BT_CHARACTER; + f->ts.kind = gfc_default_character_kind; + + if (unit->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (unit, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX("ttynam")); +} + + void gfc_resolve_unpack (gfc_expr * f, gfc_expr * vector, gfc_expr * mask, gfc_expr * field ATTRIBUTE_UNUSED) @@ -1737,6 +1938,26 @@ gfc_resolve_verify (gfc_expr * f, gfc_expr * string, } +void +gfc_resolve_xor (gfc_expr * f, gfc_expr * i, gfc_expr * j) +{ + f->ts.type = i->ts.type; + f->ts.kind = gfc_kind_max (i,j); + + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i,j)) + gfc_convert_type(j, &i->ts, 2); + else + gfc_convert_type(i, &j->ts, 2); + } + + f->value.function.name = gfc_get_string ("__xor_%c%d", + gfc_type_letter (i->ts.type), + f->ts.kind); +} + + /* Intrinsic subroutine resolution. */ void @@ -2114,6 +2335,32 @@ gfc_resolve_free (gfc_code * c) void +gfc_resolve_ctime_sub (gfc_code * c) +{ + gfc_typespec ts; + + /* ctime TIME argument is a INTEGER(KIND=8), says the doc */ + if (c->ext.actual->expr->ts.kind != 8) + { + ts.type = BT_INTEGER; + ts.kind = 8; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (c->ext.actual->expr, &ts, 2); + } + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ctime_sub")); +} + + +void +gfc_resolve_fdate_sub (gfc_code * c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("fdate_sub")); +} + + +void gfc_resolve_gerror (gfc_code * c) { c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror")); @@ -2178,6 +2425,119 @@ gfc_resolve_fstat_sub (gfc_code * c) void +gfc_resolve_fgetc_sub (gfc_code * c) +{ + const char *name; + gfc_typespec ts; + gfc_expr *u, *st; + + u = c->ext.actual->expr; + st = c->ext.actual->next->next->expr; + + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + if (st != NULL) + name = gfc_get_string (PREFIX("fgetc_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX("fgetc_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fget_sub (gfc_code * c) +{ + const char *name; + gfc_expr *st; + + st = c->ext.actual->next->expr; + if (st != NULL) + name = gfc_get_string (PREFIX("fget_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX("fget_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fputc_sub (gfc_code * c) +{ + const char *name; + gfc_typespec ts; + gfc_expr *u, *st; + + u = c->ext.actual->expr; + st = c->ext.actual->next->next->expr; + + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + if (st != NULL) + name = gfc_get_string (PREFIX("fputc_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX("fputc_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fput_sub (gfc_code * c) +{ + const char *name; + gfc_expr *st; + + st = c->ext.actual->next->expr; + if (st != NULL) + name = gfc_get_string (PREFIX("fput_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX("fput_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_ftell_sub (gfc_code * c) +{ + const char *name; + gfc_expr *unit; + gfc_expr *offset; + gfc_typespec ts; + + unit = c->ext.actual->expr; + offset = c->ext.actual->next->expr; + + if (unit->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (unit, &ts, 2); + } + + name = gfc_get_string (PREFIX("ftell_i%d_sub"), offset->ts.kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void gfc_resolve_ttynam_sub (gfc_code * c) { gfc_typespec ts; diff --git a/gcc/fortran/lang-specs.h b/gcc/fortran/lang-specs.h index b18483f5c23..688fbc1f276 100644 --- a/gcc/fortran/lang-specs.h +++ b/gcc/fortran/lang-specs.h @@ -11,7 +11,7 @@ This file is licensed under the GPL. */ {".fpp", "@f77-cpp-input", 0, 0, 0}, {".FPP", "@f77-cpp-input", 0, 0, 0}, {"@f77-cpp-input", - "cc1 -E -traditional-cpp -D_LANGUAGE_FORTRAN %(cpp_options) \ + "cc1 -E -lang-fortran -traditional-cpp -D_LANGUAGE_FORTRAN %(cpp_options) \ %{E|M|MM:%(cpp_debug_options)}\ %{!M:%{!MM:%{!E: -o %|.f |\n\ f951 %|.f %{!ffree-form:-ffixed-form} %(cc1_options) %{J*} %{I*}\ @@ -19,7 +19,7 @@ This file is licensed under the GPL. */ {".F90", "@f95-cpp-input", 0, 0, 0}, {".F95", "@f95-cpp-input", 0, 0, 0}, {"@f95-cpp-input", - "cc1 -E -traditional-cpp -D_LANGUAGE_FORTRAN %(cpp_options) \ + "cc1 -E -lang-fortran -traditional-cpp -D_LANGUAGE_FORTRAN %(cpp_options) \ %{E|M|MM:%(cpp_debug_options)}\ %{!M:%{!MM:%{!E: -o %|.f95 |\n\ f951 %|.f95 %(cc1_options) %{J*} %{I*}\ diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index eac5697c5e4..97e8f5a434f 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -1405,7 +1405,7 @@ gfc_match_stopcode (gfc_statement st) gfc_expr *e; match m; - stop_code = 0; + stop_code = -1; e = NULL; if (gfc_match_eos () != MATCH_YES) @@ -2723,6 +2723,9 @@ recursive_stmt_fcn (gfc_expr *e, gfc_symbol *sym) return true; } + if (e->symtree == NULL) + return false; + /* Check the name before testing for nested recursion! */ if (sym->name == e->symtree->n.sym->name) return true; @@ -2736,7 +2739,7 @@ recursive_stmt_fcn (gfc_expr *e, gfc_symbol *sym) break; case EXPR_VARIABLE: - if (sym->name == e->symtree->n.sym->name) + if (e->symtree && sym->name == e->symtree->n.sym->name) return true; break; diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 763905b9f29..8f1ab7301f4 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -2113,9 +2113,17 @@ mio_symtree_ref (gfc_symtree ** stp) namespace to see if the required, non-contained symbol is available yet. If so, the latter should be written. */ if ((*stp)->n.sym && check_unique_name((*stp)->name)) - ns_st = gfc_find_symtree (gfc_current_ns->sym_root, (*stp)->n.sym->name); - - mio_symbol_ref (ns_st ? &ns_st->n.sym : &(*stp)->n.sym); + ns_st = gfc_find_symtree (gfc_current_ns->sym_root, + (*stp)->n.sym->name); + + /* On the other hand, if the existing symbol is the module name or the + new symbol is a dummy argument, do not do the promotion. */ + if (ns_st && ns_st->n.sym + && ns_st->n.sym->attr.flavor != FL_MODULE + && !(*stp)->n.sym->attr.dummy) + mio_symbol_ref (&ns_st->n.sym); + else + mio_symbol_ref (&(*stp)->n.sym); } else { @@ -3733,7 +3741,7 @@ gfc_use_module (void) strcpy (filename, module_name); strcat (filename, MODULE_EXTENSION); - module_fp = gfc_open_included_file (filename); + module_fp = gfc_open_included_file (filename, true); if (module_fp == NULL) gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s", filename, strerror (errno)); diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index ebce409ba94..a39876b80b5 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -172,6 +172,8 @@ bool gfc_post_options (const char **pfilename) { const char *filename = *pfilename; + char *source_path; + int i; /* Verify the input file name. */ if (!filename || strcmp (filename, "-") == 0) @@ -181,6 +183,21 @@ gfc_post_options (const char **pfilename) gfc_source_file = filename; + /* Adds the path where the source file is to the list of include files. */ + + i = strlen(gfc_source_file); + while (i > 0 && !IS_DIR_SEPARATOR(gfc_source_file[i])) + i--; + if (i != 0) + { + source_path = alloca (i + 1); + memcpy (source_path, gfc_source_file, i); + source_path[i] = 0; + gfc_add_include_path (source_path); + } + else + gfc_add_include_path ("."); + /* Decide which form the file will be read in as. */ if (gfc_option.source_form != FORM_UNKNOWN) diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index e3e81279593..1cb5d231e4f 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1634,6 +1634,15 @@ match_varspec (gfc_expr * primary, int equiv_flag) } check_substring: + if (primary->ts.type == BT_UNKNOWN) + { + if (gfc_get_default_type (sym, sym->ns)->type == BT_CHARACTER) + { + gfc_set_default_type (sym, 0, sym->ns); + primary->ts = sym->ts; + } + } + if (primary->ts.type == BT_CHARACTER) { switch (match_substring (primary->ts.cl, equiv_flag, &substring)) diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index f6fb2b0f838..26e01cb9a3c 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -294,6 +294,19 @@ resolve_contained_fntype (gfc_symbol * sym, gfc_namespace * ns) sym->attr.untyped = 1; } } + + /*Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character type, + lists the only ways a character length value of * can be used: dummy arguments + of proceedures, named constants, and function results in external functions. + Internal function results are not on that list; ergo, not permitted. */ + + if (sym->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->ts.cl; + if (!cl || !cl->length) + gfc_error ("Character-valued internal function '%s' at %L must " + "not be assumed length", sym->name, &sym->declared_at); + } } @@ -3879,6 +3892,9 @@ resolve_blocks (gfc_code * b, gfc_namespace * ns) case EXEC_FORALL: case EXEC_DO: case EXEC_DO_WHILE: + case EXEC_READ: + case EXEC_WRITE: + case EXEC_IOLENGTH: break; default: @@ -4280,6 +4296,22 @@ resolve_symbol (gfc_symbol * sym) return; } + /* A module array's shape needs to be constant. */ + + if (sym->ns->proc_name + && sym->attr.flavor == FL_VARIABLE + && sym->ns->proc_name->attr.flavor == FL_MODULE + && !sym->attr.use_assoc + && !sym->attr.allocatable + && !sym->attr.pointer + && sym->as != NULL + && !gfc_is_compile_time_shape (sym->as)) + { + gfc_error ("Module array '%s' at %L cannot be automatic " + "or assumed shape", sym->name, &sym->declared_at); + return; + } + /* Make sure that character string variables with assumed length are dummy arguments. */ @@ -4356,9 +4388,11 @@ resolve_symbol (gfc_symbol * sym) return; } - /* Ensure that derived type components of a public derived type - are not of a private type. */ + /* If a component of a derived type is of a type declared to be private, + either the derived type definition must contain the PRIVATE statement, + or the derived type must be private. (4.4.1 just after R427) */ if (sym->attr.flavor == FL_DERIVED + && sym->component_access != ACCESS_PRIVATE && gfc_check_access(sym->attr.access, sym->ns->default_access)) { for (c = sym->components; c; c = c->next) @@ -4461,7 +4495,7 @@ resolve_symbol (gfc_symbol * sym) switch (sym->attr.flavor) { case FL_VARIABLE: - /* Can the sybol have an initializer? */ + /* Can the symbol have an initializer? */ flag = 0; if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy || sym->attr.intrinsic || sym->attr.result) diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index 738e17280a0..883576166ff 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -159,18 +159,22 @@ gfc_release_include_path (void) } /* Opens file for reading, searching through the include directories - given if necessary. */ + given if necessary. If the include_cwd argument is true, we try + to open the file in the current directory first. */ FILE * -gfc_open_included_file (const char *name) +gfc_open_included_file (const char *name, const bool include_cwd) { char *fullname; gfc_directorylist *p; FILE *f; - f = gfc_open_file (name); - if (f != NULL) - return f; + if (include_cwd) + { + f = gfc_open_file (name); + if (f != NULL) + return f; + } for (p = include_dirs; p; p = p->next) { @@ -1034,7 +1038,7 @@ load_file (const char *filename, bool initial) } else { - input = gfc_open_included_file (filename); + input = gfc_open_included_file (filename, false); if (input == NULL) { gfc_error_now ("Can't open included file '%s'", filename); diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 7c9a6dcf205..b6931f112e1 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -450,6 +450,31 @@ gfc_simplify_anint (gfc_expr * e, gfc_expr * k) gfc_expr * +gfc_simplify_and (gfc_expr * x, gfc_expr * y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + if (x->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, kind, &x->where); + mpz_and (result->value.integer, x->value.integer, y->value.integer); + } + else /* BT_LOGICAL */ + { + result = gfc_constant_result (BT_LOGICAL, kind, &x->where); + result->value.logical = x->value.logical && y->value.logical; + } + + return range_check (result, "AND"); +} + + +gfc_expr * gfc_simplify_dnint (gfc_expr * e) { gfc_expr *result; @@ -724,6 +749,34 @@ gfc_simplify_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * k) gfc_expr * +gfc_simplify_complex (gfc_expr * x, gfc_expr * y) +{ + int kind; + + if (x->expr_type != EXPR_CONSTANT + || (y != NULL && y->expr_type != EXPR_CONSTANT)) + return NULL; + + if (x->ts.type == BT_INTEGER) + { + if (y->ts.type == BT_INTEGER) + kind = gfc_default_real_kind; + else + kind = y->ts.kind; + } + else + { + if (y->ts.type == BT_REAL) + kind = (x->ts.kind > y->ts.kind) ? x->ts.kind : y->ts.kind; + else + kind = x->ts.kind; + } + + return simplify_cmplx ("COMPLEX", x, y, kind); +} + + +gfc_expr * gfc_simplify_conjg (gfc_expr * e) { gfc_expr *result; @@ -2480,6 +2533,31 @@ gfc_simplify_null (gfc_expr * mold) gfc_expr * +gfc_simplify_or (gfc_expr * x, gfc_expr * y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + if (x->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, kind, &x->where); + mpz_ior (result->value.integer, x->value.integer, y->value.integer); + } + else /* BT_LOGICAL */ + { + result = gfc_constant_result (BT_LOGICAL, kind, &x->where); + result->value.logical = x->value.logical || y->value.logical; + } + + return range_check (result, "OR"); +} + + +gfc_expr * gfc_simplify_precision (gfc_expr * e) { gfc_expr *result; @@ -3706,6 +3784,34 @@ gfc_simplify_verify (gfc_expr * s, gfc_expr * set, gfc_expr * b) return result; } + +gfc_expr * +gfc_simplify_xor (gfc_expr * x, gfc_expr * y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + if (x->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, kind, &x->where); + mpz_xor (result->value.integer, x->value.integer, y->value.integer); + } + else /* BT_LOGICAL */ + { + result = gfc_constant_result (BT_LOGICAL, kind, &x->where); + result->value.logical = (x->value.logical && ! y->value.logical) + || (! x->value.logical && y->value.logical); + } + + return range_check (result, "XOR"); +} + + + /****************** Constant simplification *****************/ /* Master function to convert one constant to another. While this is diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 85ed70eb352..6274ea919a1 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -264,7 +264,7 @@ check_conflict (symbol_attribute * attr, const char * name, locus * where) *function = "FUNCTION", *subroutine = "SUBROUTINE", *dimension = "DIMENSION", *in_equivalence = "EQUIVALENCE", *use_assoc = "USE ASSOCIATED", *cray_pointer = "CRAY POINTER", - *cray_pointee = "CRAY POINTEE"; + *cray_pointee = "CRAY POINTEE", *data = "DATA"; const char *a1, *a2; @@ -371,6 +371,12 @@ check_conflict (symbol_attribute * attr, const char * name, locus * where) conf (cray_pointee, in_common); conf (cray_pointee, in_equivalence); + conf (data, dummy); + conf (data, function); + conf (data, result); + conf (data, allocatable); + conf (data, use_assoc); + a1 = gfc_code2string (flavors, attr->flavor); if (attr->in_namelist diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index dce409557ef..37e9db8d0b6 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -87,6 +87,9 @@ tree gfor_fndecl_select_string; tree gfor_fndecl_runtime_error; tree gfor_fndecl_set_fpe; tree gfor_fndecl_set_std; +tree gfor_fndecl_ctime; +tree gfor_fndecl_fdate; +tree gfor_fndecl_ttynam; tree gfor_fndecl_in_pack; tree gfor_fndecl_in_unpack; tree gfor_fndecl_associated; @@ -371,7 +374,7 @@ gfc_finish_cray_pointee (tree decl, gfc_symbol *sym) if (sym->attr.dimension && TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE) { - /* These decls will be derefenced later, so we don't dereference + /* These decls will be dereferenced later, so we don't dereference them here. */ value = convert (TREE_TYPE (decl), ptr_decl); } @@ -1200,7 +1203,7 @@ build_function_decl (gfc_symbol * sym) /* TODO: check if a pure SUBROUTINE has no INTENT(OUT) arguments including a alternate return. In that case it can also be marked as PURE. See also in gfc_get_extern_function_decl(). */ - if (attr.function) + if (attr.function && !gfc_return_by_reference (sym)) DECL_IS_PURE (fndecl) = 1; TREE_SIDE_EFFECTS (fndecl) = 0; } @@ -1780,6 +1783,7 @@ gfc_build_intrinsic_function_decls (void) tree gfc_complex8_type_node = gfc_get_complex_type (8); tree gfc_complex10_type_node = gfc_get_complex_type (10); tree gfc_complex16_type_node = gfc_get_complex_type (16); + tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind); /* String functions. */ gfor_fndecl_copy_string = @@ -1849,6 +1853,29 @@ gfc_build_intrinsic_function_decls (void) pchar_type_node, gfc_int4_type_node); + gfor_fndecl_ttynam = + gfc_build_library_function_decl (get_identifier (PREFIX("ttynam")), + void_type_node, + 3, + pchar_type_node, + gfc_charlen_type_node, + gfc_c_int_type_node); + + gfor_fndecl_fdate = + gfc_build_library_function_decl (get_identifier (PREFIX("fdate")), + void_type_node, + 2, + pchar_type_node, + gfc_charlen_type_node); + + gfor_fndecl_ctime = + gfc_build_library_function_decl (get_identifier (PREFIX("ctime")), + void_type_node, + 3, + pchar_type_node, + gfc_charlen_type_node, + gfc_int8_type_node); + gfor_fndecl_adjustl = gfc_build_library_function_decl (get_identifier (PREFIX("adjustl")), void_type_node, @@ -2339,7 +2366,8 @@ gfc_create_module_variable (gfc_symbol * sym) return; /* Equivalenced variables arrive here after creation. */ - if (sym->backend_decl && sym->equiv_built) + if (sym->backend_decl + && (sym->equiv_built || sym->attr.in_equivalence)) return; if (sym->backend_decl) diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 93e8043360a..8dd54d9e8ac 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -1037,6 +1037,116 @@ gfc_conv_intrinsic_char (gfc_se * se, gfc_expr * expr) } +static void +gfc_conv_intrinsic_ctime (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree tmp; + tree arglist; + tree type; + tree cond; + tree gfc_int8_type_node = gfc_get_int_type (8); + + type = build_pointer_type (gfc_character1_type_node); + var = gfc_create_var (type, "pstr"); + len = gfc_create_var (gfc_int8_type_node, "len"); + + tmp = gfc_conv_intrinsic_function_args (se, expr); + arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var)); + arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len)); + arglist = chainon (arglist, tmp); + + tmp = gfc_build_function_call (gfor_fndecl_ctime, arglist); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = build2 (GT_EXPR, boolean_type_node, len, + build_int_cst (TREE_TYPE (len), 0)); + arglist = gfc_chainon_list (NULL_TREE, var); + tmp = gfc_build_function_call (gfor_fndecl_internal_free, arglist); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +static void +gfc_conv_intrinsic_fdate (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree tmp; + tree arglist; + tree type; + tree cond; + tree gfc_int4_type_node = gfc_get_int_type (4); + + type = build_pointer_type (gfc_character1_type_node); + var = gfc_create_var (type, "pstr"); + len = gfc_create_var (gfc_int4_type_node, "len"); + + tmp = gfc_conv_intrinsic_function_args (se, expr); + arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var)); + arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len)); + arglist = chainon (arglist, tmp); + + tmp = gfc_build_function_call (gfor_fndecl_fdate, arglist); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = build2 (GT_EXPR, boolean_type_node, len, + build_int_cst (TREE_TYPE (len), 0)); + arglist = gfc_chainon_list (NULL_TREE, var); + tmp = gfc_build_function_call (gfor_fndecl_internal_free, arglist); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +/* Return a character string containing the tty name. */ + +static void +gfc_conv_intrinsic_ttynam (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree tmp; + tree arglist; + tree type; + tree cond; + tree gfc_int4_type_node = gfc_get_int_type (4); + + type = build_pointer_type (gfc_character1_type_node); + var = gfc_create_var (type, "pstr"); + len = gfc_create_var (gfc_int4_type_node, "len"); + + tmp = gfc_conv_intrinsic_function_args (se, expr); + arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var)); + arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len)); + arglist = chainon (arglist, tmp); + + tmp = gfc_build_function_call (gfor_fndecl_ttynam, arglist); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = build2 (GT_EXPR, boolean_type_node, len, + build_int_cst (TREE_TYPE (len), 0)); + arglist = gfc_chainon_list (NULL_TREE, var); + tmp = gfc_build_function_call (gfor_fndecl_internal_free, arglist); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + /* Get the minimum/maximum value of all the parameters. minmax (a1, a2, a3, ...) { @@ -2192,7 +2302,7 @@ gfc_conv_intrinsic_adjust (gfc_se * se, gfc_expr * expr, tree fndecl) /* Scalar transfer statement. - TRANSFER (source, mold) = *(typeof *)&source */ + TRANSFER (source, mold) = *(typeof *)&source. */ static void gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr) @@ -2873,6 +2983,10 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_aint (se, expr, FIX_ROUND_EXPR); break; + case GFC_ISYM_AND: + gfc_conv_intrinsic_bitop (se, expr, BIT_AND_EXPR); + break; + case GFC_ISYM_ANY: gfc_conv_intrinsic_anyall (se, expr, NE_EXPR); break; @@ -2927,6 +3041,10 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_iargc (se, expr); break; + case GFC_ISYM_COMPLEX: + gfc_conv_intrinsic_cmplx (se, expr, 1); + break; + case GFC_ISYM_CONJG: gfc_conv_intrinsic_conjg (se, expr); break; @@ -2935,6 +3053,10 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_count (se, expr); break; + case GFC_ISYM_CTIME: + gfc_conv_intrinsic_ctime (se, expr); + break; + case GFC_ISYM_DIM: gfc_conv_intrinsic_dim (se, expr); break; @@ -2943,6 +3065,10 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_dprod (se, expr); break; + case GFC_ISYM_FDATE: + gfc_conv_intrinsic_fdate (se, expr); + break; + case GFC_ISYM_IAND: gfc_conv_intrinsic_bitop (se, expr, BIT_AND_EXPR); break; @@ -3049,6 +3175,10 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_not (se, expr); break; + case GFC_ISYM_OR: + gfc_conv_intrinsic_bitop (se, expr, BIT_IOR_EXPR); + break; + case GFC_ISYM_PRESENT: gfc_conv_intrinsic_present (se, expr); break; @@ -3073,10 +3203,18 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_transfer (se, expr); break; + case GFC_ISYM_TTYNAM: + gfc_conv_intrinsic_ttynam (se, expr); + break; + case GFC_ISYM_UBOUND: gfc_conv_intrinsic_bound (se, expr, 1); break; + case GFC_ISYM_XOR: + gfc_conv_intrinsic_bitop (se, expr, BIT_XOR_EXPR); + break; + case GFC_ISYM_LOC: gfc_conv_intrinsic_loc (se, expr); break; @@ -3084,8 +3222,13 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) case GFC_ISYM_CHDIR: case GFC_ISYM_DOT_PRODUCT: case GFC_ISYM_ETIME: + case GFC_ISYM_FGET: + case GFC_ISYM_FGETC: case GFC_ISYM_FNUM: + case GFC_ISYM_FPUT: + case GFC_ISYM_FPUTC: case GFC_ISYM_FSTAT: + case GFC_ISYM_FTELL: case GFC_ISYM_GETCWD: case GFC_ISYM_GETGID: case GFC_ISYM_GETPID: diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 2c8a9cdec28..720ff5858e0 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -38,348 +38,403 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA /* Members of the ioparm structure. */ -static GTY(()) tree ioparm_unit; -static GTY(()) tree ioparm_err; -static GTY(()) tree ioparm_end; -static GTY(()) tree ioparm_eor; -static GTY(()) tree ioparm_list_format; -static GTY(()) tree ioparm_library_return; -static GTY(()) tree ioparm_iostat; -static GTY(()) tree ioparm_exist; -static GTY(()) tree ioparm_opened; -static GTY(()) tree ioparm_number; -static GTY(()) tree ioparm_named; -static GTY(()) tree ioparm_rec; -static GTY(()) tree ioparm_nextrec; -static GTY(()) tree ioparm_size; -static GTY(()) tree ioparm_recl_in; -static GTY(()) tree ioparm_recl_out; -static GTY(()) tree ioparm_iolength; -static GTY(()) tree ioparm_file; -static GTY(()) tree ioparm_file_len; -static GTY(()) tree ioparm_status; -static GTY(()) tree ioparm_status_len; -static GTY(()) tree ioparm_access; -static GTY(()) tree ioparm_access_len; -static GTY(()) tree ioparm_form; -static GTY(()) tree ioparm_form_len; -static GTY(()) tree ioparm_blank; -static GTY(()) tree ioparm_blank_len; -static GTY(()) tree ioparm_position; -static GTY(()) tree ioparm_position_len; -static GTY(()) tree ioparm_action; -static GTY(()) tree ioparm_action_len; -static GTY(()) tree ioparm_delim; -static GTY(()) tree ioparm_delim_len; -static GTY(()) tree ioparm_pad; -static GTY(()) tree ioparm_pad_len; -static GTY(()) tree ioparm_format; -static GTY(()) tree ioparm_format_len; -static GTY(()) tree ioparm_advance; -static GTY(()) tree ioparm_advance_len; -static GTY(()) tree ioparm_name; -static GTY(()) tree ioparm_name_len; -static GTY(()) tree ioparm_internal_unit; -static GTY(()) tree ioparm_internal_unit_len; -static GTY(()) tree ioparm_internal_unit_desc; -static GTY(()) tree ioparm_sequential; -static GTY(()) tree ioparm_sequential_len; -static GTY(()) tree ioparm_direct; -static GTY(()) tree ioparm_direct_len; -static GTY(()) tree ioparm_formatted; -static GTY(()) tree ioparm_formatted_len; -static GTY(()) tree ioparm_unformatted; -static GTY(()) tree ioparm_unformatted_len; -static GTY(()) tree ioparm_read; -static GTY(()) tree ioparm_read_len; -static GTY(()) tree ioparm_write; -static GTY(()) tree ioparm_write_len; -static GTY(()) tree ioparm_readwrite; -static GTY(()) tree ioparm_readwrite_len; -static GTY(()) tree ioparm_namelist_name; -static GTY(()) tree ioparm_namelist_name_len; -static GTY(()) tree ioparm_namelist_read_mode; -static GTY(()) tree ioparm_iomsg; -static GTY(()) tree ioparm_iomsg_len; - -/* The global I/O variables */ - -static GTY(()) tree ioparm_var; -static GTY(()) tree locus_file; -static GTY(()) tree locus_line; +enum ioparam_type +{ + IOPARM_ptype_common, + IOPARM_ptype_open, + IOPARM_ptype_close, + IOPARM_ptype_filepos, + IOPARM_ptype_inquire, + IOPARM_ptype_dt, + IOPARM_ptype_num +}; + +enum iofield_type +{ + IOPARM_type_int4, + IOPARM_type_pint4, + IOPARM_type_pchar, + IOPARM_type_parray, + IOPARM_type_pad, + IOPARM_type_char1, + IOPARM_type_char2, + IOPARM_type_common, + IOPARM_type_num +}; + +typedef struct gfc_st_parameter_field GTY(()) +{ + const char *name; + unsigned int mask; + enum ioparam_type param_type; + enum iofield_type type; + tree field; + tree field_len; +} +gfc_st_parameter_field; + +typedef struct gfc_st_parameter GTY(()) +{ + const char *name; + tree type; +} +gfc_st_parameter; + +enum iofield +{ +#define IOPARM(param_type, name, mask, type) IOPARM_##param_type##_##name, +#include "ioparm.def" +#undef IOPARM + IOPARM_field_num +}; +static GTY(()) gfc_st_parameter st_parameter[] = +{ + { "common", NULL }, + { "open", NULL }, + { "close", NULL }, + { "filepos", NULL }, + { "inquire", NULL }, + { "dt", NULL } +}; + +static GTY(()) gfc_st_parameter_field st_parameter_field[] = +{ +#define IOPARM(param_type, name, mask, type) \ + { #name, mask, IOPARM_ptype_##param_type, IOPARM_type_##type, NULL, NULL }, +#include "ioparm.def" +#undef IOPARM + { NULL, 0, 0, 0, NULL, NULL } +}; /* Library I/O subroutines */ -static GTY(()) tree iocall_read; -static GTY(()) tree iocall_read_done; -static GTY(()) tree iocall_write; -static GTY(()) tree iocall_write_done; -static GTY(()) tree iocall_x_integer; -static GTY(()) tree iocall_x_logical; -static GTY(()) tree iocall_x_character; -static GTY(()) tree iocall_x_real; -static GTY(()) tree iocall_x_complex; -static GTY(()) tree iocall_x_array; -static GTY(()) tree iocall_open; -static GTY(()) tree iocall_close; -static GTY(()) tree iocall_inquire; -static GTY(()) tree iocall_iolength; -static GTY(()) tree iocall_iolength_done; -static GTY(()) tree iocall_rewind; -static GTY(()) tree iocall_backspace; -static GTY(()) tree iocall_endfile; -static GTY(()) tree iocall_flush; -static GTY(()) tree iocall_set_nml_val; -static GTY(()) tree iocall_set_nml_val_dim; +enum iocall +{ + IOCALL_READ, + IOCALL_READ_DONE, + IOCALL_WRITE, + IOCALL_WRITE_DONE, + IOCALL_X_INTEGER, + IOCALL_X_LOGICAL, + IOCALL_X_CHARACTER, + IOCALL_X_REAL, + IOCALL_X_COMPLEX, + IOCALL_X_ARRAY, + IOCALL_OPEN, + IOCALL_CLOSE, + IOCALL_INQUIRE, + IOCALL_IOLENGTH, + IOCALL_IOLENGTH_DONE, + IOCALL_REWIND, + IOCALL_BACKSPACE, + IOCALL_ENDFILE, + IOCALL_FLUSH, + IOCALL_SET_NML_VAL, + IOCALL_SET_NML_VAL_DIM, + IOCALL_NUM +}; + +static GTY(()) tree iocall[IOCALL_NUM]; /* Variable for keeping track of what the last data transfer statement was. Used for deciding which subroutine to call when the data transfer is complete. */ static enum { READ, WRITE, IOLENGTH } last_dt; -#define ADD_FIELD(name, type) \ - ioparm_ ## name = gfc_add_field_to_struct \ - (&(TYPE_FIELDS (ioparm_type)), ioparm_type, \ - get_identifier (stringize(name)), type) +/* The data transfer parameter block that should be shared by all + data transfer calls belonging to the same read/write/iolength. */ +static GTY(()) tree dt_parm; +static stmtblock_t *dt_post_end_block; -#define ADD_STRING(name) \ - ioparm_ ## name = gfc_add_field_to_struct \ - (&(TYPE_FIELDS (ioparm_type)), ioparm_type, \ - get_identifier (stringize(name)), pchar_type_node); \ - ioparm_ ## name ## _len = gfc_add_field_to_struct \ - (&(TYPE_FIELDS (ioparm_type)), ioparm_type, \ - get_identifier (stringize(name) "_len"), gfc_charlen_type_node) +static void +gfc_build_st_parameter (enum ioparam_type ptype, tree *types) +{ + enum iofield type; + gfc_st_parameter_field *p; + char name[64]; + size_t len; + tree t = make_node (RECORD_TYPE); + + len = strlen (st_parameter[ptype].name); + gcc_assert (len <= sizeof (name) - sizeof ("__st_parameter_")); + memcpy (name, "__st_parameter_", sizeof ("__st_parameter_")); + memcpy (name + sizeof ("__st_parameter_") - 1, st_parameter[ptype].name, + len); + TYPE_NAME (t) = get_identifier (name); + + for (type = 0, p = st_parameter_field; type < IOPARM_field_num; type++, p++) + if (p->param_type == ptype) + switch (p->type) + { + case IOPARM_type_int4: + case IOPARM_type_pint4: + case IOPARM_type_parray: + case IOPARM_type_pchar: + case IOPARM_type_pad: + p->field = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + types[p->type]); + break; + case IOPARM_type_char1: + p->field = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + pchar_type_node); + /* FALLTHROUGH */ + case IOPARM_type_char2: + len = strlen (p->name); + gcc_assert (len <= sizeof (name) - sizeof ("_len")); + memcpy (name, p->name, len); + memcpy (name + len, "_len", sizeof ("_len")); + p->field_len = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (name), + gfc_charlen_type_node); + if (p->type == IOPARM_type_char2) + p->field = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + pchar_type_node); + break; + case IOPARM_type_common: + p->field + = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + st_parameter[IOPARM_ptype_common].type); + break; + case IOPARM_type_num: + gcc_unreachable (); + } + gfc_finish_type (t); + st_parameter[ptype].type = t; +} /* Create function decls for IO library functions. */ void gfc_build_io_library_fndecls (void) { - tree gfc_int4_type_node; - tree gfc_pint4_type_node; - tree ioparm_type; - - gfc_int4_type_node = gfc_get_int_type (4); - gfc_pint4_type_node = build_pointer_type (gfc_int4_type_node); - - /* Build the st_parameter structure. Information associated with I/O - calls are transferred here. This must match the one defined in the - library exactly. */ - - ioparm_type = make_node (RECORD_TYPE); - TYPE_NAME (ioparm_type) = get_identifier ("_gfc_ioparm"); - - ADD_FIELD (unit, gfc_int4_type_node); - ADD_FIELD (err, gfc_int4_type_node); - ADD_FIELD (end, gfc_int4_type_node); - ADD_FIELD (eor, gfc_int4_type_node); - ADD_FIELD (list_format, gfc_int4_type_node); - ADD_FIELD (library_return, gfc_int4_type_node); - - ADD_FIELD (iostat, gfc_pint4_type_node); - ADD_FIELD (exist, gfc_pint4_type_node); - ADD_FIELD (opened, gfc_pint4_type_node); - ADD_FIELD (number, gfc_pint4_type_node); - ADD_FIELD (named, gfc_pint4_type_node); - ADD_FIELD (rec, gfc_int4_type_node); - ADD_FIELD (nextrec, gfc_pint4_type_node); - ADD_FIELD (size, gfc_pint4_type_node); - - ADD_FIELD (recl_in, gfc_int4_type_node); - ADD_FIELD (recl_out, gfc_pint4_type_node); - - ADD_FIELD (iolength, gfc_pint4_type_node); - - ADD_STRING (file); - ADD_STRING (status); - - ADD_STRING (access); - ADD_STRING (form); - ADD_STRING (blank); - ADD_STRING (position); - ADD_STRING (action); - ADD_STRING (delim); - ADD_STRING (pad); - ADD_STRING (format); - ADD_STRING (advance); - ADD_STRING (name); - ADD_STRING (internal_unit); - ADD_FIELD (internal_unit_desc, pchar_type_node); - ADD_STRING (sequential); - - ADD_STRING (direct); - ADD_STRING (formatted); - ADD_STRING (unformatted); - ADD_STRING (read); - ADD_STRING (write); - ADD_STRING (readwrite); - - ADD_STRING (namelist_name); - ADD_FIELD (namelist_read_mode, gfc_int4_type_node); - ADD_STRING (iomsg); - - gfc_finish_type (ioparm_type); - - ioparm_var = build_decl (VAR_DECL, get_identifier (PREFIX("ioparm")), - ioparm_type); - DECL_EXTERNAL (ioparm_var) = 1; - TREE_PUBLIC (ioparm_var) = 1; - - locus_line = build_decl (VAR_DECL, get_identifier (PREFIX("line")), - gfc_int4_type_node); - DECL_EXTERNAL (locus_line) = 1; - TREE_PUBLIC (locus_line) = 1; - - locus_file = build_decl (VAR_DECL, get_identifier (PREFIX("filename")), - pchar_type_node); - DECL_EXTERNAL (locus_file) = 1; - TREE_PUBLIC (locus_file) = 1; + tree types[IOPARM_type_num], pad_idx, gfc_int4_type_node; + tree parm_type, dt_parm_type; + tree gfc_c_int_type_node; + HOST_WIDE_INT pad_size; + enum ioparam_type ptype; + + types[IOPARM_type_int4] = gfc_int4_type_node = gfc_get_int_type (4); + types[IOPARM_type_pint4] = build_pointer_type (gfc_int4_type_node); + types[IOPARM_type_parray] = pchar_type_node; + types[IOPARM_type_pchar] = pchar_type_node; + pad_size = 16 * TREE_INT_CST_LOW (TYPE_SIZE_UNIT (pchar_type_node)); + pad_size += 32 * TREE_INT_CST_LOW (TYPE_SIZE_UNIT (integer_type_node)); + pad_idx = build_index_type (build_int_cst (NULL_TREE, pad_size)); + types[IOPARM_type_pad] = build_array_type (char_type_node, pad_idx); + gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind); + + for (ptype = IOPARM_ptype_common; ptype < IOPARM_ptype_num; ptype++) + gfc_build_st_parameter (ptype, types); /* Define the transfer functions. */ - iocall_x_integer = + dt_parm_type = build_pointer_type (st_parameter[IOPARM_ptype_dt].type); + + iocall[IOCALL_X_INTEGER] = gfc_build_library_function_decl (get_identifier (PREFIX("transfer_integer")), - void_type_node, 2, pvoid_type_node, - gfc_int4_type_node); + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); - iocall_x_logical = + iocall[IOCALL_X_LOGICAL] = gfc_build_library_function_decl (get_identifier (PREFIX("transfer_logical")), - void_type_node, 2, pvoid_type_node, - gfc_int4_type_node); + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); - iocall_x_character = + iocall[IOCALL_X_CHARACTER] = gfc_build_library_function_decl (get_identifier (PREFIX("transfer_character")), - void_type_node, 2, pvoid_type_node, - gfc_int4_type_node); + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); - iocall_x_real = + iocall[IOCALL_X_REAL] = gfc_build_library_function_decl (get_identifier (PREFIX("transfer_real")), - void_type_node, 2, + void_type_node, 3, dt_parm_type, pvoid_type_node, gfc_int4_type_node); - iocall_x_complex = + iocall[IOCALL_X_COMPLEX] = gfc_build_library_function_decl (get_identifier (PREFIX("transfer_complex")), - void_type_node, 2, pvoid_type_node, - gfc_int4_type_node); + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); - iocall_x_array = + iocall[IOCALL_X_ARRAY] = gfc_build_library_function_decl (get_identifier (PREFIX("transfer_array")), - void_type_node, 2, pvoid_type_node, + void_type_node, 4, dt_parm_type, + pvoid_type_node, gfc_c_int_type_node, gfc_charlen_type_node); /* Library entry points */ - iocall_read = + iocall[IOCALL_READ] = gfc_build_library_function_decl (get_identifier (PREFIX("st_read")), - void_type_node, 0); + void_type_node, 1, dt_parm_type); - iocall_write = + iocall[IOCALL_WRITE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_write")), - void_type_node, 0); - iocall_open = + void_type_node, 1, dt_parm_type); + + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_open].type); + iocall[IOCALL_OPEN] = gfc_build_library_function_decl (get_identifier (PREFIX("st_open")), - void_type_node, 0); + void_type_node, 1, parm_type); + - iocall_close = + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_close].type); + iocall[IOCALL_CLOSE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_close")), - void_type_node, 0); + void_type_node, 1, parm_type); - iocall_inquire = + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_inquire].type); + iocall[IOCALL_INQUIRE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_inquire")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, parm_type); - iocall_iolength = + iocall[IOCALL_IOLENGTH] = gfc_build_library_function_decl(get_identifier (PREFIX("st_iolength")), - void_type_node, 0); + void_type_node, 1, dt_parm_type); - iocall_rewind = + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_filepos].type); + iocall[IOCALL_REWIND] = gfc_build_library_function_decl (get_identifier (PREFIX("st_rewind")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, parm_type); - iocall_backspace = + iocall[IOCALL_BACKSPACE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_backspace")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, parm_type); - iocall_endfile = + iocall[IOCALL_ENDFILE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_endfile")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, parm_type); - iocall_flush = + iocall[IOCALL_FLUSH] = gfc_build_library_function_decl (get_identifier (PREFIX("st_flush")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, parm_type); /* Library helpers */ - iocall_read_done = + iocall[IOCALL_READ_DONE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_read_done")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, dt_parm_type); - iocall_write_done = + iocall[IOCALL_WRITE_DONE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_write_done")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, dt_parm_type); - iocall_iolength_done = + iocall[IOCALL_IOLENGTH_DONE] = gfc_build_library_function_decl (get_identifier (PREFIX("st_iolength_done")), - gfc_int4_type_node, 0); + gfc_int4_type_node, 1, dt_parm_type); - iocall_set_nml_val = + iocall[IOCALL_SET_NML_VAL] = gfc_build_library_function_decl (get_identifier (PREFIX("st_set_nml_var")), - void_type_node, 5, - pvoid_type_node, pvoid_type_node, - gfc_int4_type_node, gfc_charlen_type_node, + void_type_node, 6, dt_parm_type, + pvoid_type_node, pvoid_type_node, + gfc_int4_type_node, gfc_charlen_type_node, gfc_int4_type_node); - iocall_set_nml_val_dim = + iocall[IOCALL_SET_NML_VAL_DIM] = gfc_build_library_function_decl (get_identifier (PREFIX("st_set_nml_var_dim")), - void_type_node, 4, + void_type_node, 5, dt_parm_type, gfc_int4_type_node, gfc_int4_type_node, gfc_int4_type_node, gfc_int4_type_node); } +/* Generate code to store an integer constant into the + st_parameter_XXX structure. */ + +static unsigned int +set_parameter_const (stmtblock_t *block, tree var, enum iofield type, + unsigned int val) +{ + tree tmp; + gfc_st_parameter_field *p = &st_parameter_field[type]; + + if (p->param_type == IOPARM_ptype_common) + var = build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + tmp = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); + gfc_add_modify_expr (block, tmp, build_int_cst (TREE_TYPE (p->field), val)); + return p->mask; +} + + /* Generate code to store a non-string I/O parameter into the - ioparm structure. This is a pass by value. */ + st_parameter_XXX structure. This is a pass by value. */ -static void -set_parameter_value (stmtblock_t * block, tree var, gfc_expr * e) +static unsigned int +set_parameter_value (stmtblock_t *block, tree var, enum iofield type, + gfc_expr *e) { gfc_se se; tree tmp; + gfc_st_parameter_field *p = &st_parameter_field[type]; gfc_init_se (&se, NULL); - gfc_conv_expr_type (&se, e, TREE_TYPE (var)); + gfc_conv_expr_type (&se, e, TREE_TYPE (p->field)); gfc_add_block_to_block (block, &se.pre); - tmp = build3 (COMPONENT_REF, TREE_TYPE (var), ioparm_var, var, NULL_TREE); + if (p->param_type == IOPARM_ptype_common) + var = build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + tmp = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); gfc_add_modify_expr (block, tmp, se.expr); + return p->mask; } /* Generate code to store a non-string I/O parameter into the - ioparm structure. This is pass by reference. */ + st_parameter_XXX structure. This is pass by reference. */ -static void -set_parameter_ref (stmtblock_t * block, tree var, gfc_expr * e) +static unsigned int +set_parameter_ref (stmtblock_t *block, stmtblock_t *postblock, + tree var, enum iofield type, gfc_expr *e) { gfc_se se; - tree tmp; + tree tmp, addr; + gfc_st_parameter_field *p = &st_parameter_field[type]; + gcc_assert (e->ts.type == BT_INTEGER || e->ts.type == BT_LOGICAL); gfc_init_se (&se, NULL); - se.want_pointer = 1; + gfc_conv_expr_lhs (&se, e); - gfc_conv_expr_type (&se, e, TREE_TYPE (var)); gfc_add_block_to_block (block, &se.pre); - tmp = build3 (COMPONENT_REF, TREE_TYPE (var), ioparm_var, var, NULL_TREE); - gfc_add_modify_expr (block, tmp, se.expr); + if (TYPE_MODE (TREE_TYPE (se.expr)) + == TYPE_MODE (TREE_TYPE (TREE_TYPE (p->field)))) + addr = convert (TREE_TYPE (p->field), + gfc_build_addr_expr (NULL, se.expr)); + else + { + /* The type used by the library has different size + from the type of the variable supplied by the user. + Need to use a temporary. */ + tree tmpvar + = gfc_create_var (TREE_TYPE (TREE_TYPE (p->field)), + st_parameter_field[type].name); + addr = gfc_build_addr_expr (NULL, tmpvar); + tmp = convert (TREE_TYPE (se.expr), tmpvar); + gfc_add_modify_expr (postblock, se.expr, tmp); + } + + if (p->param_type == IOPARM_ptype_common) + var = build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + tmp = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); + gfc_add_modify_expr (block, tmp, addr); + return p->mask; } /* Given an array expr, find its address and length to get a string. If the @@ -447,22 +502,27 @@ gfc_convert_array_to_string (gfc_se * se, gfc_expr * e) /* Generate code to store a string and its length into the - ioparm structure. */ + st_parameter_XXX structure. */ -static void +static unsigned int set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, - tree var_len, gfc_expr * e) + enum iofield type, gfc_expr * e) { gfc_se se; tree tmp; tree msg; tree io; tree len; + gfc_st_parameter_field *p = &st_parameter_field[type]; gfc_init_se (&se, NULL); - io = build3 (COMPONENT_REF, TREE_TYPE (var), ioparm_var, var, NULL_TREE); - len = build3 (COMPONENT_REF, TREE_TYPE (var_len), ioparm_var, var_len, + if (p->param_type == IOPARM_ptype_common) + var = build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + io = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); + len = build3 (COMPONENT_REF, TREE_TYPE (p->field_len), var, p->field_len, NULL_TREE); /* Integer variable assigned a format label. */ @@ -497,28 +557,34 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, gfc_add_block_to_block (block, &se.pre); gfc_add_block_to_block (postblock, &se.post); + return p->mask; } /* Generate code to store the character (array) and the character length for an internal unit. */ -static void -set_internal_unit (stmtblock_t * block, tree iunit, tree iunit_len, - tree iunit_desc, gfc_expr * e) +static unsigned int +set_internal_unit (stmtblock_t * block, tree var, gfc_expr * e) { gfc_se se; tree io; tree len; tree desc; tree tmp; + gfc_st_parameter_field *p; + unsigned int mask; gfc_init_se (&se, NULL); - io = build3 (COMPONENT_REF, TREE_TYPE (iunit), ioparm_var, iunit, NULL_TREE); - len = build3 (COMPONENT_REF, TREE_TYPE (iunit_len), ioparm_var, iunit_len, + p = &st_parameter_field[IOPARM_dt_internal_unit]; + mask = p->mask; + io = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); + len = build3 (COMPONENT_REF, TREE_TYPE (p->field_len), var, p->field_len, NULL_TREE); - desc = build3 (COMPONENT_REF, TREE_TYPE (iunit_desc), ioparm_var, iunit_desc, + p = &st_parameter_field[IOPARM_dt_internal_unit_desc]; + desc = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, NULL_TREE); gcc_assert (e->ts.type == BT_CHARACTER); @@ -552,19 +618,9 @@ set_internal_unit (stmtblock_t * block, tree iunit, tree iunit_len, gfc_add_modify_expr (&se.pre, desc, se.expr); gfc_add_block_to_block (block, &se.pre); + return mask; } -/* Set a member of the ioparm structure to one. */ -static void -set_flag (stmtblock_t *block, tree var) -{ - tree tmp, type = TREE_TYPE (var); - - tmp = build3 (COMPONENT_REF, type, ioparm_var, var, NULL_TREE); - gfc_add_modify_expr (block, tmp, convert (type, integer_one_node)); -} - - /* Add a case to a IO-result switch. */ static void @@ -597,11 +653,12 @@ add_case (int label_value, gfc_st_label * label, stmtblock_t * body) be created anyway. */ static void -io_result (stmtblock_t * block, gfc_st_label * err_label, +io_result (stmtblock_t * block, tree var, gfc_st_label * err_label, gfc_st_label * end_label, gfc_st_label * eor_label) { stmtblock_t body; tree tmp, rc; + gfc_st_parameter_field *p = &st_parameter_field[IOPARM_common_flags]; /* If no labels are specified, ignore the result instead of building an empty switch. */ @@ -621,8 +678,12 @@ io_result (stmtblock_t * block, gfc_st_label * err_label, tmp = gfc_finish_block (&body); - rc = build3 (COMPONENT_REF, TREE_TYPE (ioparm_library_return), ioparm_var, - ioparm_library_return, NULL_TREE); + var = build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + rc = build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); + rc = build2 (BIT_AND_EXPR, TREE_TYPE (rc), rc, + build_int_cst (TREE_TYPE (rc), IOPARM_common_libreturn_mask)); tmp = build3_v (SWITCH_EXPR, rc, tmp, NULL_TREE); @@ -634,24 +695,29 @@ io_result (stmtblock_t * block, gfc_st_label * err_label, library call goes awry, we can tell the user where the problem is. */ static void -set_error_locus (stmtblock_t * block, locus * where) +set_error_locus (stmtblock_t * block, tree var, locus * where) { gfc_file *f; - tree tmp; + tree str, locus_file; int line; + gfc_st_parameter_field *p = &st_parameter_field[IOPARM_common_filename]; + locus_file = build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + locus_file = build3 (COMPONENT_REF, TREE_TYPE (p->field), locus_file, + p->field, NULL_TREE); f = where->lb->file; - tmp = gfc_build_cstring_const (f->filename); + str = gfc_build_cstring_const (f->filename); - tmp = gfc_build_addr_expr (pchar_type_node, tmp); - gfc_add_modify_expr (block, locus_file, tmp); + str = gfc_build_addr_expr (pchar_type_node, str); + gfc_add_modify_expr (block, locus_file, str); #ifdef USE_MAPPED_LOCATION line = LOCATION_LINE (where->lb->location); #else line = where->lb->linenum; #endif - gfc_add_modify_expr (block, locus_line, build_int_cst (NULL_TREE, line)); + set_parameter_const (block, var, IOPARM_common_line, line); } @@ -662,69 +728,79 @@ gfc_trans_open (gfc_code * code) { stmtblock_t block, post_block; gfc_open *p; - tree tmp; + tree tmp, var; + unsigned int mask = 0; - gfc_init_block (&block); + gfc_start_block (&block); gfc_init_block (&post_block); - set_error_locus (&block, &code->loc); + var = gfc_create_var (st_parameter[IOPARM_ptype_open].type, "open_parm"); + + set_error_locus (&block, var, &code->loc); p = code->ext.open; if (p->unit) - set_parameter_value (&block, ioparm_unit, p->unit); + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); if (p->file) - set_string (&block, &post_block, ioparm_file, ioparm_file_len, p->file); + mask |= set_string (&block, &post_block, var, IOPARM_open_file, p->file); if (p->status) - set_string (&block, &post_block, ioparm_status, - ioparm_status_len, p->status); + mask |= set_string (&block, &post_block, var, IOPARM_open_status, + p->status); if (p->access) - set_string (&block, &post_block, ioparm_access, - ioparm_access_len, p->access); + mask |= set_string (&block, &post_block, var, IOPARM_open_access, + p->access); if (p->form) - set_string (&block, &post_block, ioparm_form, ioparm_form_len, p->form); + mask |= set_string (&block, &post_block, var, IOPARM_open_form, p->form); if (p->recl) - set_parameter_value (&block, ioparm_recl_in, p->recl); + mask |= set_parameter_value (&block, var, IOPARM_open_recl_in, p->recl); if (p->blank) - set_string (&block, &post_block, ioparm_blank, ioparm_blank_len, - p->blank); + mask |= set_string (&block, &post_block, var, IOPARM_open_blank, + p->blank); if (p->position) - set_string (&block, &post_block, ioparm_position, - ioparm_position_len, p->position); + mask |= set_string (&block, &post_block, var, IOPARM_open_position, + p->position); if (p->action) - set_string (&block, &post_block, ioparm_action, - ioparm_action_len, p->action); + mask |= set_string (&block, &post_block, var, IOPARM_open_action, + p->action); if (p->delim) - set_string (&block, &post_block, ioparm_delim, ioparm_delim_len, - p->delim); + mask |= set_string (&block, &post_block, var, IOPARM_open_delim, + p->delim); if (p->pad) - set_string (&block, &post_block, ioparm_pad, ioparm_pad_len, p->pad); + mask |= set_string (&block, &post_block, var, IOPARM_open_pad, p->pad); if (p->iomsg) - set_string (&block, &post_block, ioparm_iomsg, ioparm_iomsg_len, - p->iomsg); + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); if (p->iostat) - set_parameter_ref (&block, ioparm_iostat, p->iostat); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); if (p->err) - set_flag (&block, ioparm_err); + mask |= IOPARM_common_err; + + set_parameter_const (&block, var, IOPARM_common_flags, mask); - tmp = gfc_build_function_call (iocall_open, NULL_TREE); + tmp = gfc_build_addr_expr (NULL_TREE, var); + tmp = gfc_chainon_list (NULL_TREE, tmp); + tmp = gfc_build_function_call (iocall[IOCALL_OPEN], tmp); gfc_add_expr_to_block (&block, tmp); gfc_add_block_to_block (&block, &post_block); - io_result (&block, p->err, NULL, NULL); + io_result (&block, var, p->err, NULL, NULL); return gfc_finish_block (&block); } @@ -737,37 +813,47 @@ gfc_trans_close (gfc_code * code) { stmtblock_t block, post_block; gfc_close *p; - tree tmp; + tree tmp, var; + unsigned int mask = 0; - gfc_init_block (&block); + gfc_start_block (&block); gfc_init_block (&post_block); - set_error_locus (&block, &code->loc); + var = gfc_create_var (st_parameter[IOPARM_ptype_close].type, "close_parm"); + + set_error_locus (&block, var, &code->loc); p = code->ext.close; if (p->unit) - set_parameter_value (&block, ioparm_unit, p->unit); + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); if (p->status) - set_string (&block, &post_block, ioparm_status, - ioparm_status_len, p->status); + mask |= set_string (&block, &post_block, var, IOPARM_close_status, + p->status); if (p->iomsg) - set_string (&block, &post_block, ioparm_iomsg, ioparm_iomsg_len, - p->iomsg); + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); if (p->iostat) - set_parameter_ref (&block, ioparm_iostat, p->iostat); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); if (p->err) - set_flag (&block, ioparm_err); + mask |= IOPARM_common_err; + + set_parameter_const (&block, var, IOPARM_common_flags, mask); - tmp = gfc_build_function_call (iocall_close, NULL_TREE); + tmp = gfc_build_addr_expr (NULL_TREE, var); + tmp = gfc_chainon_list (NULL_TREE, tmp); + tmp = gfc_build_function_call (iocall[IOCALL_CLOSE], tmp); gfc_add_expr_to_block (&block, tmp); gfc_add_block_to_block (&block, &post_block); - io_result (&block, p->err, NULL, NULL); + io_result (&block, var, p->err, NULL, NULL); return gfc_finish_block (&block); } @@ -780,34 +866,45 @@ build_filepos (tree function, gfc_code * code) { stmtblock_t block, post_block; gfc_filepos *p; - tree tmp; + tree tmp, var; + unsigned int mask = 0; p = code->ext.filepos; - gfc_init_block (&block); + gfc_start_block (&block); gfc_init_block (&post_block); - set_error_locus (&block, &code->loc); + var = gfc_create_var (st_parameter[IOPARM_ptype_filepos].type, + "filepos_parm"); + + set_error_locus (&block, var, &code->loc); if (p->unit) - set_parameter_value (&block, ioparm_unit, p->unit); + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); if (p->iomsg) - set_string (&block, &post_block, ioparm_iomsg, ioparm_iomsg_len, - p->iomsg); + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); if (p->iostat) - set_parameter_ref (&block, ioparm_iostat, p->iostat); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); if (p->err) - set_flag (&block, ioparm_err); + mask |= IOPARM_common_err; - tmp = gfc_build_function_call (function, NULL); + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + tmp = gfc_build_addr_expr (NULL_TREE, var); + tmp = gfc_chainon_list (NULL_TREE, tmp); + tmp = gfc_build_function_call (function, tmp); gfc_add_expr_to_block (&block, tmp); gfc_add_block_to_block (&block, &post_block); - io_result (&block, p->err, NULL, NULL); + io_result (&block, var, p->err, NULL, NULL); return gfc_finish_block (&block); } @@ -818,8 +915,7 @@ build_filepos (tree function, gfc_code * code) tree gfc_trans_backspace (gfc_code * code) { - - return build_filepos (iocall_backspace, code); + return build_filepos (iocall[IOCALL_BACKSPACE], code); } @@ -828,8 +924,7 @@ gfc_trans_backspace (gfc_code * code) tree gfc_trans_endfile (gfc_code * code) { - - return build_filepos (iocall_endfile, code); + return build_filepos (iocall[IOCALL_ENDFILE], code); } @@ -838,8 +933,7 @@ gfc_trans_endfile (gfc_code * code) tree gfc_trans_rewind (gfc_code * code) { - - return build_filepos (iocall_rewind, code); + return build_filepos (iocall[IOCALL_REWIND], code); } @@ -848,8 +942,7 @@ gfc_trans_rewind (gfc_code * code) tree gfc_trans_flush (gfc_code * code) { - - return build_filepos (iocall_flush, code); + return build_filepos (iocall[IOCALL_FLUSH], code); } @@ -860,12 +953,16 @@ gfc_trans_inquire (gfc_code * code) { stmtblock_t block, post_block; gfc_inquire *p; - tree tmp; + tree tmp, var; + unsigned int mask = 0; - gfc_init_block (&block); + gfc_start_block (&block); gfc_init_block (&post_block); - set_error_locus (&block, &code->loc); + var = gfc_create_var (st_parameter[IOPARM_ptype_inquire].type, + "inquire_parm"); + + set_error_locus (&block, var, &code->loc); p = code->ext.inquire; /* Sanity check. */ @@ -873,102 +970,119 @@ gfc_trans_inquire (gfc_code * code) gfc_error ("INQUIRE statement at %L cannot contain both FILE and UNIT specifiers.", &code->loc); if (p->unit) - set_parameter_value (&block, ioparm_unit, p->unit); + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); if (p->file) - set_string (&block, &post_block, ioparm_file, ioparm_file_len, p->file); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_file, + p->file); if (p->iomsg) - set_string (&block, &post_block, ioparm_iomsg, ioparm_iomsg_len, - p->iomsg); + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); if (p->iostat) - set_parameter_ref (&block, ioparm_iostat, p->iostat); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); if (p->exist) - set_parameter_ref (&block, ioparm_exist, p->exist); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist, + p->exist); if (p->opened) - set_parameter_ref (&block, ioparm_opened, p->opened); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_opened, + p->opened); if (p->number) - set_parameter_ref (&block, ioparm_number, p->number); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_number, + p->number); if (p->named) - set_parameter_ref (&block, ioparm_named, p->named); + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_named, + p->named); if (p->name) - set_string (&block, &post_block, ioparm_name, ioparm_name_len, p->name); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_name, + p->name); if (p->access) - set_string (&block, &post_block, ioparm_access, - ioparm_access_len, p->access); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_access, + p->access); if (p->sequential) - set_string (&block, &post_block, ioparm_sequential, - ioparm_sequential_len, p->sequential); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_sequential, + p->sequential); if (p->direct) - set_string (&block, &post_block, ioparm_direct, - ioparm_direct_len, p->direct); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_direct, + p->direct); if (p->form) - set_string (&block, &post_block, ioparm_form, ioparm_form_len, p->form); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_form, + p->form); if (p->formatted) - set_string (&block, &post_block, ioparm_formatted, - ioparm_formatted_len, p->formatted); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_formatted, + p->formatted); if (p->unformatted) - set_string (&block, &post_block, ioparm_unformatted, - ioparm_unformatted_len, p->unformatted); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_unformatted, + p->unformatted); if (p->recl) - set_parameter_ref (&block, ioparm_recl_out, p->recl); + mask |= set_parameter_ref (&block, &post_block, var, + IOPARM_inquire_recl_out, p->recl); if (p->nextrec) - set_parameter_ref (&block, ioparm_nextrec, p->nextrec); + mask |= set_parameter_ref (&block, &post_block, var, + IOPARM_inquire_nextrec, p->nextrec); if (p->blank) - set_string (&block, &post_block, ioparm_blank, ioparm_blank_len, - p->blank); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_blank, + p->blank); if (p->position) - set_string (&block, &post_block, ioparm_position, - ioparm_position_len, p->position); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_position, + p->position); if (p->action) - set_string (&block, &post_block, ioparm_action, - ioparm_action_len, p->action); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_action, + p->action); if (p->read) - set_string (&block, &post_block, ioparm_read, ioparm_read_len, p->read); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_read, + p->read); if (p->write) - set_string (&block, &post_block, ioparm_write, - ioparm_write_len, p->write); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_write, + p->write); if (p->readwrite) - set_string (&block, &post_block, ioparm_readwrite, - ioparm_readwrite_len, p->readwrite); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_readwrite, + p->readwrite); if (p->delim) - set_string (&block, &post_block, ioparm_delim, ioparm_delim_len, - p->delim); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_delim, + p->delim); if (p->pad) - set_string (&block, &post_block, ioparm_pad, ioparm_pad_len, - p->pad); + mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad, + p->pad); if (p->err) - set_flag (&block, ioparm_err); + mask |= IOPARM_common_err; + + set_parameter_const (&block, var, IOPARM_common_flags, mask); - tmp = gfc_build_function_call (iocall_inquire, NULL); + tmp = gfc_build_addr_expr (NULL_TREE, var); + tmp = gfc_chainon_list (NULL_TREE, tmp); + tmp = gfc_build_function_call (iocall[IOCALL_INQUIRE], tmp); gfc_add_expr_to_block (&block, tmp); gfc_add_block_to_block (&block, &post_block); - io_result (&block, p->err, NULL, NULL); + io_result (&block, var, p->err, NULL, NULL); return gfc_finish_block (&block); } @@ -1082,8 +1196,8 @@ nml_get_addr_expr (gfc_symbol * sym, gfc_component * c, } /* For an object VAR_NAME whose base address is BASE_ADDR, generate a - call to iocall_set_nml_val. For derived type variable, recursively - generate calls to iocall_set_nml_val for each component. */ + call to iocall[IOCALL_SET_NML_VAL]. For derived type variable, recursively + generate calls to iocall[IOCALL_SET_NML_VAL] for each component. */ #define NML_FIRST_ARG(a) args = gfc_chainon_list (NULL_TREE, a) #define NML_ADD_ARG(a) args = gfc_chainon_list (args, a) @@ -1102,6 +1216,7 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name, tree tmp; tree args; tree dtype; + tree dt_parm_addr; int n_dim; int itype; int rank = 0; @@ -1164,7 +1279,9 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name, The call for the scalar part transfers: (address, name, type, kind or string_length, dtype) */ - NML_FIRST_ARG (addr_expr); + dt_parm_addr = gfc_build_addr_expr (NULL_TREE, dt_parm); + NML_FIRST_ARG (dt_parm_addr); + NML_ADD_ARG (addr_expr); NML_ADD_ARG (string); NML_ADD_ARG (IARG (ts->kind)); @@ -1174,7 +1291,7 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name, NML_ADD_ARG (convert (gfc_charlen_type_node, integer_zero_node)); NML_ADD_ARG (dtype); - tmp = gfc_build_function_call (iocall_set_nml_val, args); + tmp = gfc_build_function_call (iocall[IOCALL_SET_NML_VAL], args); gfc_add_expr_to_block (block, tmp); /* If the object is an array, transfer rank times: @@ -1182,11 +1299,12 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name, for ( n_dim = 0 ; n_dim < rank ; n_dim++ ) { - NML_FIRST_ARG (IARG (n_dim)); + NML_FIRST_ARG (dt_parm_addr); + NML_ADD_ARG (IARG (n_dim)); NML_ADD_ARG (GFC_TYPE_ARRAY_STRIDE (dt, n_dim)); NML_ADD_ARG (GFC_TYPE_ARRAY_LBOUND (dt, n_dim)); NML_ADD_ARG (GFC_TYPE_ARRAY_UBOUND (dt, n_dim)); - tmp = gfc_build_function_call (iocall_set_nml_val_dim, args); + tmp = gfc_build_function_call (iocall[IOCALL_SET_NML_VAL_DIM], args); gfc_add_expr_to_block (block, tmp); } @@ -1218,98 +1336,142 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name, out by now. */ static tree -build_dt (tree * function, gfc_code * code) +build_dt (tree function, gfc_code * code) { - stmtblock_t block, post_block; + stmtblock_t block, post_block, post_end_block; gfc_dt *dt; - tree tmp; + tree tmp, var; gfc_expr *nmlname; gfc_namelist *nml; + unsigned int mask = 0; - gfc_init_block (&block); + gfc_start_block (&block); gfc_init_block (&post_block); + gfc_init_block (&post_end_block); - set_error_locus (&block, &code->loc); - dt = code->ext.dt; + var = gfc_create_var (st_parameter[IOPARM_ptype_dt].type, "dt_parm"); - gcc_assert (dt != NULL); + set_error_locus (&block, var, &code->loc); - if (dt->io_unit) + if (last_dt == IOLENGTH) + { + gfc_inquire *inq; + + inq = code->ext.inquire; + + /* First check that preconditions are met. */ + gcc_assert (inq != NULL); + gcc_assert (inq->iolength != NULL); + + /* Connect to the iolength variable. */ + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_dt_iolength, inq->iolength); + dt = NULL; + } + else + { + dt = code->ext.dt; + gcc_assert (dt != NULL); + } + + if (dt && dt->io_unit) { if (dt->io_unit->ts.type == BT_CHARACTER) { - set_internal_unit (&block, - ioparm_internal_unit, - ioparm_internal_unit_len, - ioparm_internal_unit_desc, - dt->io_unit); + mask |= set_internal_unit (&block, var, dt->io_unit); + set_parameter_const (&block, var, IOPARM_common_unit, 0); } else - set_parameter_value (&block, ioparm_unit, dt->io_unit); + set_parameter_value (&block, var, IOPARM_common_unit, dt->io_unit); } + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); - if (dt->rec) - set_parameter_value (&block, ioparm_rec, dt->rec); + if (dt) + { + if (dt->rec) + mask |= set_parameter_value (&block, var, IOPARM_dt_rec, dt->rec); - if (dt->advance) - set_string (&block, &post_block, ioparm_advance, ioparm_advance_len, - dt->advance); + if (dt->advance) + mask |= set_string (&block, &post_block, var, IOPARM_dt_advance, + dt->advance); - if (dt->format_expr) - set_string (&block, &post_block, ioparm_format, ioparm_format_len, - dt->format_expr); + if (dt->format_expr) + mask |= set_string (&block, &post_block, var, IOPARM_dt_format, + dt->format_expr); - if (dt->format_label) - { - if (dt->format_label == &format_asterisk) - set_flag (&block, ioparm_list_format); - else - set_string (&block, &post_block, ioparm_format, - ioparm_format_len, dt->format_label->format); - } + if (dt->format_label) + { + if (dt->format_label == &format_asterisk) + mask |= IOPARM_dt_list_format; + else + mask |= set_string (&block, &post_block, var, IOPARM_dt_format, + dt->format_label->format); + } - if (dt->iomsg) - set_string (&block, &post_block, ioparm_iomsg, ioparm_iomsg_len, - dt->iomsg); + if (dt->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + dt->iomsg); - if (dt->iostat) - set_parameter_ref (&block, ioparm_iostat, dt->iostat); + if (dt->iostat) + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_common_iostat, dt->iostat); - if (dt->size) - set_parameter_ref (&block, ioparm_size, dt->size); + if (dt->size) + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_dt_size, dt->size); - if (dt->err) - set_flag (&block, ioparm_err); + if (dt->err) + mask |= IOPARM_common_err; - if (dt->eor) - set_flag(&block, ioparm_eor); + if (dt->eor) + mask |= IOPARM_common_eor; - if (dt->end) - set_flag(&block, ioparm_end); + if (dt->end) + mask |= IOPARM_common_end; - if (dt->namelist) - { - if (dt->format_expr || dt->format_label) - gfc_internal_error ("build_dt: format with namelist"); + if (dt->namelist) + { + if (dt->format_expr || dt->format_label) + gfc_internal_error ("build_dt: format with namelist"); - nmlname = gfc_new_nml_name_expr(dt->namelist->name); + nmlname = gfc_new_nml_name_expr (dt->namelist->name); - set_string (&block, &post_block, ioparm_namelist_name, - ioparm_namelist_name_len, nmlname); + mask |= set_string (&block, &post_block, var, IOPARM_dt_namelist_name, + nmlname); - if (last_dt == READ) - set_flag (&block, ioparm_namelist_read_mode); + if (last_dt == READ) + mask |= IOPARM_dt_namelist_read_mode; - for (nml = dt->namelist->namelist; nml; nml = nml->next) - transfer_namelist_element (&block, nml->sym->name, nml->sym, - NULL, NULL); + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + dt_parm = var; + + for (nml = dt->namelist->namelist; nml; nml = nml->next) + transfer_namelist_element (&block, nml->sym->name, nml->sym, + NULL, NULL); + } + else + set_parameter_const (&block, var, IOPARM_common_flags, mask); } + else + set_parameter_const (&block, var, IOPARM_common_flags, mask); - tmp = gfc_build_function_call (*function, NULL_TREE); + tmp = gfc_build_addr_expr (NULL_TREE, var); + tmp = gfc_chainon_list (NULL_TREE, tmp); + tmp = gfc_build_function_call (function, tmp); gfc_add_expr_to_block (&block, tmp); gfc_add_block_to_block (&block, &post_block); + dt_parm = var; + dt_post_end_block = &post_end_block; + + gfc_add_expr_to_block (&block, gfc_trans_code (code->block->next)); + + dt_parm = NULL; + dt_post_end_block = NULL; + return gfc_finish_block (&block); } @@ -1321,31 +1483,8 @@ build_dt (tree * function, gfc_code * code) tree gfc_trans_iolength (gfc_code * code) { - stmtblock_t block; - gfc_inquire *inq; - tree dt; - - gfc_init_block (&block); - - set_error_locus (&block, &code->loc); - - inq = code->ext.inquire; - - /* First check that preconditions are met. */ - gcc_assert (inq != NULL); - gcc_assert (inq->iolength != NULL); - - /* Connect to the iolength variable. */ - if (inq->iolength) - set_parameter_ref (&block, ioparm_iolength, inq->iolength); - - /* Actual logic. */ last_dt = IOLENGTH; - dt = build_dt(&iocall_iolength, code); - - gfc_add_expr_to_block (&block, dt); - - return gfc_finish_block (&block); + return build_dt (iocall[IOCALL_IOLENGTH], code); } @@ -1354,9 +1493,8 @@ gfc_trans_iolength (gfc_code * code) tree gfc_trans_read (gfc_code * code) { - last_dt = READ; - return build_dt (&iocall_read, code); + return build_dt (iocall[IOCALL_READ], code); } @@ -1365,9 +1503,8 @@ gfc_trans_read (gfc_code * code) tree gfc_trans_write (gfc_code * code) { - last_dt = WRITE; - return build_dt (&iocall_write, code); + return build_dt (iocall[IOCALL_WRITE], code); } @@ -1384,28 +1521,32 @@ gfc_trans_dt_end (gfc_code * code) switch (last_dt) { case READ: - function = iocall_read_done; + function = iocall[IOCALL_READ_DONE]; break; case WRITE: - function = iocall_write_done; + function = iocall[IOCALL_WRITE_DONE]; break; case IOLENGTH: - function = iocall_iolength_done; + function = iocall[IOCALL_IOLENGTH_DONE]; break; default: gcc_unreachable (); } - tmp = gfc_build_function_call (function, NULL); + tmp = gfc_build_addr_expr (NULL_TREE, dt_parm); + tmp = gfc_chainon_list (NULL_TREE, tmp); + tmp = gfc_build_function_call (function, tmp); gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, dt_post_end_block); + gfc_init_block (dt_post_end_block); if (last_dt != IOLENGTH) { gcc_assert (code->ext.dt != NULL); - io_result (&block, code->ext.dt->err, + io_result (&block, dt_parm, code->ext.dt->err, code->ext.dt->end, code->ext.dt->eor); } @@ -1520,22 +1661,22 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr) { case BT_INTEGER: arg2 = build_int_cst (NULL_TREE, kind); - function = iocall_x_integer; + function = iocall[IOCALL_X_INTEGER]; break; case BT_REAL: arg2 = build_int_cst (NULL_TREE, kind); - function = iocall_x_real; + function = iocall[IOCALL_X_REAL]; break; case BT_COMPLEX: arg2 = build_int_cst (NULL_TREE, kind); - function = iocall_x_complex; + function = iocall[IOCALL_X_COMPLEX]; break; case BT_LOGICAL: arg2 = build_int_cst (NULL_TREE, kind); - function = iocall_x_logical; + function = iocall[IOCALL_X_LOGICAL]; break; case BT_CHARACTER: @@ -1547,7 +1688,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr) gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE); arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp))); } - function = iocall_x_character; + function = iocall[IOCALL_X_CHARACTER]; break; case BT_DERIVED: @@ -1581,7 +1722,9 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr) internal_error ("Bad IO basetype (%d)", ts->type); } - args = gfc_chainon_list (NULL_TREE, addr_expr); + tmp = gfc_build_addr_expr (NULL_TREE, dt_parm); + args = gfc_chainon_list (NULL_TREE, tmp); + args = gfc_chainon_list (args, addr_expr); args = gfc_chainon_list (args, arg2); tmp = gfc_build_function_call (function, args); @@ -1597,16 +1740,21 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr) static void transfer_array_desc (gfc_se * se, gfc_typespec * ts, tree addr_expr) { - tree args, tmp, charlen_arg; + tree args, tmp, charlen_arg, kind_arg; if (ts->type == BT_CHARACTER) charlen_arg = se->string_length; else charlen_arg = build_int_cstu (NULL_TREE, 0); - args = gfc_chainon_list (NULL_TREE, addr_expr); + kind_arg = build_int_cst (NULL_TREE, ts->kind); + + tmp = gfc_build_addr_expr (NULL_TREE, dt_parm); + args = gfc_chainon_list (NULL_TREE, tmp); + args = gfc_chainon_list (args, addr_expr); + args = gfc_chainon_list (args, kind_arg); args = gfc_chainon_list (args, charlen_arg); - tmp = gfc_build_function_call (iocall_x_array, args); + tmp = gfc_build_function_call (iocall[IOCALL_X_ARRAY], args); gfc_add_expr_to_block (&se->pre, tmp); gfc_add_block_to_block (&se->pre, &se->post); } @@ -1634,11 +1782,41 @@ gfc_trans_transfer (gfc_code * code) if (ss == gfc_ss_terminator) { + /* Transfer a scalar value. */ gfc_conv_expr_reference (&se, expr); transfer_expr (&se, &expr->ts, se.expr); } - else if (expr->ts.type == BT_DERIVED) + else { + /* Transfer an array. There are 3 options: + 1) An array of an intrinsic type. This is handled by transfering + the descriptor to the library. + 2) A derived type containing an array. Scalarized by the frontend. + 3) An array of derived type. Scalarized by the frontend. + */ + if (expr->ts.type != BT_DERIVED) + { + /* Get the descriptor. */ + gfc_conv_expr_descriptor (&se, expr, ss); + /* If it's not an array of derived type, transfer the array + descriptor to the library. */ + tmp = gfc_get_dtype (TREE_TYPE (se.expr)); + if (((TREE_INT_CST_LOW (tmp) & GFC_DTYPE_TYPE_MASK) + >> GFC_DTYPE_TYPE_SHIFT) != GFC_DTYPE_DERIVED) + { + tmp = gfc_build_addr_expr (NULL, se.expr); + transfer_array_desc (&se, &expr->ts, tmp); + goto finish_block_label; + } + else + { + /* Cleanup the mess getting the descriptor caused. */ + expr = code->expr; + ss = gfc_walk_expr (expr); + gfc_init_se (&se, NULL); + } + } + /* Initialize the scalarizer. */ gfc_init_loopinfo (&loop); gfc_add_ss_to_loop (&loop, ss); @@ -1657,13 +1835,8 @@ gfc_trans_transfer (gfc_code * code) gfc_conv_expr_reference (&se, expr); transfer_expr (&se, &expr->ts, se.expr); } - else - { - /* Pass the array descriptor to the library. */ - gfc_conv_expr_descriptor (&se, expr, ss); - tmp = gfc_build_addr_expr (NULL, se.expr); - transfer_array_desc (&se, &expr->ts, tmp); - } + + finish_block_label: gfc_add_block_to_block (&body, &se.pre); gfc_add_block_to_block (&body, &se.post); diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 81a90f1d373..6aaf81a5b4c 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -192,6 +192,15 @@ gfc_init_kinds (void) gfc_real_kinds[r_index].digits = fmt->p; gfc_real_kinds[r_index].min_exponent = fmt->emin; gfc_real_kinds[r_index].max_exponent = fmt->emax; + if (fmt->pnan < fmt->p) + /* This is an IBM extended double format (or the MIPS variant) + made up of two IEEE doubles. The value of the long double is + the sum of the values of the two parts. The most significant + part is required to be the value of the long double rounded + to the nearest double. If we use emax of 1024 then we can't + represent huge(x) = (1 - b**(-p)) * b**(emax-1) * b, because + rounding will make the most significant part overflow. */ + gfc_real_kinds[r_index].max_exponent = fmt->emax - 1; gfc_real_kinds[r_index].mode_precision = GET_MODE_PRECISION (mode); r_index += 1; } diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 16d0a37ed3f..02fc2759609 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -457,6 +457,9 @@ extern GTY(()) tree gfor_fndecl_select_string; extern GTY(()) tree gfor_fndecl_runtime_error; extern GTY(()) tree gfor_fndecl_set_fpe; extern GTY(()) tree gfor_fndecl_set_std; +extern GTY(()) tree gfor_fndecl_ttynam; +extern GTY(()) tree gfor_fndecl_ctime; +extern GTY(()) tree gfor_fndecl_fdate; extern GTY(()) tree gfor_fndecl_in_pack; extern GTY(()) tree gfor_fndecl_in_unpack; extern GTY(()) tree gfor_fndecl_associated; diff --git a/gcc/function.c b/gcc/function.c index 941021edc66..dc5d0c53d47 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -479,6 +479,21 @@ assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size, int align, function->x_stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, x, function->x_stack_slot_list); + /* Try to detect frame size overflows on native platforms. */ +#if BITS_PER_WORD >= 32 + if ((FRAME_GROWS_DOWNWARD + ? (unsigned HOST_WIDE_INT) -function->x_frame_offset + : (unsigned HOST_WIDE_INT) function->x_frame_offset) + > ((unsigned HOST_WIDE_INT) 1 << (BITS_PER_WORD - 1)) + /* Leave room for the fixed part of the frame. */ + - 64 * UNITS_PER_WORD) + { + error ("%Jtotal size of local objects too large", function->decl); + /* Avoid duplicate error messages as much as possible. */ + function->x_frame_offset = 0; + } +#endif + return x; } @@ -1231,7 +1246,14 @@ instantiate_new_reg (rtx x, HOST_WIDE_INT *poffset) else if (x == virtual_outgoing_args_rtx) new = stack_pointer_rtx, offset = out_arg_offset; else if (x == virtual_cfa_rtx) - new = arg_pointer_rtx, offset = cfa_offset; + { +#ifdef FRAME_POINTER_CFA_OFFSET + new = frame_pointer_rtx; +#else + new = arg_pointer_rtx; +#endif + offset = cfa_offset; + } else return NULL_RTX; @@ -1617,7 +1639,11 @@ instantiate_virtual_regs (void) var_offset = STARTING_FRAME_OFFSET; dynamic_offset = STACK_DYNAMIC_OFFSET (current_function_decl); out_arg_offset = STACK_POINTER_OFFSET; +#ifdef FRAME_POINTER_CFA_OFFSET + cfa_offset = FRAME_POINTER_CFA_OFFSET (current_function_decl); +#else cfa_offset = ARG_POINTER_CFA_OFFSET (current_function_decl); +#endif /* Initialize recognition, indicating that volatile is OK. */ init_recog (); diff --git a/gcc/gcc.c b/gcc/gcc.c index 7bc6ac9e5c8..6f4b65b2e50 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -926,11 +926,10 @@ static const struct compiler default_compilers[] = {".CPP", "#C++", 0, 0, 0}, {".ii", "#C++", 0, 0, 0}, {".ads", "#Ada", 0, 0, 0}, {".adb", "#Ada", 0, 0, 0}, {".f", "#Fortran", 0, 0, 0}, {".for", "#Fortran", 0, 0, 0}, - {".F", "#Fortran", 0, 0, 0}, {".FOR", "#Fortran", 0, 0, 0}, - {".FPP", "#Fortran", 0, 0, 0}, - {".f90", "#Fortran 95", 0, 0, 0}, {".f95", "#Fortran 95", 0, 0, 0}, {".fpp", "#Fortran", 0, 0, 0}, {".F", "#Fortran", 0, 0, 0}, {".FOR", "#Fortran", 0, 0, 0}, {".FPP", "#Fortran", 0, 0, 0}, + {".f90", "#Fortran", 0, 0, 0}, {".f95", "#Fortran", 0, 0, 0}, + {".F90", "#Fortran", 0, 0, 0}, {".F95", "#Fortran", 0, 0, 0}, {".r", "#Ratfor", 0, 0, 0}, {".p", "#Pascal", 0, 0, 0}, {".pas", "#Pascal", 0, 0, 0}, {".java", "#Java", 0, 0, 0}, {".class", "#Java", 0, 0, 0}, @@ -6033,6 +6032,8 @@ main (int argc, const char **argv) xmalloc_set_program_name (programname); + expandargv (&argc, &argv); + #ifdef GCC_DRIVER_HOST_INITIALIZATION /* Perform host dependent initialization when needed. */ GCC_DRIVER_HOST_INITIALIZATION; @@ -7699,13 +7700,13 @@ version_compare_spec_function (int argc, const char **argv) bool result; if (argc < 3) - abort (); + fatal ("too few arguments to %%:version-compare"); if (argv[0][0] == '\0') abort (); if ((argv[0][1] == '<' || argv[0][1] == '>') && argv[0][0] != '!') nargs = 2; if (argc != nargs + 3) - abort (); + fatal ("too many arguments to %%:version-compare"); switch_len = strlen (argv[nargs + 1]); for (i = 0; i < n_switches; i++) @@ -7746,7 +7747,7 @@ version_compare_spec_function (int argc, const char **argv) break; default: - abort (); + fatal ("unknown operator '%s' in %%:version-compare", argv[0]); } if (! result) return NULL; diff --git a/gcc/gcse.c b/gcc/gcse.c index 2ac9ca24c52..2c74574b449 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -5088,7 +5088,8 @@ free_ldst_entry (struct ls_expr * ptr) static void free_ldst_mems (void) { - htab_delete (pre_ldst_table); + if (pre_ldst_table) + htab_delete (pre_ldst_table); pre_ldst_table = NULL; while (pre_ldst_mems) @@ -5145,6 +5146,8 @@ find_rtx_in_ldst (rtx x) { struct ls_expr e; void **slot; + if (!pre_ldst_table) + return NULL; e.pattern = x; slot = htab_find_slot (pre_ldst_table, &e, NO_INSERT); if (!slot || ((struct ls_expr *)*slot)->invalid) diff --git a/gcc/genopinit.c b/gcc/genopinit.c index 8bf574743e9..0c4a397667e 100644 --- a/gcc/genopinit.c +++ b/gcc/genopinit.c @@ -84,6 +84,7 @@ static const char * const optabs[] = "smul_highpart_optab->handlers[$A].insn_code = CODE_FOR_$(smul$a3_highpart$)", "smul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(mul$a$b3$)$N", "umul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(umul$a$b3$)$N", + "usmul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(usmul$a$b3$)$N", "sdiv_optab->handlers[$A].insn_code = CODE_FOR_$(div$a3$)", "sdivv_optab->handlers[$A].insn_code = CODE_FOR_$(div$V$I$a3$)", "udiv_optab->handlers[$A].insn_code = CODE_FOR_$(udiv$I$a3$)", @@ -353,7 +354,7 @@ gen_insn (rtx insn) case 'I': case 'F': case 'N': break; case 'V': - if (GET_MODE_CLASS (m1) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (m1)) printf ("v"); break; case 'a': diff --git a/gcc/gensupport.c b/gcc/gensupport.c index 2f6f54da465..5e29e4418eb 100644 --- a/gcc/gensupport.c +++ b/gcc/gensupport.c @@ -1220,46 +1220,38 @@ add_predicate (struct pred_data *pred) /* This array gives the initial content of the predicate table. It has entries for all predicates defined in recog.c. */ -struct old_pred_table +struct std_pred_table { const char *name; + bool special; RTX_CODE codes[NUM_RTX_CODE]; }; -static const struct old_pred_table old_preds[] = { - {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, - LABEL_REF, SUBREG, REG, MEM }}, - {"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, - LABEL_REF, SUBREG, REG, MEM, - PLUS, MINUS, MULT}}, - {"register_operand", {SUBREG, REG}}, - {"pmode_register_operand", {SUBREG, REG}}, - {"scratch_operand", {SCRATCH, REG}}, - {"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, - LABEL_REF}}, - {"const_int_operand", {CONST_INT}}, - {"const_double_operand", {CONST_INT, CONST_DOUBLE}}, - {"nonimmediate_operand", {SUBREG, REG, MEM}}, - {"nonmemory_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, - LABEL_REF, SUBREG, REG}}, - {"push_operand", {MEM}}, - {"pop_operand", {MEM}}, - {"memory_operand", {SUBREG, MEM}}, - {"indirect_operand", {SUBREG, MEM}}, - {"comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU, - UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE, - UNLT, LTGT}} +static const struct std_pred_table std_preds[] = { + {"general_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, + LABEL_REF, SUBREG, REG, MEM }}, + {"address_operand", true, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, + LABEL_REF, SUBREG, REG, MEM, + PLUS, MINUS, MULT}}, + {"register_operand", false, {SUBREG, REG}}, + {"pmode_register_operand", true, {SUBREG, REG}}, + {"scratch_operand", false, {SCRATCH, REG}}, + {"immediate_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, + LABEL_REF}}, + {"const_int_operand", false, {CONST_INT}}, + {"const_double_operand", false, {CONST_INT, CONST_DOUBLE}}, + {"nonimmediate_operand", false, {SUBREG, REG, MEM}}, + {"nonmemory_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, + LABEL_REF, SUBREG, REG}}, + {"push_operand", false, {MEM}}, + {"pop_operand", false, {MEM}}, + {"memory_operand", false, {SUBREG, MEM}}, + {"indirect_operand", false, {SUBREG, MEM}}, + {"comparison_operator", false, {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU, + UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE, + UNLT, LTGT}} }; -#define NUM_KNOWN_OLD_PREDS ARRAY_SIZE (old_preds) - -/* This table gives the set of special predicates. It has entries for - all special predicates defined in recog.c. */ -static const char *const old_special_pred_table[] = { - "address_operand", - "pmode_register_operand", -}; - -#define NUM_OLD_SPECIAL_MODE_PREDS ARRAY_SIZE (old_special_pred_table) +#define NUM_KNOWN_STD_PREDS ARRAY_SIZE (std_preds) /* Initialize the table of predicate definitions, starting with the information we have on generic predicates. */ @@ -1274,14 +1266,15 @@ init_predicate_table (void) eq_struct_pred_data, 0, xcalloc, free); - for (i = 0; i < NUM_KNOWN_OLD_PREDS; i++) + for (i = 0; i < NUM_KNOWN_STD_PREDS; i++) { pred = xcalloc (sizeof (struct pred_data), 1); - pred->name = old_preds[i].name; + pred->name = std_preds[i].name; + pred->special = std_preds[i].special; - for (j = 0; old_preds[i].codes[j] != 0; j++) + for (j = 0; std_preds[i].codes[j] != 0; j++) { - enum rtx_code code = old_preds[i].codes[j]; + enum rtx_code code = std_preds[i].codes[j]; pred->codes[code] = true; if (GET_RTX_CLASS (code) != RTX_CONST_OBJ) @@ -1295,20 +1288,8 @@ init_predicate_table (void) pred->allows_non_lvalue = true; } if (j == 1) - pred->singleton = old_preds[i].codes[0]; + pred->singleton = std_preds[i].codes[0]; add_predicate (pred); } - - for (i = 0; i < NUM_OLD_SPECIAL_MODE_PREDS; i++) - { - pred = lookup_predicate (old_special_pred_table[i]); - if (!pred) - { - error ("old-style special predicate list refers " - "to unknown predicate '%s'", old_special_pred_table[i]); - continue; - } - pred->special = true; - } } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index f73e3739d25..b35904d1441 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3810,14 +3810,18 @@ gimplify_cleanup_point_expr (tree *expr_p, tree *pre_p) tree temp = voidify_wrapper_expr (*expr_p, NULL); /* We only care about the number of conditions between the innermost - CLEANUP_POINT_EXPR and the cleanup. So save and reset the count. */ + CLEANUP_POINT_EXPR and the cleanup. So save and reset the count and + any cleanups collected outside the CLEANUP_POINT_EXPR. */ int old_conds = gimplify_ctxp->conditions; + tree old_cleanups = gimplify_ctxp->conditional_cleanups; gimplify_ctxp->conditions = 0; + gimplify_ctxp->conditional_cleanups = NULL_TREE; body = TREE_OPERAND (*expr_p, 0); gimplify_to_stmt_list (&body); gimplify_ctxp->conditions = old_conds; + gimplify_ctxp->conditional_cleanups = old_cleanups; for (iter = tsi_start (body); !tsi_end_p (iter); ) { @@ -4312,18 +4316,28 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p, { unsigned HOST_WIDE_INT ix; constructor_elt *ce; + tree temp = NULL_TREE; for (ix = 0; VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (*expr_p), ix, ce); ix++) if (TREE_SIDE_EFFECTS (ce->value)) - gimplify_expr (&ce->value, pre_p, post_p, - gimple_test_f, fallback); + append_to_statement_list (ce->value, &temp); - *expr_p = NULL_TREE; + *expr_p = temp; + ret = GS_OK; } - - ret = GS_ALL_DONE; + /* C99 code may assign to an array in a constructed + structure or union, and this has undefined behavior only + on execution, so create a temporary if an lvalue is + required. */ + else if (fallback == fb_lvalue) + { + *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p); + lang_hooks.mark_addressable (*expr_p); + } + else + ret = GS_ALL_DONE; break; /* The following are special cases that are not handled by the diff --git a/gcc/gthr-dce.h b/gcc/gthr-dce.h index f74a1b1b9e7..517f5a30443 100644 --- a/gcc/gthr-dce.h +++ b/gcc/gthr-dce.h @@ -1,6 +1,7 @@ /* Threads compatibility routines for libgcc2 and libobjc. */ /* Compile this one with gcc. */ -/* Copyright (C) 1997, 1999, 2000, 2001, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000, 2001, 2004, 2005 + Free Software Foundation, Inc. This file is part of GCC. @@ -54,48 +55,59 @@ typedef pthread_once_t __gthread_once_t; typedef pthread_mutex_t __gthread_mutex_t; typedef pthread_mutex_t __gthread_recursive_mutex_t; -#define __GTHREAD_ONCE_INIT pthread_once_init +#define __GTHREAD_ONCE_INIT __gthrw_pthread_once_init #define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function -#define __GTHREAD_MUTEX_INIT_DEFAULT pthread_once_init +#define __GTHREAD_MUTEX_INIT_DEFAULT __gthrw_pthread_once_init #if SUPPORTS_WEAK && GTHREAD_USE_WEAK +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name))) +#else +# define __gthrw_asmname(cname) __gthrw_asmnamep (__USER_LABEL_PREFIX__, cname) +# define __gthrw_asmnamep(prefix, cname) __gthrw_string (prefix) cname +# define __gthrw_string(x) #x +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __asm (__gthrw_asmname (#name)) +#endif -#pragma weak pthread_once -#pragma weak pthread_once_init -#pragma weak pthread_keycreate -#pragma weak pthread_key_delete -#pragma weak pthread_getspecific -#pragma weak pthread_setspecific -#pragma weak pthread_create -#pragma weak pthread_mutex_init -#pragma weak pthread_mutex_lock -#pragma weak pthread_mutex_trylock -#pragma weak pthread_mutex_unlock -#pragma weak pthread_mutexattr_create -#pragma weak pthread_mutexattr_setkind_np -#pragma weak pthread_mutexattr_delete +__gthrw(pthread_once); +__gthrw(pthread_once_init); +__gthrw(pthread_keycreate); +__gthrw(pthread_key_delete); +__gthrw(pthread_getspecific); +__gthrw(pthread_setspecific); +__gthrw(pthread_create); +__gthrw(pthread_mutex_init); +__gthrw(pthread_mutex_lock); +__gthrw(pthread_mutex_trylock); +__gthrw(pthread_mutex_unlock); +__gthrw(pthread_mutexattr_create); +__gthrw(pthread_mutexattr_setkind_np); +__gthrw(pthread_mutexattr_delete); #ifdef _LIBOBJC /* Objective-C. */ -#pragma weak pthread_cond_broadcast -#pragma weak pthread_cond_destroy -#pragma weak pthread_cond_init -#pragma weak pthread_cond_signal -#pragma weak pthread_cond_wait -#pragma weak pthread_exit -#pragma weak pthread_getunique_np -#pragma weak pthread_mutex_destroy -#pragma weak pthread_self -#pragma weak pthread_yield +__gthrw(pthread_cond_broadcast); +__gthrw(pthread_cond_destroy); +__gthrw(pthread_cond_init); +__gthrw(pthread_cond_signal); +__gthrw(pthread_cond_wait); +__gthrw(pthread_exit); +__gthrw(pthread_getunique_np); +__gthrw(pthread_mutex_destroy); +__gthrw(pthread_self); +__gthrw(pthread_yield); #endif +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK + static inline int __gthread_active_p (void) { - static void *const __gthread_active_ptr = (void *) &pthread_create; + static void *const __gthread_active_ptr = (void *) &__gthrw_pthread_create; return __gthread_active_ptr != 0; } @@ -125,7 +137,7 @@ __gthread_objc_init_thread_system (void) { if (__gthread_active_p ()) /* Initialize the thread storage key. */ - return pthread_keycreate (&_objc_thread_storage, NULL); + return __gthrw_pthread_keycreate (&_objc_thread_storage, NULL); else return -1; } @@ -152,7 +164,7 @@ __gthread_objc_thread_detach (void (*func)(void *), void *arg) if (!__gthread_active_p ()) return NULL; - if (!(pthread_create (&new_thread_handle, pthread_attr_default, + if (!(__gthrw_pthread_create (&new_thread_handle, pthread_attr_default, (void *) func, arg))) { /* ??? May not work! (64bit) */ @@ -189,7 +201,7 @@ __gthread_objc_thread_set_priority (int priority) } /* Change the priority. */ - if (pthread_setprio (pthread_self (), sys_priority) >= 0) + if (pthread_setprio (__gthrw_pthread_self (), sys_priority) >= 0) return 0; else /* Failed */ @@ -204,7 +216,7 @@ __gthread_objc_thread_get_priority (void) if (__gthread_active_p ()) { - if ((sys_priority = pthread_getprio (pthread_self ())) >= 0) + if ((sys_priority = pthread_getprio (__gthrw_pthread_self ())) >= 0) { if (sys_priority >= PRI_FG_MIN_NP && sys_priority <= PRI_FG_MAX_NP) @@ -227,7 +239,7 @@ static inline void __gthread_objc_thread_yield (void) { if (__gthread_active_p ()) - pthread_yield (); + __gthrw_pthread_yield (); } /* Terminate the current thread. */ @@ -236,7 +248,7 @@ __gthread_objc_thread_exit (void) { if (__gthread_active_p ()) /* exit the thread */ - pthread_exit (&__objc_thread_exit_status); + __gthrw_pthread_exit (&__objc_thread_exit_status); /* Failed if we reached here */ return -1; @@ -248,9 +260,9 @@ __gthread_objc_thread_id (void) { if (__gthread_active_p ()) { - pthread_t self = pthread_self (); + pthread_t self = __gthrw_pthread_self (); - return (objc_thread_t) pthread_getunique_np (&self); + return (objc_thread_t) __gthrw_pthread_getunique_np (&self); } else return (objc_thread_t) 1; @@ -261,7 +273,7 @@ static inline int __gthread_objc_thread_set_data (void *value) { if (__gthread_active_p ()) - return pthread_setspecific (_objc_thread_storage, value); + return __gthrw_pthread_setspecific (_objc_thread_storage, value); else { thread_local_storage = value; @@ -277,7 +289,7 @@ __gthread_objc_thread_get_data (void) if (__gthread_active_p ()) { - if (!(pthread_getspecific (_objc_thread_storage, &value))) + if (!(__gthrw_pthread_getspecific (_objc_thread_storage, &value))) return value; return NULL; @@ -296,7 +308,7 @@ __gthread_objc_mutex_allocate (objc_mutex_t mutex) { mutex->backend = objc_malloc (sizeof (pthread_mutex_t)); - if (pthread_mutex_init ((pthread_mutex_t *) mutex->backend, + if (__gthrw_pthread_mutex_init ((pthread_mutex_t *) mutex->backend, pthread_mutexattr_default)) { objc_free (mutex->backend); @@ -314,7 +326,7 @@ __gthread_objc_mutex_deallocate (objc_mutex_t mutex) { if (__gthread_active_p ()) { - if (pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend)) + if (__gthrw_pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend)) return -1; objc_free (mutex->backend); @@ -329,7 +341,7 @@ static inline int __gthread_objc_mutex_lock (objc_mutex_t mutex) { if (__gthread_active_p ()) - return pthread_mutex_lock ((pthread_mutex_t *) mutex->backend); + return __gthrw_pthread_mutex_lock ((pthread_mutex_t *) mutex->backend); else return 0; } @@ -339,7 +351,7 @@ static inline int __gthread_objc_mutex_trylock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 1) + && __gthrw_pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 1) return -1; return 0; @@ -350,7 +362,7 @@ static inline int __gthread_objc_mutex_unlock (objc_mutex_t mutex) { if (__gthread_active_p ()) - return pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend); + return __gthrw_pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend); else return 0; } @@ -418,7 +430,7 @@ static inline int __gthread_once (__gthread_once_t *once, void (*func) (void)) { if (__gthread_active_p ()) - return pthread_once (once, func); + return __gthrw_pthread_once (once, func); else return -1; } @@ -426,7 +438,7 @@ __gthread_once (__gthread_once_t *once, void (*func) (void)) static inline int __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) { - return pthread_keycreate (key, dtor); + return __gthrw_pthread_keycreate (key, dtor); } static inline int @@ -440,7 +452,7 @@ static inline void * __gthread_getspecific (__gthread_key_t key) { void *ptr; - if (pthread_getspecific (key, &ptr) == 0) + if (__gthrw_pthread_getspecific (key, &ptr) == 0) return ptr; else return 0; @@ -449,21 +461,21 @@ __gthread_getspecific (__gthread_key_t key) static inline int __gthread_setspecific (__gthread_key_t key, const void *ptr) { - return pthread_setspecific (key, (void *) ptr); + return __gthrw_pthread_setspecific (key, (void *) ptr); } static inline void __gthread_mutex_init_function (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - pthread_mutex_init (mutex, pthread_mutexattr_default); + __gthrw_pthread_mutex_init (mutex, pthread_mutexattr_default); } static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_lock (mutex); + return __gthrw_pthread_mutex_lock (mutex); else return 0; } @@ -472,7 +484,7 @@ static inline int __gthread_mutex_trylock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_trylock (mutex); + return __gthrw_pthread_mutex_trylock (mutex); else return 0; } @@ -481,7 +493,7 @@ static inline int __gthread_mutex_unlock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_unlock (mutex); + return __gthrw_pthread_mutex_unlock (mutex); else return 0; } @@ -494,13 +506,13 @@ __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex) pthread_mutexattr_t attr; int r; - r = pthread_mutexattr_create (&attr); + r = __gthrw_pthread_mutexattr_create (&attr); if (!r) - r = pthread_mutexattr_setkind_np (&attr, MUTEX_RECURSIVE_NP); + r = __gthrw_pthread_mutexattr_setkind_np (&attr, MUTEX_RECURSIVE_NP); if (!r) - r = pthread_mutex_init (mutex, attr); + r = __gthrw_pthread_mutex_init (mutex, attr); if (!r) - r = pthread_mutexattr_delete (&attr); + r = __gthrw_pthread_mutexattr_delete (&attr); return r; } } diff --git a/gcc/gthr-posix.h b/gcc/gthr-posix.h index 355b5847e3e..d022c9f1b79 100644 --- a/gcc/gthr-posix.h +++ b/gcc/gthr-posix.h @@ -59,55 +59,66 @@ typedef pthread_mutex_t __gthread_recursive_mutex_t; #endif #if SUPPORTS_WEAK && GTHREAD_USE_WEAK +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name))) +#else +# define __gthrw_asmname(cname) __gthrw_asmnamep (__USER_LABEL_PREFIX__, cname) +# define __gthrw_asmnamep(prefix, cname) __gthrw_string (prefix) cname +# define __gthrw_string(x) #x +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __asm (__gthrw_asmname (#name)) +#endif -#pragma weak pthread_once -#pragma weak pthread_key_create -#pragma weak pthread_key_delete -#pragma weak pthread_getspecific -#pragma weak pthread_setspecific -#pragma weak pthread_create -#pragma weak pthread_cancel +__gthrw(pthread_once); +__gthrw(pthread_key_create); +__gthrw(pthread_key_delete); +__gthrw(pthread_getspecific); +__gthrw(pthread_setspecific); +__gthrw(pthread_create); +__gthrw(pthread_cancel); -#pragma weak pthread_mutex_lock -#pragma weak pthread_mutex_trylock -#pragma weak pthread_mutex_unlock -#pragma weak pthread_mutexattr_init -#pragma weak pthread_mutexattr_settype -#pragma weak pthread_mutexattr_destroy +__gthrw(pthread_mutex_lock); +__gthrw(pthread_mutex_trylock); +__gthrw(pthread_mutex_unlock); +__gthrw(pthread_mutexattr_init); +__gthrw(pthread_mutexattr_settype); +__gthrw(pthread_mutexattr_destroy); -#pragma weak pthread_mutex_init +__gthrw(pthread_mutex_init); #if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK) /* Objective-C. */ -#pragma weak pthread_cond_broadcast -#pragma weak pthread_cond_destroy -#pragma weak pthread_cond_init -#pragma weak pthread_cond_signal -#pragma weak pthread_cond_wait -#pragma weak pthread_exit -#pragma weak pthread_mutex_destroy -#pragma weak pthread_self +__gthrw(pthread_cond_broadcast); +__gthrw(pthread_cond_destroy); +__gthrw(pthread_cond_init); +__gthrw(pthread_cond_signal); +__gthrw(pthread_cond_wait); +__gthrw(pthread_exit); +__gthrw(pthread_mutex_destroy); +__gthrw(pthread_self); #ifdef _POSIX_PRIORITY_SCHEDULING #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING -#pragma weak sched_get_priority_max -#pragma weak sched_get_priority_min +__gthrw(sched_get_priority_max); +__gthrw(sched_get_priority_min); #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ #endif /* _POSIX_PRIORITY_SCHEDULING */ -#pragma weak sched_yield -#pragma weak pthread_attr_destroy -#pragma weak pthread_attr_init -#pragma weak pthread_attr_setdetachstate +__gthrw(sched_yield); +__gthrw(pthread_attr_destroy); +__gthrw(pthread_attr_init); +__gthrw(pthread_attr_setdetachstate); #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING -#pragma weak pthread_getschedparam -#pragma weak pthread_setschedparam +__gthrw(pthread_getschedparam); +__gthrw(pthread_setschedparam); #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ #endif /* _LIBOBJC || _LIBOBJC_WEAK */ +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK + static inline int __gthread_active_p (void) { static void *const __gthread_active_ptr - = __extension__ (void *) &pthread_cancel; + = __extension__ (void *) &__gthrw_pthread_cancel; return __gthread_active_ptr != 0; } @@ -146,13 +157,13 @@ __gthread_objc_init_thread_system (void) if (__gthread_active_p ()) { /* Initialize the thread storage key. */ - if (pthread_key_create (&_objc_thread_storage, NULL) == 0) + if (__gthrw_pthread_key_create (&_objc_thread_storage, NULL) == 0) { /* The normal default detach state for threads is * PTHREAD_CREATE_JOINABLE which causes threads to not die * when you think they should. */ - if (pthread_attr_init (&_objc_thread_attribs) == 0 - && pthread_attr_setdetachstate (&_objc_thread_attribs, + if (__gthrw_pthread_attr_init (&_objc_thread_attribs) == 0 + && __gthrw_pthread_attr_setdetachstate (&_objc_thread_attribs, PTHREAD_CREATE_DETACHED) == 0) return 0; } @@ -166,8 +177,8 @@ static inline int __gthread_objc_close_thread_system (void) { if (__gthread_active_p () - && pthread_key_delete (_objc_thread_storage) == 0 - && pthread_attr_destroy (&_objc_thread_attribs) == 0) + && __gthrw_pthread_key_delete (_objc_thread_storage) == 0 + && __gthrw_pthread_attr_destroy (&_objc_thread_attribs) == 0) return 0; return -1; @@ -185,7 +196,7 @@ __gthread_objc_thread_detach (void (*func)(void *), void *arg) if (!__gthread_active_p ()) return NULL; - if (!(pthread_create (&new_thread_handle, NULL, (void *) func, arg))) + if (!(__gthrw_pthread_create (&new_thread_handle, NULL, (void *) func, arg))) thread_id = (objc_thread_t) new_thread_handle; else thread_id = NULL; @@ -203,17 +214,17 @@ __gthread_objc_thread_set_priority (int priority) { #ifdef _POSIX_PRIORITY_SCHEDULING #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING - pthread_t thread_id = pthread_self (); + pthread_t thread_id = __gthrw_pthread_self (); int policy; struct sched_param params; int priority_min, priority_max; - if (pthread_getschedparam (thread_id, &policy, ¶ms) == 0) + if (__gthrw_pthread_getschedparam (thread_id, &policy, ¶ms) == 0) { - if ((priority_max = sched_get_priority_max (policy)) == -1) + if ((priority_max = __gthrw_sched_get_priority_max (policy)) == -1) return -1; - if ((priority_min = sched_get_priority_min (policy)) == -1) + if ((priority_min = __gthrw_sched_get_priority_min (policy)) == -1) return -1; if (priority > priority_max) @@ -227,7 +238,7 @@ __gthread_objc_thread_set_priority (int priority) * this should be a pointer to policy but pthread.h is universally * at odds with this. */ - if (pthread_setschedparam (thread_id, policy, ¶ms) == 0) + if (__gthrw_pthread_setschedparam (thread_id, policy, ¶ms) == 0) return 0; } #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ @@ -247,7 +258,7 @@ __gthread_objc_thread_get_priority (void) int policy; struct sched_param params; - if (pthread_getschedparam (pthread_self (), &policy, ¶ms) == 0) + if (__gthrw_pthread_getschedparam (__gthrw_pthread_self (), &policy, ¶ms) == 0) return params.sched_priority; else return -1; @@ -263,7 +274,7 @@ static inline void __gthread_objc_thread_yield (void) { if (__gthread_active_p ()) - sched_yield (); + __gthrw_sched_yield (); } /* Terminate the current thread. */ @@ -272,7 +283,7 @@ __gthread_objc_thread_exit (void) { if (__gthread_active_p ()) /* exit the thread */ - pthread_exit (&__objc_thread_exit_status); + __gthrw_pthread_exit (&__objc_thread_exit_status); /* Failed if we reached here */ return -1; @@ -283,7 +294,7 @@ static inline objc_thread_t __gthread_objc_thread_id (void) { if (__gthread_active_p ()) - return (objc_thread_t) pthread_self (); + return (objc_thread_t) __gthrw_pthread_self (); else return (objc_thread_t) 1; } @@ -293,7 +304,7 @@ static inline int __gthread_objc_thread_set_data (void *value) { if (__gthread_active_p ()) - return pthread_setspecific (_objc_thread_storage, value); + return __gthrw_pthread_setspecific (_objc_thread_storage, value); else { thread_local_storage = value; @@ -306,7 +317,7 @@ static inline void * __gthread_objc_thread_get_data (void) { if (__gthread_active_p ()) - return pthread_getspecific (_objc_thread_storage); + return __gthrw_pthread_getspecific (_objc_thread_storage); else return thread_local_storage; } @@ -321,7 +332,7 @@ __gthread_objc_mutex_allocate (objc_mutex_t mutex) { mutex->backend = objc_malloc (sizeof (pthread_mutex_t)); - if (pthread_mutex_init ((pthread_mutex_t *) mutex->backend, NULL)) + if (__gthrw_pthread_mutex_init ((pthread_mutex_t *) mutex->backend, NULL)) { objc_free (mutex->backend); mutex->backend = NULL; @@ -342,18 +353,18 @@ __gthread_objc_mutex_deallocate (objc_mutex_t mutex) /* * Posix Threads specifically require that the thread be unlocked - * for pthread_mutex_destroy to work. + * for __gthrw_pthread_mutex_destroy to work. */ do { - count = pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend); + count = __gthrw_pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend); if (count < 0) return -1; } while (count); - if (pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend)) + if (__gthrw_pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend)) return -1; objc_free (mutex->backend); @@ -367,7 +378,7 @@ static inline int __gthread_objc_mutex_lock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_lock ((pthread_mutex_t *) mutex->backend) != 0) + && __gthrw_pthread_mutex_lock ((pthread_mutex_t *) mutex->backend) != 0) { return -1; } @@ -380,7 +391,7 @@ static inline int __gthread_objc_mutex_trylock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 0) + && __gthrw_pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 0) { return -1; } @@ -393,7 +404,7 @@ static inline int __gthread_objc_mutex_unlock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend) != 0) + && __gthrw_pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend) != 0) { return -1; } @@ -411,7 +422,7 @@ __gthread_objc_condition_allocate (objc_condition_t condition) { condition->backend = objc_malloc (sizeof (pthread_cond_t)); - if (pthread_cond_init ((pthread_cond_t *) condition->backend, NULL)) + if (__gthrw_pthread_cond_init ((pthread_cond_t *) condition->backend, NULL)) { objc_free (condition->backend); condition->backend = NULL; @@ -428,7 +439,7 @@ __gthread_objc_condition_deallocate (objc_condition_t condition) { if (__gthread_active_p ()) { - if (pthread_cond_destroy ((pthread_cond_t *) condition->backend)) + if (__gthrw_pthread_cond_destroy ((pthread_cond_t *) condition->backend)) return -1; objc_free (condition->backend); @@ -442,7 +453,7 @@ static inline int __gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex) { if (__gthread_active_p ()) - return pthread_cond_wait ((pthread_cond_t *) condition->backend, + return __gthrw_pthread_cond_wait ((pthread_cond_t *) condition->backend, (pthread_mutex_t *) mutex->backend); else return 0; @@ -453,7 +464,7 @@ static inline int __gthread_objc_condition_broadcast (objc_condition_t condition) { if (__gthread_active_p ()) - return pthread_cond_broadcast ((pthread_cond_t *) condition->backend); + return __gthrw_pthread_cond_broadcast ((pthread_cond_t *) condition->backend); else return 0; } @@ -463,7 +474,7 @@ static inline int __gthread_objc_condition_signal (objc_condition_t condition) { if (__gthread_active_p ()) - return pthread_cond_signal ((pthread_cond_t *) condition->backend); + return __gthrw_pthread_cond_signal ((pthread_cond_t *) condition->backend); else return 0; } @@ -474,7 +485,7 @@ static inline int __gthread_once (__gthread_once_t *once, void (*func) (void)) { if (__gthread_active_p ()) - return pthread_once (once, func); + return __gthrw_pthread_once (once, func); else return -1; } @@ -482,32 +493,32 @@ __gthread_once (__gthread_once_t *once, void (*func) (void)) static inline int __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) { - return pthread_key_create (key, dtor); + return __gthrw_pthread_key_create (key, dtor); } static inline int __gthread_key_delete (__gthread_key_t key) { - return pthread_key_delete (key); + return __gthrw_pthread_key_delete (key); } static inline void * __gthread_getspecific (__gthread_key_t key) { - return pthread_getspecific (key); + return __gthrw_pthread_getspecific (key); } static inline int __gthread_setspecific (__gthread_key_t key, const void *ptr) { - return pthread_setspecific (key, ptr); + return __gthrw_pthread_setspecific (key, ptr); } static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_lock (mutex); + return __gthrw_pthread_mutex_lock (mutex); else return 0; } @@ -516,7 +527,7 @@ static inline int __gthread_mutex_trylock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_trylock (mutex); + return __gthrw_pthread_mutex_trylock (mutex); else return 0; } @@ -525,7 +536,7 @@ static inline int __gthread_mutex_unlock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_unlock (mutex); + return __gthrw_pthread_mutex_unlock (mutex); else return 0; } @@ -539,13 +550,13 @@ __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex) pthread_mutexattr_t attr; int r; - r = pthread_mutexattr_init (&attr); + r = __gthrw_pthread_mutexattr_init (&attr); if (!r) - r = pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); + r = __gthrw_pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); if (!r) - r = pthread_mutex_init (mutex, &attr); + r = __gthrw_pthread_mutex_init (mutex, &attr); if (!r) - r = pthread_mutexattr_destroy (&attr); + r = __gthrw_pthread_mutexattr_destroy (&attr); return r; } return 0; diff --git a/gcc/gthr-posix95.h b/gcc/gthr-posix95.h index 3e78ea629f7..71661eb8091 100644 --- a/gcc/gthr-posix95.h +++ b/gcc/gthr-posix95.h @@ -57,56 +57,65 @@ typedef struct { #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function #if SUPPORTS_WEAK && GTHREAD_USE_WEAK +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name))) +#else +# define __gthrw_asmname(cname) __gthrw_asmnamep (__USER_LABEL_PREFIX__, cname) +# define __gthrw_asmnamep(prefix, cname) __gthrw_string (prefix) cname +# define __gthrw_string(x) #x +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __asm (__gthrw_asmname (#name)) +#endif -#pragma weak pthread_once -#pragma weak pthread_key_create -#pragma weak pthread_key_delete -#pragma weak pthread_getspecific -#pragma weak pthread_setspecific -#pragma weak pthread_create -#pragma weak pthread_cancel -#pragma weak pthread_self +__gthrw(pthread_once); +__gthrw(pthread_key_create); +__gthrw(pthread_key_delete); +__gthrw(pthread_getspecific); +__gthrw(pthread_setspecific); +__gthrw(pthread_create); +__gthrw(pthread_cancel); +__gthrw(pthread_self); -#pragma weak pthread_mutex_lock -#pragma weak pthread_mutex_trylock -#pragma weak pthread_mutex_unlock -#pragma weak pthread_mutexattr_init -#pragma weak pthread_mutexattr_settype -#pragma weak pthread_mutexattr_destroy +__gthrw(pthread_mutex_lock); +__gthrw(pthread_mutex_trylock); +__gthrw(pthread_mutex_unlock); +__gthrw(pthread_mutexattr_init); +__gthrw(pthread_mutexattr_destroy); -#pragma weak pthread_mutex_init +__gthrw(pthread_mutex_init); #if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK) /* Objective-C. */ -#pragma weak pthread_cond_broadcast -#pragma weak pthread_cond_destroy -#pragma weak pthread_cond_init -#pragma weak pthread_cond_signal -#pragma weak pthread_cond_wait -#pragma weak pthread_exit -#pragma weak pthread_mutex_destroy -#pragma weak pthread_self +__gthrw(pthread_cond_broadcast); +__gthrw(pthread_cond_destroy); +__gthrw(pthread_cond_init); +__gthrw(pthread_cond_signal); +__gthrw(pthread_cond_wait); +__gthrw(pthread_exit); +__gthrw(pthread_mutex_destroy); #ifdef _POSIX_PRIORITY_SCHEDULING #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING -#pragma weak sched_get_priority_max -#pragma weak sched_get_priority_min +__gthrw(sched_get_priority_max); +__gthrw(sched_get_priority_min); #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ #endif /* _POSIX_PRIORITY_SCHEDULING */ -#pragma weak sched_yield -#pragma weak pthread_attr_destroy -#pragma weak pthread_attr_init -#pragma weak pthread_attr_setdetachstate +__gthrw(sched_yield); +__gthrw(pthread_attr_destroy); +__gthrw(pthread_attr_init); +__gthrw(pthread_attr_setdetachstate); #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING -#pragma weak pthread_getschedparam -#pragma weak pthread_setschedparam +__gthrw(pthread_getschedparam); +__gthrw(pthread_setschedparam); #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ #endif /* _LIBOBJC || _LIBOBJC_WEAK */ +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK + static inline int __gthread_active_p (void) { static void *const __gthread_active_ptr - = __extension__ (void *) &pthread_cancel; + = __extension__ (void *) &__gthrw_pthread_cancel; return __gthread_active_ptr != 0; } @@ -145,13 +154,13 @@ __gthread_objc_init_thread_system (void) if (__gthread_active_p ()) { /* Initialize the thread storage key. */ - if (pthread_key_create (&_objc_thread_storage, NULL) == 0) + if (__gthrw_pthread_key_create (&_objc_thread_storage, NULL) == 0) { /* The normal default detach state for threads is * PTHREAD_CREATE_JOINABLE which causes threads to not die * when you think they should. */ - if (pthread_attr_init (&_objc_thread_attribs) == 0 - && pthread_attr_setdetachstate (&_objc_thread_attribs, + if (__gthrw_pthread_attr_init (&_objc_thread_attribs) == 0 + && __gthrw_pthread_attr_setdetachstate (&_objc_thread_attribs, PTHREAD_CREATE_DETACHED) == 0) return 0; } @@ -165,8 +174,8 @@ static inline int __gthread_objc_close_thread_system (void) { if (__gthread_active_p () - && pthread_key_delete (_objc_thread_storage) == 0 - && pthread_attr_destroy (&_objc_thread_attribs) == 0) + && __gthrw_pthread_key_delete (_objc_thread_storage) == 0 + && __gthrw_pthread_attr_destroy (&_objc_thread_attribs) == 0) return 0; return -1; @@ -184,7 +193,7 @@ __gthread_objc_thread_detach (void (*func)(void *), void *arg) if (!__gthread_active_p ()) return NULL; - if (!(pthread_create (&new_thread_handle, NULL, (void *) func, arg))) + if (!(__gthrw_pthread_create (&new_thread_handle, NULL, (void *) func, arg))) thread_id = (objc_thread_t) new_thread_handle; else thread_id = NULL; @@ -202,17 +211,17 @@ __gthread_objc_thread_set_priority (int priority) { #ifdef _POSIX_PRIORITY_SCHEDULING #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING - pthread_t thread_id = pthread_self (); + pthread_t thread_id = __gthrw_pthread_self (); int policy; struct sched_param params; int priority_min, priority_max; - if (pthread_getschedparam (thread_id, &policy, ¶ms) == 0) + if (__gthrw_pthread_getschedparam (thread_id, &policy, ¶ms) == 0) { - if ((priority_max = sched_get_priority_max (policy)) == -1) + if ((priority_max = __gthrw_sched_get_priority_max (policy)) == -1) return -1; - if ((priority_min = sched_get_priority_min (policy)) == -1) + if ((priority_min = __gthrw_sched_get_priority_min (policy)) == -1) return -1; if (priority > priority_max) @@ -226,7 +235,7 @@ __gthread_objc_thread_set_priority (int priority) * this should be a pointer to policy but pthread.h is universally * at odds with this. */ - if (pthread_setschedparam (thread_id, policy, ¶ms) == 0) + if (__gthrw_pthread_setschedparam (thread_id, policy, ¶ms) == 0) return 0; } #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ @@ -246,7 +255,7 @@ __gthread_objc_thread_get_priority (void) int policy; struct sched_param params; - if (pthread_getschedparam (pthread_self (), &policy, ¶ms) == 0) + if (__gthrw_pthread_getschedparam (__gthrw_pthread_self (), &policy, ¶ms) == 0) return params.sched_priority; else return -1; @@ -262,7 +271,7 @@ static inline void __gthread_objc_thread_yield (void) { if (__gthread_active_p ()) - sched_yield (); + __gthrw_sched_yield (); } /* Terminate the current thread. */ @@ -271,7 +280,7 @@ __gthread_objc_thread_exit (void) { if (__gthread_active_p ()) /* exit the thread */ - pthread_exit (&__objc_thread_exit_status); + __gthrw_pthread_exit (&__objc_thread_exit_status); /* Failed if we reached here */ return -1; @@ -282,7 +291,7 @@ static inline objc_thread_t __gthread_objc_thread_id (void) { if (__gthread_active_p ()) - return (objc_thread_t) pthread_self (); + return (objc_thread_t) __gthrw_pthread_self (); else return (objc_thread_t) 1; } @@ -292,7 +301,7 @@ static inline int __gthread_objc_thread_set_data (void *value) { if (__gthread_active_p ()) - return pthread_setspecific (_objc_thread_storage, value); + return __gthrw_pthread_setspecific (_objc_thread_storage, value); else { thread_local_storage = value; @@ -305,7 +314,7 @@ static inline void * __gthread_objc_thread_get_data (void) { if (__gthread_active_p ()) - return pthread_getspecific (_objc_thread_storage); + return __gthrw_pthread_getspecific (_objc_thread_storage); else return thread_local_storage; } @@ -320,7 +329,7 @@ __gthread_objc_mutex_allocate (objc_mutex_t mutex) { mutex->backend = objc_malloc (sizeof (pthread_mutex_t)); - if (pthread_mutex_init ((pthread_mutex_t *) mutex->backend, NULL)) + if (__gthrw_pthread_mutex_init ((pthread_mutex_t *) mutex->backend, NULL)) { objc_free (mutex->backend); mutex->backend = NULL; @@ -341,18 +350,18 @@ __gthread_objc_mutex_deallocate (objc_mutex_t mutex) /* * Posix Threads specifically require that the thread be unlocked - * for pthread_mutex_destroy to work. + * for __gthrw_pthread_mutex_destroy to work. */ do { - count = pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend); + count = __gthrw_pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend); if (count < 0) return -1; } while (count); - if (pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend)) + if (__gthrw_pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend)) return -1; objc_free (mutex->backend); @@ -366,7 +375,7 @@ static inline int __gthread_objc_mutex_lock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_lock ((pthread_mutex_t *) mutex->backend) != 0) + && __gthrw_pthread_mutex_lock ((pthread_mutex_t *) mutex->backend) != 0) { return -1; } @@ -379,7 +388,7 @@ static inline int __gthread_objc_mutex_trylock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 0) + && __gthrw_pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 0) { return -1; } @@ -392,7 +401,7 @@ static inline int __gthread_objc_mutex_unlock (objc_mutex_t mutex) { if (__gthread_active_p () - && pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend) != 0) + && __gthrw_pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend) != 0) { return -1; } @@ -410,7 +419,7 @@ __gthread_objc_condition_allocate (objc_condition_t condition) { condition->backend = objc_malloc (sizeof (pthread_cond_t)); - if (pthread_cond_init ((pthread_cond_t *) condition->backend, NULL)) + if (__gthrw_pthread_cond_init ((pthread_cond_t *) condition->backend, NULL)) { objc_free (condition->backend); condition->backend = NULL; @@ -427,7 +436,7 @@ __gthread_objc_condition_deallocate (objc_condition_t condition) { if (__gthread_active_p ()) { - if (pthread_cond_destroy ((pthread_cond_t *) condition->backend)) + if (__gthrw_pthread_cond_destroy ((pthread_cond_t *) condition->backend)) return -1; objc_free (condition->backend); @@ -441,7 +450,7 @@ static inline int __gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex) { if (__gthread_active_p ()) - return pthread_cond_wait ((pthread_cond_t *) condition->backend, + return __gthrw_pthread_cond_wait ((pthread_cond_t *) condition->backend, (pthread_mutex_t *) mutex->backend); else return 0; @@ -452,7 +461,7 @@ static inline int __gthread_objc_condition_broadcast (objc_condition_t condition) { if (__gthread_active_p ()) - return pthread_cond_broadcast ((pthread_cond_t *) condition->backend); + return __gthrw_pthread_cond_broadcast ((pthread_cond_t *) condition->backend); else return 0; } @@ -462,7 +471,7 @@ static inline int __gthread_objc_condition_signal (objc_condition_t condition) { if (__gthread_active_p ()) - return pthread_cond_signal ((pthread_cond_t *) condition->backend); + return __gthrw_pthread_cond_signal ((pthread_cond_t *) condition->backend); else return 0; } @@ -473,7 +482,7 @@ static inline int __gthread_once (__gthread_once_t *once, void (*func) (void)) { if (__gthread_active_p ()) - return pthread_once (once, func); + return __gthrw_pthread_once (once, func); else return -1; } @@ -481,32 +490,32 @@ __gthread_once (__gthread_once_t *once, void (*func) (void)) static inline int __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) { - return pthread_key_create (key, dtor); + return __gthrw_pthread_key_create (key, dtor); } static inline int __gthread_key_delete (__gthread_key_t key) { - return pthread_key_delete (key); + return __gthrw_pthread_key_delete (key); } static inline void * __gthread_getspecific (__gthread_key_t key) { - return pthread_getspecific (key); + return __gthrw_pthread_getspecific (key); } static inline int __gthread_setspecific (__gthread_key_t key, const void *ptr) { - return pthread_setspecific (key, ptr); + return __gthrw_pthread_setspecific (key, ptr); } static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_lock (mutex); + return __gthrw_pthread_mutex_lock (mutex); else return 0; } @@ -515,7 +524,7 @@ static inline int __gthread_mutex_trylock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_trylock (mutex); + return __gthrw_pthread_mutex_trylock (mutex); else return 0; } @@ -524,7 +533,7 @@ static inline int __gthread_mutex_unlock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return pthread_mutex_unlock (mutex); + return __gthrw_pthread_mutex_unlock (mutex); else return 0; } @@ -534,7 +543,7 @@ __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex) { mutex->depth = 0; mutex->owner = (pthread_t) 0; - return pthread_mutex_init (&mutex->actual, NULL); + return __gthrw_pthread_mutex_init (&mutex->actual, NULL); } static inline int @@ -542,11 +551,11 @@ __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex) { if (__gthread_active_p ()) { - pthread_t me = pthread_self (); + pthread_t me = __gthrw_pthread_self (); if (mutex->owner != me) { - pthread_mutex_lock (&mutex->actual); + __gthrw_pthread_mutex_lock (&mutex->actual); mutex->owner = me; } @@ -560,11 +569,11 @@ __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex) { if (__gthread_active_p ()) { - pthread_t me = pthread_self (); + pthread_t me = __gthrw_pthread_self (); if (mutex->owner != me) { - if (pthread_mutex_trylock (&mutex->actual)) + if (__gthrw_pthread_mutex_trylock (&mutex->actual)) return 1; mutex->owner = me; } @@ -582,7 +591,7 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex) if (--mutex->depth == 0) { mutex->owner = (pthread_t) 0; - pthread_mutex_unlock (&mutex->actual); + __gthrw_pthread_mutex_unlock (&mutex->actual); } } return 0; diff --git a/gcc/gthr-solaris.h b/gcc/gthr-solaris.h index e37c62899af..01757dc006d 100644 --- a/gcc/gthr-solaris.h +++ b/gcc/gthr-solaris.h @@ -1,6 +1,7 @@ /* Threads compatibility routines for libgcc2 and libobjc. */ /* Compile this one with gcc. */ -/* Copyright (C) 1997, 1999, 2000, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000, 2004, 2005 + Free Software Foundation, Inc. This file is part of GCC. @@ -56,41 +57,52 @@ typedef struct { #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function #if SUPPORTS_WEAK && GTHREAD_USE_WEAK +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name))) +#else +# define __gthrw_asmname(cname) __gthrw_asmnamep (__USER_LABEL_PREFIX__, cname) +# define __gthrw_asmnamep(prefix, cname) __gthrw_string (prefix) cname +# define __gthrw_string(x) #x +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __asm (__gthrw_asmname (#name)) +#endif -#pragma weak thr_keycreate -#pragma weak thr_getspecific -#pragma weak thr_setspecific -#pragma weak thr_create +__gthrw(thr_keycreate); +__gthrw(thr_getspecific); +__gthrw(thr_setspecific); +__gthrw(thr_create); -#pragma weak mutex_lock -#pragma weak mutex_trylock -#pragma weak mutex_unlock +__gthrw(mutex_lock); +__gthrw(mutex_trylock); +__gthrw(mutex_unlock); #ifdef _LIBOBJC -#pragma weak thr_exit -#pragma weak thr_keycreate -#pragma weak thr_getprio -#pragma weak thr_self -#pragma weak thr_setprio -#pragma weak thr_yield - -#pragma weak cond_init -#pragma weak cond_destroy -#pragma weak cond_wait -#pragma weak cond_broadcast -#pragma weak cond_signal - -#pragma weak mutex_init -#pragma weak mutex_destroy +__gthrw(thr_exit); +__gthrw(thr_keycreate); +__gthrw(thr_getprio); +__gthrw(thr_self); +__gthrw(thr_setprio); +__gthrw(thr_yield); + +__gthrw(cond_init); +__gthrw(cond_destroy); +__gthrw(cond_wait); +__gthrw(cond_broadcast); +__gthrw(cond_signal); + +__gthrw(mutex_init); +__gthrw(mutex_destroy); #endif +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK + /* This will not actually work in Solaris 2.5, since libc contains dummy symbols of all thr_* routines. */ static inline int __gthread_active_p (void) { - static void *const __gthread_active_ptr = (void *) &thr_create; + static void *const __gthread_active_ptr = (void *) &__gthrw_thr_create; return __gthread_active_ptr != 0; } @@ -120,7 +132,7 @@ __gthread_objc_init_thread_system (void) { /* Initialize the thread storage key. */ if (__gthread_active_p () - && thr_keycreate (&_objc_thread_storage, NULL) == 0) + && __gthrw_thr_keycreate (&_objc_thread_storage, NULL) == 0) return 0; return -1; @@ -148,7 +160,7 @@ __gthread_objc_thread_detach (void (*func)(void *), void *arg) if (!__gthread_active_p ()) return NULL; - if (thr_create (NULL, 0, (void *) func, arg, + if (__gthrw_thr_create (NULL, 0, (void *) func, arg, THR_DETACHED | THR_NEW_LWP, &new_thread_id) == 0) thread_id = *(objc_thread_t *) &new_thread_id; @@ -182,7 +194,7 @@ __gthread_objc_thread_set_priority (int priority) } /* Change priority */ - if (thr_setprio (thr_self (), sys_priority) == 0) + if (__gthrw_thr_setprio (__gthrw_thr_self (), sys_priority) == 0) return 0; else return -1; @@ -197,7 +209,7 @@ __gthread_objc_thread_get_priority (void) if (!__gthread_active_p ()) return OBJC_THREAD_INTERACTIVE_PRIORITY; - if (thr_getprio (thr_self (), &sys_priority) == 0) + if (__gthrw_thr_getprio (__gthrw_thr_self (), &sys_priority) == 0) { if (sys_priority >= 250) return OBJC_THREAD_INTERACTIVE_PRIORITY; @@ -215,7 +227,7 @@ static inline void __gthread_objc_thread_yield (void) { if (__gthread_active_p ()) - thr_yield (); + __gthrw_thr_yield (); } /* Terminate the current thread. */ @@ -224,7 +236,7 @@ __gthread_objc_thread_exit (void) { if (__gthread_active_p ()) /* exit the thread */ - thr_exit (&__objc_thread_exit_status); + __gthrw_thr_exit (&__objc_thread_exit_status); /* Failed if we reached here */ return -1; @@ -235,7 +247,7 @@ static inline objc_thread_t __gthread_objc_thread_id (void) { if (__gthread_active_p ()) - return (objc_thread_t) thr_self (); + return (objc_thread_t) __gthrw_thr_self (); else return (objc_thread_t) 1; } @@ -246,7 +258,7 @@ __gthread_objc_thread_set_data (void *value) { if (__gthread_active_p ()) { - if (thr_setspecific (_objc_thread_storage, value) == 0) + if (__gthrw_thr_setspecific (_objc_thread_storage, value) == 0) return 0; else return -1; @@ -266,7 +278,7 @@ __gthread_objc_thread_get_data (void) if (__gthread_active_p ()) { - if (thr_getspecific (_objc_thread_storage, &value) == 0) + if (__gthrw_thr_getspecific (_objc_thread_storage, &value) == 0) return value; else return NULL; @@ -282,7 +294,7 @@ static inline int __gthread_objc_mutex_allocate (objc_mutex_t mutex) { if (__gthread_active_p () - && mutex_init ((mutex_t *) (&(mutex->backend)), USYNC_THREAD, 0)) + && __gthrw_mutex_init ((mutex_t *) (&(mutex->backend)), USYNC_THREAD, 0)) return -1; return 0; @@ -293,7 +305,7 @@ static inline int __gthread_objc_mutex_deallocate (objc_mutex_t mutex) { if (__gthread_active_p ()) - mutex_destroy ((mutex_t *) (&(mutex->backend))); + __gthrw_mutex_destroy ((mutex_t *) (&(mutex->backend))); return 0; } @@ -303,7 +315,7 @@ static inline int __gthread_objc_mutex_lock (objc_mutex_t mutex) { if (__gthread_active_p () - && mutex_lock ((mutex_t *) (&(mutex->backend))) != 0) + && __gthrw_mutex_lock ((mutex_t *) (&(mutex->backend))) != 0) return -1; return 0; @@ -314,7 +326,7 @@ static inline int __gthread_objc_mutex_trylock (objc_mutex_t mutex) { if (__gthread_active_p () - && mutex_trylock ((mutex_t *) (&(mutex->backend))) != 0) + && __gthrw_mutex_trylock ((mutex_t *) (&(mutex->backend))) != 0) return -1; return 0; @@ -325,7 +337,7 @@ static inline int __gthread_objc_mutex_unlock (objc_mutex_t mutex) { if (__gthread_active_p () - && mutex_unlock ((mutex_t *) (&(mutex->backend))) != 0) + && __gthrw_mutex_unlock ((mutex_t *) (&(mutex->backend))) != 0) return -1; return 0; @@ -338,7 +350,7 @@ static inline int __gthread_objc_condition_allocate (objc_condition_t condition) { if (__gthread_active_p ()) - return cond_init ((cond_t *) (&(condition->backend)), USYNC_THREAD, + return __gthrw_cond_init ((cond_t *) (&(condition->backend)), USYNC_THREAD, NULL); else return 0; @@ -349,7 +361,7 @@ static inline int __gthread_objc_condition_deallocate (objc_condition_t condition) { if (__gthread_active_p ()) - return cond_destroy ((cond_t *) (&(condition->backend))); + return __gthrw_cond_destroy ((cond_t *) (&(condition->backend))); else return 0; } @@ -359,7 +371,7 @@ static inline int __gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex) { if (__gthread_active_p ()) - return cond_wait ((cond_t *) (&(condition->backend)), + return __gthrw_cond_wait ((cond_t *) (&(condition->backend)), (mutex_t *) (&(mutex->backend))); else return 0; @@ -370,7 +382,7 @@ static inline int __gthread_objc_condition_broadcast (objc_condition_t condition) { if (__gthread_active_p ()) - return cond_broadcast ((cond_t *) (&(condition->backend))); + return __gthrw_cond_broadcast ((cond_t *) (&(condition->backend))); else return 0; } @@ -380,7 +392,7 @@ static inline int __gthread_objc_condition_signal (objc_condition_t condition) { if (__gthread_active_p ()) - return cond_signal ((cond_t *) (&(condition->backend))); + return __gthrw_cond_signal ((cond_t *) (&(condition->backend))); else return 0; } @@ -398,7 +410,7 @@ __gthread_once (__gthread_once_t *once, void (*func) (void)) if (once->once == 0) { - int status = mutex_lock (&once->mutex); + int status = __gthrw_mutex_lock (&once->mutex); if (status != 0) return status; if (once->once == 0) @@ -406,7 +418,7 @@ __gthread_once (__gthread_once_t *once, void (*func) (void)) (*func) (); once->once++; } - mutex_unlock (&once->mutex); + __gthrw_mutex_unlock (&once->mutex); } return 0; } @@ -417,7 +429,7 @@ __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) /* Solaris 2.5 contains thr_* routines no-op in libc, so test if we actually got a reasonable key value, and if not, fail. */ *key = (__gthread_key_t)-1; - if (thr_keycreate (key, dtor) != 0 || *key == (__gthread_key_t)-1) + if (__gthrw_thr_keycreate (key, dtor) != 0 || *key == (__gthread_key_t)-1) return -1; else return 0; @@ -434,7 +446,7 @@ static inline void * __gthread_getspecific (__gthread_key_t key) { void *ptr; - if (thr_getspecific (key, &ptr) == 0) + if (__gthrw_thr_getspecific (key, &ptr) == 0) return ptr; else return 0; @@ -443,14 +455,14 @@ __gthread_getspecific (__gthread_key_t key) static inline int __gthread_setspecific (__gthread_key_t key, const void *ptr) { - return thr_setspecific (key, (void *) ptr); + return __gthrw_thr_setspecific (key, (void *) ptr); } static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return mutex_lock (mutex); + return __gthrw_mutex_lock (mutex); else return 0; } @@ -459,7 +471,7 @@ static inline int __gthread_mutex_trylock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return mutex_trylock (mutex); + return __gthrw_mutex_trylock (mutex); else return 0; } @@ -468,7 +480,7 @@ static inline int __gthread_mutex_unlock (__gthread_mutex_t *mutex) { if (__gthread_active_p ()) - return mutex_unlock (mutex); + return __gthrw_mutex_unlock (mutex); else return 0; } @@ -478,7 +490,7 @@ __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex) { mutex->depth = 0; mutex->owner = (thread_t) 0; - return mutex_init (&mutex->actual, USYNC_THREAD, 0); + return __gthrw_mutex_init (&mutex->actual, USYNC_THREAD, 0); } static inline int @@ -486,11 +498,11 @@ __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex) { if (__gthread_active_p ()) { - thread_t me = thr_self (); + thread_t me = __gthrw_thr_self (); if (mutex->owner != me) { - mutex_lock (&mutex->actual); + __gthrw_mutex_lock (&mutex->actual); mutex->owner = me; } @@ -504,11 +516,11 @@ __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex) { if (__gthread_active_p ()) { - thread_t me = thr_self (); + thread_t me = __gthrw_thr_self (); if (mutex->owner != me) { - if (mutex_trylock (&mutex->actual)) + if (__gthrw_mutex_trylock (&mutex->actual)) return 1; mutex->owner = me; } @@ -526,7 +538,7 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex) if (--mutex->depth == 0) { mutex->owner = (thread_t) 0; - mutex_unlock (&mutex->actual); + __gthrw_mutex_unlock (&mutex->actual); } } return 0; diff --git a/gcc/gthr-tpf.h b/gcc/gthr-tpf.h index a4e82d1427c..d54a6c80171 100644 --- a/gcc/gthr-tpf.h +++ b/gcc/gthr-tpf.h @@ -1,6 +1,6 @@ /* Threads compatibility routines for libgcc2 and libobjc. Compile this one with gcc. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -69,19 +69,26 @@ typedef pthread_mutex_t __gthread_recursive_mutex_t; #define __tpf_pthread_active() (CE2THRCPTR != NOTATHREAD) #if SUPPORTS_WEAK && GTHREAD_USE_WEAK +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name))) +#else +# define __gthrw_asmname(cname) __gthrw_asmnamep (__USER_LABEL_PREFIX__, cname) +# define __gthrw_asmnamep(prefix, cname) __gthrw_string (prefix) cname +# define __gthrw_string(x) #x +# define __gthrw(name) \ + extern __typeof(name) __gthrw_ ## name __asm (__gthrw_asmname (#name)) +#endif -#pragma weak pthread_once -#pragma weak pthread_key_create -#pragma weak pthread_key_delete -#pragma weak pthread_getspecific -#pragma weak pthread_setspecific -#pragma weak pthread_create - -#pragma weak pthread_mutex_lock -#pragma weak pthread_mutex_trylock -#pragma weak pthread_mutex_unlock +__gthrw(pthread_once); +__gthrw(pthread_key_create); +__gthrw(pthread_key_delete); +__gthrw(pthread_getspecific); +__gthrw(pthread_setspecific); +__gthrw(pthread_create); -#endif /* SUPPORTS_WEAK */ +__gthrw(pthread_mutex_lock); +__gthrw(pthread_mutex_trylock); +__gthrw(pthread_mutex_unlock); static inline int __gthread_active_p (void) @@ -93,7 +100,7 @@ static inline int __gthread_once (__gthread_once_t *once, void (*func) (void)) { if (__tpf_pthread_active ()) - return pthread_once (once, func); + return __gthrw_pthread_once (once, func); else return -1; } @@ -102,7 +109,7 @@ static inline int __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) { if (__tpf_pthread_active ()) - return pthread_key_create (key, dtor); + return __gthrw_pthread_key_create (key, dtor); else return -1; } @@ -111,7 +118,7 @@ static inline int __gthread_key_delete (__gthread_key_t key) { if (__tpf_pthread_active ()) - return pthread_key_delete (key); + return __gthrw_pthread_key_delete (key); else return -1; } @@ -120,7 +127,7 @@ static inline void * __gthread_getspecific (__gthread_key_t key) { if (__tpf_pthread_active ()) - return pthread_getspecific (key); + return __gthrw_pthread_getspecific (key); else return NULL; } @@ -129,7 +136,7 @@ static inline int __gthread_setspecific (__gthread_key_t key, const void *ptr) { if (__tpf_pthread_active ()) - return pthread_setspecific (key, ptr); + return __gthrw_pthread_setspecific (key, ptr); else return -1; } @@ -138,7 +145,7 @@ static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex) { if (__tpf_pthread_active ()) - return pthread_mutex_lock (mutex); + return __gthrw_pthread_mutex_lock (mutex); else return 0; } @@ -147,7 +154,7 @@ static inline int __gthread_mutex_trylock (__gthread_mutex_t *mutex) { if (__tpf_pthread_active ()) - return pthread_mutex_trylock (mutex); + return __gthrw_pthread_mutex_trylock (mutex); else return 0; } @@ -156,7 +163,7 @@ static inline int __gthread_mutex_unlock (__gthread_mutex_t *mutex) { if (__tpf_pthread_active ()) - return pthread_mutex_unlock (mutex); + return __gthrw_pthread_mutex_unlock (mutex); else return 0; } diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index d74d9457d7b..e7eec87bfc1 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -1485,7 +1485,7 @@ noce_get_alt_condition (struct noce_if_info *if_info, rtx target, rtx prev_insn; /* First, look to see if we put a constant in a register. */ - prev_insn = PREV_INSN (if_info->cond_earliest); + prev_insn = prev_nonnote_insn (if_info->cond_earliest); if (prev_insn && INSN_P (prev_insn) && GET_CODE (PATTERN (prev_insn)) == SET) @@ -1697,7 +1697,9 @@ noce_try_abs (struct noce_if_info *if_info) if (no_new_pseudos) return FALSE; - /* Recognize A and B as constituting an ABS or NABS. */ + /* Recognize A and B as constituting an ABS or NABS. The canonical + form is a branch around the negation, taken when the object is the + first operand of a comparison against 0 that evaluates to true. */ a = if_info->a; b = if_info->b; if (GET_CODE (a) == NEG && rtx_equal_p (XEXP (a, 0), b)) @@ -1718,25 +1720,30 @@ noce_try_abs (struct noce_if_info *if_info) if (rtx_equal_p (XEXP (cond, 0), b)) c = XEXP (cond, 1); else if (rtx_equal_p (XEXP (cond, 1), b)) - c = XEXP (cond, 0); + { + c = XEXP (cond, 0); + negate = !negate; + } else return FALSE; - /* Verify that C is zero. Search backward through the block for - a REG_EQUAL note if necessary. */ + /* Verify that C is zero. Search one step backward for a + REG_EQUAL note or a simple source if necessary. */ if (REG_P (c)) { - rtx insn, note = NULL; - for (insn = earliest; - insn != BB_HEAD (if_info->test_bb); - insn = PREV_INSN (insn)) - if (INSN_P (insn) - && ((note = find_reg_note (insn, REG_EQUAL, c)) - || (note = find_reg_note (insn, REG_EQUIV, c)))) - break; - if (! note) + rtx set, insn = prev_nonnote_insn (earliest); + if (insn + && (set = single_set (insn)) + && rtx_equal_p (SET_DEST (set), c)) + { + rtx note = find_reg_equal_equiv_note (insn); + if (note) + c = XEXP (note, 0); + else + c = SET_SRC (set); + } + else return FALSE; - c = XEXP (note, 0); } if (MEM_P (c) && GET_CODE (XEXP (c, 0)) == SYMBOL_REF @@ -2025,6 +2032,59 @@ noce_operand_ok (rtx op) return ! may_trap_p (op); } +/* Return true if a write into MEM may trap or fault. */ + +static bool +noce_mem_write_may_trap_or_fault_p (rtx mem) +{ + rtx addr; + + if (MEM_READONLY_P (mem)) + return true; + + if (may_trap_or_fault_p (mem)) + return true; + + addr = XEXP (mem, 0); + + /* Call target hook to avoid the effects of -fpic etc.... */ + addr = targetm.delegitimize_address (addr); + + while (addr) + switch (GET_CODE (addr)) + { + case CONST: + case PRE_DEC: + case PRE_INC: + case POST_DEC: + case POST_INC: + case POST_MODIFY: + addr = XEXP (addr, 0); + break; + case LO_SUM: + case PRE_MODIFY: + addr = XEXP (addr, 1); + break; + case PLUS: + if (GET_CODE (XEXP (addr, 1)) == CONST_INT) + addr = XEXP (addr, 0); + else + return false; + break; + case LABEL_REF: + return true; + case SYMBOL_REF: + if (SYMBOL_REF_DECL (addr) + && decl_readonly_section (SYMBOL_REF_DECL (addr), 0)) + return true; + return false; + default: + return false; + } + + return false; +} + /* Given a simple IF-THEN or IF-THEN-ELSE block, attempt to convert it without using conditional execution. Return TRUE if we were successful at converting the block. */ @@ -2136,14 +2196,6 @@ noce_process_if_block (struct ce_if_block * ce_info) if (side_effects_p (x)) return FALSE; - /* If x is a read-only memory, then the program is valid only if we - avoid the store into it. If there are stores on both the THEN and - ELSE arms, then we can go ahead with the conversion; either the - program is broken, or the condition is always false such that the - other memory is selected. */ - if (!set_b && MEM_P (x) && MEM_READONLY_P (x)) - return FALSE; - b = (set_b ? SET_SRC (set_b) : x); /* Only operate on register destinations, and even then avoid extending @@ -2211,23 +2263,16 @@ noce_process_if_block (struct ce_if_block * ce_info) } /* Disallow the "if (...) x = a;" form (with an implicit "else x = x;") - for most optimizations if writing to x may trap, i.e. it's a memory - other than a static var or a stack slot. */ - if (! set_b - && MEM_P (orig_x) - && ! MEM_NOTRAP_P (orig_x) - && rtx_addr_can_trap_p (XEXP (orig_x, 0))) - { - if (HAVE_conditional_move) - { - if (noce_try_cmove (&if_info)) - goto success; - if (! HAVE_conditional_execution - && noce_try_cmove_arith (&if_info)) - goto success; - } - return FALSE; - } + for optimizations if writing to x may trap or fault, i.e. it's a memory + other than a static var or a stack slot, is misaligned on strict + aligned machines or is read-only. + If x is a read-only memory, then the program is valid only if we + avoid the store into it. If there are stores on both the THEN and + ELSE arms, then we can go ahead with the conversion; either the + program is broken, or the condition is always false such that the + other memory is selected. */ + if (!set_b && MEM_P (orig_x) && noce_mem_write_may_trap_or_fault_p (orig_x)) + return FALSE; if (noce_try_move (&if_info)) goto success; diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index ef4dd839b67..b6d6095abc5 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -780,11 +780,13 @@ cgraph_decide_inlining_of_small_functions (void) if (dump_file) { fprintf (dump_file, - "\nConsidering %s with %i insns to be inlined into %s\n" + "\nConsidering %s with %i insns\n", + cgraph_node_name (edge->callee), + edge->callee->global.insns); + fprintf (dump_file, + " to be inlined into %s\n" " Estimated growth after inlined into all callees is %+i insns.\n" " Estimated badness is %i.\n", - cgraph_node_name (edge->callee), - edge->callee->global.insns, cgraph_node_name (edge->caller), cgraph_estimate_growth (edge->callee), cgraph_edge_badness (edge)); @@ -885,14 +887,14 @@ cgraph_decide_inlining_of_small_functions (void) bitmap_clear (updated_nodes); if (dump_file) - fprintf (dump_file, - " Inlined into %s which now has %i insns.\n", - cgraph_node_name (edge->caller), - edge->caller->global.insns); - if (dump_file) - fprintf (dump_file, - " Inlined for a net change of %+i insns.\n", - overall_insns - old_insns); + { + fprintf (dump_file, + " Inlined into %s which now has %i insns," + "net change of %+i insns.\n", + cgraph_node_name (edge->caller), + edge->caller->global.insns, + overall_insns - old_insns); + } } while ((edge = fibheap_extract_min (heap)) != NULL) { @@ -933,7 +935,11 @@ cgraph_decide_inlining (void) overall_insns = initial_insns; gcc_assert (!max_count || (profile_info && flag_branch_probabilities)); - max_insns = ((HOST_WIDEST_INT) overall_insns + max_insns = overall_insns; + if (max_insns < PARAM_VALUE (PARAM_LARGE_UNIT_INSNS)) + max_insns = PARAM_VALUE (PARAM_LARGE_UNIT_INSNS); + + max_insns = ((HOST_WIDEST_INT) max_insns * (100 + PARAM_VALUE (PARAM_INLINE_UNIT_GROWTH)) / 100); nnodes = cgraph_postorder (order); @@ -1034,12 +1040,15 @@ cgraph_decide_inlining (void) if (ok) { if (dump_file) - fprintf (dump_file, - "\nConsidering %s %i insns.\n" - " Called once from %s %i insns.\n", - cgraph_node_name (node), node->global.insns, - cgraph_node_name (node->callers->caller), - node->callers->caller->global.insns); + { + fprintf (dump_file, + "\nConsidering %s %i insns.\n", + cgraph_node_name (node), node->global.insns); + fprintf (dump_file, + " Called once from %s %i insns.\n", + cgraph_node_name (node->callers->caller), + node->callers->caller->global.insns); + } old_insns = overall_insns; @@ -1100,8 +1109,11 @@ cgraph_decide_inlining_incrementally (struct cgraph_node *node, bool early) && (DECL_SAVED_TREE (e->callee->decl) || e->callee->inline_decl)) { if (dump_file && early) - fprintf (dump_file, " Early inlining %s into %s\n", - cgraph_node_name (e->callee), cgraph_node_name (node)); + { + fprintf (dump_file, " Early inlining %s", + cgraph_node_name (e->callee)); + fprintf (dump_file, " into %s\n", cgraph_node_name (node)); + } cgraph_mark_inline (e); inlined = true; } @@ -1122,8 +1134,11 @@ cgraph_decide_inlining_incrementally (struct cgraph_node *node, bool early) if (cgraph_default_inline_p (e->callee, &failed_reason)) { if (dump_file && early) - fprintf (dump_file, " Early inlining %s into %s\n", - cgraph_node_name (e->callee), cgraph_node_name (node)); + { + fprintf (dump_file, " Early inlining %s", + cgraph_node_name (e->callee)); + fprintf (dump_file, " into %s\n", cgraph_node_name (node)); + } cgraph_mark_inline (e); inlined = true; } diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 9baacf83259..9430dd8ca88 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -446,7 +446,7 @@ void ipa_callsite_compute_param (struct cgraph_edge *cs) { tree call_tree; - tree arg, cst_decl, arg_type, formal_type; + tree arg, cst_decl; int arg_num; int i; struct cgraph_node *mt; @@ -472,18 +472,8 @@ ipa_callsite_compute_param (struct cgraph_edge *cs) ipa_callsite_param_set_type (cs, arg_num, UNKNOWN_IPATYPE); else { - arg_type = TREE_TYPE (TREE_VALUE (arg)); - formal_type = TREE_TYPE (ipa_method_get_tree (cs->callee, arg_num)); - if (TYPE_NAME (arg_type) == TYPE_NAME (formal_type) - && TYPE_CONTEXT (arg_type) == TYPE_CONTEXT (formal_type) - && attribute_list_equal (TYPE_ATTRIBUTES (arg_type), - TYPE_ATTRIBUTES (formal_type))) - { - ipa_callsite_param_set_type (cs, arg_num, FORMAL_IPATYPE); - ipa_callsite_param_set_info_type_formal (cs, arg_num, i); - } - else - ipa_callsite_param_set_type (cs, arg_num, UNKNOWN_IPATYPE); + ipa_callsite_param_set_type (cs, arg_num, FORMAL_IPATYPE); + ipa_callsite_param_set_info_type_formal (cs, arg_num, i); } } /* If a constant value was passed as argument, @@ -492,18 +482,9 @@ ipa_callsite_compute_param (struct cgraph_edge *cs) else if (TREE_CODE (TREE_VALUE (arg)) == INTEGER_CST || TREE_CODE (TREE_VALUE (arg)) == REAL_CST) { - arg_type = TREE_TYPE (TREE_VALUE (arg)); - formal_type = TREE_TYPE (ipa_method_get_tree (cs->callee, arg_num)); - if (TYPE_NAME (arg_type) == TYPE_NAME (formal_type) - && TYPE_CONTEXT (arg_type) == TYPE_CONTEXT (formal_type) - && attribute_list_equal (TYPE_ATTRIBUTES (arg_type), - TYPE_ATTRIBUTES (formal_type))) - { - ipa_callsite_param_set_type (cs, arg_num, CONST_IPATYPE); - ipa_callsite_param_set_info_type (cs, arg_num, TREE_VALUE (arg)); - } - else - ipa_callsite_param_set_type (cs, arg_num, UNKNOWN_IPATYPE); + ipa_callsite_param_set_type (cs, arg_num, CONST_IPATYPE); + ipa_callsite_param_set_info_type (cs, arg_num, + TREE_VALUE (arg)); } /* This is for the case of Fortran. If the address of a const_decl was passed as argument then we store @@ -514,25 +495,13 @@ ipa_callsite_compute_param (struct cgraph_edge *cs) CONST_DECL) { cst_decl = TREE_OPERAND (TREE_VALUE (arg), 0); - arg_type = TREE_TYPE (DECL_INITIAL (cst_decl)); - formal_type = - TREE_TYPE (TREE_TYPE (ipa_method_get_tree (cs->callee, arg_num))); if (TREE_CODE (DECL_INITIAL (cst_decl)) == INTEGER_CST || TREE_CODE (DECL_INITIAL (cst_decl)) == REAL_CST) { - if (TYPE_NAME (arg_type) == TYPE_NAME (formal_type) - && TYPE_CONTEXT (arg_type) == TYPE_CONTEXT (formal_type) - && attribute_list_equal (TYPE_ATTRIBUTES (arg_type), - TYPE_ATTRIBUTES (formal_type))) - - { - ipa_callsite_param_set_type (cs, arg_num, - CONST_IPATYPE_REF); - ipa_callsite_param_set_info_type (cs, arg_num, DECL_INITIAL (cst_decl)); - - } - else - ipa_callsite_param_set_type (cs, arg_num, UNKNOWN_IPATYPE); + ipa_callsite_param_set_type (cs, arg_num, + CONST_IPATYPE_REF); + ipa_callsite_param_set_info_type (cs, arg_num, + DECL_INITIAL (cst_decl)); } } else diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 33c01d7d146..093fc8fb089 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,15 @@ +2005-11-08 Wil Mahan + + PR java/23617 + * zextract.c (read_zip_archive): Fix out of memory error when + reading jar files with zip-style comments. + +2005-11-07 Terry Laurenzo + + * gjavah.c (HANDLE_CODE_ATTRIBUTE): Only define for ELF Object + formats. + * gjavah.c (decompile_method): Add ATTRIBUTE_UNUSED + 2005-10-12 Nathan Sidwell Wil Mahan diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c index 7ca5fc73e5d..02fd7799bfe 100644 --- a/gcc/java/gjavah.c +++ b/gcc/java/gjavah.c @@ -145,7 +145,7 @@ static void print_method_info (FILE*, JCF*, int, int, JCF_u2); static void print_c_decl (FILE*, JCF*, int, int, int, const char *, int); static void print_stub_or_jni (FILE*, JCF*, int, int, int, const char *, int); static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int); -static void decompile_method (FILE*, JCF*, int); +static void decompile_method (FILE*, JCF*, int) ATTRIBUTE_UNUSED; static void add_class_decl (FILE*, JCF*, JCF_u2); static void print_name (FILE *, JCF *, int); @@ -250,8 +250,14 @@ static int is_first_data_member = 0; } \ } +/* Only include byte-code decompilation optimizations for ELF targets + since the generated headers are only known to work with ELF weak + symbol semnatics. Specifically, these optimizations are known to + not work on PE-COFF and possibly others. */ +#ifdef OBJECT_FORMAT_ELF #define HANDLE_CODE_ATTRIBUTE(MAX_STACK, MAX_LOCALS, CODE_LENGTH) \ if (out && method_declared) decompile_method (out, jcf, CODE_LENGTH); +#endif static int decompiled = 0; #define HANDLE_END_METHOD() \ diff --git a/gcc/java/zextract.c b/gcc/java/zextract.c index c10b952dcec..461cfbd493c 100644 --- a/gcc/java/zextract.c +++ b/gcc/java/zextract.c @@ -1,7 +1,7 @@ /* Handle a .class file embedded in a .zip archive. This extracts a member from a .zip file, but does not handle uncompression (since that is not needed for classes.zip). - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -287,6 +287,25 @@ read_zip_archive (ZipFile *zipf) return -1; if (read (zipf->fd, buffer, ECREC_SIZE+4) != ECREC_SIZE+4) return -2; + if (buffer[0] != 'P' + || strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3)) + { + /* We could not find the end-central-header signature, probably + because a zipfile comment is present. Scan backwards until we + find the signature. */ + if (lseek (zipf->fd, (long)(-ECREC_SIZE), SEEK_END) <= 0) + return -2; + while (buffer[0] != 'P' + || strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3)) + { + if (lseek (zipf->fd, -5, SEEK_CUR) < 0) + return -2; + if (read (zipf->fd, buffer, 4) != 4) + return -2; + } + if (read (zipf->fd, buffer + 4, ECREC_SIZE) != ECREC_SIZE) + return -2; + } zipf->count = makeword((const uch *) &buffer[TOTAL_ENTRIES_CENTRAL_DIR]); zipf->dir_size = makelong((const uch *) &buffer[SIZE_CENTRAL_DIRECTORY]); #define ALLOC xmalloc diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c index cf995a3f9f4..2d6db22cced 100644 --- a/gcc/lambda-code.c +++ b/gcc/lambda-code.c @@ -2591,7 +2591,7 @@ lambda_transform_legal_p (lambda_trans_matrix trans, int nb_loops, varray_type dependence_relations) { - unsigned int i; + unsigned int i, j; lambda_vector distres; struct data_dependence_relation *ddr; @@ -2628,15 +2628,18 @@ lambda_transform_legal_p (lambda_trans_matrix trans, /* If the dependence could not be captured by a distance vector, conservatively answer that the transform is not valid. */ - if (DDR_DIST_VECT (ddr) == NULL) + if (DDR_NUM_DIST_VECTS (ddr) == 0) return false; /* Compute trans.dist_vect */ - lambda_matrix_vector_mult (LTM_MATRIX (trans), nb_loops, nb_loops, - DDR_DIST_VECT (ddr), distres); + for (j = 0; j < DDR_NUM_DIST_VECTS (ddr); j++) + { + lambda_matrix_vector_mult (LTM_MATRIX (trans), nb_loops, nb_loops, + DDR_DIST_VECT (ddr, j), distres); - if (!lambda_vector_lexico_pos (distres, nb_loops)) - return false; + if (!lambda_vector_lexico_pos (distres, nb_loops)) + return false; + } } return true; } diff --git a/gcc/lambda.h b/gcc/lambda.h index 9855b6f73ed..418cb041ca9 100644 --- a/gcc/lambda.h +++ b/gcc/lambda.h @@ -30,6 +30,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA integers. */ typedef int *lambda_vector; +DEF_VEC_P(lambda_vector); +DEF_VEC_ALLOC_P(lambda_vector,heap); + /* An integer matrix. A matrix consists of m vectors of length n (IE all vectors are the same length). */ typedef lambda_vector *lambda_matrix; diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver index 341cf7a481b..a98ddb463a2 100644 --- a/gcc/libgcc-std.ver +++ b/gcc/libgcc-std.ver @@ -252,3 +252,20 @@ GCC_4.0.0 { __mulxc3 __multc3 } + +%inherit GCC_4.2.0 GCC_4.0.0 +GCC_4.2.0 { + # unsigned-to-floating conversions + __floatunsisf + __floatunsidf + __floatunsixf + __floatunsitf + __floatundidf + __floatundisf + __floatundixf + __floatunditf + __floatuntidf + __floatuntisf + __floatuntixf + __floatuntitf +} diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index 8838c308c7f..94f4b30006a 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -1323,6 +1323,17 @@ __floatdixf (DWtype u) } #endif +#if defined(L_floatundixf) && LIBGCC2_HAS_XF_MODE +XFtype +__floatundixf (UDWtype u) +{ + XFtype d = (UWtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + #if defined(L_floatditf) && LIBGCC2_HAS_TF_MODE TFtype __floatditf (DWtype u) @@ -1334,6 +1345,17 @@ __floatditf (DWtype u) } #endif +#if defined(L_floatunditf) && LIBGCC2_HAS_TF_MODE +TFtype +__floatunditf (UDWtype u) +{ + TFtype d = (UWtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + #if defined(L_floatdidf) && LIBGCC2_HAS_DF_MODE DFtype __floatdidf (DWtype u) @@ -1345,6 +1367,17 @@ __floatdidf (DWtype u) } #endif +#if defined(L_floatundidf) && LIBGCC2_HAS_DF_MODE +DFtype +__floatundidf (UDWtype u) +{ + DFtype d = (UWtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + #if defined(L_floatdisf) && LIBGCC2_HAS_SF_MODE #define DI_SIZE (W_TYPE_SIZE * 2) #define SF_SIZE FLT_MANT_DIG @@ -1433,6 +1466,87 @@ __floatdisf (DWtype u) } #endif +#if defined(L_floatundisf) && LIBGCC2_HAS_SF_MODE +#define DI_SIZE (W_TYPE_SIZE * 2) +#define SF_SIZE FLT_MANT_DIG + +SFtype +__floatundisf (UDWtype u) +{ +#if SF_SIZE >= W_TYPE_SIZE + /* When the word size is small, we never get any rounding error. */ + SFtype f = (UWtype) (u >> W_TYPE_SIZE); + f *= Wtype_MAXp1_F; + f += (UWtype)u; + return f; +#elif LIBGCC2_HAS_DF_MODE + +#if LIBGCC2_DOUBLE_TYPE_SIZE == 64 +#define DF_SIZE DBL_MANT_DIG +#elif LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64 +#define DF_SIZE LDBL_MANT_DIG +#else +# error +#endif + +#define REP_BIT ((UDWtype) 1 << (DI_SIZE - DF_SIZE)) + + /* Protect against double-rounding error. + Represent any low-order bits, that might be truncated by a bit that + won't be lost. The bit can go in anywhere below the rounding position + of the SFmode. A fixed mask and bit position handles all usual + configurations. It doesn't handle the case of 128-bit DImode, however. */ + if (DF_SIZE < DI_SIZE + && DF_SIZE > (DI_SIZE - DF_SIZE + SF_SIZE)) + { + if (u >= ((UDWtype) 1 << DF_SIZE)) + { + if ((UDWtype) u & (REP_BIT - 1)) + { + u &= ~ (REP_BIT - 1); + u |= REP_BIT; + } + } + } + + /* Do the calculation in DFmode so that we don't lose any of the + precision of the high word while multiplying it. */ + DFtype f = (UWtype) (u >> W_TYPE_SIZE); + f *= Wtype_MAXp1_F; + f += (UWtype)u; + return (SFtype) f; +#else + /* Finally, the word size is larger than the number of bits in SFmode, + and we've got no DFmode. The only way to avoid double rounding is + to special case the extraction. */ + + /* If there are no high bits set, fall back to one conversion. */ + if ((UWtype)u == u) + return (SFtype)(UWtype)u; + + /* Otherwise, find the power of two. */ + UWtype hi = u >> W_TYPE_SIZE; + + UWtype count, shift; + count_leading_zeros (count, hi); + + shift = W_TYPE_SIZE - count; + + /* Shift down the most significant bits. */ + hi = u >> shift; + + /* If we lost any nonzero bits, set the lsb to ensure correct rounding. */ + if (u & ((1 << shift) - 1)) + hi |= 1; + + /* Convert the one word of data, and rescale. */ + SFtype f = hi; + f *= (UWtype)1 << shift; + return f; +#endif +} +#endif + #if defined(L_fixunsxfsi) && LIBGCC2_HAS_XF_MODE /* Reenable the normal types, in case limits.h needs them. */ #undef char diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index 56ffc61f4be..11a1d9a3ff8 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -238,6 +238,10 @@ typedef int word_type __attribute__ ((mode (__word__))); #define __floatditf __NDW(float,tf) #define __floatdidf __NDW(float,df) #define __floatdisf __NDW(float,sf) +#define __floatundixf __NDW(floatun,xf) +#define __floatunditf __NDW(floatun,tf) +#define __floatundidf __NDW(floatun,df) +#define __floatundisf __NDW(floatun,sf) #define __fixunsxfSI __NW(fixunsxf,) #define __fixunstfSI __NW(fixunstf,) #define __fixunsdfSI __NW(fixunsdf,) @@ -318,6 +322,7 @@ extern SItype __negvsi2 (SItype); #if LIBGCC2_HAS_SF_MODE extern DWtype __fixsfdi (SFtype); extern SFtype __floatdisf (DWtype); +extern SFtype __floatundisf (UDWtype); extern UWtype __fixunssfSI (SFtype); extern DWtype __fixunssfDI (SFtype); extern SFtype __powisf2 (SFtype, int); @@ -327,6 +332,7 @@ extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype); #if LIBGCC2_HAS_DF_MODE extern DWtype __fixdfdi (DFtype); extern DFtype __floatdidf (DWtype); +extern DFtype __floatundidf (UDWtype); extern UWtype __fixunsdfSI (DFtype); extern DWtype __fixunsdfDI (DFtype); extern DFtype __powidf2 (DFtype, int); @@ -338,6 +344,7 @@ extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype); extern DWtype __fixxfdi (XFtype); extern DWtype __fixunsxfDI (XFtype); extern XFtype __floatdixf (DWtype); +extern XFtype __floatundixf (UDWtype); extern UWtype __fixunsxfSI (XFtype); extern XFtype __powixf2 (XFtype, int); extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype); @@ -348,6 +355,7 @@ extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype); extern DWtype __fixunstfDI (TFtype); extern DWtype __fixtfdi (TFtype); extern TFtype __floatditf (DWtype); +extern TFtype __floatunditf (UDWtype); extern TFtype __powitf2 (TFtype, int); extern TCtype __divtc3 (TFtype, TFtype, TFtype, TFtype); extern TCtype __multc3 (TFtype, TFtype, TFtype, TFtype); diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index 4ee4991d0cd..0380ff974e7 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -762,8 +762,19 @@ memref_used_between_p (rtx memref, rtx start, rtx end) for (insn = NEXT_INSN (start); insn != NEXT_INSN (end); insn = NEXT_INSN (insn)) - if (INSN_P (insn) && memref_referenced_p (memref, PATTERN (insn))) - return 1; + { + if (!INSN_P (insn)) + continue; + + if (memref_referenced_p (memref, PATTERN (insn))) + return 1; + + /* Nonconst functions may access memory. */ + if (CALL_P (insn) + && (! CONST_OR_PURE_CALL_P (insn) + || pure_call_p (insn))) + return 1; + } return 0; } diff --git a/gcc/longlong.h b/gcc/longlong.h index 3f42347c7f3..f713f75b6e5 100644 --- a/gcc/longlong.h +++ b/gcc/longlong.h @@ -41,9 +41,10 @@ #define UWtype USItype #define UHWtype USItype #define UDWtype UDItype -extern const UQItype __clz_tab[256] ATTRIBUTE_HIDDEN; #endif +extern const UQItype __clz_tab[256]; + /* Define auxiliary asm macros. 1) umul_ppmm(high_prod, low_prod, multiplier, multiplicand) multiplies two @@ -193,7 +194,7 @@ UDItype __umulsidi3 (USItype, USItype); : "%r" ((USItype) (ah)), \ "rI" ((USItype) (bh)), \ "%r" ((USItype) (al)), \ - "rI" ((USItype) (bl))) + "rI" ((USItype) (bl)) __CLOBBER_CC) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subs %1, %4, %5\n\tsbc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ @@ -201,7 +202,7 @@ UDItype __umulsidi3 (USItype, USItype); : "r" ((USItype) (ah)), \ "rI" ((USItype) (bh)), \ "r" ((USItype) (al)), \ - "rI" ((USItype) (bl))) + "rI" ((USItype) (bl)) __CLOBBER_CC) #define umul_ppmm(xh, xl, a, b) \ {register USItype __t0, __t1, __t2; \ __asm__ ("%@ Inlined umul_ppmm\n" \ @@ -221,7 +222,7 @@ UDItype __umulsidi3 (USItype, USItype); "=r" ((USItype) (xl)), \ "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ : "r" ((USItype) (a)), \ - "r" ((USItype) (b)));} + "r" ((USItype) (b)) __CLOBBER_CC );} #define UMUL_TIME 20 #define UDIV_TIME 100 #endif /* __arm__ */ diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index 7765a0eda35..8fe549b6b04 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -40,6 +40,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "coretypes.h" #include "tm.h" #include "rtl.h" +#include "tm_p.h" #include "hard-reg-set.h" #include "obstack.h" #include "basic-block.h" @@ -291,7 +292,10 @@ find_exits (struct loop *loop, basic_block *body, static bool may_assign_reg_p (rtx x) { - return can_copy_p (GET_MODE (x)); + return (can_copy_p (GET_MODE (x)) + && (!REG_P (x) + || !HARD_REGISTER_P (x) + || REGNO_REG_CLASS (REGNO (x)) != NO_REGS)); } /* Finds definitions that may correspond to invariants in LOOP with body BODY. @@ -436,8 +440,8 @@ find_invariant_insn (rtx insn, bool always_reached, bool always_executed, || HARD_REGISTER_P (dest)) simple = false; - if (!check_maybe_invariant (SET_SRC (set)) - || !may_assign_reg_p (SET_DEST (set))) + if (!may_assign_reg_p (SET_DEST (set)) + || !check_maybe_invariant (SET_SRC (set))) return; if (may_trap_p (PATTERN (insn))) @@ -793,9 +797,22 @@ move_invariant_reg (struct loop *loop, unsigned invno, struct df *df) reg = gen_reg_rtx (GET_MODE (SET_DEST (set))); df_pattern_emit_after (df, gen_move_insn (SET_DEST (set), reg), BLOCK_FOR_INSN (inv->insn), inv->insn); - SET_DEST (set) = reg; - reorder_insns (inv->insn, inv->insn, BB_END (preheader)); - df_insn_modify (df, preheader, inv->insn); + + /* If the SET_DEST of the invariant insn is a reg, we can just move + the insn out of the loop. Otherwise, we have to use gen_move_insn + to let emit_move_insn produce a valid instruction stream. */ + if (REG_P (SET_DEST (set))) + { + SET_DEST (set) = reg; + reorder_insns (inv->insn, inv->insn, BB_END (preheader)); + df_insn_modify (df, preheader, inv->insn); + } + else + { + df_pattern_emit_after (df, gen_move_insn (reg, SET_SRC (set)), + preheader, BB_END (preheader)); + df_insn_delete (df, BLOCK_FOR_INSN (inv->insn), inv->insn); + } /* Replace the uses we know to be dominated. It saves work for copy propagation, and also it is necessary so that dependent invariants @@ -926,4 +943,8 @@ move_loop_invariants (struct loops *loops) free_loop_data (loops->parray[i]); df_finish (df); + +#ifdef ENABLE_CHECKING + verify_flow_info (); +#endif } diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 4cabfd58504..69b1eb675c0 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -2118,9 +2118,8 @@ apply_opt_in_copies (struct opt_info *opt_info, if (ivts) { -#ifdef ENABLE_CHECKING - gcc_assert (rtx_equal_p (PATTERN (insn), PATTERN (orig_insn))); -#endif + gcc_assert (GET_CODE (PATTERN (insn)) + == GET_CODE (PATTERN (orig_insn))); if (!delta) insert_base_initialization (ivts, insn); @@ -2133,9 +2132,8 @@ apply_opt_in_copies (struct opt_info *opt_info, ves = htab_find (opt_info->insns_with_var_to_expand, &ve_templ); if (ves) { -#ifdef ENABLE_CHECKING - gcc_assert (rtx_equal_p (PATTERN (insn), PATTERN (orig_insn))); -#endif + gcc_assert (GET_CODE (PATTERN (insn)) + == GET_CODE (PATTERN (orig_insn))); expand_var_during_unrolling (ves, insn); } } diff --git a/gcc/loop.c b/gcc/loop.c index 8142f63f5af..6475eaf2e3c 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -1238,13 +1238,15 @@ scan_loop (struct loop *loop, int flags) - with -Os (this certainly increases size), - if the mode doesn't support copy operations (obviously), - if the source is already a reg (the motion will gain nothing), - - if the source is a legitimate constant (likewise). */ + - if the source is a legitimate constant (likewise), + - if the dest is a hard register (may be unrecognizable). */ else if (insert_temp && (optimize_size || ! can_copy_p (GET_MODE (SET_SRC (set))) || REG_P (SET_SRC (set)) || (CONSTANT_P (SET_SRC (set)) - && LEGITIMATE_CONSTANT_P (SET_SRC (set))))) + && LEGITIMATE_CONSTANT_P (SET_SRC (set))) + || REGNO (SET_DEST (set)) < FIRST_PSEUDO_REGISTER)) ; else if ((tem = loop_invariant_p (loop, src)) && (dependencies == 0 @@ -10803,7 +10805,7 @@ load_mems (const struct loop *loop) } if (flag_float_store && written - && GET_MODE_CLASS (GET_MODE (mem)) == MODE_FLOAT) + && SCALAR_FLOAT_MODE_P (GET_MODE (mem))) loop_info->mems[i].optimize = 0; /* If this MEM is written to, we must be sure that there diff --git a/gcc/mklibgcc.in b/gcc/mklibgcc.in index aa61d41f433..816e301023b 100644 --- a/gcc/mklibgcc.in +++ b/gcc/mklibgcc.in @@ -63,7 +63,7 @@ lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 - _divxc3 _divtc3' + _divxc3 _divtc3 _floatundidf _floatundisf _floatundixf _floatunditf' # Disable SHLIB_LINK if shared libgcc not enabled. if [ "@enable_shared@" = "no" ]; then @@ -510,36 +510,55 @@ for ml in $MULTILIBS; do # If we don't have libgcc_eh.a, only LIB2ADDEH matters. If we do, only # LIB2ADDEHSTATIC and LIB2ADDEHSHARED matter. (Usually all three are - # identical.) We do _not_ handle assembly files in this context. + # identical.) if [ "$libgcc_eh_a" ]; then for file in $LIB2ADDEHSTATIC; do - case $file in - *.c) ;; - *) echo "Unhandled extension: $file">&2; exit 1 ;; - esac - - name=`echo $file | sed -e 's/[.]c$//'` + name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'` oname=`echo $name | sed -e 's,.*/,,'` out="libgcc/${dir}/${oname}${objext}" - echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep - echo " $gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out + case $file in + *.c) + echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep + echo " $gcc_compile" $flags -fexceptions '$(vis_hide)' -c $file -o $out + ;; + *.asm | *.S) + # We have to compile it twice in order to establish the list + # of symbols to be marked hidden. + outV="libgcc/${dir}/${oname}.vis" + outT="libgcc/${dir}/${oname}_t${objext}" + echo ${outT}: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep + echo " $gcc_compile" $flags -xassembler-with-cpp \ + -c $file -o ${outT} + echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep $outV + echo " $gcc_compile" $flags -xassembler-with-cpp \ + -include $outV -c $file -o $out + echo "${outV}: ${outT}; \$(gen-hide-list)" + ;; + *) echo "Unhandled extension: $file">&2; exit 1 ;; + esac + echo $libgcc_eh_a: $out done for file in $LIB2ADDEHSHARED; do - case $file in - *.c) ;; - *) echo "Unhandled extension: $file">&2; exit 1 ;; - esac - - name=`echo $file | sed -e 's/[.]c$//'` + name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'` oname=`echo $name | sed -e 's,.*/,,'` outS="libgcc/${dir}/${oname}_s${objext}" - echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep - echo " $gcc_s_compile" $flags -fexceptions -c $file -o $outS + case $file in + *.c) + echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep + echo " $gcc_s_compile" $flags -fexceptions -c $file -o $outS + ;; + *.asm | *.S) + echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep + echo " $gcc_s_compile" $flags -xassembler-with-cpp -c $file -o $outS + ;; + *) echo "Unhandled extension: $file">&2; exit 1 ;; + esac + echo $libgcc_s_so: $outS if [ "$SHLIB_MKMAP" ]; then echo libgcc/${dir}/libgcc.map: $outS @@ -561,22 +580,28 @@ for ml in $MULTILIBS; do else # no libgcc_eh.a for file in $LIB2ADDEH; do - case $file in - *.c) ;; - *) echo "Unhandled extension: $file">&2; exit 1 ;; - esac - - name=`echo $file | sed -e 's/[.]c$//'` + name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'` oname=`echo $name | sed -e 's,.*/,,'` out="libgcc/${dir}/${oname}${objext}" - echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep - echo " $gcc_compile" $flags -fexceptions '$(vis_hide)' -c $file -o $out + case $file in + *.c) + echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep + echo " $gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out + ;; + *.asm | *.S) + echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep + echo " $gcc_compile" $flags -xassembler-with-cpp \ + -c $file -o $out + ;; + *) echo "Unhandled extension: $file">&2; exit 1 ;; + esac + echo $libgcc_a: $out done fi - # Again, this does not handle assembly. + # We do _not_ handle assembly files in this context. if [ "$LIBUNWIND" ]; then for file in $LIBUNWIND; do case $file in @@ -781,7 +806,7 @@ echo " if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi" if [ "$need_eh_dummy" ]; then echo "eh_dummy.c:" - echo " echo 'struct eh_dummy;' > \$@" + echo " echo 'int __libgcc_eh_dummy;' > \$@" fi echo "" diff --git a/gcc/objcp/ChangeLog b/gcc/objcp/ChangeLog index 061011e1646..c89d3be736f 100644 --- a/gcc/objcp/ChangeLog +++ b/gcc/objcp/ChangeLog @@ -1,3 +1,9 @@ +2005-11-22 Andrew Pinski + + * objcp-decl.c (objcp_lookup_name): Remove. + * objcp-decl.h (objcp_lookup_name): Delete. + (lookup_name): Kill define. + 2005-09-11 Richard Henderson * objcp-lang.c (objcxx_init_ts): Remove ALIAS_DECL. diff --git a/gcc/objcp/objcp-decl.c b/gcc/objcp/objcp-decl.c index 8a26c8fab7b..c7882077b45 100644 --- a/gcc/objcp/objcp-decl.c +++ b/gcc/objcp/objcp-decl.c @@ -88,12 +88,6 @@ objcp_finish_function (void) } tree -objcp_lookup_name (tree name) -{ - return lookup_name (name, -1); -} - -tree objcp_xref_tag (enum tree_code code ATTRIBUTE_UNUSED, tree name) { return xref_tag (record_type, name, ts_global, false); diff --git a/gcc/objcp/objcp-decl.h b/gcc/objcp/objcp-decl.h index 81cf7adacb2..28821791efb 100644 --- a/gcc/objcp/objcp-decl.h +++ b/gcc/objcp/objcp-decl.h @@ -26,7 +26,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA extern tree objcp_start_struct (enum tree_code, tree); extern tree objcp_finish_struct (tree, tree, tree); extern void objcp_finish_function (void); -extern tree objcp_lookup_name (tree); extern tree objcp_build_function_call (tree, tree); extern tree objcp_xref_tag (enum tree_code, tree); extern int objcp_comptypes (tree, tree); @@ -46,8 +45,6 @@ extern tree objcp_end_compound_stmt (tree, int); objcp_finish_struct (t, fieldlist, attributes) #define finish_function() \ objcp_finish_function () -#define lookup_name(name) \ - objcp_lookup_name (name) #define xref_tag(code, name) \ objcp_xref_tag (code, name) #define comptypes(type1, type2) \ diff --git a/gcc/optabs.c b/gcc/optabs.c index d3e1db69edd..9b90d4701d0 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -2489,7 +2489,7 @@ expand_unop (enum machine_mode mode, optab unoptab, rtx op0, rtx target, if (unoptab->code == NEG) { /* Try negating floating point values by flipping the sign bit. */ - if (class == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (mode)) { temp = expand_absneg_bit (NEG, mode, op0, target); if (temp) @@ -2641,7 +2641,7 @@ expand_abs_nojump (enum machine_mode mode, rtx op0, rtx target, return temp; /* For floating point modes, try clearing the sign bit. */ - if (GET_MODE_CLASS (mode) == MODE_FLOAT) + if (SCALAR_FLOAT_MODE_P (mode)) { temp = expand_absneg_bit (ABS, mode, op0, target); if (temp) @@ -3552,7 +3552,7 @@ prepare_cmp_insn (rtx *px, rtx *py, enum rtx_code *pcomparison, rtx size, return; } - gcc_assert (class == MODE_FLOAT); + gcc_assert (SCALAR_FLOAT_MODE_P (mode)); prepare_float_lib_cmp (px, py, pcomparison, pmode, punsignedp); } @@ -4310,6 +4310,7 @@ expand_float (rtx to, rtx from, int unsignedp) enum insn_code icode; rtx target = to; enum machine_mode fmode, imode; + bool can_do_signed = false; /* Crash now, because we won't be able to decide which mode to use. */ gcc_assert (GET_MODE (from) != VOIDmode); @@ -4331,8 +4332,14 @@ expand_float (rtx to, rtx from, int unsignedp) continue; icode = can_float_p (fmode, imode, unsignedp); - if (icode == CODE_FOR_nothing && imode != GET_MODE (from) && unsignedp) - icode = can_float_p (fmode, imode, 0), doing_unsigned = 0; + if (icode == CODE_FOR_nothing && unsignedp) + { + enum insn_code scode = can_float_p (fmode, imode, 0); + if (scode != CODE_FOR_nothing) + can_do_signed = true; + if (imode != GET_MODE (from)) + icode = scode, doing_unsigned = 0; + } if (icode != CODE_FOR_nothing) { @@ -4353,7 +4360,7 @@ expand_float (rtx to, rtx from, int unsignedp) /* Unsigned integer, and no way to convert directly. Convert as signed, then conditionally adjust the result. */ - if (unsignedp) + if (unsignedp && can_do_signed) { rtx label = gen_label_rtx (); rtx temp; @@ -5010,6 +5017,7 @@ init_optabs (void) umul_highpart_optab = init_optab (UNKNOWN); smul_widen_optab = init_optab (UNKNOWN); umul_widen_optab = init_optab (UNKNOWN); + usmul_widen_optab = init_optab (UNKNOWN); sdiv_optab = init_optab (DIV); sdivv_optab = init_optabv (DIV); sdivmod_optab = init_optab (UNKNOWN); @@ -5231,6 +5239,8 @@ init_optabs (void) /* Conversions. */ init_interclass_conv_libfuncs (sfloat_optab, "float", MODE_INT, MODE_FLOAT); + init_interclass_conv_libfuncs (ufloat_optab, "floatun", + MODE_INT, MODE_FLOAT); init_interclass_conv_libfuncs (sfix_optab, "fix", MODE_FLOAT, MODE_INT); init_interclass_conv_libfuncs (ufix_optab, "fixuns", diff --git a/gcc/optabs.h b/gcc/optabs.h index 582684f4038..78cf53b15ff 100644 --- a/gcc/optabs.h +++ b/gcc/optabs.h @@ -82,6 +82,8 @@ enum optab_index /* Signed multiply with result one machine mode wider than args */ OTI_smul_widen, OTI_umul_widen, + /* Widening multiply of one unsigned and one signed operand. */ + OTI_usmul_widen, /* Signed divide */ OTI_sdiv, @@ -268,6 +270,7 @@ extern GTY(()) optab optab_table[OTI_MAX]; #define umul_highpart_optab (optab_table[OTI_umul_highpart]) #define smul_widen_optab (optab_table[OTI_smul_widen]) #define umul_widen_optab (optab_table[OTI_umul_widen]) +#define usmul_widen_optab (optab_table[OTI_usmul_widen]) #define sdiv_optab (optab_table[OTI_sdiv]) #define smulv_optab (optab_table[OTI_smulv]) #define sdivv_optab (optab_table[OTI_sdivv]) diff --git a/gcc/params.def b/gcc/params.def index f808682a06f..f585c39dd98 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -179,6 +179,10 @@ DEFPARAM(PARAM_LARGE_FUNCTION_GROWTH, "large-function-growth", "Maximal growth due to inlining of large function (in percent)", 100, 0, 0) +DEFPARAM(PARAM_LARGE_UNIT_INSNS, + "large-unit-insns", + "The size of translation unit to be considered large", + 10000, 0, 0) DEFPARAM(PARAM_INLINE_UNIT_GROWTH, "inline-unit-growth", "how much can given compilation unit grow because of the inlining (in percent)", @@ -309,6 +313,22 @@ DEFPARAM(HOT_BB_FREQUENCY_FRACTION, "hot-bb-frequency-fraction", "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot", 1000, 0, 0) + +/* For guessed profiles, the loops having unknown number of iterations + are predicted to iterate relatively few (10) times at average. + For functions containing one loop with large known number of iterations + and other loops having unbounded loops we would end up predicting all + the other loops cold that is not usually the case. So we need to artificially + flatten the profile. + + We need to cut the maximal predicted iterations to large enought iterations + so the loop appears important, but safely within HOT_BB_COUNT_FRACTION + range. */ + +DEFPARAM(PARAM_MAX_PREDICTED_ITERATIONS, + "max-predicted-iterations", + "The maximum number of loop iterations we predict statically", + 100, 0, 0) DEFPARAM(TRACER_DYNAMIC_COVERAGE_FEEDBACK, "tracer-dynamic-coverage-feedback", "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available", @@ -363,6 +383,10 @@ DEFPARAM(PARAM_MAX_CSE_PATH_LENGTH, "max-cse-path-length", "The maximum length of path considered in cse", 10, 0, 0) +DEFPARAM(PARAM_MAX_CSE_INSNS, + "max-flow-memory-locations", + "The maximum instructions CSE process before flushing", + 1000, 0, 0) /* The cost of expression in loop invariant motion that is considered expensive. */ @@ -417,6 +441,10 @@ DEFPARAM(PARAM_MAX_CSELIB_MEMORY_LOCATIONS, "max-cselib-memory-locations", "The maximum memory locations recorded by cselib", 500, 0, 0) +DEFPARAM(PARAM_MAX_FLOW_MEMORY_LOCATIONS, + "max-flow-memory-locations", + "The maximum memory locations recorded by flow", + 100, 0, 0) #ifdef ENABLE_GC_ALWAYS_COLLECT # define GGC_MIN_EXPAND_DEFAULT 0 @@ -506,6 +534,24 @@ DEFPARAM (PARAM_SSP_BUFFER_SIZE, "The lower bound for a buffer to be considered for stack smashing protection", 8, 1, 0) +/* When we thread through a block we have to make copies of the + statements within the block. Clearly for large blocks the code + duplication is bad. + + PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS specifies the maximum number + of statements and PHI nodes allowed in a block which is going to + be duplicated for thread jumping purposes. + + Some simple analysis showed that more than 99% of the jump + threading opportunities are for blocks with less than 15 + statements. So we can get the benefits of jump threading + without excessive code bloat for pathological cases with the + throttle set at 15 statements. */ +DEFPARAM (PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS, + "max-jump-thread-duplication-stmts", + "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps", + 15, 0, 0) + /* Local variables: mode:c diff --git a/gcc/passes.c b/gcc/passes.c index 39e9e403cf7..f5e80675a44 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -420,7 +420,25 @@ next_pass_1 (struct tree_opt_pass **list, struct tree_opt_pass *pass) } -/* Construct the pass tree. */ +/* Construct the pass tree. The sequencing of passes is driven by + the cgraph routines: + + cgraph_finalize_compilation_unit () + for each node N in the cgraph + cgraph_analyze_function (N) + cgraph_lower_function (N) -> all_lowering_passes + + If we are optimizing, cgraph_optimize is then invoked: + + cgraph_optimize () + ipa_passes () -> all_ipa_passes + cgraph_expand_all_functions () + for each node N in the cgraph + cgraph_expand_function (N) + cgraph_lower_function (N) -> Now a NOP. + lang_hooks.callgraph.expand_function (DECL (N)) + tree_rest_of_compilation (DECL (N)) -> all_passes +*/ void init_optimization_passes (void) @@ -440,9 +458,8 @@ init_optimization_passes (void) NEXT_PASS (pass_ipa_type_escape); *p = NULL; - /* All passes needed to lower the function into shape optimizers can operate - on. These passes are performed before interprocedural passes, unlike rest - of local passes (all_passes). */ + /* All passes needed to lower the function into shape optimizers can + operate on. */ p = &all_lowering_passes; NEXT_PASS (pass_remove_useless_stmts); NEXT_PASS (pass_mudflap_1); diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 9ae47f7ba41..e0ae04bfc89 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2005-11-20 Joseph S. Myers + + * gcc.pot: Regenerate. + 2005-09-17 Francois-Xavier Coudert PR fortran/15586 diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot index 8e6497f76a6..8765b65ddbe 100644 --- a/gcc/po/gcc.pot +++ b/gcc/po/gcc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" -"POT-Creation-Date: 2005-09-17 19:49+0200\n" +"POT-Creation-Date: 2005-11-20 18:04+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: c-decl.c:3712 +#: c-decl.c:3715 msgid "" msgstr "" @@ -289,53 +289,53 @@ msgstr "" msgid "End of search list.\n" msgstr "" -#: c-opts.c:1312 +#: c-opts.c:1329 msgid "" msgstr "" -#: c-opts.c:1328 +#: c-opts.c:1345 msgid "" msgstr "" -#: c-typeck.c:2116 c-typeck.c:4496 c-typeck.c:4498 c-typeck.c:4506 -#: c-typeck.c:4536 c-typeck.c:5915 +#: c-typeck.c:2226 c-typeck.c:4613 c-typeck.c:4615 c-typeck.c:4623 +#: c-typeck.c:4653 c-typeck.c:6032 msgid "initializer element is not constant" msgstr "" -#: c-typeck.c:4302 +#: c-typeck.c:4419 msgid "array initialized from parenthesized string constant" msgstr "" -#: c-typeck.c:4362 cp/typeck2.c:672 +#: c-typeck.c:4479 cp/typeck2.c:672 #, gcc-internal-format msgid "char-array initialized from wide string" msgstr "" -#: c-typeck.c:4367 +#: c-typeck.c:4484 msgid "wchar_t-array initialized from non-wide string" msgstr "" -#: c-typeck.c:4385 cp/typeck2.c:692 +#: c-typeck.c:4502 cp/typeck2.c:692 #, gcc-internal-format msgid "initializer-string for array of chars is too long" msgstr "" -#: c-typeck.c:4391 +#: c-typeck.c:4508 msgid "array of inappropriate type initialized from string constant" msgstr "" #. ??? This should not be an error when inlining calls to #. unprototyped functions. -#: c-typeck.c:4455 c-typeck.c:3954 cp/typeck.c:1392 +#: c-typeck.c:4572 c-typeck.c:4071 cp/typeck.c:1398 #, gcc-internal-format msgid "invalid use of non-lvalue array" msgstr "" -#: c-typeck.c:4479 +#: c-typeck.c:4596 msgid "array initialized from non-constant array expression" msgstr "" -#: c-typeck.c:4543 c-typeck.c:5919 +#: c-typeck.c:4660 c-typeck.c:6036 #, gcc-internal-format msgid "initializer element is not computable at load time" msgstr "" @@ -344,140 +344,140 @@ msgstr "" #. of VLAs themselves count as VLAs, it does not make #. sense to permit them to be initialized given that #. ordinary VLAs may not be initialized. -#: c-typeck.c:4554 c-decl.c:3147 c-decl.c:3162 +#: c-typeck.c:4671 c-decl.c:3152 c-decl.c:3167 #, gcc-internal-format msgid "variable-sized object may not be initialized" msgstr "" -#: c-typeck.c:4558 +#: c-typeck.c:4675 msgid "invalid initializer" msgstr "" -#: c-typeck.c:5032 +#: c-typeck.c:5149 msgid "extra brace group at end of initializer" msgstr "" -#: c-typeck.c:5052 +#: c-typeck.c:5169 msgid "missing braces around initializer" msgstr "" -#: c-typeck.c:5113 +#: c-typeck.c:5230 msgid "braces around scalar initializer" msgstr "" -#: c-typeck.c:5170 +#: c-typeck.c:5287 msgid "initialization of flexible array member in a nested context" msgstr "" -#: c-typeck.c:5172 +#: c-typeck.c:5289 msgid "initialization of a flexible array member" msgstr "" -#: c-typeck.c:5199 +#: c-typeck.c:5316 msgid "missing initializer" msgstr "" -#: c-typeck.c:5221 +#: c-typeck.c:5338 msgid "empty scalar initializer" msgstr "" -#: c-typeck.c:5226 +#: c-typeck.c:5343 msgid "extra elements in scalar initializer" msgstr "" -#: c-typeck.c:5330 c-typeck.c:5390 +#: c-typeck.c:5447 c-typeck.c:5507 msgid "array index in non-array initializer" msgstr "" -#: c-typeck.c:5335 c-typeck.c:5443 +#: c-typeck.c:5452 c-typeck.c:5560 msgid "field name not in record or union initializer" msgstr "" -#: c-typeck.c:5381 +#: c-typeck.c:5498 msgid "array index in initializer not of integer type" msgstr "" -#: c-typeck.c:5386 c-typeck.c:5388 +#: c-typeck.c:5503 c-typeck.c:5505 msgid "nonconstant array index in initializer" msgstr "" -#: c-typeck.c:5392 c-typeck.c:5395 +#: c-typeck.c:5509 c-typeck.c:5512 msgid "array index in initializer exceeds array bounds" msgstr "" -#: c-typeck.c:5406 +#: c-typeck.c:5523 msgid "empty index range in initializer" msgstr "" -#: c-typeck.c:5415 +#: c-typeck.c:5532 msgid "array index range in initializer exceeds array bounds" msgstr "" -#: c-typeck.c:5490 c-typeck.c:5511 c-typeck.c:5983 +#: c-typeck.c:5607 c-typeck.c:5628 c-typeck.c:6100 msgid "initialized field with side-effects overwritten" msgstr "" -#: c-typeck.c:6191 +#: c-typeck.c:6308 msgid "excess elements in char array initializer" msgstr "" -#: c-typeck.c:6198 c-typeck.c:6244 +#: c-typeck.c:6315 c-typeck.c:6361 msgid "excess elements in struct initializer" msgstr "" -#: c-typeck.c:6259 +#: c-typeck.c:6376 msgid "non-static initialization of a flexible array member" msgstr "" -#: c-typeck.c:6327 +#: c-typeck.c:6444 msgid "excess elements in union initializer" msgstr "" -#: c-typeck.c:6414 +#: c-typeck.c:6531 msgid "excess elements in array initializer" msgstr "" -#: c-typeck.c:6444 +#: c-typeck.c:6561 msgid "excess elements in vector initializer" msgstr "" -#: c-typeck.c:6468 +#: c-typeck.c:6585 msgid "excess elements in scalar initializer" msgstr "" -#: cfgrtl.c:2135 +#: cfgrtl.c:2129 msgid "flow control insn inside a basic block" msgstr "" -#: cfgrtl.c:2213 +#: cfgrtl.c:2207 msgid "wrong insn in the fallthru edge" msgstr "" -#: cfgrtl.c:2255 +#: cfgrtl.c:2249 msgid "insn outside basic block" msgstr "" -#: cfgrtl.c:2262 +#: cfgrtl.c:2256 msgid "return not followed by barrier" msgstr "" -#: cgraph.c:300 ipa-inline.c:292 +#: cgraph.c:300 ipa-inline.c:294 msgid "function body not available" msgstr "" -#: cgraph.c:302 cgraphunit.c:592 +#: cgraph.c:302 cgraphunit.c:594 msgid "redefined extern inline functions are not considered for inlining" msgstr "" -#: cgraph.c:305 cgraphunit.c:597 +#: cgraph.c:305 cgraphunit.c:599 msgid "function not considered for inlining" msgstr "" -#: cgraph.c:307 cgraphunit.c:595 ipa-inline.c:285 +#: cgraph.c:307 cgraphunit.c:597 ipa-inline.c:287 msgid "function not inlinable" msgstr "" -#: collect2.c:373 gcc.c:6757 +#: collect2.c:373 gcc.c:6765 #, c-format msgid "internal gcc abort in %s, at %s:%d" msgstr "" @@ -532,7 +532,7 @@ msgstr "" msgid "cannot find '%s'" msgstr "" -#: collect2.c:1556 collect2.c:2045 collect2.c:2200 gcc.c:2804 +#: collect2.c:1556 collect2.c:2045 collect2.c:2200 gcc.c:2809 #, c-format msgid "pex_init failed" msgstr "" @@ -616,17 +616,17 @@ msgstr "" msgid "too many input files" msgstr "" -#: diagnostic.c:174 +#: diagnostic.c:186 #, c-format msgid "%s:%d: confused by earlier errors, bailing out\n" msgstr "" -#: diagnostic.c:234 +#: diagnostic.c:246 #, c-format msgid "compilation terminated due to -Wfatal-errors.\n" msgstr "" -#: diagnostic.c:243 +#: diagnostic.c:255 #, c-format msgid "" "Please submit a full bug report,\n" @@ -634,54 +634,54 @@ msgid "" "See %s for instructions.\n" msgstr "" -#: diagnostic.c:252 +#: diagnostic.c:264 #, c-format msgid "compilation terminated.\n" msgstr "" -#: diagnostic.c:571 +#: diagnostic.c:583 #, c-format msgid "Internal compiler error: Error reporting routines re-entered.\n" msgstr "" -#: final.c:1088 +#: final.c:1110 msgid "negative insn length" msgstr "" -#: final.c:2445 +#: final.c:2467 msgid "could not split insn" msgstr "" -#: final.c:2791 +#: final.c:2816 msgid "invalid 'asm': " msgstr "" -#: final.c:2974 +#: final.c:2999 #, c-format msgid "nested assembly dialect alternatives" msgstr "" -#: final.c:2991 final.c:3003 +#: final.c:3016 final.c:3028 #, c-format msgid "unterminated assembly dialect alternative" msgstr "" -#: final.c:3050 +#: final.c:3075 #, c-format msgid "operand number missing after %%-letter" msgstr "" -#: final.c:3053 final.c:3094 +#: final.c:3078 final.c:3119 #, c-format msgid "operand number out of range" msgstr "" -#: final.c:3113 +#: final.c:3138 #, c-format msgid "invalid %%-code" msgstr "" -#: final.c:3143 +#: final.c:3168 #, c-format msgid "'%%l' operand isn't a label" msgstr "" @@ -692,117 +692,117 @@ msgstr "" #. handle them. #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. -#: final.c:3244 vmsdbgout.c:487 config/i386/i386.c:6445 +#: final.c:3269 vmsdbgout.c:487 config/i386/i386.c:6606 #: config/pdp11/pdp11.c:1700 #, c-format msgid "floating constant misused" msgstr "" -#: final.c:3300 vmsdbgout.c:544 config/i386/i386.c:6521 +#: final.c:3325 vmsdbgout.c:544 config/i386/i386.c:6682 #: config/pdp11/pdp11.c:1747 #, c-format msgid "invalid expression as operand" msgstr "" -#: flow.c:1702 +#: flow.c:1699 msgid "Attempt to delete prologue/epilogue insn:" msgstr "" -#: gcc.c:1642 +#: gcc.c:1641 #, c-format msgid "Using built-in specs.\n" msgstr "" -#: gcc.c:1825 +#: gcc.c:1824 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" -#: gcc.c:1934 +#: gcc.c:1939 #, c-format msgid "Reading specs from %s\n" msgstr "" -#: gcc.c:2030 gcc.c:2049 +#: gcc.c:2035 gcc.c:2054 #, c-format msgid "specs %%include syntax malformed after %ld characters" msgstr "" -#: gcc.c:2057 +#: gcc.c:2062 #, c-format msgid "could not find specs file %s\n" msgstr "" -#: gcc.c:2074 gcc.c:2082 gcc.c:2091 gcc.c:2100 +#: gcc.c:2079 gcc.c:2087 gcc.c:2096 gcc.c:2105 #, c-format msgid "specs %%rename syntax malformed after %ld characters" msgstr "" -#: gcc.c:2109 +#: gcc.c:2114 #, c-format msgid "specs %s spec was not found to be renamed" msgstr "" -#: gcc.c:2116 +#: gcc.c:2121 #, c-format msgid "%s: attempt to rename spec '%s' to already defined spec '%s'" msgstr "" -#: gcc.c:2121 +#: gcc.c:2126 #, c-format msgid "rename spec %s to %s\n" msgstr "" -#: gcc.c:2123 +#: gcc.c:2128 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" -#: gcc.c:2136 +#: gcc.c:2141 #, c-format msgid "specs unknown %% command after %ld characters" msgstr "" -#: gcc.c:2147 gcc.c:2160 +#: gcc.c:2152 gcc.c:2165 #, c-format msgid "specs file malformed after %ld characters" msgstr "" -#: gcc.c:2213 +#: gcc.c:2218 #, c-format msgid "spec file has no spec for linking" msgstr "" -#: gcc.c:2635 +#: gcc.c:2640 #, c-format msgid "system path '%s' is not absolute" msgstr "" -#: gcc.c:2698 +#: gcc.c:2703 #, c-format msgid "-pipe not supported" msgstr "" -#: gcc.c:2760 +#: gcc.c:2765 #, c-format msgid "" "\n" "Go ahead? (y or n) " msgstr "" -#: gcc.c:2843 +#: gcc.c:2848 msgid "failed to get exit status" msgstr "" -#: gcc.c:2849 +#: gcc.c:2854 msgid "failed to get process times" msgstr "" -#: gcc.c:2872 +#: gcc.c:2877 #, c-format msgid "" "Internal error: %s (program %s)\n" @@ -810,196 +810,196 @@ msgid "" "See %s for instructions." msgstr "" -#: gcc.c:2900 +#: gcc.c:2905 #, c-format msgid "# %s %.2f %.2f\n" msgstr "" -#: gcc.c:3036 +#: gcc.c:3041 #, c-format msgid "Usage: %s [options] file...\n" msgstr "" -#: gcc.c:3037 +#: gcc.c:3042 msgid "Options:\n" msgstr "" -#: gcc.c:3039 +#: gcc.c:3044 msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" -#: gcc.c:3040 +#: gcc.c:3045 msgid " --help Display this information\n" msgstr "" -#: gcc.c:3041 +#: gcc.c:3046 msgid "" " --target-help Display target specific command line options\n" msgstr "" -#: gcc.c:3043 +#: gcc.c:3048 msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" -#: gcc.c:3044 +#: gcc.c:3049 msgid " -dumpspecs Display all of the built in spec strings\n" msgstr "" -#: gcc.c:3045 +#: gcc.c:3050 msgid " -dumpversion Display the version of the compiler\n" msgstr "" -#: gcc.c:3046 +#: gcc.c:3051 msgid " -dumpmachine Display the compiler's target processor\n" msgstr "" -#: gcc.c:3047 +#: gcc.c:3052 msgid "" " -print-search-dirs Display the directories in the compiler's search " "path\n" msgstr "" -#: gcc.c:3048 +#: gcc.c:3053 msgid "" " -print-libgcc-file-name Display the name of the compiler's companion " "library\n" msgstr "" -#: gcc.c:3049 +#: gcc.c:3054 msgid " -print-file-name= Display the full path to library \n" msgstr "" -#: gcc.c:3050 +#: gcc.c:3055 msgid "" " -print-prog-name= Display the full path to compiler component " "\n" msgstr "" -#: gcc.c:3051 +#: gcc.c:3056 msgid "" " -print-multi-directory Display the root directory for versions of " "libgcc\n" msgstr "" -#: gcc.c:3052 +#: gcc.c:3057 msgid "" " -print-multi-lib Display the mapping between command line options " "and\n" " multiple library search directories\n" msgstr "" -#: gcc.c:3055 +#: gcc.c:3060 msgid " -print-multi-os-directory Display the relative path to OS libraries\n" msgstr "" -#: gcc.c:3056 +#: gcc.c:3061 msgid "" " -Wa, Pass comma-separated on to the " "assembler\n" msgstr "" -#: gcc.c:3057 +#: gcc.c:3062 msgid "" " -Wp, Pass comma-separated on to the " "preprocessor\n" msgstr "" -#: gcc.c:3058 +#: gcc.c:3063 msgid "" " -Wl, Pass comma-separated on to the linker\n" msgstr "" -#: gcc.c:3059 +#: gcc.c:3064 msgid " -Xassembler Pass on to the assembler\n" msgstr "" -#: gcc.c:3060 +#: gcc.c:3065 msgid " -Xpreprocessor Pass on to the preprocessor\n" msgstr "" -#: gcc.c:3061 +#: gcc.c:3066 msgid " -Xlinker Pass on to the linker\n" msgstr "" -#: gcc.c:3062 +#: gcc.c:3067 msgid "" " -combine Pass multiple source files to compiler at once\n" msgstr "" -#: gcc.c:3063 +#: gcc.c:3068 msgid " -save-temps Do not delete intermediate files\n" msgstr "" -#: gcc.c:3064 +#: gcc.c:3069 msgid " -pipe Use pipes rather than intermediate files\n" msgstr "" -#: gcc.c:3065 +#: gcc.c:3070 msgid " -time Time the execution of each subprocess\n" msgstr "" -#: gcc.c:3066 +#: gcc.c:3071 msgid "" " -specs= Override built-in specs with the contents of " "\n" msgstr "" -#: gcc.c:3067 +#: gcc.c:3072 msgid "" " -std= Assume that the input sources are for \n" msgstr "" -#: gcc.c:3068 +#: gcc.c:3073 msgid "" " --sysroot= Use as the root directory for " "headers\n" " for headers and libraries\n" msgstr "" -#: gcc.c:3071 +#: gcc.c:3076 msgid "" " -B Add to the compiler's search paths\n" msgstr "" -#: gcc.c:3072 +#: gcc.c:3077 msgid " -b Run gcc for target , if installed\n" msgstr "" -#: gcc.c:3073 +#: gcc.c:3078 msgid "" " -V Run gcc version number , if installed\n" msgstr "" -#: gcc.c:3074 +#: gcc.c:3079 msgid "" " -v Display the programs invoked by the compiler\n" msgstr "" -#: gcc.c:3075 +#: gcc.c:3080 msgid "" " -### Like -v but options quoted and commands not " "executed\n" msgstr "" -#: gcc.c:3076 +#: gcc.c:3081 msgid "" " -E Preprocess only; do not compile, assemble or " "link\n" msgstr "" -#: gcc.c:3077 +#: gcc.c:3082 msgid " -S Compile only; do not assemble or link\n" msgstr "" -#: gcc.c:3078 +#: gcc.c:3083 msgid " -c Compile and assemble, but do not link\n" msgstr "" -#: gcc.c:3079 +#: gcc.c:3084 msgid " -o Place the output into \n" msgstr "" -#: gcc.c:3080 +#: gcc.c:3085 msgid "" " -x Specify the language of the following input " "files\n" @@ -1010,7 +1010,7 @@ msgid "" "extension\n" msgstr "" -#: gcc.c:3087 +#: gcc.c:3092 #, c-format msgid "" "\n" @@ -1019,28 +1019,28 @@ msgid "" " other options on to these processes the -W options must be used.\n" msgstr "" -#: gcc.c:3211 +#: gcc.c:3215 #, c-format msgid "'-%c' option must have argument" msgstr "" -#: gcc.c:3233 +#: gcc.c:3237 #, c-format msgid "couldn't run '%s': %s" msgstr "" #. translate_options () has turned --version into -fversion. -#: gcc.c:3418 +#: gcc.c:3422 #, c-format msgid "%s (GCC) %s\n" msgstr "" -#: gcc.c:3420 gcov.c:415 fortran/gfortranspec.c:351 java/gjavah.c:2400 +#: gcc.c:3424 gcov.c:415 fortran/gfortranspec.c:351 java/gjavah.c:2406 #: java/jcf-dump.c:931 java/jv-scan.c:129 msgid "(C)" msgstr "" -#: gcc.c:3421 java/gjavah.c:2401 java/jcf-dump.c:932 java/jv-scan.c:130 +#: gcc.c:3425 java/gjavah.c:2407 java/jcf-dump.c:932 java/jv-scan.c:130 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -1048,209 +1048,229 @@ msgid "" "\n" msgstr "" -#: gcc.c:3522 +#: gcc.c:3526 #, c-format msgid "argument to '-Xlinker' is missing" msgstr "" -#: gcc.c:3530 +#: gcc.c:3534 #, c-format msgid "argument to '-Xpreprocessor' is missing" msgstr "" -#: gcc.c:3537 +#: gcc.c:3541 #, c-format msgid "argument to '-Xassembler' is missing" msgstr "" -#: gcc.c:3544 +#: gcc.c:3548 #, c-format msgid "argument to '-l' is missing" msgstr "" -#: gcc.c:3565 +#: gcc.c:3569 #, c-format msgid "argument to '-specs' is missing" msgstr "" -#: gcc.c:3579 +#: gcc.c:3583 #, c-format msgid "argument to '-specs=' is missing" msgstr "" -#: gcc.c:3617 +#: gcc.c:3621 #, c-format msgid "'-%c' must come at the start of the command line" msgstr "" -#: gcc.c:3626 +#: gcc.c:3630 #, c-format msgid "argument to '-B' is missing" msgstr "" -#: gcc.c:4011 +#: gcc.c:4016 #, c-format msgid "argument to '-x' is missing" msgstr "" -#: gcc.c:4039 +#: gcc.c:4044 #, c-format msgid "argument to '-%s' is missing" msgstr "" -#: gcc.c:4377 +#: gcc.c:4382 #, c-format msgid "switch '%s' does not start with '-'" msgstr "" -#: gcc.c:4607 +#: gcc.c:4612 #, c-format msgid "spec '%s' invalid" msgstr "" -#: gcc.c:4673 +#: gcc.c:4678 #, c-format msgid "%s\n" msgstr "" -#: gcc.c:4746 +#: gcc.c:4751 #, c-format msgid "spec '%s' has invalid '%%0%c'" msgstr "" -#: gcc.c:4943 +#: gcc.c:4948 #, c-format msgid "spec '%s' has invalid '%%W%c" msgstr "" -#: gcc.c:4974 +#: gcc.c:4979 #, c-format msgid "spec '%s' has invalid '%%x%c'" msgstr "" -#: gcc.c:5196 +#: gcc.c:5201 #, c-format msgid "Processing spec %c%s%c, which is '%s'\n" msgstr "" -#: gcc.c:5338 +#: gcc.c:5343 #, c-format msgid "unknown spec function '%s'" msgstr "" -#: gcc.c:5357 +#: gcc.c:5362 #, c-format msgid "error in args to spec function '%s'" msgstr "" -#: gcc.c:5405 +#: gcc.c:5410 #, c-format msgid "malformed spec function name" msgstr "" #. ) -#: gcc.c:5408 +#: gcc.c:5413 #, c-format msgid "no arguments for spec function" msgstr "" -#: gcc.c:5427 +#: gcc.c:5432 #, c-format msgid "malformed spec function arguments" msgstr "" -#: gcc.c:5666 +#: gcc.c:5671 #, c-format msgid "braced spec '%s' is invalid at '%c'" msgstr "" -#: gcc.c:5754 +#: gcc.c:5759 #, c-format msgid "braced spec body '%s' is invalid" msgstr "" -#: gcc.c:6301 +#: gcc.c:6306 #, c-format msgid "install: %s%s\n" msgstr "" -#: gcc.c:6302 +#: gcc.c:6307 #, c-format msgid "programs: %s\n" msgstr "" -#: gcc.c:6303 +#: gcc.c:6308 #, c-format msgid "libraries: %s\n" msgstr "" -#: gcc.c:6360 +#: gcc.c:6365 #, c-format msgid "" "\n" "For bug reporting instructions, please see:\n" msgstr "" -#: gcc.c:6376 +#: gcc.c:6381 #, c-format msgid "Target: %s\n" msgstr "" -#: gcc.c:6377 +#: gcc.c:6382 #, c-format msgid "Configured with: %s\n" msgstr "" -#: gcc.c:6391 +#: gcc.c:6396 #, c-format msgid "Thread model: %s\n" msgstr "" -#: gcc.c:6402 +#: gcc.c:6407 #, c-format msgid "gcc version %s\n" msgstr "" -#: gcc.c:6404 +#: gcc.c:6409 #, c-format msgid "gcc driver version %s executing gcc version %s\n" msgstr "" -#: gcc.c:6412 +#: gcc.c:6417 #, c-format msgid "no input files" msgstr "" -#: gcc.c:6492 +#: gcc.c:6466 +#, c-format +msgid "cannot specify -o with -c or -S with multiple files" +msgstr "" + +#: gcc.c:6500 #, c-format msgid "spec '%s' is invalid" msgstr "" -#: gcc.c:6957 +#: gcc.c:6965 #, c-format msgid "multilib spec '%s' is invalid" msgstr "" -#: gcc.c:7149 +#: gcc.c:7157 #, c-format msgid "multilib exclusions '%s' is invalid" msgstr "" -#: gcc.c:7207 gcc.c:7348 +#: gcc.c:7215 gcc.c:7356 #, c-format msgid "multilib select '%s' is invalid" msgstr "" -#: gcc.c:7386 +#: gcc.c:7394 #, c-format msgid "multilib exclusion '%s' is invalid" msgstr "" -#: gcc.c:7645 gcc.c:7650 +#: gcc.c:7653 gcc.c:7658 #, c-format msgid "invalid version number `%s'" msgstr "" +#: gcc.c:7701 +#, c-format +msgid "too few arguments to %%:version-compare" +msgstr "" + +#: gcc.c:7707 +#, c-format +msgid "too many arguments to %%:version-compare" +msgstr "" + +#: gcc.c:7748 +#, c-format +msgid "unknown operator '%s' in %%:version-compare" +msgstr "" + #: gcov.c:388 #, c-format msgid "" @@ -1356,7 +1376,7 @@ msgstr "" msgid "%s:no functions found\n" msgstr "" -#: gcov.c:528 gcov.c:556 fortran/dump-parse-tree.c:67 +#: gcov.c:528 gcov.c:556 fortran/dump-parse-tree.c:68 #, c-format msgid "\n" msgstr "" @@ -1542,15 +1562,72 @@ msgid "%s:source file is newer than graph file '%s'\n" msgstr "" #. Return if there's nothing to do, or it is too expensive. -#: gcse.c:690 +#: gcse.c:694 msgid "GCSE disabled" msgstr "" #. Return if there's nothing to do, or it is too expensive. -#: gcse.c:6481 +#: gcse.c:6518 msgid "jump bypassing disabled" msgstr "" +#: gengtype-yacc.c:602 java/parse-scan.c:1988 +#: java/parse-scan.y:1375 java/parse.c:2981 +#: java/parse.y:16475 +msgid "syntax error: cannot back up" +msgstr "" + +#. Each stack pointer address is followed by the size of the +#. data in use in that stack, in bytes. This used to be a +#. conditional around just the two extra args, but that might +#. be undefined if yyoverflow is a macro. +#: gengtype-yacc.c:1085 gengtype-yacc.c:1846 java/parse-scan.c:2471 +#: java/parse-scan.c:3359 java/parse.c:3464 java/parse.c:6451 +msgid "memory exhausted" +msgstr "" + +#. This is so xgettext sees the translatable formats that are +#. constructed on the fly. +#: gengtype-yacc.c:1653 java/parse-scan.c:3166 java/parse.c:6258 +#, c-format +msgid "syntax error, unexpected %s" +msgstr "" + +#: gengtype-yacc.c:1654 java/parse-scan.c:3167 java/parse.c:6259 +#, c-format +msgid "syntax error, unexpected %s, expecting %s" +msgstr "" + +#: gengtype-yacc.c:1655 java/parse-scan.c:3168 java/parse.c:6260 +#, c-format +msgid "syntax error, unexpected %s, expecting %s or %s" +msgstr "" + +#: gengtype-yacc.c:1656 java/parse-scan.c:3169 java/parse.c:6261 +#, c-format +msgid "syntax error, unexpected %s, expecting %s or %s or %s" +msgstr "" + +#: gengtype-yacc.c:1657 java/parse-scan.c:3170 java/parse.c:6262 +#, c-format +msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s" +msgstr "" + +#. Depending on the version of Bison used to compile this grammar, +#. it may issue generic diagnostics spelled "syntax error" or +#. "parse error". To prevent this from changing the translation +#. template randomly, we list all the variants of this particular +#. diagnostic here. Translators: there is no fine distinction +#. between diagnostics with "syntax error" in them, and diagnostics +#. with "parse error" in them. It's okay to give them both the same +#. translation. +#: gengtype-yacc.c:1732 gengtype-yacc.c:1738 java/parse-scan.c:3245 +#: java/parse-scan.c:3251 java/parse-scan.y:1371 +#: java/parse.c:6337 java/parse.c:6343 +#: java/parse.y:16471 +msgid "syntax error" +msgstr "" + #. Opening quotation mark. #: intl.c:58 msgid "`" @@ -1561,27 +1638,27 @@ msgstr "" msgid "'" msgstr "" -#: ipa-inline.c:271 +#: ipa-inline.c:273 msgid "--param large-function-growth limit reached" msgstr "" -#: ipa-inline.c:301 +#: ipa-inline.c:303 msgid "--param max-inline-insns-single limit reached" msgstr "" -#: ipa-inline.c:310 +#: ipa-inline.c:312 msgid "--param max-inline-insns-auto limit reached" msgstr "" -#: ipa-inline.c:336 ipa-inline.c:760 +#: ipa-inline.c:338 ipa-inline.c:764 msgid "recursive inlining" msgstr "" -#: ipa-inline.c:773 +#: ipa-inline.c:777 msgid "call is unlikely" msgstr "" -#: ipa-inline.c:844 +#: ipa-inline.c:848 msgid "--param inline-unit-growth limit reached" msgstr "" @@ -1599,19 +1676,19 @@ msgstr "" msgid "In function %qs:" msgstr "" -#: loop-iv.c:2709 tree-ssa-loop-niter.c:1022 +#: loop-iv.c:2709 tree-ssa-loop-niter.c:1026 msgid "assuming that the loop is not infinite" msgstr "" -#: loop-iv.c:2710 tree-ssa-loop-niter.c:1023 +#: loop-iv.c:2710 tree-ssa-loop-niter.c:1027 msgid "cannot optimize possibly infinite loops" msgstr "" -#: loop-iv.c:2718 tree-ssa-loop-niter.c:1027 +#: loop-iv.c:2718 tree-ssa-loop-niter.c:1031 msgid "assuming that the loop counter does not overflow" msgstr "" -#: loop-iv.c:2719 tree-ssa-loop-niter.c:1028 +#: loop-iv.c:2719 tree-ssa-loop-niter.c:1032 msgid "cannot optimize loop, the loop counter may overflow" msgstr "" @@ -1949,20 +2026,24 @@ msgstr "" msgid "unable to generate reloads for:" msgstr "" -#: reload1.c:1890 +#: reload1.c:1901 msgid "this is the insn:" msgstr "" #. It's the compiler's fault. -#: reload1.c:5044 +#: reload1.c:5088 msgid "could not find a spill register" msgstr "" #. It's the compiler's fault. -#: reload1.c:6675 +#: reload1.c:6722 msgid "VOIDmode on an output" msgstr "" +#: reload1.c:7692 +msgid "Failure trying to reload:" +msgstr "" + #: rtl-error.c:128 msgid "unrecognizable insn:" msgstr "" @@ -2065,7 +2146,7 @@ msgstr "" msgid "created and used with different settings of -fpie" msgstr "" -#: tree-inline.c:1978 +#: tree-inline.c:2013 msgid "originally indirect function call not considered for inlining" msgstr "" @@ -2166,385 +2247,410 @@ msgstr "" #: params.def:139 msgid "" -"If -fvariable-expansion-in-unroller is used, the maximum number " -"of times that an individual variable will be expanded " -"during loop unrolling" +"If -fvariable-expansion-in-unroller is used, the maximum number of times " +"that an individual variable will be expanded during loop unrolling" msgstr "" -#: params.def:152 +#: params.def:150 msgid "The maximum number of instructions to consider to fill a delay slot" msgstr "" -#: params.def:163 +#: params.def:161 msgid "" "The maximum number of instructions to consider to find accurate live " "register information" msgstr "" -#: params.def:173 +#: params.def:171 msgid "The maximum length of scheduling's pending operations list" msgstr "" -#: params.def:178 +#: params.def:176 msgid "The size of function body to be considered large" msgstr "" -#: params.def:182 +#: params.def:180 msgid "Maximal growth due to inlining of large function (in percent)" msgstr "" -#: params.def:186 +#: params.def:184 +msgid "The size of translation unit to be considered large" +msgstr "" + +#: params.def:188 msgid "" "how much can given compilation unit grow because of the inlining (in percent)" msgstr "" -#: params.def:190 +#: params.def:192 msgid "expense of call operation relative to ordinary arithmetic operations" msgstr "" -#: params.def:197 +#: params.def:199 msgid "The maximum amount of memory to be allocated by GCSE" msgstr "" -#: params.def:202 +#: params.def:204 msgid "The maximum number of passes to make when doing GCSE" msgstr "" -#: params.def:212 +#: params.def:214 msgid "" "The threshold ratio for performing partial redundancy elimination after " "reload" msgstr "" -#: params.def:219 +#: params.def:221 msgid "" "The threshold ratio of critical edges execution count that permit performing " "redundancy elimination after reload" msgstr "" -#: params.def:230 +#: params.def:232 msgid "The maximum number of instructions to consider to unroll in a loop" msgstr "" -#: params.def:236 +#: params.def:238 msgid "" "The maximum number of instructions to consider to unroll in a loop on average" msgstr "" -#: params.def:241 +#: params.def:243 msgid "The maximum number of unrollings of a single loop" msgstr "" -#: params.def:246 +#: params.def:248 msgid "The maximum number of insns of a peeled loop" msgstr "" -#: params.def:251 +#: params.def:253 msgid "The maximum number of peelings of a single loop" msgstr "" -#: params.def:256 +#: params.def:258 msgid "The maximum number of insns of a completely peeled loop" msgstr "" -#: params.def:261 +#: params.def:263 msgid "" "The maximum number of peelings of a single loop that is peeled completely" msgstr "" -#: params.def:266 +#: params.def:268 msgid "The maximum number of insns of a peeled loop that rolls only once" msgstr "" -#: params.def:272 +#: params.def:274 msgid "The maximum number of insns of an unswitched loop" msgstr "" -#: params.def:277 +#: params.def:279 msgid "The maximum number of unswitchings in a single loop" msgstr "" -#: params.def:284 +#: params.def:286 msgid "" "Bound on the number of iterations the brute force # of iterations analysis " "algorithm evaluates" msgstr "" -#: params.def:289 +#: params.def:291 msgid "" "Maximum number of loops to perform swing modulo scheduling on (mainly for " "debugging)" msgstr "" -#: params.def:295 +#: params.def:297 msgid "" "A factor for tuning the upper bound that swing modulo scheduler uses for " "scheduling a loop" msgstr "" -#: params.def:299 +#: params.def:301 msgid "" -"The number of cycles the swing modulo scheduler considers when \t checking " +"The number of cycles the swing modulo scheduler considers when checking " "conflicts using DFA" msgstr "" -#: params.def:304 +#: params.def:305 msgid "" "A threshold on the average loop count considered by the swing modulo " "scheduler" msgstr "" -#: params.def:309 +#: params.def:310 msgid "" "Select fraction of the maximal count of repetitions of basic block in " "program given basic block needs to have to be considered hot" msgstr "" -#: params.def:313 +#: params.def:314 msgid "" "Select fraction of the maximal frequency of executions of basic block in " "function given basic block needs to have to be considered hot" msgstr "" -#: params.def:317 +#: params.def:330 +msgid "The maximum number of loop iterations we predict statically" +msgstr "" + +#: params.def:334 msgid "" "The percentage of function, weighted by execution frequency, that must be " "covered by trace formation. Used when profile feedback is available" msgstr "" -#: params.def:321 +#: params.def:338 msgid "" "The percentage of function, weighted by execution frequency, that must be " "covered by trace formation. Used when profile feedback is not available" msgstr "" -#: params.def:325 +#: params.def:342 msgid "Maximal code growth caused by tail duplication (in percent)" msgstr "" -#: params.def:329 +#: params.def:346 msgid "" "Stop reverse growth if the reverse probability of best edge is less than " "this threshold (in percent)" msgstr "" -#: params.def:333 +#: params.def:350 msgid "" "Stop forward growth if the probability of best edge is less than this " "threshold (in percent). Used when profile feedback is available" msgstr "" -#: params.def:337 +#: params.def:354 msgid "" "Stop forward growth if the probability of best edge is less than this " "threshold (in percent). Used when profile feedback is not available" msgstr "" -#: params.def:343 +#: params.def:360 msgid "The maximum number of incoming edges to consider for crossjumping" msgstr "" -#: params.def:349 +#: params.def:366 msgid "" "The minimum number of matching instructions to consider for crossjumping" msgstr "" -#: params.def:355 +#: params.def:372 +msgid "The maximum expansion factor when copying basic blocks" +msgstr "" + +#: params.def:378 msgid "" "The maximum number of insns to duplicate when unfactoring computed gotos" msgstr "" -#: params.def:361 +#: params.def:384 msgid "The maximum length of path considered in cse" msgstr "" -#: params.def:368 +#: params.def:388 +msgid "The maximum instructions CSE process before flushing" +msgstr "" + +#: params.def:395 msgid "" "The minimum cost of an expensive expression in the loop invariant motion" msgstr "" -#: params.def:377 +#: params.def:404 msgid "" "Bound on number of candidates below that all candidates are considered in iv " "optimizations" msgstr "" -#: params.def:385 +#: params.def:412 msgid "Bound on number of iv uses in loop optimized in iv optimizations" msgstr "" -#: params.def:393 +#: params.def:420 msgid "" "If number of candidates in the set is smaller, we always try to remove " "unused ivs during its optimization" msgstr "" -#: params.def:398 +#: params.def:425 msgid "Bound on size of expressions used in the scalar evolutions analyzer" msgstr "" -#: params.def:403 +#: params.def:430 msgid "" "Bound on number of runtime checks inserted by the vectorizer's loop " "versioning" msgstr "" -#: params.def:410 +#: params.def:437 msgid "" "Given N calls and V call-clobbered vars in a function. Use .GLOBAL_VAR if " "NxV is larger than this limit" msgstr "" -#: params.def:415 +#: params.def:442 msgid "The maximum memory locations recorded by cselib" msgstr "" -#: params.def:428 +#: params.def:446 +msgid "The maximum memory locations recorded by flow" +msgstr "" + +#: params.def:459 msgid "" "Minimum heap expansion to trigger garbage collection, as a percentage of the " "total size of the heap" msgstr "" -#: params.def:433 +#: params.def:464 msgid "Minimum heap size before we start collecting garbage, in kilobytes" msgstr "" -#: params.def:441 +#: params.def:472 msgid "" "The maximum number of instructions to search backward when looking for " "equivalent reload" msgstr "" -#: params.def:446 +#: params.def:477 msgid "" "The maximum number of virtual operands allowed to represent aliases before " "triggering alias grouping" msgstr "" -#: params.def:451 +#: params.def:482 msgid "" "The maximum number of blocks in a region to be considered for interblock " "scheduling" msgstr "" -#: params.def:456 +#: params.def:487 msgid "" "The maximum number of insns in a region to be considered for interblock " "scheduling" msgstr "" -#: params.def:461 +#: params.def:492 msgid "" "The minimum probability of reaching a source block for interblock " "speculative scheduling" msgstr "" -#: params.def:466 +#: params.def:497 msgid "" "The maximum number of RTL nodes that can be recorded as combiner's last value" msgstr "" -#: params.def:474 +#: params.def:505 msgid "The upper bound for sharing integer constants" msgstr "" -#: params.def:493 +#: params.def:524 msgid "" "Minimum number of virtual mappings to consider switching to full virtual " "renames" msgstr "" -#: params.def:498 +#: params.def:529 msgid "" "Ratio between virtual mappings and virtual symbols to do full virtual renames" msgstr "" -#: params.def:503 +#: params.def:534 msgid "" "The lower bound for a buffer to be considered for stack smashing protection" msgstr "" -#: config/alpha/alpha.c:5063 +#: params.def:552 +msgid "" +"Maximum number of statements allowed in a block that needs to be duplicated " +"when threading jumps" +msgstr "" + +#: config/alpha/alpha.c:5069 #, c-format msgid "invalid %%H value" msgstr "" -#: config/alpha/alpha.c:5084 config/bfin/bfin.c:1162 +#: config/alpha/alpha.c:5090 config/bfin/bfin.c:1181 #, c-format msgid "invalid %%J value" msgstr "" -#: config/alpha/alpha.c:5114 config/ia64/ia64.c:4505 +#: config/alpha/alpha.c:5120 config/ia64/ia64.c:4597 #, c-format msgid "invalid %%r value" msgstr "" -#: config/alpha/alpha.c:5124 config/rs6000/rs6000.c:10317 +#: config/alpha/alpha.c:5130 config/rs6000/rs6000.c:10385 #: config/xtensa/xtensa.c:1691 #, c-format msgid "invalid %%R value" msgstr "" -#: config/alpha/alpha.c:5130 config/rs6000/rs6000.c:10236 +#: config/alpha/alpha.c:5136 config/rs6000/rs6000.c:10304 #: config/xtensa/xtensa.c:1658 #, c-format msgid "invalid %%N value" msgstr "" -#: config/alpha/alpha.c:5138 config/rs6000/rs6000.c:10264 +#: config/alpha/alpha.c:5144 config/rs6000/rs6000.c:10332 #, c-format msgid "invalid %%P value" msgstr "" -#: config/alpha/alpha.c:5146 +#: config/alpha/alpha.c:5152 #, c-format msgid "invalid %%h value" msgstr "" -#: config/alpha/alpha.c:5154 config/xtensa/xtensa.c:1684 +#: config/alpha/alpha.c:5160 config/xtensa/xtensa.c:1684 #, c-format msgid "invalid %%L value" msgstr "" -#: config/alpha/alpha.c:5193 config/rs6000/rs6000.c:10218 +#: config/alpha/alpha.c:5199 config/rs6000/rs6000.c:10286 #, c-format msgid "invalid %%m value" msgstr "" -#: config/alpha/alpha.c:5201 config/rs6000/rs6000.c:10226 +#: config/alpha/alpha.c:5207 config/rs6000/rs6000.c:10294 #, c-format msgid "invalid %%M value" msgstr "" -#: config/alpha/alpha.c:5245 +#: config/alpha/alpha.c:5251 #, c-format msgid "invalid %%U value" msgstr "" -#: config/alpha/alpha.c:5257 config/alpha/alpha.c:5271 -#: config/rs6000/rs6000.c:10325 +#: config/alpha/alpha.c:5263 config/alpha/alpha.c:5277 +#: config/rs6000/rs6000.c:10393 #, c-format msgid "invalid %%s value" msgstr "" -#: config/alpha/alpha.c:5294 +#: config/alpha/alpha.c:5300 #, c-format msgid "invalid %%C value" msgstr "" -#: config/alpha/alpha.c:5331 config/rs6000/rs6000.c:10057 -#: config/rs6000/rs6000.c:10075 +#: config/alpha/alpha.c:5337 config/rs6000/rs6000.c:10125 +#: config/rs6000/rs6000.c:10143 #, c-format msgid "invalid %%E value" msgstr "" -#: config/alpha/alpha.c:5356 config/alpha/alpha.c:5404 +#: config/alpha/alpha.c:5362 config/alpha/alpha.c:5410 #, c-format msgid "unknown relocation unspec" msgstr "" -#: config/alpha/alpha.c:5365 config/crx/crx.c:1082 -#: config/rs6000/rs6000.c:10638 +#: config/alpha/alpha.c:5371 config/crx/crx.c:1082 +#: config/rs6000/rs6000.c:10706 #, c-format msgid "invalid %%xn code" msgstr "" @@ -2571,35 +2677,35 @@ msgstr "" #. Unknown flag. #. Undocumented flag. -#: config/arc/arc.c:1798 config/m32r/m32r.c:1926 config/sparc/sparc.c:6807 +#: config/arc/arc.c:1798 config/m32r/m32r.c:1926 config/sparc/sparc.c:6802 #, c-format msgid "invalid operand output code" msgstr "" -#: config/arm/arm.c:10569 config/arm/arm.c:10587 +#: config/arm/arm.c:10904 config/arm/arm.c:10922 #, c-format msgid "predicated Thumb instruction" msgstr "" -#: config/arm/arm.c:10575 +#: config/arm/arm.c:10910 #, c-format msgid "predicated instruction in conditional sequence" msgstr "" -#: config/arm/arm.c:10683 config/arm/arm.c:10693 config/arm/arm.c:10703 -#: config/arm/arm.c:10729 config/arm/arm.c:10747 config/arm/arm.c:10782 -#: config/arm/arm.c:10801 config/arm/arm.c:10816 config/arm/arm.c:10842 -#: config/arm/arm.c:10849 config/arm/arm.c:10856 +#: config/arm/arm.c:11018 config/arm/arm.c:11028 config/arm/arm.c:11038 +#: config/arm/arm.c:11064 config/arm/arm.c:11082 config/arm/arm.c:11117 +#: config/arm/arm.c:11136 config/arm/arm.c:11151 config/arm/arm.c:11177 +#: config/arm/arm.c:11184 config/arm/arm.c:11191 #, c-format msgid "invalid operand for code '%c'" msgstr "" -#: config/arm/arm.c:10742 +#: config/arm/arm.c:11077 #, c-format msgid "instruction never exectued" msgstr "" -#: config/arm/arm.c:10867 +#: config/arm/arm.c:11202 #, c-format msgid "missing operand" msgstr "" @@ -2643,12 +2749,12 @@ msgstr "" msgid "internal compiler error. Incorrect shift:" msgstr "" -#: config/bfin/bfin.c:1124 +#: config/bfin/bfin.c:1143 #, c-format msgid "invalid %%j value" msgstr "" -#: config/bfin/bfin.c:1243 +#: config/bfin/bfin.c:1262 #, c-format msgid "invalid const_double operand" msgstr "" @@ -2736,103 +2842,103 @@ msgstr "" #. Use `%s' to print the string in case there are any escape #. characters in the message. -#: config/cris/cris.c:491 fortran/dump-parse-tree.c:82 -#: fortran/dump-parse-tree.c:414 fortran/dump-parse-tree.c:741 c-typeck.c:4255 -#: c-typeck.c:4270 c-typeck.c:4285 final.c:2796 final.c:2798 gcc.c:4659 +#: config/cris/cris.c:492 fortran/dump-parse-tree.c:84 +#: fortran/dump-parse-tree.c:416 fortran/dump-parse-tree.c:744 c-typeck.c:4372 +#: c-typeck.c:4387 c-typeck.c:4402 final.c:2821 final.c:2823 gcc.c:4664 #: loop-iv.c:2711 loop-iv.c:2720 rtl-error.c:113 toplev.c:586 -#: tree-ssa-loop-niter.c:1033 cp/parser.c:1947 cp/typeck.c:4204 -#: java/expr.c:403 +#: tree-ssa-loop-niter.c:1037 cp/parser.c:1963 cp/typeck.c:4274 +#: java/expr.c:402 java/parse.y:5005 #, gcc-internal-format msgid "%s" msgstr "" -#: config/cris/cris.c:543 +#: config/cris/cris.c:544 msgid "unexpected index-type in cris_print_index" msgstr "" -#: config/cris/cris.c:557 +#: config/cris/cris.c:558 msgid "unexpected base-type in cris_print_base" msgstr "" -#: config/cris/cris.c:673 +#: config/cris/cris.c:674 msgid "invalid operand for 'b' modifier" msgstr "" -#: config/cris/cris.c:690 +#: config/cris/cris.c:691 msgid "invalid operand for 'o' modifier" msgstr "" -#: config/cris/cris.c:709 +#: config/cris/cris.c:710 msgid "invalid operand for 'O' modifier" msgstr "" -#: config/cris/cris.c:742 +#: config/cris/cris.c:743 msgid "invalid operand for 'p' modifier" msgstr "" -#: config/cris/cris.c:781 +#: config/cris/cris.c:782 msgid "invalid operand for 'z' modifier" msgstr "" -#: config/cris/cris.c:835 config/cris/cris.c:865 +#: config/cris/cris.c:836 config/cris/cris.c:866 msgid "invalid operand for 'H' modifier" msgstr "" -#: config/cris/cris.c:841 +#: config/cris/cris.c:842 msgid "bad register" msgstr "" -#: config/cris/cris.c:879 +#: config/cris/cris.c:880 msgid "invalid operand for 'e' modifier" msgstr "" -#: config/cris/cris.c:896 +#: config/cris/cris.c:897 msgid "invalid operand for 'm' modifier" msgstr "" -#: config/cris/cris.c:921 +#: config/cris/cris.c:922 msgid "invalid operand for 'A' modifier" msgstr "" -#: config/cris/cris.c:944 +#: config/cris/cris.c:945 msgid "invalid operand for 'D' modifier" msgstr "" -#: config/cris/cris.c:958 +#: config/cris/cris.c:959 msgid "invalid operand for 'T' modifier" msgstr "" -#: config/cris/cris.c:967 +#: config/cris/cris.c:968 msgid "invalid operand modifier letter" msgstr "" -#: config/cris/cris.c:1024 +#: config/cris/cris.c:1025 msgid "unexpected multiplicative operand" msgstr "" -#: config/cris/cris.c:1044 +#: config/cris/cris.c:1045 msgid "unexpected operand" msgstr "" -#: config/cris/cris.c:1077 config/cris/cris.c:1087 +#: config/cris/cris.c:1078 config/cris/cris.c:1088 msgid "unrecognized address" msgstr "" -#: config/cris/cris.c:1938 +#: config/cris/cris.c:2014 msgid "unrecognized supposed constant" msgstr "" -#: config/cris/cris.c:2294 config/cris/cris.c:2339 +#: config/cris/cris.c:2370 config/cris/cris.c:2415 msgid "unexpected side-effects in address" msgstr "" #. Can't possibly get a GOT-needing-fixup for a function-call, #. right? -#: config/cris/cris.c:3097 +#: config/cris/cris.c:3173 msgid "Unidentifiable call op" msgstr "" -#: config/cris/cris.c:3132 +#: config/cris/cris.c:3208 #, c-format msgid "PIC register isn't set up" msgstr "" @@ -2975,28 +3081,28 @@ msgstr "" msgid " (frv)" msgstr "" -#: config/i386/i386.c:6515 +#: config/i386/i386.c:6676 #, c-format msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.c:7097 +#: config/i386/i386.c:7258 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'c'" msgstr "" -#: config/i386/i386.c:7150 +#: config/i386/i386.c:7311 #, c-format msgid "invalid operand code '%c'" msgstr "" -#: config/i386/i386.c:7193 +#: config/i386/i386.c:7354 #, c-format msgid "invalid constraints for operand" msgstr "" -#: config/i386/i386.c:12784 +#: config/i386/i386.c:12948 msgid "unknown insn mode" msgstr "" @@ -3017,20 +3123,20 @@ msgstr "" msgid "environment variable DJGPP points to corrupt file '%s'" msgstr "" -#: config/ia64/ia64.c:4555 +#: config/ia64/ia64.c:4647 #, c-format msgid "ia64_print_operand: unknown code" msgstr "" -#: config/ia64/ia64.c:8794 +#: config/ia64/ia64.c:8918 msgid "invalid conversion from %<__fpreg%>" msgstr "" -#: config/ia64/ia64.c:8797 +#: config/ia64/ia64.c:8921 msgid "invalid conversion to %<__fpreg%>" msgstr "" -#: config/ia64/ia64.c:8810 config/ia64/ia64.c:8821 +#: config/ia64/ia64.c:8934 config/ia64/ia64.c:8945 msgid "invalid operation on %<__fpreg%>" msgstr "" @@ -3039,7 +3145,7 @@ msgstr "" msgid "invalid %%P operand" msgstr "" -#: config/iq2000/iq2000.c:3133 config/rs6000/rs6000.c:10254 +#: config/iq2000/iq2000.c:3133 config/rs6000/rs6000.c:10322 #, c-format msgid "invalid %%p value" msgstr "" @@ -3086,7 +3192,7 @@ msgid "post-increment address is not a register" msgstr "" #: config/m32r/m32r.c:2030 config/m32r/m32r.c:2044 -#: config/rs6000/rs6000.c:17479 +#: config/rs6000/rs6000.c:17547 msgid "bad address" msgstr "" @@ -3207,19 +3313,19 @@ msgstr "" msgid "MMIX Internal: What is the CC of this?" msgstr "" -#: config/mmix/mmix.c:2731 +#: config/mmix/mmix.c:2725 msgid "MMIX Internal: This is not a constant:" msgstr "" -#: config/ms1/ms1.c:288 +#: config/ms1/ms1.c:302 msgid "ms1_final_prescan_insn, invalid insn #1" msgstr "" -#: config/ms1/ms1.c:359 +#: config/ms1/ms1.c:373 msgid "PRINT_OPERAND_ADDRESS, 2 regs" msgstr "" -#: config/ms1/ms1.c:383 +#: config/ms1/ms1.c:397 msgid "PRINT_OPERAND_ADDRESS, invalid insn #1" msgstr "" @@ -3233,81 +3339,81 @@ msgstr "" msgid "Try running '%s' in the shell to raise its limit.\n" msgstr "" -#: config/rs6000/rs6000.c:10084 +#: config/rs6000/rs6000.c:10152 #, c-format msgid "invalid %%f value" msgstr "" -#: config/rs6000/rs6000.c:10093 +#: config/rs6000/rs6000.c:10161 #, c-format msgid "invalid %%F value" msgstr "" -#: config/rs6000/rs6000.c:10102 +#: config/rs6000/rs6000.c:10170 #, c-format msgid "invalid %%G value" msgstr "" -#: config/rs6000/rs6000.c:10137 +#: config/rs6000/rs6000.c:10205 #, c-format msgid "invalid %%j code" msgstr "" -#: config/rs6000/rs6000.c:10147 +#: config/rs6000/rs6000.c:10215 #, c-format msgid "invalid %%J code" msgstr "" -#: config/rs6000/rs6000.c:10157 +#: config/rs6000/rs6000.c:10225 #, c-format msgid "invalid %%k value" msgstr "" -#: config/rs6000/rs6000.c:10177 config/xtensa/xtensa.c:1677 +#: config/rs6000/rs6000.c:10245 config/xtensa/xtensa.c:1677 #, c-format msgid "invalid %%K value" msgstr "" -#: config/rs6000/rs6000.c:10244 +#: config/rs6000/rs6000.c:10312 #, c-format msgid "invalid %%O value" msgstr "" -#: config/rs6000/rs6000.c:10291 +#: config/rs6000/rs6000.c:10359 #, c-format msgid "invalid %%q value" msgstr "" -#: config/rs6000/rs6000.c:10335 +#: config/rs6000/rs6000.c:10403 #, c-format msgid "invalid %%S value" msgstr "" -#: config/rs6000/rs6000.c:10375 +#: config/rs6000/rs6000.c:10443 #, c-format msgid "invalid %%T value" msgstr "" -#: config/rs6000/rs6000.c:10385 +#: config/rs6000/rs6000.c:10453 #, c-format msgid "invalid %%u value" msgstr "" -#: config/rs6000/rs6000.c:10394 config/xtensa/xtensa.c:1647 +#: config/rs6000/rs6000.c:10462 config/xtensa/xtensa.c:1647 #, c-format msgid "invalid %%v value" msgstr "" -#: config/rs6000/rs6000.c:18989 +#: config/rs6000/rs6000.c:19064 msgid "AltiVec argument passed to unprototyped function" msgstr "" -#: config/s390/s390.c:4038 +#: config/s390/s390.c:4175 #, c-format msgid "cannot decompose address" msgstr "" -#: config/s390/s390.c:4245 +#: config/s390/s390.c:4385 msgid "UNKNOWN in print_operand !?" msgstr "" @@ -3321,69 +3427,69 @@ msgstr "" msgid "invalid operand to %%S" msgstr "" -#: config/sh/sh.c:7648 +#: config/sh/sh.c:7661 msgid "created and used with different architectures / ABIs" msgstr "" -#: config/sh/sh.c:7650 +#: config/sh/sh.c:7663 msgid "created and used with different ABIs" msgstr "" -#: config/sh/sh.c:7652 +#: config/sh/sh.c:7665 msgid "created and used with different endianness" msgstr "" -#: config/sparc/sparc.c:6615 config/sparc/sparc.c:6621 +#: config/sparc/sparc.c:6610 config/sparc/sparc.c:6616 #, c-format msgid "invalid %%Y operand" msgstr "" -#: config/sparc/sparc.c:6691 +#: config/sparc/sparc.c:6686 #, c-format msgid "invalid %%A operand" msgstr "" -#: config/sparc/sparc.c:6701 +#: config/sparc/sparc.c:6696 #, c-format msgid "invalid %%B operand" msgstr "" -#: config/sparc/sparc.c:6740 +#: config/sparc/sparc.c:6735 #, c-format msgid "invalid %%c operand" msgstr "" -#: config/sparc/sparc.c:6741 +#: config/sparc/sparc.c:6736 #, c-format msgid "invalid %%C operand" msgstr "" -#: config/sparc/sparc.c:6762 +#: config/sparc/sparc.c:6757 #, c-format msgid "invalid %%d operand" msgstr "" -#: config/sparc/sparc.c:6763 +#: config/sparc/sparc.c:6758 #, c-format msgid "invalid %%D operand" msgstr "" -#: config/sparc/sparc.c:6779 +#: config/sparc/sparc.c:6774 #, c-format msgid "invalid %%f operand" msgstr "" -#: config/sparc/sparc.c:6793 +#: config/sparc/sparc.c:6788 #, c-format msgid "invalid %%s operand" msgstr "" -#: config/sparc/sparc.c:6847 +#: config/sparc/sparc.c:6842 #, c-format msgid "long long constant not a valid immediate operand" msgstr "" -#: config/sparc/sparc.c:6850 +#: config/sparc/sparc.c:6845 #, c-format msgid "floating point constant not a valid immediate operand" msgstr "" @@ -3461,19 +3567,19 @@ msgstr "" msgid "candidates are:" msgstr "" -#: cp/call.c:6232 +#: cp/call.c:6216 msgid "candidate 1:" msgstr "" -#: cp/call.c:6233 +#: cp/call.c:6217 msgid "candidate 2:" msgstr "" -#: cp/decl2.c:697 +#: cp/decl2.c:695 msgid "candidates are: %+#D" msgstr "" -#: cp/decl2.c:699 +#: cp/decl2.c:697 msgid "candidate is: %+#D" msgstr "" @@ -3483,56 +3589,85 @@ msgid "argument to '%s' missing\n" msgstr "" #: fortran/arith.c:141 -msgid "Arithmetic OK" +msgid "Arithmetic OK at %L" msgstr "" #: fortran/arith.c:144 -msgid "Arithmetic overflow" +msgid "Arithmetic overflow at %L" msgstr "" #: fortran/arith.c:147 -msgid "Arithmetic underflow" +msgid "Arithmetic underflow at %L" msgstr "" #: fortran/arith.c:150 -msgid "Arithmetic NaN" +msgid "Arithmetic NaN at %L" msgstr "" #: fortran/arith.c:153 -msgid "Division by zero" +msgid "Division by zero at %L" msgstr "" #: fortran/arith.c:156 -msgid "Array operands are incommensurate" +msgid "Array operands are incommensurate at %L" +msgstr "" + +#: fortran/arith.c:160 +msgid "Integer outside symmetric range implied by Standard Fortran at %L" msgstr "" -#: fortran/arith.c:159 -msgid "Integer outside symmetric range implied by Standard Fortran" +#: fortran/arith.c:1384 +msgid "Elemental binary operation" msgstr "" -#. Something went wrong -#: fortran/arith.c:601 fortran/arith.c:607 fortran/arith.c:1607 -#: fortran/arith.c:1934 fortran/arith.c:2036 fortran/arith.c:2068 -#: fortran/arith.c:2123 fortran/arith.c:2155 fortran/arith.c:2170 +#: fortran/arith.c:1914 #, no-c-format -msgid "%s at %L" +msgid "Arithmetic OK converting %s to %s at %L" msgstr "" -#: fortran/arith.c:1383 -msgid "Elemental binary operation" +#: fortran/arith.c:1918 +#, no-c-format +msgid "Arithmetic overflow converting %s to %s at %L" +msgstr "" + +#: fortran/arith.c:1922 +#, no-c-format +msgid "Arithmetic underflow converting %s to %s at %L" +msgstr "" + +#: fortran/arith.c:1926 +#, no-c-format +msgid "Arithmetic NaN converting %s to %s at %L" +msgstr "" + +#: fortran/arith.c:1930 +#, no-c-format +msgid "Division by zero converting %s to %s at %L" msgstr "" -#: fortran/arith.c:1910 +#: fortran/arith.c:1934 #, no-c-format -msgid "%s converting %s to %s at %L" +msgid "Array operands are incommensurate converting %s to %s at %L" msgstr "" -#: fortran/arith.c:2238 fortran/arith.c:2273 fortran/arith.c:2310 -#: fortran/arith.c:2360 +#: fortran/arith.c:1938 +#, no-c-format +msgid "" +"Integer outside symmetric range implied by Standard Fortran converting %s to " +"%s at %L" +msgstr "" + +#: fortran/arith.c:2271 fortran/arith.c:2306 fortran/arith.c:2343 +#: fortran/arith.c:2393 #, no-c-format msgid "The Hollerith constant at %L is too long to convert to %s" msgstr "" +#: fortran/arith.c:2439 +#, no-c-format +msgid "Enumerator exceeds the C integer type at %C" +msgstr "" + #: fortran/array.c:97 #, no-c-format msgid "Expected array subscript at %C" @@ -3628,601 +3763,799 @@ msgstr "" msgid "Iterator step at %L cannot be zero" msgstr "" -#: fortran/check.c:42 +#: fortran/check.c:44 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be %s" msgstr "" -#: fortran/check.c:70 -msgid "a numeric type" +#: fortran/check.c:60 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a numeric type" msgstr "" -#: fortran/check.c:83 -msgid "INTEGER or REAL" +#: fortran/check.c:75 fortran/check.c:640 fortran/check.c:650 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL" msgstr "" -#: fortran/check.c:98 -msgid "REAL or COMPLEX" +#: fortran/check.c:92 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX" msgstr "" -#: fortran/check.c:122 -msgid "a constant" +#: fortran/check.c:118 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a constant" msgstr "" -#: fortran/check.c:129 +#: fortran/check.c:126 #, no-c-format msgid "Invalid kind for %s at %L" msgstr "" -#: fortran/check.c:148 -msgid "double precision" +#: fortran/check.c:146 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be double precision" msgstr "" #: fortran/check.c:163 -msgid "a logical array" +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a logical array" msgstr "" -#: fortran/check.c:179 -msgid "an array" +#: fortran/check.c:180 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be an array" msgstr "" -#: fortran/check.c:193 -msgid "a scalar" +#: fortran/check.c:195 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a scalar" msgstr "" -#: fortran/check.c:209 -#, c-format -msgid "the same type and kind as '%s'" +#: fortran/check.c:210 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L must be the same type and kind as '%s'" msgstr "" -#: fortran/check.c:228 -#, c-format -msgid "of rank %d" +#: fortran/check.c:225 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of rank %d" msgstr "" -#: fortran/check.c:243 +#: fortran/check.c:239 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must not be OPTIONAL" msgstr "" -#: fortran/check.c:265 -#, c-format -msgid "of kind %d" +#: fortran/check.c:259 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d" msgstr "" -#: fortran/check.c:286 +#: fortran/check.c:280 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)" msgstr "" -#: fortran/check.c:292 -msgid "a variable" +#: fortran/check.c:286 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a variable" msgstr "" -#: fortran/check.c:316 +#: fortran/check.c:311 #, no-c-format msgid "Missing DIM parameter in intrinsic '%s' at %L" msgstr "" -#: fortran/check.c:353 +#: fortran/check.c:348 #, no-c-format msgid "'dim' argument of '%s' intrinsic at %L is not a valid dimension index" msgstr "" -#: fortran/check.c:439 -msgid "ALLOCATABLE" +#: fortran/check.c:434 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE" msgstr "" -#: fortran/check.c:476 fortran/check.c:1538 -msgid "a POINTER" +#: fortran/check.c:473 fortran/check.c:1619 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER" msgstr "" -#: fortran/check.c:486 +#: fortran/check.c:485 #, no-c-format msgid "" "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic " "function" msgstr "" -#: fortran/check.c:495 -msgid "a POINTER or a TARGET" +#: fortran/check.c:494 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER or a TARGET" msgstr "" -#: fortran/check.c:509 +#: fortran/check.c:510 #, no-c-format msgid "" "Array section with a vector subscript at %L shall not be the target of a " "pointer" msgstr "" -#: fortran/check.c:619 fortran/check.c:679 -msgid "not be present if 'x' is COMPLEX" +#: fortran/check.c:620 fortran/check.c:722 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L must not be present if 'x' is COMPLEX" msgstr "" -#: fortran/check.c:726 fortran/check.c:1348 fortran/check.c:1354 -msgid "numeric or LOGICAL" +#: fortran/check.c:771 fortran/check.c:1423 fortran/check.c:1431 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL" msgstr "" -#: fortran/check.c:873 fortran/check.c:1003 fortran/check.c:1063 -#: fortran/check.c:1280 +#: fortran/check.c:920 fortran/check.c:1055 fortran/check.c:1118 +#: fortran/check.c:1343 #, no-c-format msgid "Extension: Different type kinds at %L" msgstr "" -#: fortran/check.c:973 +#: fortran/check.c:1025 #, no-c-format msgid "Argument of %s at %L must be of length one" msgstr "" -#: fortran/check.c:1025 -msgid "the same kind as 'string'" +#: fortran/check.c:1077 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be the same kind as '%s'" msgstr "" -#: fortran/check.c:1137 -msgid "a non-derived type" +#: fortran/check.c:1192 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be a non-derived type" msgstr "" -#: fortran/check.c:1252 +#: fortran/check.c:1315 #, no-c-format msgid "Intrinsic '%s' at %L must have at least two arguments" msgstr "" -#: fortran/check.c:1286 +#: fortran/check.c:1349 #, no-c-format msgid "'a%d' argument of '%s' intrinsic at %L must be %s(%d)" msgstr "" -#: fortran/check.c:1311 +#: fortran/check.c:1374 #, no-c-format msgid "'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL" msgstr "" -#: fortran/check.c:1373 -msgid "of rank 1 or 2" +#: fortran/check.c:1452 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of rank 1 or 2" msgstr "" -#: fortran/check.c:1557 -msgid "conformable with 'mask' argument" +#: fortran/check.c:1640 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L must be conformable with '%s' argument" msgstr "" -#: fortran/check.c:1581 -msgid "of type REAL or COMPLEX" +#: fortran/check.c:1667 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of type REAL or COMPLEX" msgstr "" -#: fortran/check.c:1600 -msgid "a dummy variable" +#: fortran/check.c:1688 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable" msgstr "" -#: fortran/check.c:1606 -msgid "an OPTIONAL dummy variable" +#: fortran/check.c:1696 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable" msgstr "" -#: fortran/check.c:1720 +#: fortran/check.c:1812 #, no-c-format msgid "" "'shape' argument of 'reshape' intrinsic at %L must be an array of constant " "size" msgstr "" -#: fortran/check.c:1730 +#: fortran/check.c:1822 #, no-c-format msgid "'shape' argument of 'reshape' intrinsic at %L has more than %d elements" msgstr "" -#: fortran/check.c:1801 +#: fortran/check.c:1910 #, no-c-format msgid "Missing arguments to %s intrinsic at %L" msgstr "" -#: fortran/check.c:1842 +#: fortran/check.c:1951 #, no-c-format msgid "" "'source' argument of 'shape' intrinsic at %L must not be an assumed size " "array" msgstr "" -#: fortran/check.c:1906 -#, c-format -msgid "less than rank %d" +#: fortran/check.c:2013 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be less than rank %d" msgstr "" -#: fortran/check.c:2259 fortran/check.c:2279 +#: fortran/check.c:2470 fortran/check.c:2490 #, no-c-format msgid "Too many arguments to %s at %L" msgstr "" +#: fortran/check.c:2618 fortran/check.c:2980 fortran/check.c:3004 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE" +msgstr "" + +#: fortran/check.c:3051 fortran/check.c:3059 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL" +msgstr "" + +#: fortran/check.c:3066 +#, no-c-format +msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type" +msgstr "" + #: fortran/data.c:63 #, no-c-format msgid "non-constant array in DATA statement %L." msgstr "" -#: fortran/decl.c:184 +#: fortran/data.c:327 +#, no-c-format +msgid "Extension: re-initialization of '%s' at %L" +msgstr "" + +#: fortran/decl.c:208 #, no-c-format -msgid "Variable '%s' at %C already has an initialization" +msgid "Host associated variable '%s' may not be in the DATA statement at %C." msgstr "" -#: fortran/decl.c:195 +#: fortran/decl.c:215 #, no-c-format -msgid "DATA statement at %C may not initialize variable '%s' from blank COMMON" +msgid "" +"Extension: initialization of common block variable '%s' in DATA statement at " +"%C" msgstr "" -#: fortran/decl.c:282 +#: fortran/decl.c:301 #, no-c-format msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C" msgstr "" -#: fortran/decl.c:389 +#: fortran/decl.c:408 #, no-c-format msgid "Initialization at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:436 +#: fortran/decl.c:455 #, no-c-format msgid "DATA statement at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:464 +#: fortran/decl.c:483 #, no-c-format msgid "Bad INTENT specification at %C" msgstr "" -#: fortran/decl.c:528 +#: fortran/decl.c:547 #, no-c-format msgid "Syntax error in character length specification at %C" msgstr "" -#: fortran/decl.c:703 +#: fortran/decl.c:779 #, no-c-format msgid "Initializer not allowed for PARAMETER '%s' at %C" msgstr "" -#: fortran/decl.c:712 +#: fortran/decl.c:788 #, no-c-format msgid "Initializer not allowed for COMMON variable '%s' at %C" msgstr "" -#: fortran/decl.c:722 +#: fortran/decl.c:798 #, no-c-format msgid "PARAMETER at %L is missing an initializer" msgstr "" -#: fortran/decl.c:733 +#: fortran/decl.c:809 #, no-c-format msgid "" "Variable '%s' at %C with an initializer already appears in a DATA statement" msgstr "" -#: fortran/decl.c:800 +#: fortran/decl.c:887 #, no-c-format msgid "Component at %C must have the POINTER attribute" msgstr "" -#: fortran/decl.c:809 +#: fortran/decl.c:896 #, no-c-format msgid "Array component of structure at %C must have explicit or deferred shape" msgstr "" -#: fortran/decl.c:838 +#: fortran/decl.c:925 #, no-c-format msgid "Pointer array component of structure at %C must have a deferred shape" msgstr "" -#: fortran/decl.c:848 +#: fortran/decl.c:935 #, no-c-format msgid "Array component of structure at %C must have an explicit shape" msgstr "" -#: fortran/decl.c:874 +#: fortran/decl.c:961 #, no-c-format msgid "NULL() initialization at %C is ambiguous" msgstr "" -#: fortran/decl.c:983 +#: fortran/decl.c:1028 +#, no-c-format +msgid "Enumerator cannot be array at %C" +msgstr "" + +#: fortran/decl.c:1089 fortran/decl.c:3297 +#, no-c-format +msgid "Duplicate array spec for Cray pointee at %C." +msgstr "" + +#: fortran/decl.c:1141 #, no-c-format msgid "Function name '%s' not allowed at %C" msgstr "" -#: fortran/decl.c:999 +#: fortran/decl.c:1157 #, no-c-format msgid "Extension: Old-style initialization at %C" msgstr "" -#: fortran/decl.c:1015 +#: fortran/decl.c:1173 #, no-c-format msgid "Initialization at %C isn't for a pointer variable" msgstr "" -#: fortran/decl.c:1023 +#: fortran/decl.c:1181 #, no-c-format msgid "Pointer initialization requires a NULL at %C" msgstr "" -#: fortran/decl.c:1030 +#: fortran/decl.c:1188 #, no-c-format msgid "Initialization of pointer at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:1046 +#: fortran/decl.c:1204 #, no-c-format msgid "Pointer initialization at %C requires '=>', not '='" msgstr "" -#: fortran/decl.c:1054 +#: fortran/decl.c:1212 #, no-c-format msgid "Expected an initialization expression at %C" msgstr "" -#: fortran/decl.c:1061 +#: fortran/decl.c:1219 #, no-c-format msgid "Initialization of variable at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:1116 +#: fortran/decl.c:1241 +#, no-c-format +msgid "ENUMERATOR %L not initialized with integer expression" +msgstr "" + +#: fortran/decl.c:1298 #, no-c-format msgid "Old-style kind %d not supported for type %s at %C" msgstr "" -#: fortran/decl.c:1152 +#: fortran/decl.c:1334 #, no-c-format msgid "Expected initialization expression at %C" msgstr "" -#: fortran/decl.c:1158 +#: fortran/decl.c:1340 #, no-c-format msgid "Expected scalar initialization expression at %C" msgstr "" -#: fortran/decl.c:1176 +#: fortran/decl.c:1358 #, no-c-format msgid "Kind %d not supported for type %s at %C" msgstr "" -#: fortran/decl.c:1185 +#: fortran/decl.c:1367 #, no-c-format msgid "Missing right paren at %C" msgstr "" -#: fortran/decl.c:1274 fortran/decl.c:1317 +#: fortran/decl.c:1456 fortran/decl.c:1499 #, no-c-format msgid "Kind %d is not a CHARACTER kind at %C" msgstr "" -#: fortran/decl.c:1311 +#: fortran/decl.c:1493 #, no-c-format msgid "Syntax error in CHARACTER declaration at %C" msgstr "" -#: fortran/decl.c:1428 +#: fortran/decl.c:1554 +#, no-c-format +msgid "Extension: BYTE type at %C" +msgstr "" + +#: fortran/decl.c:1560 +#, no-c-format +msgid "BYTE type used at %C is not available on the target machine" +msgstr "" + +#: fortran/decl.c:1628 #, no-c-format msgid "Type name '%s' at %C is ambiguous" msgstr "" -#: fortran/decl.c:1494 +#: fortran/decl.c:1694 #, no-c-format msgid "Missing character range in IMPLICIT at %C" msgstr "" -#: fortran/decl.c:1540 +#: fortran/decl.c:1740 #, no-c-format msgid "Letters must be in alphabetic order in IMPLICIT statement at %C" msgstr "" -#: fortran/decl.c:1594 +#: fortran/decl.c:1794 #, no-c-format msgid "Empty IMPLICIT statement at %C" msgstr "" -#: fortran/decl.c:1765 +#: fortran/decl.c:1958 +#, no-c-format +msgid "Enumerator cannot have attributes %C" +msgstr "" + +#: fortran/decl.c:1971 #, no-c-format msgid "Missing dimension specification at %C" msgstr "" -#: fortran/decl.c:1835 +#: fortran/decl.c:2053 #, no-c-format msgid "Duplicate %s attribute at %L" msgstr "" -#: fortran/decl.c:1852 +#: fortran/decl.c:2070 #, no-c-format msgid "Attribute at %L is not allowed in a TYPE definition" msgstr "" -#: fortran/decl.c:1986 +#: fortran/decl.c:2084 +#, no-c-format +msgid "%s attribute at %L is not allowed outside of a MODULE" +msgstr "" + +#. Now we have an error, which we signal, and then fix up +#. because the knock-on is plain and simple confusing. +#: fortran/decl.c:2222 #, no-c-format -msgid "Derived type at %C has not been previously defined" +msgid "" +"Derived type at %C has not been previously defined and so cannot appear in a " +"derived type definition." msgstr "" -#: fortran/decl.c:2013 +#: fortran/decl.c:2252 #, no-c-format msgid "Syntax error in data declaration at %C" msgstr "" -#: fortran/decl.c:2159 +#: fortran/decl.c:2398 #, no-c-format msgid "Name '%s' at %C is the name of the procedure" msgstr "" -#: fortran/decl.c:2171 +#: fortran/decl.c:2410 #, no-c-format msgid "Unexpected junk in formal argument list at %C" msgstr "" -#: fortran/decl.c:2189 +#: fortran/decl.c:2428 #, no-c-format msgid "Duplicate symbol '%s' in formal argument list at %C" msgstr "" -#: fortran/decl.c:2232 +#: fortran/decl.c:2471 #, no-c-format msgid "Unexpected junk following RESULT variable at %C" msgstr "" -#: fortran/decl.c:2239 +#: fortran/decl.c:2478 #, no-c-format msgid "RESULT variable at %C must be different than function name" msgstr "" -#: fortran/decl.c:2294 +#: fortran/decl.c:2533 #, no-c-format msgid "Expected formal argument list in function definition at %C" msgstr "" -#: fortran/decl.c:2305 +#: fortran/decl.c:2544 #, no-c-format msgid "Unexpected junk after function declaration at %C" msgstr "" -#: fortran/decl.c:2326 +#: fortran/decl.c:2565 #, no-c-format msgid "Function '%s' at %C already has a type of %s" msgstr "" -#: fortran/decl.c:2371 +#: fortran/decl.c:2613 #, no-c-format -msgid "ENTRY statement at %C cannot appear within %s" +msgid "ENTRY statement at %C cannot appear within a PROGRAM" msgstr "" -#: fortran/decl.c:2380 +#: fortran/decl.c:2616 #, no-c-format -msgid "ENTRY statement at %C cannot appear in a contained procedure" +msgid "ENTRY statement at %C cannot appear within a MODULE" msgstr "" -#: fortran/decl.c:2437 +#: fortran/decl.c:2620 #, no-c-format -msgid "RESULT attribute required in ENTRY statement at %C" +msgid "ENTRY statement at %C cannot appear within a BLOCK DATA" msgstr "" -#: fortran/decl.c:2635 +#: fortran/decl.c:2624 #, no-c-format -msgid "Unexpected END statement at %C" +msgid "ENTRY statement at %C cannot appear within an INTERFACE" msgstr "" -#. We would have required END [something] -#: fortran/decl.c:2644 +#: fortran/decl.c:2628 #, no-c-format -msgid "%s statement expected at %L" +msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block" msgstr "" -#: fortran/decl.c:2655 +#: fortran/decl.c:2633 #, no-c-format -msgid "Expecting %s statement at %C" +msgid "ENTRY statement at %C cannot appear within an IF-THEN block" msgstr "" -#: fortran/decl.c:2669 +#: fortran/decl.c:2637 #, no-c-format -msgid "Expected block name of '%s' in %s statement at %C" +msgid "ENTRY statement at %C cannot appear within a DO block" msgstr "" -#: fortran/decl.c:2685 +#: fortran/decl.c:2641 #, no-c-format -msgid "Expected terminating name at %C" +msgid "ENTRY statement at %C cannot appear within a SELECT block" msgstr "" -#: fortran/decl.c:2694 +#: fortran/decl.c:2645 #, no-c-format -msgid "Expected label '%s' for %s statement at %C" +msgid "ENTRY statement at %C cannot appear within a FORALL block" msgstr "" -#: fortran/decl.c:2749 +#: fortran/decl.c:2649 #, no-c-format -msgid "Missing array specification at %L in DIMENSION statement" +msgid "ENTRY statement at %C cannot appear within a WHERE block" msgstr "" -#: fortran/decl.c:2758 +#: fortran/decl.c:2653 #, no-c-format -msgid "Array specification must be deferred at %L" +msgid "ENTRY statement at %C cannot appear within a contained subprogram" msgstr "" -#: fortran/decl.c:2821 +#: fortran/decl.c:2666 #, no-c-format -msgid "Unexpected character in variable list at %C" +msgid "ENTRY statement at %C cannot appear in a contained procedure" msgstr "" -#: fortran/decl.c:2974 +#: fortran/decl.c:2741 #, no-c-format -msgid "" -"Access specification of the %s operator at %C has already been specified" +msgid "RESULT attribute required in ENTRY statement at %C" msgstr "" -#: fortran/decl.c:2992 +#: fortran/decl.c:2982 #, no-c-format -msgid "" -"Access specification of the .%s. operator at %C has already been specified" +msgid "Unexpected END statement at %C" msgstr "" -#: fortran/decl.c:3079 +#. We would have required END [something] +#: fortran/decl.c:2991 #, no-c-format -msgid "Expected variable name at %C in PARAMETER statement" +msgid "%s statement expected at %L" msgstr "" -#: fortran/decl.c:3086 +#: fortran/decl.c:3002 #, no-c-format -msgid "Expected = sign in PARAMETER statement at %C" +msgid "Expecting %s statement at %C" msgstr "" -#: fortran/decl.c:3092 +#: fortran/decl.c:3016 #, no-c-format -msgid "Expected expression at %C in PARAMETER statement" +msgid "Expected block name of '%s' in %s statement at %C" msgstr "" -#: fortran/decl.c:3150 +#: fortran/decl.c:3032 #, no-c-format -msgid "Unexpected characters in PARAMETER statement at %C" +msgid "Expected terminating name at %C" msgstr "" -#: fortran/decl.c:3174 +#: fortran/decl.c:3041 #, no-c-format -msgid "Blanket SAVE statement at %C follows previous SAVE statement" +msgid "Expected label '%s' for %s statement at %C" msgstr "" -#: fortran/decl.c:3186 +#: fortran/decl.c:3096 #, no-c-format -msgid "SAVE statement at %C follows blanket SAVE statement" +msgid "Missing array specification at %L in DIMENSION statement" msgstr "" -#: fortran/decl.c:3231 +#: fortran/decl.c:3105 #, no-c-format -msgid "Syntax error in SAVE statement at %C" +msgid "Array specification must be deferred at %L" msgstr "" -#: fortran/decl.c:3252 +#: fortran/decl.c:3176 #, no-c-format -msgid "MODULE PROCEDURE at %C must be in a generic module interface" +msgid "Unexpected character in variable list at %C" msgstr "" -#: fortran/decl.c:3312 +#: fortran/decl.c:3213 #, no-c-format -msgid "Derived type at %C can only be PRIVATE within a MODULE" +msgid "Expected '(' at %C" msgstr "" -#: fortran/decl.c:3325 +#: fortran/decl.c:3227 fortran/decl.c:3268 #, no-c-format -msgid "Derived type at %C can only be PUBLIC within a MODULE" +msgid "Expected variable name at %C" msgstr "" -#: fortran/decl.c:3336 +#: fortran/decl.c:3243 #, no-c-format -msgid "Expected :: in TYPE definition at %C" +msgid "Cray pointer at %C must be an integer." msgstr "" -#: fortran/decl.c:3353 +#: fortran/decl.c:3247 #, no-c-format -msgid "Type name '%s' at %C cannot be the same as an intrinsic type" +msgid "" +"Cray pointer at %C has %d bytes of precision; memory addresses require %d " +"bytes." msgstr "" -#: fortran/decl.c:3363 +#: fortran/decl.c:3254 #, no-c-format -msgid "Derived type name '%s' at %C already has a basic type of %s" +msgid "Expected \",\" at %C" msgstr "" -#: fortran/decl.c:3380 +#: fortran/decl.c:3317 #, no-c-format -msgid "Derived type definition of '%s' at %C has already been defined" +msgid "Expected \")\" at %C" msgstr "" -#: fortran/dump-parse-tree.c:53 -#, c-format -msgid "%-5d " +#: fortran/decl.c:3329 +#, no-c-format +msgid "Expected \",\" or end of statement at %C" +msgstr "" + +#: fortran/decl.c:3394 +#, no-c-format +msgid "Cray pointer declaration at %C requires -fcray-pointer flag." +msgstr "" + +#: fortran/decl.c:3492 +#, no-c-format +msgid "" +"Access specification of the %s operator at %C has already been specified" +msgstr "" + +#: fortran/decl.c:3510 +#, no-c-format +msgid "" +"Access specification of the .%s. operator at %C has already been specified" +msgstr "" + +#: fortran/decl.c:3597 +#, no-c-format +msgid "Expected variable name at %C in PARAMETER statement" +msgstr "" + +#: fortran/decl.c:3604 +#, no-c-format +msgid "Expected = sign in PARAMETER statement at %C" +msgstr "" + +#: fortran/decl.c:3610 +#, no-c-format +msgid "Expected expression at %C in PARAMETER statement" +msgstr "" + +#: fortran/decl.c:3668 +#, no-c-format +msgid "Unexpected characters in PARAMETER statement at %C" +msgstr "" + +#: fortran/decl.c:3693 +#, no-c-format +msgid "Blanket SAVE statement at %C follows previous SAVE statement" +msgstr "" + +#: fortran/decl.c:3706 +#, no-c-format +msgid "SAVE statement at %C follows blanket SAVE statement" +msgstr "" + +#: fortran/decl.c:3752 +#, no-c-format +msgid "Syntax error in SAVE statement at %C" +msgstr "" + +#: fortran/decl.c:3773 +#, no-c-format +msgid "MODULE PROCEDURE at %C must be in a generic module interface" +msgstr "" + +#: fortran/decl.c:3833 +#, no-c-format +msgid "Derived type at %C can only be PRIVATE within a MODULE" +msgstr "" + +#: fortran/decl.c:3846 +#, no-c-format +msgid "Derived type at %C can only be PUBLIC within a MODULE" +msgstr "" + +#: fortran/decl.c:3857 +#, no-c-format +msgid "Expected :: in TYPE definition at %C" +msgstr "" + +#: fortran/decl.c:3874 +#, no-c-format +msgid "Type name '%s' at %C cannot be the same as an intrinsic type" +msgstr "" + +#: fortran/decl.c:3884 +#, no-c-format +msgid "Derived type name '%s' at %C already has a basic type of %s" +msgstr "" + +#: fortran/decl.c:3901 +#, no-c-format +msgid "Derived type definition of '%s' at %C has already been defined" +msgstr "" + +#: fortran/decl.c:3935 +#, no-c-format +msgid "Cray Pointee at %C cannot be assumed shape array" +msgstr "" + +#: fortran/decl.c:3956 +#, no-c-format +msgid "New in Fortran 2003: ENUM AND ENUMERATOR at %C" +msgstr "" + +#: fortran/decl.c:3980 +#, no-c-format +msgid "ENUM definition statement expected before %C" +msgstr "" + +#: fortran/decl.c:4013 +#, no-c-format +msgid "Syntax error in ENUMERATOR definition at %C" +msgstr "" + +#: fortran/dump-parse-tree.c:53 +#, c-format +msgid "%-5d " msgstr "" #: fortran/dump-parse-tree.c:55 @@ -4230,884 +4563,884 @@ msgstr "" msgid " " msgstr "" -#: fortran/dump-parse-tree.c:77 fortran/dump-parse-tree.c:592 +#: fortran/dump-parse-tree.c:79 fortran/dump-parse-tree.c:594 #, c-format msgid "(%s " msgstr "" -#: fortran/dump-parse-tree.c:90 fortran/dump-parse-tree.c:837 -#: fortran/dump-parse-tree.c:874 fortran/dump-parse-tree.c:884 +#: fortran/dump-parse-tree.c:92 fortran/dump-parse-tree.c:841 +#: fortran/dump-parse-tree.c:878 fortran/dump-parse-tree.c:888 #, c-format msgid "%d" msgstr "" -#: fortran/dump-parse-tree.c:94 fortran/dump-parse-tree.c:121 -#: fortran/dump-parse-tree.c:164 fortran/dump-parse-tree.c:401 -#: fortran/dump-parse-tree.c:493 fortran/dump-parse-tree.c:579 -#: fortran/dump-parse-tree.c:600 +#: fortran/dump-parse-tree.c:96 fortran/dump-parse-tree.c:123 +#: fortran/dump-parse-tree.c:166 fortran/dump-parse-tree.c:403 +#: fortran/dump-parse-tree.c:495 fortran/dump-parse-tree.c:581 +#: fortran/dump-parse-tree.c:602 #, c-format msgid ")" msgstr "" -#: fortran/dump-parse-tree.c:104 fortran/dump-parse-tree.c:419 +#: fortran/dump-parse-tree.c:106 fortran/dump-parse-tree.c:421 #, c-format msgid "(" msgstr "" -#: fortran/dump-parse-tree.c:110 +#: fortran/dump-parse-tree.c:112 #, c-format msgid "%s = " msgstr "" -#: fortran/dump-parse-tree.c:114 +#: fortran/dump-parse-tree.c:116 #, c-format msgid "(arg not-present)" msgstr "" -#: fortran/dump-parse-tree.c:118 fortran/dump-parse-tree.c:395 -#: fortran/dump-parse-tree.c:489 +#: fortran/dump-parse-tree.c:120 fortran/dump-parse-tree.c:397 +#: fortran/dump-parse-tree.c:491 #, c-format msgid " " msgstr "" -#: fortran/dump-parse-tree.c:135 fortran/dump-parse-tree.c:310 +#: fortran/dump-parse-tree.c:137 fortran/dump-parse-tree.c:312 #, c-format msgid "()" msgstr "" -#: fortran/dump-parse-tree.c:139 +#: fortran/dump-parse-tree.c:141 #, c-format msgid "(%d" msgstr "" -#: fortran/dump-parse-tree.c:153 +#: fortran/dump-parse-tree.c:155 #, c-format msgid " %s " msgstr "" -#: fortran/dump-parse-tree.c:180 +#: fortran/dump-parse-tree.c:182 #, c-format msgid "FULL" msgstr "" -#: fortran/dump-parse-tree.c:211 fortran/dump-parse-tree.c:220 -#: fortran/dump-parse-tree.c:295 +#: fortran/dump-parse-tree.c:213 fortran/dump-parse-tree.c:222 +#: fortran/dump-parse-tree.c:297 #, c-format msgid " , " msgstr "" -#: fortran/dump-parse-tree.c:225 +#: fortran/dump-parse-tree.c:227 #, c-format msgid "UNKNOWN" msgstr "" -#: fortran/dump-parse-tree.c:250 +#: fortran/dump-parse-tree.c:252 #, c-format msgid " %% %s" msgstr "" -#: fortran/dump-parse-tree.c:322 fortran/dump-parse-tree.c:379 +#: fortran/dump-parse-tree.c:324 fortran/dump-parse-tree.c:381 #, c-format msgid "''" msgstr "" -#: fortran/dump-parse-tree.c:324 +#: fortran/dump-parse-tree.c:326 #, c-format msgid "%c" msgstr "" -#: fortran/dump-parse-tree.c:331 +#: fortran/dump-parse-tree.c:333 #, c-format msgid "%s(" msgstr "" -#: fortran/dump-parse-tree.c:337 +#: fortran/dump-parse-tree.c:339 #, c-format msgid "(/ " msgstr "" -#: fortran/dump-parse-tree.c:339 +#: fortran/dump-parse-tree.c:341 #, c-format msgid " /)" msgstr "" -#: fortran/dump-parse-tree.c:345 +#: fortran/dump-parse-tree.c:347 #, c-format msgid "NULL()" msgstr "" -#: fortran/dump-parse-tree.c:355 fortran/dump-parse-tree.c:368 -#: fortran/dump-parse-tree.c:393 fortran/dump-parse-tree.c:399 +#: fortran/dump-parse-tree.c:357 fortran/dump-parse-tree.c:370 +#: fortran/dump-parse-tree.c:395 fortran/dump-parse-tree.c:401 #, c-format msgid "_%d" msgstr "" -#: fortran/dump-parse-tree.c:360 +#: fortran/dump-parse-tree.c:362 #, c-format msgid ".true." msgstr "" -#: fortran/dump-parse-tree.c:362 +#: fortran/dump-parse-tree.c:364 #, c-format msgid ".false." msgstr "" -#: fortran/dump-parse-tree.c:389 +#: fortran/dump-parse-tree.c:391 #, c-format msgid "(complex " msgstr "" -#: fortran/dump-parse-tree.c:405 +#: fortran/dump-parse-tree.c:407 #, c-format msgid "???" msgstr "" -#: fortran/dump-parse-tree.c:413 fortran/dump-parse-tree.c:695 +#: fortran/dump-parse-tree.c:415 fortran/dump-parse-tree.c:698 #, c-format msgid "%s:" msgstr "" -#: fortran/dump-parse-tree.c:423 +#: fortran/dump-parse-tree.c:425 #, c-format msgid "U+ " msgstr "" -#: fortran/dump-parse-tree.c:426 +#: fortran/dump-parse-tree.c:428 #, c-format msgid "U- " msgstr "" -#: fortran/dump-parse-tree.c:429 +#: fortran/dump-parse-tree.c:431 #, c-format msgid "+ " msgstr "" -#: fortran/dump-parse-tree.c:432 +#: fortran/dump-parse-tree.c:434 #, c-format msgid "- " msgstr "" -#: fortran/dump-parse-tree.c:435 +#: fortran/dump-parse-tree.c:437 #, c-format msgid "* " msgstr "" -#: fortran/dump-parse-tree.c:438 +#: fortran/dump-parse-tree.c:440 #, c-format msgid "/ " msgstr "" -#: fortran/dump-parse-tree.c:441 +#: fortran/dump-parse-tree.c:443 #, c-format msgid "** " msgstr "" -#: fortran/dump-parse-tree.c:444 +#: fortran/dump-parse-tree.c:446 #, c-format msgid "// " msgstr "" -#: fortran/dump-parse-tree.c:447 +#: fortran/dump-parse-tree.c:449 #, c-format msgid "AND " msgstr "" -#: fortran/dump-parse-tree.c:450 +#: fortran/dump-parse-tree.c:452 #, c-format msgid "OR " msgstr "" -#: fortran/dump-parse-tree.c:453 +#: fortran/dump-parse-tree.c:455 #, c-format msgid "EQV " msgstr "" -#: fortran/dump-parse-tree.c:456 +#: fortran/dump-parse-tree.c:458 #, c-format msgid "NEQV " msgstr "" -#: fortran/dump-parse-tree.c:459 +#: fortran/dump-parse-tree.c:461 #, c-format msgid "= " msgstr "" -#: fortran/dump-parse-tree.c:462 +#: fortran/dump-parse-tree.c:464 #, c-format msgid "<> " msgstr "" -#: fortran/dump-parse-tree.c:465 +#: fortran/dump-parse-tree.c:467 #, c-format msgid "> " msgstr "" -#: fortran/dump-parse-tree.c:468 +#: fortran/dump-parse-tree.c:470 #, c-format msgid ">= " msgstr "" -#: fortran/dump-parse-tree.c:471 +#: fortran/dump-parse-tree.c:473 #, c-format msgid "< " msgstr "" -#: fortran/dump-parse-tree.c:474 +#: fortran/dump-parse-tree.c:476 #, c-format msgid "<= " msgstr "" -#: fortran/dump-parse-tree.c:477 +#: fortran/dump-parse-tree.c:479 #, c-format msgid "NOT " msgstr "" -#: fortran/dump-parse-tree.c:499 +#: fortran/dump-parse-tree.c:501 #, c-format msgid "%s[" msgstr "" -#: fortran/dump-parse-tree.c:505 +#: fortran/dump-parse-tree.c:507 #, c-format msgid "%s[[" msgstr "" -#: fortran/dump-parse-tree.c:526 +#: fortran/dump-parse-tree.c:528 #, c-format msgid "(%s %s %s %s" msgstr "" -#: fortran/dump-parse-tree.c:532 +#: fortran/dump-parse-tree.c:534 #, c-format msgid " ALLOCATABLE" msgstr "" -#: fortran/dump-parse-tree.c:534 fortran/dump-parse-tree.c:597 +#: fortran/dump-parse-tree.c:536 fortran/dump-parse-tree.c:599 #, c-format msgid " DIMENSION" msgstr "" -#: fortran/dump-parse-tree.c:536 +#: fortran/dump-parse-tree.c:538 #, c-format msgid " EXTERNAL" msgstr "" -#: fortran/dump-parse-tree.c:538 +#: fortran/dump-parse-tree.c:540 #, c-format msgid " INTRINSIC" msgstr "" -#: fortran/dump-parse-tree.c:540 +#: fortran/dump-parse-tree.c:542 #, c-format msgid " OPTIONAL" msgstr "" -#: fortran/dump-parse-tree.c:542 fortran/dump-parse-tree.c:595 +#: fortran/dump-parse-tree.c:544 fortran/dump-parse-tree.c:597 #, c-format msgid " POINTER" msgstr "" -#: fortran/dump-parse-tree.c:544 +#: fortran/dump-parse-tree.c:546 #, c-format msgid " SAVE" msgstr "" -#: fortran/dump-parse-tree.c:546 +#: fortran/dump-parse-tree.c:548 #, c-format msgid " TARGET" msgstr "" -#: fortran/dump-parse-tree.c:548 +#: fortran/dump-parse-tree.c:550 #, c-format msgid " DUMMY" msgstr "" -#: fortran/dump-parse-tree.c:550 +#: fortran/dump-parse-tree.c:552 #, c-format msgid " RESULT" msgstr "" -#: fortran/dump-parse-tree.c:552 +#: fortran/dump-parse-tree.c:554 #, c-format msgid " ENTRY" msgstr "" -#: fortran/dump-parse-tree.c:555 +#: fortran/dump-parse-tree.c:557 #, c-format msgid " DATA" msgstr "" -#: fortran/dump-parse-tree.c:557 +#: fortran/dump-parse-tree.c:559 #, c-format msgid " USE-ASSOC" msgstr "" -#: fortran/dump-parse-tree.c:559 +#: fortran/dump-parse-tree.c:561 #, c-format msgid " IN-NAMELIST" msgstr "" -#: fortran/dump-parse-tree.c:561 +#: fortran/dump-parse-tree.c:563 #, c-format msgid " IN-COMMON" msgstr "" -#: fortran/dump-parse-tree.c:564 +#: fortran/dump-parse-tree.c:566 #, c-format msgid " FUNCTION" msgstr "" -#: fortran/dump-parse-tree.c:566 +#: fortran/dump-parse-tree.c:568 #, c-format msgid " SUBROUTINE" msgstr "" -#: fortran/dump-parse-tree.c:568 +#: fortran/dump-parse-tree.c:570 #, c-format msgid " IMPLICIT-TYPE" msgstr "" -#: fortran/dump-parse-tree.c:571 +#: fortran/dump-parse-tree.c:573 #, c-format msgid " SEQUENCE" msgstr "" -#: fortran/dump-parse-tree.c:573 +#: fortran/dump-parse-tree.c:575 #, c-format msgid " ELEMENTAL" msgstr "" -#: fortran/dump-parse-tree.c:575 +#: fortran/dump-parse-tree.c:577 #, c-format msgid " PURE" msgstr "" -#: fortran/dump-parse-tree.c:577 +#: fortran/dump-parse-tree.c:579 #, c-format msgid " RECURSIVE" msgstr "" -#: fortran/dump-parse-tree.c:623 +#: fortran/dump-parse-tree.c:625 #, c-format msgid "symbol %s " msgstr "" -#: fortran/dump-parse-tree.c:630 +#: fortran/dump-parse-tree.c:632 #, c-format msgid "value: " msgstr "" -#: fortran/dump-parse-tree.c:637 +#: fortran/dump-parse-tree.c:639 #, c-format msgid "Array spec:" msgstr "" -#: fortran/dump-parse-tree.c:644 +#: fortran/dump-parse-tree.c:646 #, c-format msgid "Generic interfaces:" msgstr "" -#: fortran/dump-parse-tree.c:646 fortran/dump-parse-tree.c:670 -#: fortran/dump-parse-tree.c:698 fortran/dump-parse-tree.c:1037 -#: fortran/dump-parse-tree.c:1043 fortran/dump-parse-tree.c:1513 +#: fortran/dump-parse-tree.c:648 fortran/dump-parse-tree.c:672 +#: fortran/dump-parse-tree.c:701 fortran/dump-parse-tree.c:1041 +#: fortran/dump-parse-tree.c:1047 fortran/dump-parse-tree.c:1517 #, c-format msgid " %s" msgstr "" -#: fortran/dump-parse-tree.c:652 +#: fortran/dump-parse-tree.c:654 #, c-format msgid "result: %s" msgstr "" -#: fortran/dump-parse-tree.c:658 +#: fortran/dump-parse-tree.c:660 #, c-format msgid "components: " msgstr "" -#: fortran/dump-parse-tree.c:665 +#: fortran/dump-parse-tree.c:667 #, c-format msgid "Formal arglist:" msgstr "" -#: fortran/dump-parse-tree.c:672 +#: fortran/dump-parse-tree.c:674 #, c-format msgid " [Alt Return]" msgstr "" -#: fortran/dump-parse-tree.c:679 +#: fortran/dump-parse-tree.c:681 #, c-format msgid "Formal namespace" msgstr "" -#: fortran/dump-parse-tree.c:736 +#: fortran/dump-parse-tree.c:739 #, c-format msgid "common: /%s/ " msgstr "" -#: fortran/dump-parse-tree.c:744 fortran/dump-parse-tree.c:1449 +#: fortran/dump-parse-tree.c:747 fortran/dump-parse-tree.c:1453 #, c-format msgid ", " msgstr "" -#: fortran/dump-parse-tree.c:756 +#: fortran/dump-parse-tree.c:760 #, c-format msgid "symtree: %s Ambig %d" msgstr "" -#: fortran/dump-parse-tree.c:759 +#: fortran/dump-parse-tree.c:763 #, c-format msgid " from namespace %s" msgstr "" -#: fortran/dump-parse-tree.c:803 +#: fortran/dump-parse-tree.c:807 #, c-format msgid "NOP" msgstr "" -#: fortran/dump-parse-tree.c:807 +#: fortran/dump-parse-tree.c:811 #, c-format msgid "CONTINUE" msgstr "" -#: fortran/dump-parse-tree.c:811 +#: fortran/dump-parse-tree.c:815 #, c-format msgid "ENTRY %s" msgstr "" -#: fortran/dump-parse-tree.c:815 +#: fortran/dump-parse-tree.c:819 #, c-format msgid "ASSIGN " msgstr "" -#: fortran/dump-parse-tree.c:822 +#: fortran/dump-parse-tree.c:826 #, c-format msgid "LABEL ASSIGN " msgstr "" -#: fortran/dump-parse-tree.c:824 +#: fortran/dump-parse-tree.c:828 #, c-format msgid " %d" msgstr "" -#: fortran/dump-parse-tree.c:828 +#: fortran/dump-parse-tree.c:832 #, c-format msgid "POINTER ASSIGN " msgstr "" -#: fortran/dump-parse-tree.c:835 +#: fortran/dump-parse-tree.c:839 #, c-format msgid "GOTO " msgstr "" -#: fortran/dump-parse-tree.c:844 +#: fortran/dump-parse-tree.c:848 #, c-format msgid ", (" msgstr "" -#: fortran/dump-parse-tree.c:858 +#: fortran/dump-parse-tree.c:862 #, c-format msgid "CALL %s " msgstr "" -#: fortran/dump-parse-tree.c:863 +#: fortran/dump-parse-tree.c:867 #, c-format msgid "RETURN " msgstr "" -#: fortran/dump-parse-tree.c:869 +#: fortran/dump-parse-tree.c:873 #, c-format msgid "PAUSE " msgstr "" -#: fortran/dump-parse-tree.c:879 +#: fortran/dump-parse-tree.c:883 #, c-format msgid "STOP " msgstr "" -#: fortran/dump-parse-tree.c:889 fortran/dump-parse-tree.c:897 +#: fortran/dump-parse-tree.c:893 fortran/dump-parse-tree.c:901 #, c-format msgid "IF " msgstr "" -#: fortran/dump-parse-tree.c:891 +#: fortran/dump-parse-tree.c:895 #, c-format msgid " %d, %d, %d" msgstr "" -#: fortran/dump-parse-tree.c:908 +#: fortran/dump-parse-tree.c:912 #, c-format msgid "ELSE\n" msgstr "" -#: fortran/dump-parse-tree.c:911 +#: fortran/dump-parse-tree.c:915 #, c-format msgid "ELSE IF " msgstr "" -#: fortran/dump-parse-tree.c:921 +#: fortran/dump-parse-tree.c:925 #, c-format msgid "ENDIF" msgstr "" -#: fortran/dump-parse-tree.c:926 +#: fortran/dump-parse-tree.c:930 #, c-format msgid "SELECT CASE " msgstr "" -#: fortran/dump-parse-tree.c:934 +#: fortran/dump-parse-tree.c:938 #, c-format msgid "CASE " msgstr "" -#: fortran/dump-parse-tree.c:950 +#: fortran/dump-parse-tree.c:954 #, c-format msgid "END SELECT" msgstr "" -#: fortran/dump-parse-tree.c:954 +#: fortran/dump-parse-tree.c:958 #, c-format msgid "WHERE " msgstr "" -#: fortran/dump-parse-tree.c:965 +#: fortran/dump-parse-tree.c:969 #, c-format msgid "ELSE WHERE " msgstr "" -#: fortran/dump-parse-tree.c:972 +#: fortran/dump-parse-tree.c:976 #, c-format msgid "END WHERE" msgstr "" -#: fortran/dump-parse-tree.c:977 +#: fortran/dump-parse-tree.c:981 #, c-format msgid "FORALL " msgstr "" -#: fortran/dump-parse-tree.c:1002 +#: fortran/dump-parse-tree.c:1006 #, c-format msgid "END FORALL" msgstr "" -#: fortran/dump-parse-tree.c:1006 +#: fortran/dump-parse-tree.c:1010 #, c-format msgid "DO " msgstr "" -#: fortran/dump-parse-tree.c:1020 fortran/dump-parse-tree.c:1031 +#: fortran/dump-parse-tree.c:1024 fortran/dump-parse-tree.c:1035 #, c-format msgid "END DO" msgstr "" -#: fortran/dump-parse-tree.c:1024 +#: fortran/dump-parse-tree.c:1028 #, c-format msgid "DO WHILE " msgstr "" -#: fortran/dump-parse-tree.c:1035 +#: fortran/dump-parse-tree.c:1039 #, c-format msgid "CYCLE" msgstr "" -#: fortran/dump-parse-tree.c:1041 +#: fortran/dump-parse-tree.c:1045 #, c-format msgid "EXIT" msgstr "" -#: fortran/dump-parse-tree.c:1047 +#: fortran/dump-parse-tree.c:1051 #, c-format msgid "ALLOCATE " msgstr "" -#: fortran/dump-parse-tree.c:1050 fortran/dump-parse-tree.c:1066 +#: fortran/dump-parse-tree.c:1054 fortran/dump-parse-tree.c:1070 #, c-format msgid " STAT=" msgstr "" -#: fortran/dump-parse-tree.c:1063 +#: fortran/dump-parse-tree.c:1067 #, c-format msgid "DEALLOCATE " msgstr "" -#: fortran/dump-parse-tree.c:1079 +#: fortran/dump-parse-tree.c:1083 #, c-format msgid "OPEN" msgstr "" -#: fortran/dump-parse-tree.c:1084 fortran/dump-parse-tree.c:1158 -#: fortran/dump-parse-tree.c:1200 fortran/dump-parse-tree.c:1223 -#: fortran/dump-parse-tree.c:1369 +#: fortran/dump-parse-tree.c:1088 fortran/dump-parse-tree.c:1162 +#: fortran/dump-parse-tree.c:1204 fortran/dump-parse-tree.c:1227 +#: fortran/dump-parse-tree.c:1373 #, c-format msgid " UNIT=" msgstr "" -#: fortran/dump-parse-tree.c:1089 fortran/dump-parse-tree.c:1163 -#: fortran/dump-parse-tree.c:1205 fortran/dump-parse-tree.c:1234 -#: fortran/dump-parse-tree.c:1386 +#: fortran/dump-parse-tree.c:1093 fortran/dump-parse-tree.c:1167 +#: fortran/dump-parse-tree.c:1209 fortran/dump-parse-tree.c:1238 +#: fortran/dump-parse-tree.c:1390 #, c-format msgid " IOMSG=" msgstr "" -#: fortran/dump-parse-tree.c:1094 fortran/dump-parse-tree.c:1168 -#: fortran/dump-parse-tree.c:1210 fortran/dump-parse-tree.c:1239 -#: fortran/dump-parse-tree.c:1391 +#: fortran/dump-parse-tree.c:1098 fortran/dump-parse-tree.c:1172 +#: fortran/dump-parse-tree.c:1214 fortran/dump-parse-tree.c:1243 +#: fortran/dump-parse-tree.c:1395 #, c-format msgid " IOSTAT=" msgstr "" -#: fortran/dump-parse-tree.c:1099 fortran/dump-parse-tree.c:1228 +#: fortran/dump-parse-tree.c:1103 fortran/dump-parse-tree.c:1232 #, c-format msgid " FILE=" msgstr "" -#: fortran/dump-parse-tree.c:1104 fortran/dump-parse-tree.c:1173 +#: fortran/dump-parse-tree.c:1108 fortran/dump-parse-tree.c:1177 #, c-format msgid " STATUS=" msgstr "" -#: fortran/dump-parse-tree.c:1109 fortran/dump-parse-tree.c:1269 +#: fortran/dump-parse-tree.c:1113 fortran/dump-parse-tree.c:1273 #, c-format msgid " ACCESS=" msgstr "" -#: fortran/dump-parse-tree.c:1114 fortran/dump-parse-tree.c:1285 +#: fortran/dump-parse-tree.c:1118 fortran/dump-parse-tree.c:1289 #, c-format msgid " FORM=" msgstr "" -#: fortran/dump-parse-tree.c:1119 fortran/dump-parse-tree.c:1300 +#: fortran/dump-parse-tree.c:1123 fortran/dump-parse-tree.c:1304 #, c-format msgid " RECL=" msgstr "" -#: fortran/dump-parse-tree.c:1124 fortran/dump-parse-tree.c:1310 +#: fortran/dump-parse-tree.c:1128 fortran/dump-parse-tree.c:1314 #, c-format msgid " BLANK=" msgstr "" -#: fortran/dump-parse-tree.c:1129 fortran/dump-parse-tree.c:1315 +#: fortran/dump-parse-tree.c:1133 fortran/dump-parse-tree.c:1319 #, c-format msgid " POSITION=" msgstr "" -#: fortran/dump-parse-tree.c:1134 fortran/dump-parse-tree.c:1320 +#: fortran/dump-parse-tree.c:1138 fortran/dump-parse-tree.c:1324 #, c-format msgid " ACTION=" msgstr "" -#: fortran/dump-parse-tree.c:1139 fortran/dump-parse-tree.c:1340 +#: fortran/dump-parse-tree.c:1143 fortran/dump-parse-tree.c:1344 #, c-format msgid " DELIM=" msgstr "" -#: fortran/dump-parse-tree.c:1144 fortran/dump-parse-tree.c:1345 +#: fortran/dump-parse-tree.c:1148 fortran/dump-parse-tree.c:1349 #, c-format msgid " PAD=" msgstr "" -#: fortran/dump-parse-tree.c:1148 fortran/dump-parse-tree.c:1177 -#: fortran/dump-parse-tree.c:1214 fortran/dump-parse-tree.c:1350 -#: fortran/dump-parse-tree.c:1422 +#: fortran/dump-parse-tree.c:1152 fortran/dump-parse-tree.c:1181 +#: fortran/dump-parse-tree.c:1218 fortran/dump-parse-tree.c:1354 +#: fortran/dump-parse-tree.c:1426 #, c-format msgid " ERR=%d" msgstr "" -#: fortran/dump-parse-tree.c:1153 +#: fortran/dump-parse-tree.c:1157 #, c-format msgid "CLOSE" msgstr "" -#: fortran/dump-parse-tree.c:1181 +#: fortran/dump-parse-tree.c:1185 #, c-format msgid "BACKSPACE" msgstr "" -#: fortran/dump-parse-tree.c:1185 +#: fortran/dump-parse-tree.c:1189 #, c-format msgid "ENDFILE" msgstr "" -#: fortran/dump-parse-tree.c:1189 +#: fortran/dump-parse-tree.c:1193 #, c-format msgid "REWIND" msgstr "" -#: fortran/dump-parse-tree.c:1193 +#: fortran/dump-parse-tree.c:1197 #, c-format msgid "FLUSH" msgstr "" -#: fortran/dump-parse-tree.c:1218 +#: fortran/dump-parse-tree.c:1222 #, c-format msgid "INQUIRE" msgstr "" -#: fortran/dump-parse-tree.c:1244 +#: fortran/dump-parse-tree.c:1248 #, c-format msgid " EXIST=" msgstr "" -#: fortran/dump-parse-tree.c:1249 +#: fortran/dump-parse-tree.c:1253 #, c-format msgid " OPENED=" msgstr "" -#: fortran/dump-parse-tree.c:1254 +#: fortran/dump-parse-tree.c:1258 #, c-format msgid " NUMBER=" msgstr "" -#: fortran/dump-parse-tree.c:1259 +#: fortran/dump-parse-tree.c:1263 #, c-format msgid " NAMED=" msgstr "" -#: fortran/dump-parse-tree.c:1264 +#: fortran/dump-parse-tree.c:1268 #, c-format msgid " NAME=" msgstr "" -#: fortran/dump-parse-tree.c:1274 +#: fortran/dump-parse-tree.c:1278 #, c-format msgid " SEQUENTIAL=" msgstr "" -#: fortran/dump-parse-tree.c:1280 +#: fortran/dump-parse-tree.c:1284 #, c-format msgid " DIRECT=" msgstr "" -#: fortran/dump-parse-tree.c:1290 +#: fortran/dump-parse-tree.c:1294 #, c-format msgid " FORMATTED" msgstr "" -#: fortran/dump-parse-tree.c:1295 +#: fortran/dump-parse-tree.c:1299 #, c-format msgid " UNFORMATTED=" msgstr "" -#: fortran/dump-parse-tree.c:1305 +#: fortran/dump-parse-tree.c:1309 #, c-format msgid " NEXTREC=" msgstr "" -#: fortran/dump-parse-tree.c:1325 +#: fortran/dump-parse-tree.c:1329 #, c-format msgid " READ=" msgstr "" -#: fortran/dump-parse-tree.c:1330 +#: fortran/dump-parse-tree.c:1334 #, c-format msgid " WRITE=" msgstr "" -#: fortran/dump-parse-tree.c:1335 +#: fortran/dump-parse-tree.c:1339 #, c-format msgid " READWRITE=" msgstr "" -#: fortran/dump-parse-tree.c:1354 +#: fortran/dump-parse-tree.c:1358 #, c-format msgid "IOLENGTH " msgstr "" -#: fortran/dump-parse-tree.c:1359 +#: fortran/dump-parse-tree.c:1363 #, c-format msgid "READ" msgstr "" -#: fortran/dump-parse-tree.c:1363 +#: fortran/dump-parse-tree.c:1367 #, c-format msgid "WRITE" msgstr "" -#: fortran/dump-parse-tree.c:1375 +#: fortran/dump-parse-tree.c:1379 #, c-format msgid " FMT=" msgstr "" -#: fortran/dump-parse-tree.c:1380 +#: fortran/dump-parse-tree.c:1384 #, c-format msgid " FMT=%d" msgstr "" -#: fortran/dump-parse-tree.c:1382 +#: fortran/dump-parse-tree.c:1386 #, c-format msgid " NML=%s" msgstr "" -#: fortran/dump-parse-tree.c:1396 +#: fortran/dump-parse-tree.c:1400 #, c-format msgid " SIZE=" msgstr "" -#: fortran/dump-parse-tree.c:1401 +#: fortran/dump-parse-tree.c:1405 #, c-format msgid " REC=" msgstr "" -#: fortran/dump-parse-tree.c:1406 +#: fortran/dump-parse-tree.c:1410 #, c-format msgid " ADVANCE=" msgstr "" -#: fortran/dump-parse-tree.c:1413 +#: fortran/dump-parse-tree.c:1417 #, c-format msgid "TRANSFER " msgstr "" -#: fortran/dump-parse-tree.c:1418 +#: fortran/dump-parse-tree.c:1422 #, c-format msgid "DT_END" msgstr "" -#: fortran/dump-parse-tree.c:1424 +#: fortran/dump-parse-tree.c:1428 #, c-format msgid " END=%d" msgstr "" -#: fortran/dump-parse-tree.c:1426 +#: fortran/dump-parse-tree.c:1430 #, c-format msgid " EOR=%d" msgstr "" -#: fortran/dump-parse-tree.c:1443 +#: fortran/dump-parse-tree.c:1447 #, c-format msgid "Equivalence: " msgstr "" -#: fortran/dump-parse-tree.c:1469 +#: fortran/dump-parse-tree.c:1473 #, c-format msgid "Namespace:" msgstr "" -#: fortran/dump-parse-tree.c:1483 +#: fortran/dump-parse-tree.c:1487 #, c-format msgid " %c-%c: " msgstr "" -#: fortran/dump-parse-tree.c:1485 +#: fortran/dump-parse-tree.c:1489 #, c-format msgid " %c: " msgstr "" -#: fortran/dump-parse-tree.c:1494 +#: fortran/dump-parse-tree.c:1498 #, c-format msgid "procedure name = %s" msgstr "" -#: fortran/dump-parse-tree.c:1510 +#: fortran/dump-parse-tree.c:1514 #, c-format msgid "Operator interfaces for %s:" msgstr "" -#: fortran/dump-parse-tree.c:1519 +#: fortran/dump-parse-tree.c:1523 #, c-format msgid "User operators:\n" msgstr "" -#: fortran/dump-parse-tree.c:1535 +#: fortran/dump-parse-tree.c:1539 #, c-format msgid "CONTAINS\n" msgstr "" @@ -5135,11 +5468,11 @@ msgstr "" msgid "Error:" msgstr "" -#: fortran/error.c:637 +#: fortran/error.c:640 msgid "Fatal Error:" msgstr "" -#: fortran/error.c:656 +#: fortran/error.c:659 #, no-c-format msgid "Internal Error at (1):" msgstr "" @@ -5159,188 +5492,198 @@ msgstr "" msgid "Integer value too large in expression at %C" msgstr "" -#: fortran/expr.c:1256 +#: fortran/expr.c:1273 #, no-c-format msgid "Numeric or CHARACTER operands are required in expression at %L" msgstr "" -#: fortran/expr.c:1276 +#: fortran/expr.c:1293 #, no-c-format msgid "Exponent at %L must be INTEGER for an initialization expression" msgstr "" -#: fortran/expr.c:1289 +#: fortran/expr.c:1306 #, no-c-format msgid "" "Concatenation operator in expression at %L must have two CHARACTER operands" msgstr "" -#: fortran/expr.c:1296 +#: fortran/expr.c:1313 #, no-c-format msgid "Concat operator at %L must concatenate strings of the same kind" msgstr "" -#: fortran/expr.c:1306 +#: fortran/expr.c:1323 #, no-c-format msgid ".NOT. operator in expression at %L must have a LOGICAL operand" msgstr "" -#: fortran/expr.c:1322 +#: fortran/expr.c:1339 #, no-c-format msgid "LOGICAL operands are required in expression at %L" msgstr "" -#: fortran/expr.c:1330 +#: fortran/expr.c:1347 #, no-c-format msgid "Only intrinsic operators can be used in expression at %L" msgstr "" -#: fortran/expr.c:1338 +#: fortran/expr.c:1355 #, no-c-format msgid "Numeric operands are required in expression at %L" msgstr "" -#: fortran/expr.c:1443 +#: fortran/expr.c:1459 #, no-c-format msgid "" "Function '%s' in initialization expression at %L must be an intrinsic " "function" msgstr "" -#: fortran/expr.c:1465 +#: fortran/expr.c:1481 #, no-c-format msgid "Variable '%s' at %L cannot appear in an initialization expression" msgstr "" -#: fortran/expr.c:1587 +#: fortran/expr.c:1603 #, no-c-format msgid "Specification function '%s' at %L cannot be a statement function" msgstr "" -#: fortran/expr.c:1594 +#: fortran/expr.c:1610 #, no-c-format msgid "Specification function '%s' at %L cannot be an internal function" msgstr "" -#: fortran/expr.c:1601 +#: fortran/expr.c:1617 #, no-c-format msgid "Specification function '%s' at %L must be PURE" msgstr "" -#: fortran/expr.c:1608 +#: fortran/expr.c:1624 #, no-c-format msgid "Specification function '%s' at %L cannot be RECURSIVE" msgstr "" -#: fortran/expr.c:1665 +#: fortran/expr.c:1681 #, no-c-format msgid "Dummy argument '%s' at %L cannot be OPTIONAL" msgstr "" -#: fortran/expr.c:1672 +#: fortran/expr.c:1688 #, no-c-format msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)" msgstr "" -#: fortran/expr.c:1688 +#: fortran/expr.c:1708 #, no-c-format msgid "Variable '%s' cannot appear in the expression at %L" msgstr "" -#: fortran/expr.c:1734 +#: fortran/expr.c:1754 #, no-c-format msgid "Expression at %L must be of INTEGER type" msgstr "" -#: fortran/expr.c:1740 +#: fortran/expr.c:1760 #, no-c-format msgid "Expression at %L must be scalar" msgstr "" -#: fortran/expr.c:1768 +#: fortran/expr.c:1788 #, no-c-format msgid "Incompatible ranks in %s at %L" msgstr "" -#: fortran/expr.c:1782 +#: fortran/expr.c:1802 #, no-c-format msgid "%s at %L has different shape on dimension %d (%d/%d)" msgstr "" -#: fortran/expr.c:1815 +#: fortran/expr.c:1835 #, no-c-format msgid "Can't assign to INTENT(IN) variable '%s' at %L" msgstr "" -#: fortran/expr.c:1822 +#: fortran/expr.c:1842 #, no-c-format msgid "Incompatible ranks %d and %d in assignment at %L" msgstr "" -#: fortran/expr.c:1829 +#: fortran/expr.c:1849 #, no-c-format msgid "Variable type is UNKNOWN in assignment at %L" msgstr "" -#: fortran/expr.c:1836 +#: fortran/expr.c:1856 #, no-c-format msgid "NULL appears on right-hand side in assignment at %L" msgstr "" -#: fortran/expr.c:1845 +#: fortran/expr.c:1866 +#, no-c-format +msgid "Vector assignment to assumed-size Cray Pointee at %L is illegal." +msgstr "" + +#: fortran/expr.c:1875 #, no-c-format msgid "POINTER valued function appears on right-hand side of assignment at %L" msgstr "" -#: fortran/expr.c:1850 +#: fortran/expr.c:1880 msgid "Array assignment" msgstr "" -#: fortran/expr.c:1867 +#: fortran/expr.c:1897 #, no-c-format msgid "Incompatible types in assignment at %L, %s to %s" msgstr "" -#: fortran/expr.c:1890 +#: fortran/expr.c:1920 #, no-c-format msgid "Pointer assignment target is not a POINTER at %L" msgstr "" -#: fortran/expr.c:1898 +#: fortran/expr.c:1928 #, no-c-format msgid "Pointer assignment to non-POINTER at %L" msgstr "" -#: fortran/expr.c:1906 +#: fortran/expr.c:1936 #, no-c-format msgid "Bad pointer object in PURE procedure at %L" msgstr "" -#: fortran/expr.c:1919 +#: fortran/expr.c:1949 #, no-c-format msgid "Different types in pointer assignment at %L" msgstr "" -#: fortran/expr.c:1926 +#: fortran/expr.c:1956 #, no-c-format msgid "Different kind type parameters in pointer assignment at %L" msgstr "" -#: fortran/expr.c:1934 +#: fortran/expr.c:1964 #, no-c-format msgid "Pointer assignment target is neither TARGET nor POINTER at %L" msgstr "" -#: fortran/expr.c:1941 +#: fortran/expr.c:1971 #, no-c-format msgid "Bad target in pointer assignment in PURE procedure at %L" msgstr "" -#: fortran/expr.c:1947 +#: fortran/expr.c:1977 #, no-c-format msgid "Unequal ranks %d and %d in pointer assignment at %L" msgstr "" +#: fortran/expr.c:1984 +#, no-c-format +msgid "Pointer assignment with vector subscript on rhs at %L" +msgstr "" + #: fortran/gfortranspec.c:232 #, c-format msgid "overflowed output arg list for '%s'" @@ -5458,156 +5801,161 @@ msgstr "" msgid "Procedure '%s' in %s at %L is neither function nor subroutine" msgstr "" -#: fortran/interface.c:935 +#: fortran/interface.c:934 #, no-c-format msgid "Ambiguous interfaces '%s' and '%s' in %s at %L" msgstr "" -#: fortran/interface.c:1184 +#: fortran/interface.c:1183 #, no-c-format msgid "Keyword argument '%s' at %L is not in the procedure" msgstr "" -#: fortran/interface.c:1193 +#: fortran/interface.c:1192 #, no-c-format msgid "" "Keyword argument '%s' at %L is already associated with another actual " "argument" msgstr "" -#: fortran/interface.c:1203 +#: fortran/interface.c:1202 #, no-c-format msgid "More actual than formal arguments in procedure call at %L" msgstr "" -#: fortran/interface.c:1216 +#: fortran/interface.c:1215 #, no-c-format msgid "Missing alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.c:1225 +#: fortran/interface.c:1224 #, no-c-format msgid "Unexpected alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.c:1234 +#: fortran/interface.c:1233 #, no-c-format msgid "Type/rank mismatch in argument '%s' at %L" msgstr "" -#: fortran/interface.c:1243 +#: fortran/interface.c:1248 +#, no-c-format +msgid "Actual argument for '%s' cannot be an assumed-size array at %L" +msgstr "" + +#: fortran/interface.c:1257 #, no-c-format msgid "Actual argument for '%s' must be a pointer at %L" msgstr "" -#: fortran/interface.c:1264 +#: fortran/interface.c:1278 #, no-c-format msgid "Missing actual argument for argument '%s' at %L" msgstr "" -#: fortran/interface.c:1449 +#: fortran/interface.c:1463 #, no-c-format msgid "" "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) " "argument '%s' at %L" msgstr "" -#: fortran/interface.c:1490 +#: fortran/interface.c:1504 #, no-c-format msgid "" "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)" msgstr "" -#: fortran/interface.c:1501 +#: fortran/interface.c:1515 #, no-c-format msgid "" "Procedure argument at %L is local to a PURE procedure and is passed to an " "INTENT(%s) argument" msgstr "" -#: fortran/interface.c:1510 +#: fortran/interface.c:1524 #, no-c-format msgid "" "Procedure argument at %L is local to a PURE procedure and has the POINTER " "attribute" msgstr "" -#: fortran/interface.c:1531 +#: fortran/interface.c:1545 #, no-c-format msgid "Procedure '%s' called with an implicit interface at %L" msgstr "" -#: fortran/interface.c:1697 +#: fortran/interface.c:1711 #, no-c-format msgid "Function '%s' called in lieu of an operator at %L must be PURE" msgstr "" -#: fortran/interface.c:1762 +#: fortran/interface.c:1776 #, no-c-format msgid "Subroutine '%s' called in lieu of assignment at %L must be PURE" msgstr "" -#: fortran/interface.c:1784 +#: fortran/interface.c:1798 #, no-c-format msgid "Entity '%s' at %C is already present in the interface" msgstr "" -#: fortran/intrinsic.c:2564 +#: fortran/intrinsic.c:2715 #, no-c-format msgid "Too many arguments in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:2578 +#: fortran/intrinsic.c:2729 #, no-c-format msgid "Can't find keyword named '%s' in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:2585 +#: fortran/intrinsic.c:2736 #, no-c-format msgid "Argument '%s' is appears twice in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:2599 +#: fortran/intrinsic.c:2750 #, no-c-format msgid "Missing actual argument '%s' in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:2658 +#: fortran/intrinsic.c:2809 #, no-c-format msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s" msgstr "" -#: fortran/intrinsic.c:2962 +#: fortran/intrinsic.c:3113 #, no-c-format msgid "Ranks of arguments to elemental intrinsic '%s' differ at %L" msgstr "" -#: fortran/intrinsic.c:3008 +#: fortran/intrinsic.c:3159 #, no-c-format msgid "Intrinsic '%s' at %L is not included in the selected standard" msgstr "" -#: fortran/intrinsic.c:3111 +#: fortran/intrinsic.c:3262 #, no-c-format msgid "Extension: Evaluation of nonstandard initialization expression at %L" msgstr "" -#: fortran/intrinsic.c:3171 +#: fortran/intrinsic.c:3322 #, no-c-format msgid "Subroutine call to intrinsic '%s' at %L is not PURE" msgstr "" -#: fortran/intrinsic.c:3246 +#: fortran/intrinsic.c:3397 #, no-c-format msgid "Extension: Conversion from %s to %s at %L" msgstr "" -#: fortran/intrinsic.c:3249 +#: fortran/intrinsic.c:3400 #, no-c-format msgid "Conversion from %s to %s at %L" msgstr "" -#: fortran/intrinsic.c:3286 +#: fortran/intrinsic.c:3437 #, no-c-format msgid "Can't convert %s to %s at %L" msgstr "" @@ -5708,236 +6056,247 @@ msgstr "" msgid "%s tag at %L must be of type %s" msgstr "" -#: fortran/io.c:990 +#: fortran/io.c:986 +#, no-c-format +msgid "" +"Constant expression in FORMAT tag at %L must be of type default CHARACTER" +msgstr "" + +#: fortran/io.c:999 #, no-c-format msgid "%s tag at %L must be of type %s or %s" msgstr "" -#: fortran/io.c:998 +#: fortran/io.c:1007 #, no-c-format msgid "Obsolete: ASSIGNED variable in FORMAT tag at %L" msgstr "" -#: fortran/io.c:1003 +#: fortran/io.c:1012 #, no-c-format msgid "Variable '%s' at %L has not been assigned a format label" msgstr "" -#: fortran/io.c:1018 +#: fortran/io.c:1027 #, no-c-format msgid "Extension: Character array in FORMAT tag at %L" msgstr "" -#: fortran/io.c:1025 +#: fortran/io.c:1034 #, no-c-format msgid "Extension: Non-character in FORMAT tag at %L" msgstr "" -#: fortran/io.c:1036 +#: fortran/io.c:1045 #, no-c-format msgid "%s tag at %L must be scalar" msgstr "" -#: fortran/io.c:1041 +#: fortran/io.c:1050 #, no-c-format msgid "Fortran 2003: IOMSG tag at %L" msgstr "" -#: fortran/io.c:1205 +#: fortran/io.c:1214 #, no-c-format msgid "OPEN statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:1313 +#: fortran/io.c:1322 #, no-c-format msgid "CLOSE statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:1439 fortran/match.c:1441 +#: fortran/io.c:1448 fortran/match.c:1441 #, no-c-format msgid "%s statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:1499 +#: fortran/io.c:1508 #, no-c-format msgid "Fortran 2003: FLUSH statement at %C" msgstr "" -#: fortran/io.c:1559 +#: fortran/io.c:1568 #, no-c-format msgid "Duplicate UNIT specification at %C" msgstr "" -#: fortran/io.c:1615 +#: fortran/io.c:1624 #, no-c-format msgid "Duplicate format specification at %C" msgstr "" -#: fortran/io.c:1632 +#: fortran/io.c:1641 #, no-c-format msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C" msgstr "" -#: fortran/io.c:1668 +#: fortran/io.c:1677 #, no-c-format msgid "Duplicate NML specification at %C" msgstr "" -#: fortran/io.c:1677 +#: fortran/io.c:1686 #, no-c-format msgid "Symbol '%s' at %C must be a NAMELIST group name" msgstr "" -#: fortran/io.c:1713 +#: fortran/io.c:1722 #, no-c-format msgid "END tag at %C not allowed in output statement" msgstr "" -#: fortran/io.c:1773 +#: fortran/io.c:1782 #, no-c-format msgid "" "UNIT specification at %L must be an INTEGER expression or a CHARACTER " "variable" msgstr "" -#: fortran/io.c:1783 +#: fortran/io.c:1792 +#, no-c-format +msgid "Internal unit with vector subscript at %L" +msgstr "" + +#: fortran/io.c:1799 #, no-c-format msgid "REC tag at %L is incompatible with internal file" msgstr "" -#: fortran/io.c:1790 +#: fortran/io.c:1806 #, no-c-format msgid "Internal file at %L is incompatible with namelist" msgstr "" -#: fortran/io.c:1797 +#: fortran/io.c:1813 #, no-c-format msgid "ADVANCE tag at %L is incompatible with internal file" msgstr "" -#: fortran/io.c:1807 +#: fortran/io.c:1823 #, no-c-format msgid "REC tag at %L is incompatible with END tag" msgstr "" -#: fortran/io.c:1815 +#: fortran/io.c:1831 #, no-c-format msgid "END tag at %L is incompatible with list directed format (*)" msgstr "" -#: fortran/io.c:1822 +#: fortran/io.c:1838 #, no-c-format msgid "REC tag at %L is incompatible with namelist" msgstr "" -#: fortran/io.c:1830 +#: fortran/io.c:1846 #, no-c-format msgid "ADVANCE tag at %L is incompatible with list directed format (*)" msgstr "" -#: fortran/io.c:1837 +#: fortran/io.c:1853 #, no-c-format msgid "EOR tag at %L requires an ADVANCE tag" msgstr "" -#: fortran/io.c:1843 +#: fortran/io.c:1859 #, no-c-format msgid "SIZE tag at %L requires an ADVANCE tag" msgstr "" -#: fortran/io.c:1863 +#: fortran/io.c:1879 #, no-c-format msgid "FORMAT label %d at %L not defined" msgstr "" -#: fortran/io.c:1984 +#: fortran/io.c:2000 #, no-c-format msgid "Syntax error in I/O iterator at %C" msgstr "" -#: fortran/io.c:2015 +#: fortran/io.c:2031 #, no-c-format msgid "Expected variable in READ statement at %C" msgstr "" -#: fortran/io.c:2021 +#: fortran/io.c:2037 #, no-c-format msgid "Expected expression in %s statement at %C" msgstr "" -#: fortran/io.c:2032 +#: fortran/io.c:2048 #, no-c-format msgid "Variable '%s' in input list at %C cannot be INTENT(IN)" msgstr "" -#: fortran/io.c:2041 +#: fortran/io.c:2057 #, no-c-format msgid "Cannot read to variable '%s' in PURE procedure at %C" msgstr "" -#: fortran/io.c:2058 +#: fortran/io.c:2074 #, no-c-format msgid "Cannot write to internal file unit '%s' at %C inside a PURE procedure" msgstr "" #. A general purpose syntax error. -#: fortran/io.c:2118 fortran/io.c:2344 fortran/gfortran.h:1587 +#: fortran/io.c:2134 fortran/io.c:2363 fortran/gfortran.h:1629 #, no-c-format msgid "Syntax error in %s statement at %C" msgstr "" -#: fortran/io.c:2176 +#: fortran/io.c:2191 #, no-c-format msgid "PRINT namelist at %C is an extension" msgstr "" -#: fortran/io.c:2184 +#: fortran/io.c:2199 #, no-c-format msgid "Namelist followed by I/O list at %C" msgstr "" -#: fortran/io.c:2286 +#: fortran/io.c:2305 #, no-c-format msgid "Extension: Comma before output item list at %C is an extension" msgstr "" -#: fortran/io.c:2295 +#: fortran/io.c:2314 #, no-c-format msgid "Expected comma in I/O list at %C" msgstr "" -#: fortran/io.c:2313 +#: fortran/io.c:2332 #, no-c-format msgid "Internal file '%s' at %L is INTENT(IN)" msgstr "" -#: fortran/io.c:2329 +#: fortran/io.c:2348 #, no-c-format msgid "" "io-unit in %s statement at %C must be an internal file in a PURE procedure" msgstr "" -#: fortran/io.c:2376 +#: fortran/io.c:2395 #, no-c-format msgid "PRINT statement at %C not allowed within PURE procedure" msgstr "" -#: fortran/io.c:2515 fortran/io.c:2563 +#: fortran/io.c:2534 fortran/io.c:2582 #, no-c-format msgid "INQUIRE statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:2539 +#: fortran/io.c:2558 #, no-c-format msgid "IOLENGTH tag invalid in INQUIRE statement at %C" msgstr "" -#: fortran/io.c:2549 +#: fortran/io.c:2568 #, no-c-format msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers" msgstr "" -#: fortran/io.c:2556 +#: fortran/io.c:2575 #, no-c-format msgid "INQUIRE statement at %L requires either FILE or UNIT specifier" msgstr "" @@ -6186,48 +6545,58 @@ msgstr "" msgid "Namelist group name '%s' at %C already has a basic type of %s" msgstr "" -#: fortran/match.c:2629 +#: fortran/match.c:2627 +#, no-c-format +msgid "Derived type component %C is not a permitted EQUIVALENCE member" +msgstr "" + +#: fortran/match.c:2636 #, no-c-format msgid "Array reference in EQUIVALENCE at %C cannot be an array section" msgstr "" -#: fortran/match.c:2661 +#: fortran/match.c:2672 #, no-c-format msgid "" "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C" msgstr "" -#: fortran/match.c:2811 +#: fortran/match.c:2824 +#, no-c-format +msgid "Statement function at %L is recursive" +msgstr "" + +#: fortran/match.c:2914 #, no-c-format msgid "Expected initialization expression in CASE at %C" msgstr "" -#: fortran/match.c:2838 +#: fortran/match.c:2941 #, no-c-format msgid "Expected case name of '%s' at %C" msgstr "" -#: fortran/match.c:2882 +#: fortran/match.c:2985 #, no-c-format msgid "Unexpected CASE statement at %C" msgstr "" -#: fortran/match.c:2934 +#: fortran/match.c:3037 #, no-c-format msgid "Syntax error in CASE-specification at %C" msgstr "" -#: fortran/match.c:3054 +#: fortran/match.c:3157 #, no-c-format msgid "ELSEWHERE statement at %C not enclosed in WHERE block" msgstr "" -#: fortran/match.c:3085 +#: fortran/match.c:3188 #, no-c-format msgid "Label '%s' at %C doesn't match WHERE label '%s'" msgstr "" -#: fortran/match.c:3180 +#: fortran/match.c:3283 #, no-c-format msgid "Syntax error in FORALL iterator at %C" msgstr "" @@ -6338,430 +6707,388 @@ msgstr "" msgid "Error writing modules file: %s" msgstr "" -#: fortran/module.c:1558 +#: fortran/module.c:1565 msgid "Expected attribute bit name" msgstr "" -#: fortran/module.c:2287 +#: fortran/module.c:2322 msgid "Expected integer string" msgstr "" -#: fortran/module.c:2291 +#: fortran/module.c:2326 msgid "Error converting integer" msgstr "" -#: fortran/module.c:2314 +#: fortran/module.c:2349 msgid "Expected real string" msgstr "" -#: fortran/module.c:2460 +#: fortran/module.c:2495 msgid "Expected expression type" msgstr "" -#: fortran/module.c:2505 +#: fortran/module.c:2540 msgid "Bad operator" msgstr "" -#: fortran/module.c:2591 +#: fortran/module.c:2626 msgid "Bad type in constant expression" msgstr "" -#: fortran/module.c:2628 +#: fortran/module.c:2663 #, no-c-format msgid "Namelist %s cannot be renamed by USE association to %s." msgstr "" -#: fortran/module.c:3283 +#: fortran/module.c:3331 #, no-c-format msgid "Symbol '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:3291 +#: fortran/module.c:3339 #, no-c-format msgid "User operator '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:3297 +#: fortran/module.c:3345 #, no-c-format msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:3657 +#: fortran/module.c:3700 #, no-c-format msgid "Can't open module file '%s' for writing at %C: %s" msgstr "" -#: fortran/module.c:3682 +#: fortran/module.c:3725 #, no-c-format msgid "Error writing module file '%s' for writing: %s" msgstr "" -#: fortran/module.c:3703 +#: fortran/module.c:3746 #, no-c-format msgid "Can't open module file '%s' for reading at %C: %s" msgstr "" -#: fortran/module.c:3717 +#: fortran/module.c:3760 msgid "Unexpected end of module" msgstr "" -#: fortran/module.c:3725 +#: fortran/module.c:3768 #, no-c-format msgid "Can't USE the same module we're building!" msgstr "" -#: fortran/options.c:188 +#: fortran/options.c:212 #, no-c-format msgid "Reading file '%s' as free form." msgstr "" -#: fortran/options.c:198 +#: fortran/options.c:222 #, no-c-format msgid "'-fd-lines-as-comments' has no effect in free form." msgstr "" -#: fortran/options.c:201 +#: fortran/options.c:225 #, no-c-format msgid "'-fd-lines-as-code' has no effect in free form." msgstr "" -#: fortran/options.c:262 +#: fortran/options.c:290 #, c-format msgid "gfortran: Only one -M option allowed\n" msgstr "" -#: fortran/options.c:268 +#: fortran/options.c:296 #, c-format msgid "gfortran: Directory required after -M\n" msgstr "" -#: fortran/options.c:401 +#: fortran/options.c:336 +#, no-c-format +msgid "Argument to -ffpe-trap is not valid: %s" +msgstr "" + +#: fortran/options.c:468 #, no-c-format msgid "Fixed line length must be at least seven." msgstr "" -#: fortran/options.c:407 +#: fortran/options.c:474 #, no-c-format msgid "Maximum supported idenitifier length is %d" msgstr "" -#: fortran/options.c:414 +#: fortran/options.c:481 #, no-c-format msgid "Argument to -fqkind isn't a valid real kind" msgstr "" -#: fortran/parse.c:292 +#: fortran/parse.c:294 #, no-c-format msgid "Unclassifiable statement at %C" msgstr "" #. Skip the bad statement label. -#: fortran/parse.c:327 +#: fortran/parse.c:329 #, no-c-format msgid "Ignoring bad statement label at %C" msgstr "" -#: fortran/parse.c:338 +#: fortran/parse.c:340 #, no-c-format msgid "Ignoring statement label of zero at %C" msgstr "" -#: fortran/parse.c:348 +#: fortran/parse.c:350 #, no-c-format msgid "Ignoring statement label in empty statement at %C" msgstr "" -#: fortran/parse.c:410 +#: fortran/parse.c:412 #, no-c-format msgid "Non-numeric character in statement label at %C" msgstr "" -#: fortran/parse.c:418 +#: fortran/parse.c:420 #, no-c-format msgid "Zero is not a valid statement label at %C" msgstr "" -#: fortran/parse.c:437 +#: fortran/parse.c:439 #, no-c-format msgid "Bad continuation line at %C" msgstr "" -#: fortran/parse.c:464 +#: fortran/parse.c:466 #, no-c-format msgid "Statement label in blank line will be ignored at %C" msgstr "" -#: fortran/parse.c:489 +#: fortran/parse.c:491 #, no-c-format msgid "Line truncated at %C" msgstr "" -#: fortran/parse.c:662 +#: fortran/parse.c:664 #, no-c-format msgid "FORMAT statement at %L does not have a statement label" msgstr "" -#: fortran/parse.c:734 +#: fortran/parse.c:736 msgid "arithmetic IF" msgstr "" -#: fortran/parse.c:740 +#: fortran/parse.c:742 msgid "attribute declaration" msgstr "" -#: fortran/parse.c:770 +#: fortran/parse.c:772 msgid "data declaration" msgstr "" -#: fortran/parse.c:779 +#: fortran/parse.c:781 msgid "derived type declaration" msgstr "" -#: fortran/parse.c:858 +#: fortran/parse.c:860 msgid "block IF" msgstr "" -#: fortran/parse.c:867 +#: fortran/parse.c:869 msgid "implied END DO" msgstr "" -#: fortran/parse.c:934 +#: fortran/parse.c:936 msgid "assignment" msgstr "" -#: fortran/parse.c:937 +#: fortran/parse.c:939 msgid "pointer assignment" msgstr "" -#: fortran/parse.c:946 +#: fortran/parse.c:948 msgid "simple IF" msgstr "" -#: fortran/parse.c:972 -msgid "a PROGRAM" -msgstr "" - -#: fortran/parse.c:975 -msgid "a MODULE" -msgstr "" - -#: fortran/parse.c:978 -msgid "a SUBROUTINE" -msgstr "" - -#: fortran/parse.c:981 -msgid "a FUNCTION" -msgstr "" - -#: fortran/parse.c:984 -msgid "a BLOCK DATA" -msgstr "" - -#: fortran/parse.c:987 -msgid "an INTERFACE" -msgstr "" - -#: fortran/parse.c:990 -msgid "a DERIVED TYPE block" -msgstr "" - -#: fortran/parse.c:993 -msgid "an IF-THEN block" -msgstr "" - -#: fortran/parse.c:996 -msgid "a DO block" -msgstr "" - -#: fortran/parse.c:999 -msgid "a SELECT block" -msgstr "" - -#: fortran/parse.c:1002 -msgid "a FORALL block" -msgstr "" - -#: fortran/parse.c:1005 -msgid "a WHERE block" -msgstr "" - -#: fortran/parse.c:1008 -msgid "a contained subprogram" -msgstr "" - -#: fortran/parse.c:1109 +#: fortran/parse.c:1085 #, no-c-format msgid "Unexpected %s statement at %C" msgstr "" -#: fortran/parse.c:1241 +#: fortran/parse.c:1217 #, no-c-format msgid "%s statement at %C cannot follow %s statement at %L" msgstr "" -#: fortran/parse.c:1258 +#: fortran/parse.c:1234 #, no-c-format msgid "Unexpected end of file in '%s'" msgstr "" -#: fortran/parse.c:1311 +#: fortran/parse.c:1287 #, no-c-format msgid "Derived type definition at %C has no components" msgstr "" -#: fortran/parse.c:1322 +#: fortran/parse.c:1298 #, no-c-format msgid "PRIVATE statement in TYPE at %C must be inside a MODULE" msgstr "" -#: fortran/parse.c:1329 +#: fortran/parse.c:1305 #, no-c-format msgid "PRIVATE statement at %C must precede structure components" msgstr "" -#: fortran/parse.c:1337 +#: fortran/parse.c:1313 #, no-c-format msgid "Duplicate PRIVATE statement at %C" msgstr "" -#: fortran/parse.c:1349 +#: fortran/parse.c:1325 #, no-c-format msgid "SEQUENCE statement at %C must precede structure components" msgstr "" -#: fortran/parse.c:1356 +#: fortran/parse.c:1332 #, no-c-format msgid "SEQUENCE attribute at %C already specified in TYPE statement" msgstr "" -#: fortran/parse.c:1361 +#: fortran/parse.c:1337 #, no-c-format msgid "Duplicate SEQUENCE statement at %C" msgstr "" -#: fortran/parse.c:1385 +#: fortran/parse.c:1361 #, no-c-format msgid "" "Component %s of SEQUENCE type declared at %C does not have the SEQUENCE " "attribute" msgstr "" -#: fortran/parse.c:1454 +#: fortran/parse.c:1406 +#, no-c-format +msgid "ENUM declaration at %C has no ENUMERATORS" +msgstr "" + +#: fortran/parse.c:1480 #, no-c-format msgid "Unexpected %s statement in INTERFACE block at %C" msgstr "" -#: fortran/parse.c:1481 +#: fortran/parse.c:1507 #, no-c-format msgid "SUBROUTINE at %C does not belong in a generic function interface" msgstr "" -#: fortran/parse.c:1486 +#: fortran/parse.c:1512 #, no-c-format msgid "FUNCTION at %C does not belong in a generic subroutine interface" msgstr "" -#: fortran/parse.c:1503 +#: fortran/parse.c:1529 #, no-c-format msgid "Unexpected %s statement at %C in INTERFACE body" msgstr "" -#: fortran/parse.c:1575 +#: fortran/parse.c:1601 #, no-c-format msgid "%s statement must appear in a MODULE" msgstr "" -#: fortran/parse.c:1582 +#: fortran/parse.c:1608 #, no-c-format msgid "%s statement at %C follows another accessibility specification" msgstr "" -#: fortran/parse.c:1653 +#: fortran/parse.c:1685 #, no-c-format msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE" msgstr "" -#: fortran/parse.c:1674 +#: fortran/parse.c:1706 #, no-c-format msgid "Unexpected %s statement in WHERE block at %C" msgstr "" -#: fortran/parse.c:1734 +#: fortran/parse.c:1766 #, no-c-format msgid "Unexpected %s statement in FORALL block at %C" msgstr "" -#: fortran/parse.c:1786 +#: fortran/parse.c:1818 #, no-c-format msgid "ELSE IF statement at %C cannot follow ELSE statement at %L" msgstr "" -#: fortran/parse.c:1804 +#: fortran/parse.c:1836 #, no-c-format msgid "Duplicate ELSE statements at %L and %C" msgstr "" -#: fortran/parse.c:1866 +#: fortran/parse.c:1898 #, no-c-format msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C" msgstr "" -#: fortran/parse.c:1924 +#: fortran/parse.c:1956 #, no-c-format msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L" msgstr "" -#: fortran/parse.c:1959 +#: fortran/parse.c:1991 #, no-c-format msgid "End of nonblock DO statement at %C is within another block" msgstr "" -#: fortran/parse.c:1968 +#: fortran/parse.c:2000 #, no-c-format msgid "End of nonblock DO statement at %C is interwoven with another DO loop" msgstr "" -#: fortran/parse.c:2018 +#: fortran/parse.c:2050 #, no-c-format msgid "Statement label in ENDDO at %C doesn't match DO label" msgstr "" -#: fortran/parse.c:2075 +#: fortran/parse.c:2107 #, no-c-format msgid "%s statement at %C cannot terminate a non-block DO loop" msgstr "" -#: fortran/parse.c:2214 +#: fortran/parse.c:2246 #, no-c-format msgid "Contained procedure '%s' at %C is already ambiguous" msgstr "" -#: fortran/parse.c:2265 +#: fortran/parse.c:2297 #, no-c-format msgid "Unexpected %s statement in CONTAINS section at %C" msgstr "" -#: fortran/parse.c:2350 +#: fortran/parse.c:2382 #, no-c-format msgid "CONTAINS statement at %C is already in a contained program unit" msgstr "" -#: fortran/parse.c:2399 +#: fortran/parse.c:2431 #, no-c-format msgid "Global name '%s' at %L is already being used as a %s at %L" msgstr "" -#: fortran/parse.c:2420 +#: fortran/parse.c:2452 #, no-c-format msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L" msgstr "" -#: fortran/parse.c:2444 +#: fortran/parse.c:2476 #, no-c-format msgid "Unexpected %s statement in BLOCK DATA at %C" msgstr "" -#: fortran/parse.c:2486 +#: fortran/parse.c:2518 #, no-c-format msgid "Unexpected %s statement in MODULE at %C" msgstr "" @@ -6769,7 +7096,7 @@ msgstr "" #. If we see a duplicate main program, shut down. If the second #. instance is an implied main program, ie data decls or executable #. statements, we're in for lots of errors. -#: fortran/parse.c:2656 +#: fortran/parse.c:2694 #, no-c-format msgid "Two main PROGRAMs at %L and %C" msgstr "" @@ -6814,578 +7141,578 @@ msgstr "" msgid "Empty set of digits in binary constant at %C" msgstr "" -#: fortran/primary.c:355 +#: fortran/primary.c:356 #, no-c-format msgid "Empty set of digits in octal constant at %C" msgstr "" -#: fortran/primary.c:357 +#: fortran/primary.c:359 #, no-c-format msgid "Empty set of digits in hexadecimal constant at %C" msgstr "" -#: fortran/primary.c:369 +#: fortran/primary.c:372 #, no-c-format msgid "Illegal character in binary constant at %C" msgstr "" -#: fortran/primary.c:371 +#: fortran/primary.c:375 #, no-c-format msgid "Illegal character in octal constant at %C" msgstr "" -#: fortran/primary.c:373 +#: fortran/primary.c:378 #, no-c-format msgid "Illegal character in hexadecimal constant at %C" msgstr "" -#: fortran/primary.c:401 +#: fortran/primary.c:407 #, no-c-format msgid "Integer too big for integer kind %i at %C" msgstr "" -#: fortran/primary.c:502 +#: fortran/primary.c:508 #, no-c-format msgid "Missing exponent in real number at %C" msgstr "" -#: fortran/primary.c:559 +#: fortran/primary.c:565 #, no-c-format msgid "Real number at %C has a 'd' exponent and an explicit kind" msgstr "" -#: fortran/primary.c:569 +#: fortran/primary.c:575 #, no-c-format msgid "Real number at %C has a 'q' exponent and an explicit kind" msgstr "" -#: fortran/primary.c:581 +#: fortran/primary.c:587 #, no-c-format msgid "Invalid real kind %d at %C" msgstr "" -#: fortran/primary.c:595 +#: fortran/primary.c:601 #, no-c-format msgid "Real constant overflows its kind at %C" msgstr "" -#: fortran/primary.c:600 +#: fortran/primary.c:606 #, no-c-format msgid "Real constant underflows its kind at %C" msgstr "" -#: fortran/primary.c:692 +#: fortran/primary.c:698 #, no-c-format msgid "Syntax error in SUBSTRING specification at %C" msgstr "" -#: fortran/primary.c:924 +#: fortran/primary.c:930 #, no-c-format msgid "Invalid kind %d for CHARACTER constant at %C" msgstr "" -#: fortran/primary.c:945 +#: fortran/primary.c:951 #, no-c-format msgid "Unterminated character constant beginning at %C" msgstr "" -#: fortran/primary.c:1012 +#: fortran/primary.c:1018 #, no-c-format msgid "Bad kind for logical constant at %C" msgstr "" -#: fortran/primary.c:1047 +#: fortran/primary.c:1053 #, no-c-format msgid "Expected PARAMETER symbol in complex constant at %C" msgstr "" -#: fortran/primary.c:1053 +#: fortran/primary.c:1059 #, no-c-format msgid "Numeric PARAMETER required in complex constant at %C" msgstr "" -#: fortran/primary.c:1059 +#: fortran/primary.c:1065 #, no-c-format msgid "Scalar PARAMETER required in complex constant at %C" msgstr "" -#: fortran/primary.c:1089 +#: fortran/primary.c:1095 #, no-c-format msgid "Error converting PARAMETER constant in complex constant at %C" msgstr "" -#: fortran/primary.c:1216 +#: fortran/primary.c:1222 #, no-c-format msgid "Syntax error in COMPLEX constant at %C" msgstr "" -#: fortran/primary.c:1382 +#: fortran/primary.c:1404 #, no-c-format msgid "Keyword '%s' at %C has already appeared in the current argument list" msgstr "" -#: fortran/primary.c:1439 +#: fortran/primary.c:1461 #, no-c-format msgid "Expected alternate return label at %C" msgstr "" -#: fortran/primary.c:1458 +#: fortran/primary.c:1480 #, no-c-format msgid "Missing keyword name in actual argument list at %C" msgstr "" -#: fortran/primary.c:1494 +#: fortran/primary.c:1516 #, no-c-format msgid "Syntax error in argument list at %C" msgstr "" -#: fortran/primary.c:1581 +#: fortran/primary.c:1603 #, no-c-format msgid "Expected structure component name at %C" msgstr "" -#: fortran/primary.c:1810 +#: fortran/primary.c:1841 #, no-c-format msgid "Too many components in structure constructor at %C" msgstr "" -#: fortran/primary.c:1825 +#: fortran/primary.c:1856 #, no-c-format msgid "Too few components in structure constructor at %C" msgstr "" -#: fortran/primary.c:1843 +#: fortran/primary.c:1874 #, no-c-format msgid "Syntax error in structure constructor at %C" msgstr "" -#: fortran/primary.c:1956 +#: fortran/primary.c:1987 #, no-c-format msgid "Unexpected use of subroutine name '%s' at %C" msgstr "" -#: fortran/primary.c:1987 +#: fortran/primary.c:2018 #, no-c-format msgid "Statement function '%s' requires argument list at %C" msgstr "" -#: fortran/primary.c:1990 +#: fortran/primary.c:2021 #, no-c-format msgid "Function '%s' requires an argument list at %C" msgstr "" -#: fortran/primary.c:2144 +#: fortran/primary.c:2175 #, no-c-format msgid "Missing argument list in function '%s' at %C" msgstr "" -#: fortran/primary.c:2172 +#: fortran/primary.c:2203 #, no-c-format msgid "Symbol at %C is not appropriate for an expression" msgstr "" -#: fortran/primary.c:2242 +#: fortran/primary.c:2273 #, no-c-format msgid "Expected VARIABLE at %C" msgstr "" -#: fortran/resolve.c:82 +#: fortran/resolve.c:101 #, no-c-format msgid "" "Alternate return specifier in elemental subroutine '%s' at %L is not allowed" msgstr "" -#: fortran/resolve.c:86 +#: fortran/resolve.c:105 #, no-c-format msgid "Alternate return specifier in function '%s' at %L is not allowed" msgstr "" -#: fortran/resolve.c:100 +#: fortran/resolve.c:119 #, no-c-format msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE" msgstr "" -#: fortran/resolve.c:108 +#: fortran/resolve.c:127 #, no-c-format msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure" msgstr "" -#: fortran/resolve.c:162 +#: fortran/resolve.c:181 #, no-c-format msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN)" msgstr "" -#: fortran/resolve.c:170 +#: fortran/resolve.c:189 #, no-c-format msgid "" "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified" msgstr "" -#: fortran/resolve.c:181 +#: fortran/resolve.c:200 #, no-c-format msgid "Argument '%s' of elemental procedure at %L must be scalar" msgstr "" -#: fortran/resolve.c:189 +#: fortran/resolve.c:208 #, no-c-format msgid "" "Argument '%s' of elemental procedure at %L cannot have the POINTER attribute" msgstr "" -#: fortran/resolve.c:201 +#: fortran/resolve.c:220 #, no-c-format msgid "Argument '%s' of statement function at %L must be scalar" msgstr "" -#: fortran/resolve.c:212 +#: fortran/resolve.c:231 #, no-c-format msgid "" "Character-valued argument '%s' of statement function at %L must has constant " "length" msgstr "" -#: fortran/resolve.c:272 +#: fortran/resolve.c:292 #, no-c-format msgid "Contained function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:417 +#: fortran/resolve.c:437 #, no-c-format msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:421 +#: fortran/resolve.c:441 #, no-c-format msgid "ENTRY result %s can't be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:428 +#: fortran/resolve.c:448 #, no-c-format msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:432 +#: fortran/resolve.c:452 #, no-c-format msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:470 +#: fortran/resolve.c:490 #, no-c-format msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:475 +#: fortran/resolve.c:495 #, no-c-format msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:690 fortran/resolve.c:3260 fortran/resolve.c:3911 +#: fortran/resolve.c:710 fortran/resolve.c:3347 fortran/resolve.c:3998 #, no-c-format msgid "Label %d referenced at %L is never defined" msgstr "" -#: fortran/resolve.c:717 +#: fortran/resolve.c:737 #, no-c-format msgid "Statement function '%s' at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.c:740 +#: fortran/resolve.c:760 #, no-c-format msgid "Symbol '%s' at %L is ambiguous" msgstr "" -#: fortran/resolve.c:839 +#: fortran/resolve.c:859 #, no-c-format msgid "Generic function '%s' at %L is not an intrinsic function" msgstr "" -#: fortran/resolve.c:849 +#: fortran/resolve.c:869 #, no-c-format msgid "" "Generic function '%s' at %L is not consistent with a specific intrinsic " "interface" msgstr "" -#: fortran/resolve.c:887 +#: fortran/resolve.c:907 #, no-c-format msgid "" "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.c:933 +#: fortran/resolve.c:953 #, no-c-format msgid "Unable to resolve the specific function '%s' at %L" msgstr "" -#: fortran/resolve.c:989 fortran/resolve.c:5012 +#: fortran/resolve.c:1009 fortran/resolve.c:5363 #, no-c-format msgid "Function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:1108 +#: fortran/resolve.c:1128 #, no-c-format msgid "Function reference to '%s' at %L is inside a FORALL block" msgstr "" -#: fortran/resolve.c:1114 +#: fortran/resolve.c:1134 #, no-c-format msgid "" "Function reference to '%s' at %L is to a non-PURE procedure within a PURE " "procedure" msgstr "" -#: fortran/resolve.c:1134 +#: fortran/resolve.c:1154 #, no-c-format msgid "Subroutine call to '%s' in FORALL block at %L is not PURE" msgstr "" -#: fortran/resolve.c:1137 +#: fortran/resolve.c:1157 #, no-c-format msgid "Subroutine call to '%s' at %L is not PURE" msgstr "" -#: fortran/resolve.c:1199 +#: fortran/resolve.c:1219 #, no-c-format msgid "Generic subroutine '%s' at %L is not an intrinsic subroutine" msgstr "" -#: fortran/resolve.c:1208 +#: fortran/resolve.c:1228 #, no-c-format msgid "" "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine " "interface" msgstr "" -#: fortran/resolve.c:1243 +#: fortran/resolve.c:1263 #, no-c-format msgid "" "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.c:1286 +#: fortran/resolve.c:1306 #, no-c-format msgid "Unable to resolve the specific subroutine '%s' at %L" msgstr "" -#: fortran/resolve.c:1386 +#: fortran/resolve.c:1406 #, no-c-format msgid "Shapes for operands at %L and %L are not conformable" msgstr "" -#: fortran/resolve.c:1442 +#: fortran/resolve.c:1462 #, c-format msgid "Operand of unary numeric operator '%s' at %%L is %s" msgstr "" -#: fortran/resolve.c:1458 +#: fortran/resolve.c:1478 #, c-format msgid "Operands of binary numeric operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:1472 +#: fortran/resolve.c:1492 #, c-format msgid "Operands of string concatenation operator at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:1491 +#: fortran/resolve.c:1511 #, c-format msgid "Operands of logical operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:1505 +#: fortran/resolve.c:1525 #, c-format msgid "Operand of .NOT. operator at %%L is %s" msgstr "" -#: fortran/resolve.c:1515 +#: fortran/resolve.c:1535 msgid "COMPLEX quantities cannot be compared at %L" msgstr "" -#: fortran/resolve.c:1541 +#: fortran/resolve.c:1561 #, c-format msgid "Logicals at %%L must be compared with %s instead of %s" msgstr "" -#: fortran/resolve.c:1546 +#: fortran/resolve.c:1566 #, c-format msgid "Operands of comparison operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:1554 +#: fortran/resolve.c:1574 #, c-format msgid "Operand of user operator '%s' at %%L is %s" msgstr "" -#: fortran/resolve.c:1557 +#: fortran/resolve.c:1577 #, c-format msgid "Operands of user operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:1625 +#: fortran/resolve.c:1645 #, no-c-format msgid "Inconsistent ranks for operator at %L and %L" msgstr "" -#: fortran/resolve.c:1747 +#: fortran/resolve.c:1767 #, no-c-format msgid "Illegal stride of zero at %L" msgstr "" -#: fortran/resolve.c:1768 +#: fortran/resolve.c:1788 #, no-c-format msgid "Array reference at %L is out of bounds" msgstr "" -#: fortran/resolve.c:1789 +#: fortran/resolve.c:1809 #, no-c-format msgid "Rightmost upper bound of assumed size array section not specified at %L" msgstr "" -#: fortran/resolve.c:1799 +#: fortran/resolve.c:1819 #, no-c-format msgid "Rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.c:1827 +#: fortran/resolve.c:1847 #, no-c-format msgid "Array index at %L must be scalar" msgstr "" -#: fortran/resolve.c:1833 +#: fortran/resolve.c:1853 #, no-c-format msgid "Array index at %L must be of INTEGER type" msgstr "" -#: fortran/resolve.c:1839 +#: fortran/resolve.c:1859 #, no-c-format msgid "Extension: REAL array index at %L" msgstr "" -#: fortran/resolve.c:1868 +#: fortran/resolve.c:1888 #, no-c-format msgid "Argument dim at %L must be scalar" msgstr "" -#: fortran/resolve.c:1874 +#: fortran/resolve.c:1894 #, no-c-format msgid "Argument dim at %L must be of INTEGER type" msgstr "" -#: fortran/resolve.c:1978 +#: fortran/resolve.c:1996 #, no-c-format msgid "Array index at %L is an array of rank %d" msgstr "" -#: fortran/resolve.c:2016 +#: fortran/resolve.c:2034 #, no-c-format msgid "Substring start index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:2023 +#: fortran/resolve.c:2041 #, no-c-format msgid "Substring start index at %L must be scalar" msgstr "" -#: fortran/resolve.c:2030 +#: fortran/resolve.c:2048 #, no-c-format msgid "Substring start index at %L is less than one" msgstr "" -#: fortran/resolve.c:2043 +#: fortran/resolve.c:2061 #, no-c-format msgid "Substring end index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:2050 +#: fortran/resolve.c:2068 #, no-c-format msgid "Substring end index at %L must be scalar" msgstr "" -#: fortran/resolve.c:2058 +#: fortran/resolve.c:2076 #, no-c-format msgid "Substring end index at %L is out of bounds" msgstr "" -#: fortran/resolve.c:2132 +#: fortran/resolve.c:2150 #, no-c-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the POINTER attribute at %L" msgstr "" -#: fortran/resolve.c:2151 +#: fortran/resolve.c:2169 #, no-c-format msgid "" "Two or more part references with nonzero rank must not be specified at %L" msgstr "" -#: fortran/resolve.c:2377 +#: fortran/resolve.c:2395 #, no-c-format msgid "%s at %L must be a scalar" msgstr "" -#: fortran/resolve.c:2385 +#: fortran/resolve.c:2403 #, no-c-format msgid "%s at %L must be INTEGER or REAL" msgstr "" -#: fortran/resolve.c:2388 +#: fortran/resolve.c:2406 #, no-c-format msgid "%s at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:2404 +#: fortran/resolve.c:2422 #, no-c-format msgid "Obsolete: REAL DO loop iterator at %L" msgstr "" -#: fortran/resolve.c:2413 +#: fortran/resolve.c:2431 #, no-c-format msgid "Cannot assign to loop variable in PURE procedure at %L" msgstr "" -#: fortran/resolve.c:2437 +#: fortran/resolve.c:2455 #, no-c-format msgid "Step expression in DO loop at %L cannot be zero" msgstr "" -#: fortran/resolve.c:2470 +#: fortran/resolve.c:2488 #, no-c-format msgid "FORALL Iteration variable at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:2475 +#: fortran/resolve.c:2493 #, no-c-format msgid "FORALL start expression at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:2482 +#: fortran/resolve.c:2500 #, no-c-format msgid "FORALL end expression at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:2489 +#: fortran/resolve.c:2507 #, no-c-format msgid "FORALL Stride expression at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:2563 +#: fortran/resolve.c:2604 #, no-c-format msgid "" "Expression in DEALLOCATE statement at %L must be ALLOCATABLE or a POINTER" msgstr "" -#: fortran/resolve.c:2631 +#: fortran/resolve.c:2704 #, no-c-format msgid "Expression in ALLOCATE statement at %L must be ALLOCATABLE or a POINTER" msgstr "" -#: fortran/resolve.c:2643 +#: fortran/resolve.c:2729 #, no-c-format msgid "Array specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:2672 +#: fortran/resolve.c:2758 #, no-c-format msgid "Bad array specification in ALLOCATE statement at %L" msgstr "" @@ -7394,450 +7721,489 @@ msgstr "" #. element in the list. Either way, we must #. issue an error and get the next case from P. #. FIXME: Sort P and Q by line number. -#: fortran/resolve.c:2828 +#: fortran/resolve.c:2914 #, no-c-format msgid "CASE label at %L overlaps with CASE label at %L" msgstr "" -#: fortran/resolve.c:2879 +#: fortran/resolve.c:2965 #, no-c-format msgid "Expression in CASE statement at %L must be of type %s" msgstr "" -#: fortran/resolve.c:2890 +#: fortran/resolve.c:2976 #, no-c-format msgid "Expression in CASE statement at %L must be kind %d" msgstr "" -#: fortran/resolve.c:2902 +#: fortran/resolve.c:2988 #, no-c-format msgid "Expression in CASE statement at %L must be scalar" msgstr "" -#: fortran/resolve.c:2948 +#: fortran/resolve.c:3034 #, no-c-format msgid "" "Selection expression in computed GOTO statement at %L must be a scalar " "integer expression" msgstr "" -#: fortran/resolve.c:2966 +#: fortran/resolve.c:3052 #, no-c-format msgid "Argument of SELECT statement at %L cannot be %s" msgstr "" -#: fortran/resolve.c:2975 +#: fortran/resolve.c:3061 #, no-c-format msgid "Argument of SELECT statement at %L must be a scalar expression" msgstr "" -#: fortran/resolve.c:3039 +#: fortran/resolve.c:3125 #, no-c-format msgid "" "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" msgstr "" -#: fortran/resolve.c:3066 +#: fortran/resolve.c:3152 #, no-c-format msgid "Logical range in CASE statement at %L is not allowed" msgstr "" -#: fortran/resolve.c:3077 +#: fortran/resolve.c:3163 #, no-c-format msgid "Range specification at %L can never be matched" msgstr "" -#: fortran/resolve.c:3180 +#: fortran/resolve.c:3266 #, no-c-format msgid "Logical SELECT CASE block at %L has more that two cases" msgstr "" -#: fortran/resolve.c:3217 +#: fortran/resolve.c:3304 #, no-c-format msgid "Data transfer element at %L cannot have POINTER components" msgstr "" -#: fortran/resolve.c:3224 +#: fortran/resolve.c:3311 #, no-c-format msgid "Data transfer element at %L cannot have PRIVATE components" msgstr "" -#: fortran/resolve.c:3233 +#: fortran/resolve.c:3320 #, no-c-format msgid "" "Data transfer element at %L cannot be a full reference to an assumed-size " "array" msgstr "" -#: fortran/resolve.c:3267 +#: fortran/resolve.c:3354 #, no-c-format msgid "" "Statement at %L is not a valid branch target statement for the branch " "statement at %L" msgstr "" -#: fortran/resolve.c:3276 +#: fortran/resolve.c:3363 #, no-c-format msgid "Branch at %L causes an infinite loop" msgstr "" #. still nothing, so illegal. -#: fortran/resolve.c:3306 +#: fortran/resolve.c:3393 #, no-c-format msgid "Label at %L is not in the same block as the GOTO statement at %L" msgstr "" -#: fortran/resolve.c:3322 +#: fortran/resolve.c:3409 #, no-c-format msgid "Obsolete: GOTO at %L jumps to END of construct at %L" msgstr "" -#: fortran/resolve.c:3396 +#: fortran/resolve.c:3483 #, no-c-format msgid "WHERE mask at %L has inconsistent shape" msgstr "" -#: fortran/resolve.c:3412 +#: fortran/resolve.c:3499 #, no-c-format msgid "WHERE assignment target at %L has inconsistent shape" msgstr "" -#: fortran/resolve.c:3422 fortran/resolve.c:3621 +#: fortran/resolve.c:3509 fortran/resolve.c:3708 #, no-c-format msgid "Unsupported statement inside WHERE at %L" msgstr "" -#: fortran/resolve.c:3498 +#: fortran/resolve.c:3585 #, no-c-format msgid "expresion reference type error at %L" msgstr "" -#: fortran/resolve.c:3530 +#: fortran/resolve.c:3617 #, no-c-format msgid "Unsupported statement while finding forall index in expression" msgstr "" -#: fortran/resolve.c:3577 +#: fortran/resolve.c:3664 #, no-c-format msgid "Assignment to a FORALL index variable at %L" msgstr "" -#: fortran/resolve.c:3585 +#: fortran/resolve.c:3672 #, no-c-format msgid "" "The FORALL with index '%s' cause more than one assignment to this object at %" "L" msgstr "" -#: fortran/resolve.c:3712 +#: fortran/resolve.c:3799 #, no-c-format msgid "An outer FORALL construct already has an index with this name %L" msgstr "" -#: fortran/resolve.c:3724 fortran/resolve.c:3727 fortran/resolve.c:3730 +#: fortran/resolve.c:3811 fortran/resolve.c:3814 fortran/resolve.c:3817 #, no-c-format msgid "" "A FORALL index must not appear in a limit or stride expression in the same " "FORALL at %L" msgstr "" -#: fortran/resolve.c:3773 +#: fortran/resolve.c:3860 #, no-c-format msgid "ELSE IF clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.c:3783 +#: fortran/resolve.c:3870 #, no-c-format msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" msgstr "" -#: fortran/resolve.c:3861 +#: fortran/resolve.c:3948 #, no-c-format msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable" msgstr "" -#: fortran/resolve.c:3864 +#: fortran/resolve.c:3951 #, no-c-format msgid "Variable '%s' has not been assigned a target label at %L" msgstr "" -#: fortran/resolve.c:3874 +#: fortran/resolve.c:3961 #, no-c-format msgid "Alternate RETURN statement at %L requires an INTEGER return specifier" msgstr "" -#: fortran/resolve.c:3890 +#: fortran/resolve.c:3977 #, no-c-format msgid "Cannot assign to variable '%s' in PURE procedure at %L" msgstr "" -#: fortran/resolve.c:3899 +#: fortran/resolve.c:3986 #, no-c-format msgid "" "Right side of assignment at %L is a derived type containing a POINTER in a " "PURE procedure" msgstr "" -#: fortran/resolve.c:3919 +#: fortran/resolve.c:4006 #, no-c-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" msgstr "" -#: fortran/resolve.c:3934 +#: fortran/resolve.c:4021 #, no-c-format msgid "Arithmetic IF statement at %L requires a numeric expression" msgstr "" -#: fortran/resolve.c:3946 +#: fortran/resolve.c:4033 #, no-c-format msgid "IF clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.c:3972 +#: fortran/resolve.c:4059 #, no-c-format msgid "" "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.c:3979 +#: fortran/resolve.c:4066 #, no-c-format msgid "STAT tag in ALLOCATE statement at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:3991 +#: fortran/resolve.c:4078 #, no-c-format msgid "STAT tag in DEALLOCATE statement at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:4057 +#: fortran/resolve.c:4144 #, no-c-format msgid "FORALL mask clause at %L requires a LOGICAL expression" msgstr "" -#: fortran/resolve.c:4177 +#: fortran/resolve.c:4267 #, no-c-format msgid "Assumed size array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.c:4180 +#: fortran/resolve.c:4270 #, no-c-format msgid "Assumed shape array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.c:4190 +#: fortran/resolve.c:4280 #, no-c-format msgid "Parameter array '%s' at %L cannot be automatic or assumed shape" msgstr "" -#: fortran/resolve.c:4202 +#: fortran/resolve.c:4296 +#, no-c-format +msgid "Module array '%s' at %L cannot be automatic or assumed shape" +msgstr "" + +#: fortran/resolve.c:4308 #, no-c-format msgid "" "Entity with assumed character length at %L must be a dummy argument or a " "PARAMETER" msgstr "" -#: fortran/resolve.c:4214 +#: fortran/resolve.c:4320 #, no-c-format msgid "" "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type" msgstr "" -#: fortran/resolve.c:4224 +#: fortran/resolve.c:4330 #, no-c-format msgid "Incompatible derived type in PARAMETER at %L" msgstr "" -#: fortran/resolve.c:4235 +#: fortran/resolve.c:4341 #, no-c-format msgid "Symbol at %L is not a DUMMY variable" msgstr "" -#: fortran/resolve.c:4246 +#: fortran/resolve.c:4352 #, no-c-format msgid "" "Character-valued statement function '%s' at %L must have constant length" msgstr "" -#: fortran/resolve.c:4263 +#: fortran/resolve.c:4370 +#, no-c-format +msgid "" +"The derived type '%s' at %L is of type '%s', which has not been defined." +msgstr "" + +#: fortran/resolve.c:4391 +#, no-c-format +msgid "" +"The component '%s' is a PRIVATE type and cannot be a component of '%s', " +"which is PUBLIC at %L" +msgstr "" + +#: fortran/resolve.c:4411 +#, no-c-format +msgid "" +"The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have " +"a default initializer" +msgstr "" + +#: fortran/resolve.c:4433 #, no-c-format -msgid "Allocatable array at %L must have a deferred shape" +msgid "" +"'%s' is a PRIVATE type and cannot be a dummy argument of '%s', which is " +"PUBLIC at %L" msgstr "" -#: fortran/resolve.c:4266 +#: fortran/resolve.c:4453 #, no-c-format -msgid "Object at %L may not be ALLOCATABLE" +msgid "Allocatable array '%s' at %L must have a deferred shape" msgstr "" -#: fortran/resolve.c:4273 +#: fortran/resolve.c:4456 #, no-c-format -msgid "Pointer to array at %L must have a deferred shape" +msgid "Scalar object '%s' at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:4284 +#: fortran/resolve.c:4463 #, no-c-format -msgid "Array at %L cannot have a deferred shape" +msgid "Array pointer '%s' at %L must have a deferred shape" msgstr "" -#: fortran/resolve.c:4297 -msgid "Allocatable" +#: fortran/resolve.c:4474 +#, no-c-format +msgid "Array '%s' at %L cannot have a deferred shape" msgstr "" -#: fortran/resolve.c:4299 -msgid "External" +#: fortran/resolve.c:4509 +#, no-c-format +msgid "Allocatable '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:4301 -msgid "Dummy" +#: fortran/resolve.c:4512 +#, no-c-format +msgid "External '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:4303 -msgid "Intrinsic" +#: fortran/resolve.c:4515 +#, no-c-format +msgid "Dummy '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:4305 -msgid "Function Result" +#: fortran/resolve.c:4518 +#, no-c-format +msgid "Intrinsic '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:4316 -msgid "Automatic array" +#: fortran/resolve.c:4521 +#, no-c-format +msgid "Function result '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:4325 +#: fortran/resolve.c:4524 #, no-c-format -msgid "%s '%s' at %L cannot have an initializer" +msgid "Automatic array '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:4343 +#: fortran/resolve.c:4547 #, no-c-format msgid "PRIVATE symbol '%s' cannot be member of PUBLIC namelist at %L" msgstr "" -#: fortran/resolve.c:4359 +#: fortran/resolve.c:4559 +#, no-c-format +msgid "External object '%s' at %L may not have an initializer" +msgstr "" + +#: fortran/resolve.c:4572 #, no-c-format msgid "Intrinsic at %L does not exist" msgstr "" -#: fortran/resolve.c:4471 +#: fortran/resolve.c:4684 #, no-c-format msgid "Nonconstant array section at %L in DATA statement" msgstr "" -#: fortran/resolve.c:4484 +#: fortran/resolve.c:4697 #, no-c-format msgid "DATA statement at %L has more variables than values" msgstr "" -#: fortran/resolve.c:4682 +#: fortran/resolve.c:4895 #, no-c-format msgid "DATA statement at %L has more values than variables" msgstr "" -#: fortran/resolve.c:4764 +#: fortran/resolve.c:4977 #, no-c-format msgid "Label %d at %L defined but not used" msgstr "" -#: fortran/resolve.c:4769 +#: fortran/resolve.c:4982 #, no-c-format msgid "Label %d at %L defined but cannot be used" msgstr "" -#: fortran/resolve.c:4794 +#: fortran/resolve.c:5066 #, no-c-format msgid "" "Derived type variable '%s' at %L must have SEQUENCE attribute to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:4809 +#: fortran/resolve.c:5081 #, no-c-format msgid "" -"Derived type variable '%s' at %L has pointer componet(s) cannot be an " +"Derived type variable '%s' at %L with pointer component(s) cannot be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:4894 +#: fortran/resolve.c:5088 #, no-c-format -msgid "Syntax error in EQUIVALENCE statement at %L" +msgid "" +"Derived type variable '%s' at %L with default initializer cannot be an " +"EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:4908 +#: fortran/resolve.c:5189 #, no-c-format -msgid "Dummy argument '%s' at %L cannot be an EQUIVALENCE object" +msgid "Syntax error in EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.c:4916 +#: fortran/resolve.c:5206 #, no-c-format -msgid "Allocatable array '%s' at %L cannot be an EQUIVALENCE object" +msgid "" +"Initialized objects '%s' and '%s' cannot both be in the EQUIVALENCE " +"statement at %L" msgstr "" -#: fortran/resolve.c:4924 +#: fortran/resolve.c:5220 #, no-c-format -msgid "Pointer '%s' at %L cannot be an EQUIVALENCE object" -msgstr "" - -#: fortran/resolve.c:4933 -#, no-c-format -msgid "Entity '%s' at %L cannot be an EQUIVALENCE object" +msgid "" +"Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure " +"procedure '%s'" msgstr "" -#: fortran/resolve.c:4941 +#: fortran/resolve.c:5229 #, no-c-format msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:4957 +#: fortran/resolve.c:5308 #, no-c-format msgid "" "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:4968 +#: fortran/resolve.c:5319 #, no-c-format msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:4979 +#: fortran/resolve.c:5330 #, no-c-format msgid "Substring at %L has length zero" msgstr "" -#: fortran/resolve.c:5025 +#: fortran/resolve.c:5376 #, no-c-format msgid "ENTRY '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:5061 +#: fortran/resolve.c:5412 #, no-c-format msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE" msgstr "" -#: fortran/scanner.c:924 +#: fortran/scanner.c:928 #, no-c-format msgid "%s:%d: file %s left but not entered" msgstr "" -#: fortran/scanner.c:947 +#: fortran/scanner.c:951 #, no-c-format msgid "%s:%d: Illegal preprocessor directive" msgstr "" -#: fortran/scanner.c:1022 +#: fortran/scanner.c:1026 #, no-c-format msgid "File '%s' is being included recursively" msgstr "" -#: fortran/scanner.c:1031 +#: fortran/scanner.c:1035 #, no-c-format msgid "Can't open file '%s'" msgstr "" -#: fortran/scanner.c:1040 +#: fortran/scanner.c:1044 #, no-c-format msgid "Can't open included file '%s'" msgstr "" -#: fortran/scanner.c:1129 +#: fortran/scanner.c:1133 #, c-format msgid "%s:%3d %s\n" msgstr "" @@ -7874,141 +8240,141 @@ msgstr "" msgid "Argument of ACOSH at %L must not be less than 1" msgstr "" -#: fortran/simplify.c:477 +#: fortran/simplify.c:503 #, no-c-format msgid "Argument of ASIN at %L must be between -1 and 1" msgstr "" -#: fortran/simplify.c:533 +#: fortran/simplify.c:559 #, no-c-format msgid "Argument of ATANH at %L must be inside the range -1 to 1" msgstr "" -#: fortran/simplify.c:559 +#: fortran/simplify.c:585 #, no-c-format msgid "" "If first argument of ATAN2 %L is zero, then the second argument must not be " "zero" msgstr "" -#: fortran/simplify.c:641 +#: fortran/simplify.c:667 #, no-c-format msgid "Bad character in CHAR function at %L" msgstr "" -#: fortran/simplify.c:1139 +#: fortran/simplify.c:1193 #, no-c-format msgid "Argument of IACHAR at %L must be of length one" msgstr "" -#: fortran/simplify.c:1179 +#: fortran/simplify.c:1233 #, no-c-format msgid "Invalid second argument of IBCLR at %L" msgstr "" -#: fortran/simplify.c:1187 +#: fortran/simplify.c:1241 #, no-c-format msgid "Second argument of IBCLR exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1214 +#: fortran/simplify.c:1268 #, no-c-format msgid "Invalid second argument of IBITS at %L" msgstr "" -#: fortran/simplify.c:1220 +#: fortran/simplify.c:1274 #, no-c-format msgid "Invalid third argument of IBITS at %L" msgstr "" -#: fortran/simplify.c:1231 +#: fortran/simplify.c:1285 #, no-c-format msgid "Sum of second and third arguments of IBITS exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1279 +#: fortran/simplify.c:1333 #, no-c-format msgid "Invalid second argument of IBSET at %L" msgstr "" -#: fortran/simplify.c:1287 +#: fortran/simplify.c:1341 #, no-c-format msgid "Second argument of IBSET exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1310 +#: fortran/simplify.c:1364 #, no-c-format msgid "Argument of ICHAR at %L must be of length one" msgstr "" -#: fortran/simplify.c:1318 +#: fortran/simplify.c:1372 #, no-c-format msgid "Argument of ICHAR at %L out of range of this processor" msgstr "" -#: fortran/simplify.c:1526 +#: fortran/simplify.c:1580 #, no-c-format msgid "Argument of INT at %L is not a valid type" msgstr "" -#: fortran/simplify.c:1603 +#: fortran/simplify.c:1657 #, no-c-format msgid "Invalid second argument of ISHFT at %L" msgstr "" -#: fortran/simplify.c:1619 +#: fortran/simplify.c:1673 #, no-c-format msgid "Magnitude of second argument of ISHFT exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1683 +#: fortran/simplify.c:1737 #, no-c-format msgid "Invalid second argument of ISHFTC at %L" msgstr "" -#: fortran/simplify.c:1693 +#: fortran/simplify.c:1747 #, no-c-format msgid "Invalid third argument of ISHFTC at %L" msgstr "" -#: fortran/simplify.c:1708 +#: fortran/simplify.c:1762 #, no-c-format msgid "Magnitude of second argument of ISHFTC exceeds third argument at %L" msgstr "" -#: fortran/simplify.c:1778 +#: fortran/simplify.c:1832 #, no-c-format msgid "Argument of KIND at %L is a DERIVED type" msgstr "" -#: fortran/simplify.c:1849 +#: fortran/simplify.c:1903 #, no-c-format msgid "DIM argument at %L is out of bounds" msgstr "" -#: fortran/simplify.c:1979 +#: fortran/simplify.c:2033 #, no-c-format msgid "Argument of LOG at %L cannot be less than or equal to zero" msgstr "" -#: fortran/simplify.c:1992 +#: fortran/simplify.c:2046 #, no-c-format msgid "Complex argument of LOG at %L cannot be zero" msgstr "" -#: fortran/simplify.c:2036 +#: fortran/simplify.c:2090 #, no-c-format msgid "Argument of LOG10 at %L cannot be less than or equal to zero" msgstr "" #. Result is processor-dependent. -#: fortran/simplify.c:2211 +#: fortran/simplify.c:2265 #, no-c-format msgid "Second argument MOD at %L is zero" msgstr "" #. Result is processor-dependent. -#: fortran/simplify.c:2222 +#: fortran/simplify.c:2276 #, no-c-format msgid "Second argument of MOD at %L is zero" msgstr "" @@ -8016,73 +8382,73 @@ msgstr "" #. Result is processor-dependent. This processor just opts #. to not handle it at all. #. Result is processor-dependent. -#: fortran/simplify.c:2268 fortran/simplify.c:2280 +#: fortran/simplify.c:2322 fortran/simplify.c:2334 #, no-c-format msgid "Second argument of MODULO at %L is zero" msgstr "" -#: fortran/simplify.c:2337 +#: fortran/simplify.c:2391 #, no-c-format msgid "Second argument of NEAREST at %L may not be zero" msgstr "" -#: fortran/simplify.c:2605 +#: fortran/simplify.c:2699 #, no-c-format msgid "Invalid second argument of REPEAT at %L" msgstr "" -#: fortran/simplify.c:2679 +#: fortran/simplify.c:2773 #, no-c-format msgid "Integer too large in shape specification at %L" msgstr "" -#: fortran/simplify.c:2689 +#: fortran/simplify.c:2783 #, no-c-format msgid "Too many dimensions in shape specification for RESHAPE at %L" msgstr "" -#: fortran/simplify.c:2697 +#: fortran/simplify.c:2791 #, no-c-format msgid "Shape specification at %L cannot be negative" msgstr "" -#: fortran/simplify.c:2707 +#: fortran/simplify.c:2801 #, no-c-format msgid "Shape specification at %L cannot be the null array" msgstr "" -#: fortran/simplify.c:2731 +#: fortran/simplify.c:2825 #, no-c-format msgid "" "ORDER parameter of RESHAPE at %L is not the same size as SHAPE parameter" msgstr "" -#: fortran/simplify.c:2738 +#: fortran/simplify.c:2832 #, no-c-format msgid "Error in ORDER parameter of RESHAPE at %L" msgstr "" -#: fortran/simplify.c:2748 +#: fortran/simplify.c:2842 #, no-c-format msgid "ORDER parameter of RESHAPE at %L is out of range" msgstr "" -#: fortran/simplify.c:2757 +#: fortran/simplify.c:2851 #, no-c-format msgid "Invalid permutation in ORDER parameter at %L" msgstr "" -#: fortran/simplify.c:2814 +#: fortran/simplify.c:2908 #, no-c-format msgid "PAD parameter required for short SOURCE parameter at %L" msgstr "" -#: fortran/simplify.c:2948 +#: fortran/simplify.c:3042 #, no-c-format msgid "Result of SCALE overflows its kind at %L" msgstr "" -#: fortran/simplify.c:3529 +#: fortran/simplify.c:3623 #, no-c-format msgid "Argument of SQRT at %L has a negative value" msgstr "" @@ -8112,177 +8478,187 @@ msgstr "" msgid "Symbol '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/symbol.c:300 +#: fortran/symbol.c:304 #, no-c-format msgid "%s attribute not allowed in BLOCK DATA program unit at %L" msgstr "" -#: fortran/symbol.c:448 fortran/symbol.c:878 +#: fortran/symbol.c:497 fortran/symbol.c:976 #, no-c-format msgid "%s attribute conflicts with %s attribute at %L" msgstr "" -#: fortran/symbol.c:451 +#: fortran/symbol.c:500 #, no-c-format msgid "%s attribute conflicts with %s attribute in '%s' at %L" msgstr "" -#: fortran/symbol.c:493 +#: fortran/symbol.c:542 #, no-c-format msgid "Cannot change attributes of USE-associated symbol at %L" msgstr "" -#: fortran/symbol.c:496 +#: fortran/symbol.c:545 #, no-c-format msgid "Cannot change attributes of USE-associated symbol %s at %L" msgstr "" -#: fortran/symbol.c:518 +#: fortran/symbol.c:567 #, no-c-format msgid "Cannot change attributes of symbol at %L after it has been used" msgstr "" -#: fortran/symbol.c:534 +#: fortran/symbol.c:583 #, no-c-format msgid "Duplicate %s attribute specified at %L" msgstr "" -#: fortran/symbol.c:664 +#: fortran/symbol.c:712 +#, no-c-format +msgid "Cray Pointee at %L appears in multiple pointer() statements." +msgstr "" + +#: fortran/symbol.c:744 #, no-c-format msgid "SAVE attribute at %L cannot be specified in a PURE procedure" msgstr "" -#: fortran/symbol.c:908 +#: fortran/symbol.c:752 +#, no-c-format +msgid "Duplicate SAVE attribute specified at %L" +msgstr "" + +#: fortran/symbol.c:1006 #, no-c-format msgid "%s procedure at %L is already declared as %s procedure" msgstr "" -#: fortran/symbol.c:943 +#: fortran/symbol.c:1041 #, no-c-format msgid "INTENT (%s) conflicts with INTENT(%s) at %L" msgstr "" -#: fortran/symbol.c:966 +#: fortran/symbol.c:1064 #, no-c-format msgid "ACCESS specification at %L was already specified" msgstr "" -#: fortran/symbol.c:986 +#: fortran/symbol.c:1084 #, no-c-format msgid "Symbol '%s' at %L already has an explicit interface" msgstr "" -#: fortran/symbol.c:1014 +#: fortran/symbol.c:1112 #, no-c-format msgid "Symbol '%s' at %L already has basic type of %s" msgstr "" -#: fortran/symbol.c:1026 +#: fortran/symbol.c:1124 #, no-c-format msgid "Symbol '%s' at %L cannot have a type" msgstr "" -#: fortran/symbol.c:1159 +#: fortran/symbol.c:1262 #, no-c-format msgid "Component '%s' at %C already declared at %L" msgstr "" -#: fortran/symbol.c:1237 +#: fortran/symbol.c:1340 #, no-c-format msgid "Symbol '%s' at %C is ambiguous" msgstr "" -#: fortran/symbol.c:1277 +#: fortran/symbol.c:1380 #, no-c-format msgid "Derived type '%s' at %C is being used before it is defined" msgstr "" -#: fortran/symbol.c:1305 +#: fortran/symbol.c:1408 #, no-c-format msgid "'%s' at %C is not a member of the '%s' structure" msgstr "" -#: fortran/symbol.c:1311 +#: fortran/symbol.c:1414 #, no-c-format msgid "Component '%s' at %C is a PRIVATE component of '%s'" msgstr "" -#: fortran/symbol.c:1451 +#: fortran/symbol.c:1554 #, no-c-format msgid "Duplicate statement label %d at %L and %L" msgstr "" -#: fortran/symbol.c:1461 +#: fortran/symbol.c:1564 #, no-c-format msgid "Label %d at %C already referenced as branch target" msgstr "" -#: fortran/symbol.c:1470 +#: fortran/symbol.c:1573 #, no-c-format msgid "Label %d at %C already referenced as a format label" msgstr "" -#: fortran/symbol.c:1512 +#: fortran/symbol.c:1615 #, no-c-format msgid "Label %d at %C previously used as a FORMAT label" msgstr "" -#: fortran/symbol.c:1520 +#: fortran/symbol.c:1623 #, no-c-format msgid "Label %d at %C previously used as branch target" msgstr "" -#: fortran/symbol.c:1773 +#: fortran/symbol.c:1876 #, no-c-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'" msgstr "" -#: fortran/symbol.c:1776 +#: fortran/symbol.c:1879 #, no-c-format msgid "" "Name '%s' at %C is an ambiguous reference to '%s' from current program unit" msgstr "" #. Symbol is from another namespace. -#: fortran/symbol.c:1913 +#: fortran/symbol.c:2016 #, no-c-format msgid "Symbol '%s' at %C has already been host associated" msgstr "" -#: fortran/trans-common.c:330 +#: fortran/trans-common.c:331 #, no-c-format msgid "Named COMMON block '%s' at %L shall be of the same size" msgstr "" -#: fortran/trans-common.c:593 +#: fortran/trans-common.c:629 #, no-c-format msgid "Bad array reference at %L" msgstr "" -#: fortran/trans-common.c:601 +#: fortran/trans-common.c:637 #, no-c-format msgid "Illegal reference type at %L as EQUIVALENCE object" msgstr "" -#: fortran/trans-common.c:641 +#: fortran/trans-common.c:677 #, no-c-format msgid "Inconsistent equivalence rules involving '%s' at %L and '%s' at %L" msgstr "" #. Aligning this field would misalign a previous field. -#: fortran/trans-common.c:763 +#: fortran/trans-common.c:799 #, no-c-format msgid "" "The equivalence set for variable '%s' declared at %L violates alignment " "requirents" msgstr "" -#: fortran/trans-common.c:828 +#: fortran/trans-common.c:864 #, no-c-format msgid "Equivalence for '%s' does not match ordering of COMMON '%s' at %L" msgstr "" -#: fortran/trans-common.c:843 +#: fortran/trans-common.c:879 #, no-c-format msgid "" "The equivalence set for '%s' cause an invalid extension to COMMON '%s' at %L" @@ -8291,12 +8667,12 @@ msgstr "" #. The required offset conflicts with previous alignment #. requirements. Insert padding immediately before this #. segment. -#: fortran/trans-common.c:854 +#: fortran/trans-common.c:890 #, no-c-format msgid "Padding of %d bytes required before '%s' in COMMON '%s' at %L" msgstr "" -#: fortran/trans-common.c:880 +#: fortran/trans-common.c:916 #, no-c-format msgid "COMMON '%s' at %L requires %d bytes of padding at start" msgstr "" @@ -8313,217 +8689,217 @@ msgstr "" msgid "Incorrect function return value" msgstr "" -#: fortran/trans-decl.c:390 +#: fortran/trans-decl.c:437 #, no-c-format msgid "storage size not known" msgstr "" -#: fortran/trans-decl.c:397 +#: fortran/trans-decl.c:444 #, no-c-format msgid "storage size not constant" msgstr "" -#: fortran/trans-io.c:466 +#: fortran/trans-io.c:476 msgid "Assigned label is not a format label" msgstr "" -#: fortran/trans-io.c:866 +#: fortran/trans-io.c:876 #, no-c-format msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers." msgstr "" -#: fortran/trans-stmt.c:160 +#: fortran/trans-stmt.c:163 msgid "Assigned label is not a target label" msgstr "" #. Check the label list. -#: fortran/trans-stmt.c:176 +#: fortran/trans-stmt.c:179 msgid "Assigned label is not in the list" msgstr "" -#: fortran/trans-stmt.c:262 +#: fortran/trans-stmt.c:265 #, no-c-format msgid "An alternate return at %L without a * dummy argument" msgstr "" #. FIXME: i18n bug here. Order of prints should not be #. fixed. -#: java/gjavah.c:910 +#: java/gjavah.c:916 #, c-format msgid "ignored method '" msgstr "" -#: java/gjavah.c:912 +#: java/gjavah.c:918 #, c-format msgid "' marked virtual\n" msgstr "" -#: java/gjavah.c:2350 +#: java/gjavah.c:2356 #, c-format msgid "Try '" msgstr "" -#: java/gjavah.c:2350 +#: java/gjavah.c:2356 #, c-format msgid " --help' for more information.\n" msgstr "" -#: java/gjavah.c:2357 +#: java/gjavah.c:2363 #, c-format msgid "Usage: " msgstr "" -#: java/gjavah.c:2357 +#: java/gjavah.c:2363 #, c-format msgid "" " [OPTION]... CLASS...\n" "\n" msgstr "" -#: java/gjavah.c:2358 +#: java/gjavah.c:2364 #, c-format msgid "" "Generate C or C++ header files from .class files\n" "\n" msgstr "" -#: java/gjavah.c:2359 +#: java/gjavah.c:2365 #, c-format msgid " -stubs Generate an implementation stub file\n" msgstr "" -#: java/gjavah.c:2360 +#: java/gjavah.c:2366 #, c-format msgid " -jni Generate a JNI header or stub\n" msgstr "" -#: java/gjavah.c:2361 +#: java/gjavah.c:2367 #, c-format msgid " -force Always overwrite output files\n" msgstr "" -#: java/gjavah.c:2362 +#: java/gjavah.c:2368 #, c-format msgid " -old Unused compatibility option\n" msgstr "" -#: java/gjavah.c:2363 +#: java/gjavah.c:2369 #, c-format msgid " -trace Unused compatibility option\n" msgstr "" -#: java/gjavah.c:2364 +#: java/gjavah.c:2370 #, c-format msgid " -J OPTION Unused compatibility option\n" msgstr "" -#: java/gjavah.c:2366 +#: java/gjavah.c:2372 #, c-format msgid " -add TEXT Insert TEXT into class body\n" msgstr "" -#: java/gjavah.c:2367 +#: java/gjavah.c:2373 #, c-format msgid " -append TEXT Insert TEXT after class declaration\n" msgstr "" -#: java/gjavah.c:2368 +#: java/gjavah.c:2374 #, c-format msgid " -friend TEXT Insert TEXT as 'friend' declaration\n" msgstr "" -#: java/gjavah.c:2369 +#: java/gjavah.c:2375 #, c-format msgid " -prepend TEXT Insert TEXT before start of class\n" msgstr "" -#: java/gjavah.c:2371 java/jcf-dump.c:912 +#: java/gjavah.c:2377 java/jcf-dump.c:912 #, c-format msgid " --classpath PATH Set path to find .class files\n" msgstr "" -#: java/gjavah.c:2372 java/jcf-dump.c:913 +#: java/gjavah.c:2378 java/jcf-dump.c:913 #, c-format msgid " -IDIR Append directory to class path\n" msgstr "" -#: java/gjavah.c:2373 java/jcf-dump.c:914 +#: java/gjavah.c:2379 java/jcf-dump.c:914 #, c-format msgid " --bootclasspath PATH Override built-in class path\n" msgstr "" -#: java/gjavah.c:2374 java/jcf-dump.c:915 +#: java/gjavah.c:2380 java/jcf-dump.c:915 #, c-format msgid " --extdirs PATH Set extensions directory path\n" msgstr "" -#: java/gjavah.c:2375 +#: java/gjavah.c:2381 #, c-format msgid " -d DIRECTORY Set output directory name\n" msgstr "" -#: java/gjavah.c:2376 java/jcf-dump.c:916 java/jv-scan.c:115 +#: java/gjavah.c:2382 java/jcf-dump.c:916 java/jv-scan.c:115 #, c-format msgid " -o FILE Set output file name\n" msgstr "" -#: java/gjavah.c:2377 +#: java/gjavah.c:2383 #, c-format msgid " -td DIRECTORY Set temporary directory name\n" msgstr "" -#: java/gjavah.c:2379 java/jcf-dump.c:918 java/jv-scan.c:117 +#: java/gjavah.c:2385 java/jcf-dump.c:918 java/jv-scan.c:117 #, c-format msgid " --help Print this help, then exit\n" msgstr "" -#: java/gjavah.c:2380 java/jcf-dump.c:919 java/jv-scan.c:118 +#: java/gjavah.c:2386 java/jcf-dump.c:919 java/jv-scan.c:118 #, c-format msgid " --version Print version number, then exit\n" msgstr "" -#: java/gjavah.c:2381 java/jcf-dump.c:920 +#: java/gjavah.c:2387 java/jcf-dump.c:920 #, c-format msgid " -v, --verbose Print extra information while running\n" msgstr "" -#: java/gjavah.c:2383 +#: java/gjavah.c:2389 #, c-format msgid "" " -M Print all dependencies to stdout;\n" " suppress ordinary output\n" msgstr "" -#: java/gjavah.c:2385 +#: java/gjavah.c:2391 #, c-format msgid "" " -MM Print non-system dependencies to stdout;\n" " suppress ordinary output\n" msgstr "" -#: java/gjavah.c:2387 +#: java/gjavah.c:2393 #, c-format msgid " -MD Print all dependencies to stdout\n" msgstr "" -#: java/gjavah.c:2388 +#: java/gjavah.c:2394 #, c-format msgid " -MMD Print non-system dependencies to stdout\n" msgstr "" -#: java/gjavah.c:2391 java/jcf-dump.c:922 java/jv-scan.c:120 +#: java/gjavah.c:2397 java/jcf-dump.c:922 java/jv-scan.c:120 #, c-format msgid "" "For bug reporting instructions, please see:\n" "%s.\n" msgstr "" -#: java/gjavah.c:2575 +#: java/gjavah.c:2581 #, c-format msgid "Processing %s\n" msgstr "" -#: java/gjavah.c:2585 +#: java/gjavah.c:2591 #, c-format msgid "Found in %s\n" msgstr "" @@ -8717,6 +9093,318 @@ msgstr "" msgid "cannot specify 'main' class when not linking" msgstr "" +#: java/parse-scan.y:879 +#: java/parse.y:961 +#: java/parse.y:1307 +#: java/parse.y:1369 +#: java/parse.y:1577 +#: java/parse.y:1800 +#: java/parse.y:1809 +#: java/parse.y:1820 +#: java/parse.y:1831 +#: java/parse.y:1843 +#: java/parse.y:1858 +#: java/parse.y:1875 +#: java/parse.y:1877 +#: java/parse.y:1958 +#: java/parse.y:2135 +#: java/parse.y:2204 +#: java/parse.y:2368 +#: java/parse.y:2381 +#: java/parse.y:2388 +#: java/parse.y:2395 +#: java/parse.y:2406 +#: java/parse.y:2408 +#: java/parse.y:2446 +#: java/parse.y:2448 +#: java/parse.y:2450 +#: java/parse.y:2471 +#: java/parse.y:2473 +#: java/parse.y:2475 +#: java/parse.y:2491 +#: java/parse.y:2493 +#: java/parse.y:2514 +#: java/parse.y:2516 +#: java/parse.y:2518 +#: java/parse.y:2546 +#: java/parse.y:2548 +#: java/parse.y:2550 +#: java/parse.y:2552 +#: java/parse.y:2570 +#: java/parse.y:2572 +#: java/parse.y:2583 +#: java/parse.y:2594 +#: java/parse.y:2605 +#: java/parse.y:2616 +#: java/parse.y:2627 +#: java/parse.y:2640 +#: java/parse.y:2644 +#: java/parse.y:2646 +#: java/parse.y:2659 +msgid "Missing term" +msgstr "" + +#: java/parse-scan.y:881 +#: java/parse.y:741 +#: java/parse.y:779 +#: java/parse.y:804 +#: java/parse.y:982 +#: java/parse.y:1343 +#: java/parse.y:1553 +#: java/parse.y:1555 +#: java/parse.y:1785 +#: java/parse.y:1811 +#: java/parse.y:1822 +#: java/parse.y:1833 +#: java/parse.y:1845 +#: java/parse.y:1860 +msgid "';' expected" +msgstr "" + +#: java/parse-scan.y:1372 +#: java/parse.y:16472 +msgid "parse error" +msgstr "" + +#: java/parse-scan.y:1373 +#: java/parse.y:16473 +msgid "syntax error; also virtual memory exhausted" +msgstr "" + +#: java/parse-scan.y:1374 +#: java/parse.y:16474 +msgid "parse error; also virtual memory exhausted" +msgstr "" + +#: java/parse-scan.y:1376 +#: java/parse.y:16476 +msgid "parse error: cannot back up" +msgstr "" + +#: java/parse.y:739 +#: java/parse.y:777 +msgid "Missing name" +msgstr "" + +#: java/parse.y:802 +msgid "'*' expected" +msgstr "" + +#: java/parse.y:816 +msgid "Class or interface declaration expected" +msgstr "" + +#: java/parse.y:853 +#: java/parse.y:855 +msgid "Missing class name" +msgstr "" + +#: java/parse.y:858 +#: java/parse.y:862 +#: java/parse.y:870 +#: java/parse.y:1022 +#: java/parse.y:1288 +#: java/parse.y:1290 +#: java/parse.y:1620 +#: java/parse.y:1871 +#: java/parse.y:1903 +#: java/parse.y:1965 +msgid "'{' expected" +msgstr "" + +#: java/parse.y:872 +msgid "Missing super class name" +msgstr "" + +#: java/parse.y:882 +#: java/parse.y:898 +msgid "Missing interface name" +msgstr "" + +#: java/parse.y:976 +msgid "Missing variable initializer" +msgstr "" + +#: java/parse.y:993 +msgid "Invalid declaration" +msgstr "" + +#: java/parse.y:996 +#: java/parse.y:1086 +#: java/parse.y:2150 +#: java/parse.y:2179 +#: java/parse.y:2201 +#: java/parse.y:2205 +#: java/parse.y:2240 +#: java/parse.y:2319 +#: java/parse.y:2329 +#: java/parse.y:2339 +msgid "']' expected" +msgstr "" + +#: java/parse.y:1000 +msgid "Unbalanced ']'" +msgstr "" + +#: java/parse.y:1036 +msgid "Invalid method declaration, method name required" +msgstr "" + +#: java/parse.y:1042 +#: java/parse.y:1048 +#: java/parse.y:1054 +#: java/parse.y:2053 +msgid "Identifier expected" +msgstr "" + +#: java/parse.y:1060 +#: java/parse.y:4738 +#, gcc-internal-format +msgid "Invalid method declaration, return type required" +msgstr "" + +#: java/parse.y:1084 +#: java/parse.y:1533 +#: java/parse.y:1540 +#: java/parse.y:1549 +#: java/parse.y:1551 +#: java/parse.y:1579 +#: java/parse.y:1688 +#: java/parse.y:1995 +#: java/parse.y:2048 +msgid "')' expected" +msgstr "" + +#: java/parse.y:1100 +msgid "Missing formal parameter term" +msgstr "" + +#: java/parse.y:1115 +#: java/parse.y:1120 +msgid "Missing identifier" +msgstr "" + +#: java/parse.y:1140 +#: java/parse.y:1149 +msgid "Missing class type term" +msgstr "" + +#: java/parse.y:1305 +msgid "Invalid interface type" +msgstr "" + +#: java/parse.y:1493 +#: java/parse.y:1667 +#: java/parse.y:1669 +msgid "':' expected" +msgstr "" + +#: java/parse.y:1519 +#: java/parse.y:1524 +#: java/parse.y:1529 +msgid "Invalid expression statement" +msgstr "" + +#: java/parse.y:1547 +#: java/parse.y:1575 +#: java/parse.y:1616 +#: java/parse.y:1684 +#: java/parse.y:1752 +#: java/parse.y:1873 +#: java/parse.y:1951 +#: java/parse.y:2042 +#: java/parse.y:2044 +#: java/parse.y:2057 +#: java/parse.y:2300 +#: java/parse.y:2302 +msgid "'(' expected" +msgstr "" + +#: java/parse.y:1618 +msgid "Missing term or ')'" +msgstr "" + +#: java/parse.y:1665 +msgid "Missing or invalid constant expression" +msgstr "" + +#: java/parse.y:1686 +msgid "Missing term and ')' expected" +msgstr "" + +#: java/parse.y:1725 +msgid "Invalid control expression" +msgstr "" + +#: java/parse.y:1727 +#: java/parse.y:1729 +msgid "Invalid update expression" +msgstr "" + +#: java/parse.y:1754 +msgid "Invalid init statement" +msgstr "" + +#: java/parse.y:1954 +msgid "Missing term or ')' expected" +msgstr "" + +#: java/parse.y:1997 +msgid "'class' or 'this' expected" +msgstr "" + +#: java/parse.y:1999 +#: java/parse.y:2001 +msgid "'class' expected" +msgstr "" + +#: java/parse.y:2046 +msgid "')' or term expected" +msgstr "" + +#: java/parse.y:2148 +#: java/parse.y:2177 +msgid "'[' expected" +msgstr "" + +#: java/parse.y:2255 +msgid "Field expected" +msgstr "" + +#: java/parse.y:2314 +#: java/parse.y:2324 +#: java/parse.y:2334 +msgid "Missing term and ']' expected" +msgstr "" + +#: java/parse.y:2439 +msgid "']' expected, invalid type expression" +msgstr "" + +#: java/parse.y:2442 +msgid "Invalid type expression" +msgstr "" + +#: java/parse.y:2554 +msgid "Invalid reference type" +msgstr "" + +#: java/parse.y:3025 +msgid "Constructor invocation must be first thing in a constructor" +msgstr "" + +#: java/parse.y:3027 +msgid "Only constructors can invoke constructors" +msgstr "" + +#: config/i386/nwld.h:34 +msgid "Static linking is not supported.\n" +msgstr "" + +#: config/mcore/mcore.h:57 +msgid "the m210 does not have little endian support" +msgstr "" + #: config/i386/sco5.h:189 msgid "-pg not supported on this platform" msgstr "" @@ -8761,6 +9449,10 @@ msgstr "" msgid "-private_bundle not allowed with -dynamiclib" msgstr "" +#: config/rs6000/darwin.h:105 +msgid " conflicting code gen style switches are used" +msgstr "" + #: config/vxworks.h:66 msgid "-Xbind-now and -Xbind-lazy are incompatible" msgstr "" @@ -8773,21 +9465,41 @@ msgstr "" msgid "-mbig-endian and -mlittle-endian may not be used together" msgstr "" -#: config/sparc/sol2-bi.h:167 config/sparc/sol2-bi.h:172 -#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22 -msgid "does not support multilib" +#: java/jvspec.c:80 ada/lang-specs.h:34 gcc.c:794 +msgid "-pg and -fomit-frame-pointer are incompatible" +msgstr "" + +#: ada/lang-specs.h:35 +msgid "-c or -S required for Ada" msgstr "" -#: config/sparc/sol2-bi.h:195 config/sparc/sol2-bi.h:205 #: config/sparc/linux64.h:206 config/sparc/linux64.h:217 #: config/sparc/netbsd-elf.h:126 config/sparc/netbsd-elf.h:145 +#: config/sparc/sol2-bi.h:195 config/sparc/sol2-bi.h:205 msgid "may not use both -m32 and -m64" msgstr "" +#: config/sparc/sol2-bi.h:167 config/sparc/sol2-bi.h:172 +#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22 +msgid "does not support multilib" +msgstr "" + +#: config/s390/tpf.h:125 +msgid "static is not supported on TPF-OS" +msgstr "" + #: config/mips/mips.h:849 config/arc/arc.h:62 msgid "may not use both -EB and -EL" msgstr "" +#: config/lynx.h:71 +msgid "cannot use mthreads and mlegacy-threads together" +msgstr "" + +#: config/lynx.h:96 +msgid "cannot use mshared and static together" +msgstr "" + #: config/mips/r3900.h:35 msgid "-mhard-float not supported" msgstr "" @@ -8816,1944 +9528,1823 @@ msgstr "" msgid "shared and mdll are not compatible" msgstr "" -#: config/lynx.h:71 -msgid "cannot use mthreads and mlegacy-threads together" +#: gcc.c:767 +msgid "GCC does not support -C or -CC without -E" msgstr "" -#: config/lynx.h:96 -msgid "cannot use mshared and static together" +#: gcc.c:961 +msgid "-E or -x required when input is from standard input" msgstr "" #: config/vax/netbsd-elf.h:42 msgid "the -shared option is not currently supported for VAX ELF" msgstr "" -#: config/i386/nwld.h:34 -msgid "Static linking is not supported.\n" +#: config/vax/vax.h:50 config/vax/vax.h:51 +msgid "profiling not supported with -mg\n" msgstr "" -#: config/mcore/mcore.h:57 -msgid "the m210 does not have little endian support" +#: config/i386/cygwin.h:29 +msgid "mno-cygwin and mno-win32 are not compatible" msgstr "" -#: gcc.c:767 -msgid "GCC does not support -C or -CC without -E" +#: java/lang.opt:66 +msgid "Warn if a deprecated compiler feature, class, method, or field is used" msgstr "" -#: gcc.c:794 java/jvspec.c:80 ada/lang-specs.h:34 -msgid "-pg and -fomit-frame-pointer are incompatible" +#: java/lang.opt:70 +msgid "Warn if deprecated empty statements are found" msgstr "" -#: gcc.c:962 -msgid "-E or -x required when input is from standard input" +#: java/lang.opt:74 +msgid "Warn if .class files are out of date" msgstr "" -#: config/s390/tpf.h:125 -msgid "static is not supported on TPF-OS" +#: java/lang.opt:78 +msgid "Warn if modifiers are specified when not necessary" msgstr "" -#: config/rs6000/darwin.h:105 -msgid " conflicting code gen style switches are used" +#: java/lang.opt:82 +msgid "Deprecated; use --classpath instead" msgstr "" -#: ada/lang-specs.h:35 -msgid "-c or -S required for Ada" +#: java/lang.opt:86 +msgid "Permit the use of the assert keyword" msgstr "" -#: config/vax/vax.h:50 config/vax/vax.h:51 -msgid "profiling not supported with -mg\n" +#: java/lang.opt:108 +msgid "Replace system path" msgstr "" -#: config/i386/cygwin.h:29 -msgid "mno-cygwin and mno-win32 are not compatible" +#: java/lang.opt:112 +msgid "Generate checks for references to NULL" msgstr "" -#: ada/lang.opt:74 -msgid "Specify options to GNAT" +#: java/lang.opt:116 +msgid "Set class path" msgstr "" -#: c.opt:42 -msgid "" -"Assert the to . Putting '-' before disables " -"the to " +#: java/lang.opt:123 +msgid "Output a class file" msgstr "" -#: c.opt:46 -msgid "Do not discard comments" +#: java/lang.opt:127 +msgid "Alias for -femit-class-file" msgstr "" -#: c.opt:50 -msgid "Do not discard comments in macro expansions" +#: java/lang.opt:131 +msgid "Choose input encoding (defaults from your locale)" msgstr "" -#: c.opt:54 -msgid "" -"Define a with as its value. If just is given, " -"is taken to be 1" +#: java/lang.opt:135 +msgid "Set the extension directory path" msgstr "" -#: c.opt:61 -msgid "Add to the end of the main framework include path" +#: java/lang.opt:139 +msgid "Input file is a file with a list of filenames to compile" msgstr "" -#: c.opt:65 -msgid "Print the name of header files as they are used" +#: java/lang.opt:143 +msgid "Always check for non gcj generated classes archives" msgstr "" -#: c.opt:69 c.opt:775 -msgid "Add to the end of the main include path" +#: java/lang.opt:147 +msgid "" +"Assume the runtime uses a hash table to map an object to its synchronization " +"structure" msgstr "" -#: c.opt:73 -msgid "Generate make dependencies" +#: java/lang.opt:151 +msgid "Use offset tables for virtual method calls" msgstr "" -#: c.opt:77 -msgid "Generate make dependencies and compile" +#: java/lang.opt:158 +msgid "Assume native functions are implemented using JNI" msgstr "" -#: c.opt:81 -msgid "Write dependency output to the given file" +#: java/lang.opt:162 +msgid "Enable optimization of static class initialization code" msgstr "" -#: c.opt:85 -msgid "Treat missing header files as generated files" +#: java/lang.opt:169 +msgid "Enable assignability checks for stores into object arrays" msgstr "" -#: c.opt:89 -msgid "Like -M but ignore system header files" +#: java/lang.opt:173 +msgid "Generate code for the Boehm GC" msgstr "" -#: c.opt:93 -msgid "Like -MD but ignore system header files" +#: java/lang.opt:177 +msgid "Call a library routine to do integer divisions" msgstr "" -#: c.opt:97 -msgid "Generate phony targets for all headers" +#: java/lang.opt:181 +msgid "Generated should be loaded by bootstrap loader" msgstr "" -#: c.opt:101 -msgid "Add a MAKE-quoted target" +#: ada/lang.opt:74 +msgid "Specify options to GNAT" msgstr "" -#: c.opt:105 -msgid "Add an unquoted target" +#: fortran/lang.opt:30 +msgid "Add a directory for INCLUDE and MODULE searching" msgstr "" -#: c.opt:109 -msgid "Do not generate #line directives" +#: fortran/lang.opt:34 +msgid "Put MODULE files in 'directory'" msgstr "" -#: c.opt:113 -msgid "Undefine " +#: fortran/lang.opt:42 +msgid "Warn about possible aliasing of dummy arguments" msgstr "" -#: c.opt:117 -msgid "" -"Warn about things that will change when compiling with an ABI-compliant " -"compiler" +#: fortran/lang.opt:46 +msgid "Warn about implicit conversion" msgstr "" -#: c.opt:121 -msgid "Enable most warning messages" +#: fortran/lang.opt:50 +msgid "Warn about calls with implicit interface" msgstr "" -#: c.opt:125 -msgid "" -"Warn whenever an Objective-C assignment is being intercepted by the garbage " -"collector" +#: fortran/lang.opt:54 +msgid "Warn about truncated source lines" msgstr "" -#: c.opt:129 -msgid "Warn about casting functions to incompatible types" +#: fortran/lang.opt:58 +msgid "Warn about usage of non-standard intrinsics" msgstr "" -#: c.opt:133 -msgid "Warn about C constructs that are not in the common subset of C and C++" +#: fortran/lang.opt:62 +msgid "Warn about \"suspicious\" constructs" msgstr "" -#: c.opt:138 -msgid "Warn about casts which discard qualifiers" +#: fortran/lang.opt:66 +msgid "Warn about underflow of numerical constant expressions" msgstr "" -#: c.opt:142 -msgid "Warn about subscripts whose type is \"char\"" +#: fortran/lang.opt:70 common.opt:162 +msgid "Warn when a label is unused" msgstr "" -#: c.opt:146 +#: fortran/lang.opt:74 msgid "" -"Warn about possibly nested block comments, and C++ comments spanning more " -"than one physical line" +"Do not treat local variables and COMMON blocks as if they were named in SAVE " +"statements" msgstr "" -#: c.opt:150 -msgid "Synonym for -Wcomment" +#: fortran/lang.opt:78 +msgid "Specify that backslash in string introduces an escape character" msgstr "" -#: c.opt:154 -msgid "Warn about possibly confusing type conversions" +#: fortran/lang.opt:82 +msgid "Set the default double precision kind to an 8 byte wide type" msgstr "" -#: c.opt:158 -msgid "Warn when all constructors and destructors are private" +#: fortran/lang.opt:86 +msgid "Set the default integer kind to an 8 byte wide type" msgstr "" -#: c.opt:162 -msgid "Warn when a declaration is found after a statement" +#: fortran/lang.opt:90 +msgid "Set the default real kind to an 8 byte wide type" msgstr "" -#: c.opt:166 -msgid "Warn about deprecated compiler features" +#: fortran/lang.opt:94 +msgid "Ignore 'D' in column one in fixed form" msgstr "" -#: c.opt:170 -msgid "Warn about compile-time integer division by zero" +#: fortran/lang.opt:98 +msgid "Treat lines with 'D' in column one as comments" msgstr "" -#: c.opt:174 -msgid "Warn about violations of Effective C++ style rules" +#: fortran/lang.opt:102 +msgid "Allow dollar signs in entity names" msgstr "" -#: c.opt:178 -msgid "Warn about stray tokens after #elif and #endif" +#: fortran/lang.opt:106 +msgid "Display the code tree after parsing" msgstr "" -#: c.opt:186 -msgid "Make implicit function declarations an error" +#: fortran/lang.opt:110 +msgid "Use f2c calling convention" msgstr "" -#: c.opt:190 -msgid "Warn if testing floating point numbers for equality" +#: fortran/lang.opt:114 +msgid "Assume that the source file is fixed form" msgstr "" -#: c.opt:194 -msgid "Warn about printf/scanf/strftime/strfmon format string anomalies" +#: fortran/lang.opt:118 +msgid "Assume that the source file is free form" msgstr "" -#: c.opt:198 -msgid "Warn if passing too many arguments to a function for its format string" +#: fortran/lang.opt:122 +msgid "Append underscores to externally visible names" msgstr "" -#: c.opt:202 -msgid "Warn about format strings that are not literals" +#: fortran/lang.opt:126 +msgid "Use the Cray Pointer extension" msgstr "" -#: c.opt:206 -msgid "Warn about possible security problems with format functions" +#: fortran/lang.opt:130 +msgid "Append a second underscore if the name already contains an underscore" msgstr "" -#: c.opt:210 -msgid "Warn about strftime formats yielding 2-digit years" +#: fortran/lang.opt:134 +msgid "" +"Specify that no implicit typing is allowed, unless overridden by explicit " +"IMPLICIT statements" msgstr "" -#: c.opt:214 -msgid "Warn about zero-length formats" +#: fortran/lang.opt:138 +msgid "Allow arbitrary character line width in fixed mode" msgstr "" -#: c.opt:221 -msgid "Warn about variables which are initialized to themselves" +#: fortran/lang.opt:142 +msgid "Use n as character line width in fixed mode" msgstr "" -#: c.opt:228 -msgid "Warn about implicit function declarations" +#: fortran/lang.opt:146 +msgid "Maximum identifier length" msgstr "" -#: c.opt:232 -msgid "Warn when a declaration does not specify a type" +#: fortran/lang.opt:150 +msgid "Size in bytes of the largest array that will be put on the stack" msgstr "" -#: c.opt:236 -msgid "Deprecated. This switch has no effect" +#: fortran/lang.opt:154 +msgid "Set default accessibility of module entities to PRIVATE" msgstr "" -#: c.opt:240 -msgid "" -"Warn when there is a cast to a pointer from an integer of a different size" +#: fortran/lang.opt:158 +msgid "Don't generate code, just do syntax and semantics checking" msgstr "" -#: c.opt:244 -msgid "Warn about invalid uses of the \"offsetof\" macro" +#: fortran/lang.opt:162 +msgid "Try to layout derived types as compact as possible" msgstr "" -#: c.opt:248 -msgid "Warn about PCH files that are found but not used" +#: fortran/lang.opt:166 +msgid "Copy array sections into a contiguous block on procedure entry" msgstr "" -#: c.opt:252 -msgid "Do not warn about using \"long long\" when -pedantic" +#: fortran/lang.opt:170 +msgid "Set the kind for a real with the 'q' exponent to 'n'" msgstr "" -#: c.opt:256 -msgid "Warn about suspicious declarations of \"main\"" +#: fortran/lang.opt:174 +msgid "Stop on following floating point exceptions" msgstr "" -#: c.opt:260 -msgid "Warn about possibly missing braces around initializers" +#: fortran/lang.opt:178 +msgid "Conform to the ISO Fortran 95 standard" msgstr "" -#: c.opt:264 -msgid "Warn about global functions without previous declarations" +#: fortran/lang.opt:182 +msgid "Conform to the ISO Fortran 2003 standard" msgstr "" -#: c.opt:268 -msgid "Warn about missing fields in struct initializers" +#: fortran/lang.opt:186 +msgid "Conform nothing in particular" msgstr "" -#: c.opt:272 -msgid "Warn about functions which might be candidates for format attributes" +#: fortran/lang.opt:190 +msgid "Accept extensions to support legacy code" msgstr "" -#: c.opt:276 -msgid "Warn about user-specified include directories that do not exist" +#: fortran/lang.opt:194 c.opt:661 +msgid "Use the narrowest integer type possible for enumeration types" msgstr "" -#: c.opt:280 -msgid "Warn about global functions without prototypes" +#: treelang/lang.opt:30 +msgid "Trace lexical analysis" msgstr "" -#: c.opt:284 -msgid "Warn about use of multi-character character constants" +#: treelang/lang.opt:34 +msgid "Trace the parsing process" msgstr "" -#: c.opt:288 -msgid "Warn about \"extern\" declarations not at file scope" +#: config/alpha/alpha.opt:24 config/i386/i386.opt:186 +msgid "Do not use hardware fp" msgstr "" -#: c.opt:292 -msgid "" -"Warn when non-templatized friend functions are declared within a template" +#: config/alpha/alpha.opt:28 +msgid "Use fp registers" msgstr "" -#: c.opt:296 -msgid "Warn about non-virtual destructors" +#: config/alpha/alpha.opt:32 +msgid "Assume GAS" msgstr "" -#: c.opt:300 -msgid "" -"Warn about NULL being passed to argument slots marked as requiring non-NULL" +#: config/alpha/alpha.opt:36 +msgid "Do not assume GAS" msgstr "" -#: c.opt:304 -msgid "Warn about non-normalised Unicode strings" +#: config/alpha/alpha.opt:40 +msgid "Request IEEE-conformant math library routines (OSF/1)" msgstr "" -#: c.opt:308 -msgid "Warn if a C-style cast is used in a program" +#: config/alpha/alpha.opt:44 +msgid "Emit IEEE-conformant code, without inexact exceptions" msgstr "" -#: c.opt:312 -msgid "Warn if an old-style parameter definition is used" +#: config/alpha/alpha.opt:51 +msgid "Do not emit complex integer constants to read-only memory" msgstr "" -#: c.opt:316 -msgid "Warn about overloaded virtual function names" +#: config/alpha/alpha.opt:55 +msgid "Use VAX fp" msgstr "" -#: c.opt:320 -msgid "Warn about possibly missing parentheses" +#: config/alpha/alpha.opt:59 +msgid "Do not use VAX fp" msgstr "" -#: c.opt:324 -msgid "Warn when converting the type of pointers to member functions" +#: config/alpha/alpha.opt:63 +msgid "Emit code for the byte/word ISA extension" msgstr "" -#: c.opt:328 -msgid "Warn about function pointer arithmetic" +#: config/alpha/alpha.opt:67 +msgid "Emit code for the motion video ISA extension" msgstr "" -#: c.opt:332 -msgid "Warn when a pointer is cast to an integer of a different size" +#: config/alpha/alpha.opt:71 +msgid "Emit code for the fp move and sqrt ISA extension" msgstr "" -#: c.opt:336 -msgid "Warn about misuses of pragmas" +#: config/alpha/alpha.opt:75 +msgid "Emit code for the counting ISA extension" msgstr "" -#: c.opt:340 -msgid "Warn if inherited methods are unimplemented" +#: config/alpha/alpha.opt:79 +msgid "Emit code using explicit relocation directives" msgstr "" -#: c.opt:344 -msgid "Warn about multiple declarations of the same object" +#: config/alpha/alpha.opt:83 +msgid "Emit 16-bit relocations to the small data areas" msgstr "" -#: c.opt:348 -msgid "Warn when the compiler reorders code" +#: config/alpha/alpha.opt:87 +msgid "Emit 32-bit relocations to the small data areas" msgstr "" -#: c.opt:352 -msgid "" -"Warn whenever a function's return type defaults to \"int\" (C), or about " -"inconsistent return types (C++)" +#: config/alpha/alpha.opt:91 +msgid "Emit direct branches to local functions" msgstr "" -#: c.opt:356 -msgid "Warn if a selector has multiple methods" +#: config/alpha/alpha.opt:95 +msgid "Emit indirect branches to local functions" msgstr "" -#: c.opt:360 -msgid "Warn about possible violations of sequence point rules" +#: config/alpha/alpha.opt:99 +msgid "Emit rdval instead of rduniq for thread pointer" msgstr "" -#: c.opt:364 -msgid "Warn about signed-unsigned comparisons" +#: config/alpha/alpha.opt:103 config/sparc/long-double-switch.opt:24 +msgid "Use 128-bit long double" msgstr "" -#: c.opt:368 -msgid "Warn when overload promotes from unsigned to signed" +#: config/alpha/alpha.opt:107 config/sparc/long-double-switch.opt:28 +msgid "Use 64-bit long double" msgstr "" -#: c.opt:372 -msgid "Warn about uncasted NULL used as sentinel" +#: config/alpha/alpha.opt:111 +msgid "Use features of and schedule given CPU" msgstr "" -#: c.opt:376 -msgid "Warn about unprototyped function declarations" +#: config/alpha/alpha.opt:115 +msgid "Schedule given CPU" msgstr "" -#: c.opt:380 -msgid "Warn if type signatures of candidate methods do not match exactly" +#: config/alpha/alpha.opt:119 +msgid "Control the generated fp rounding mode" msgstr "" -#: c.opt:384 -msgid "Warn when synthesis behavior differs from Cfront" +#: config/alpha/alpha.opt:123 +msgid "Control the IEEE trap mode" msgstr "" -#: c.opt:388 common.opt:142 -msgid "Do not suppress warnings from system headers" +#: config/alpha/alpha.opt:127 +msgid "Control the precision given to fp exceptions" msgstr "" -#: c.opt:392 -msgid "Warn about features not present in traditional C" +#: config/alpha/alpha.opt:131 +msgid "Tune expected memory latency" msgstr "" -#: c.opt:396 -msgid "" -"Warn if trigraphs are encountered that might affect the meaning of the " -"program" +#: config/alpha/alpha.opt:135 config/ia64/ia64.opt:93 +#: config/rs6000/sysv4.opt:33 +msgid "Specify bit size of immediate TLS offsets" msgstr "" -#: c.opt:400 -msgid "Warn about @selector()s without previously declared methods" +#: config/frv/frv.opt:24 +msgid "Use 4 media accumulators" msgstr "" -#: c.opt:404 -msgid "Warn if an undefined macro is used in an #if directive" +#: config/frv/frv.opt:28 +msgid "Use 8 media accumulators" msgstr "" -#: c.opt:408 -msgid "Warn about unrecognized pragmas" +#: config/frv/frv.opt:32 +msgid "Enable label alignment optimizations" msgstr "" -#: c.opt:412 -msgid "Warn about macros defined in the main file that are not used" +#: config/frv/frv.opt:36 +msgid "Dynamically allocate cc registers" msgstr "" -#: c.opt:416 -msgid "Do not warn about using variadic macros when -pedantic" +#: config/frv/frv.opt:43 +msgid "Set the cost of branches" msgstr "" -#: c.opt:420 -msgid "Give strings the type \"array of char\"" +#: config/frv/frv.opt:47 +msgid "Enable conditional execution other than moves/scc" msgstr "" -#: c.opt:424 -msgid "Warn when a pointer differs in signedness in an assignment" +#: config/frv/frv.opt:51 +msgid "Change the maximum length of conditionally-executed sequences" msgstr "" -#: c.opt:428 -msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)" +#: config/frv/frv.opt:55 +msgid "" +"Change the number of temporary registers that are available to conditionally-" +"executed sequences" msgstr "" -#: c.opt:436 -msgid "Enforce class member access control semantics" +#: config/frv/frv.opt:59 +msgid "Enable conditional moves" msgstr "" -#: c.opt:443 -msgid "Change when template instances are emitted" +#: config/frv/frv.opt:63 +msgid "Set the target CPU type" msgstr "" -#: c.opt:447 -msgid "Recognize the \"asm\" keyword" +#: config/frv/frv.opt:85 +msgid "Use fp double instructions" msgstr "" -#: c.opt:451 -msgid "Recognize built-in functions" +#: config/frv/frv.opt:89 +msgid "Change the ABI to allow double word insns" msgstr "" -#: c.opt:458 -msgid "Check the return value of new" +#: config/frv/frv.opt:93 +msgid "Enable Function Descriptor PIC mode" msgstr "" -#: c.opt:462 -msgid "Allow the arguments of the '?' operator to have different types" +#: config/frv/frv.opt:97 +msgid "Just use icc0/fcc0" msgstr "" -#: c.opt:466 -msgid "Reduce the size of object files" +#: config/frv/frv.opt:101 +msgid "Only use 32 FPRs" msgstr "" -#: c.opt:470 -msgid "Make string literals \"const char[]\" not \"char[]\"" +#: config/frv/frv.opt:105 +msgid "Use 64 FPRs" msgstr "" -#: c.opt:474 -msgid "Use class for constant strings" +#: config/frv/frv.opt:109 +msgid "Only use 32 GPRs" msgstr "" -#: c.opt:478 -msgid "Inline member functions by default" +#: config/frv/frv.opt:113 +msgid "Use 64 GPRs" msgstr "" -#: c.opt:482 -msgid "Permit '$' as an identifier character" +#: config/frv/frv.opt:117 +msgid "Enable use of GPREL for read-only data in FDPIC" msgstr "" -#: c.opt:489 -msgid "Generate code to check exception specifications" +#: config/frv/frv.opt:121 config/rs6000/rs6000.opt:93 +#: config/pdp11/pdp11.opt:72 +msgid "Use hardware floating point" msgstr "" -#: c.opt:496 -msgid "Convert all strings and character constants to character set " +#: config/frv/frv.opt:125 +msgid "Enable inlining of PLT in function calls" msgstr "" -#: c.opt:500 -msgid "Specify the default character set for source files" +#: config/frv/frv.opt:129 +msgid "Enable PIC support for building libraries" msgstr "" -#: c.opt:514 -msgid "Scope of for-init-statement variables is local to the loop" +#: config/frv/frv.opt:133 +msgid "Follow the EABI linkage requirements" msgstr "" -#: c.opt:518 -msgid "Do not assume that standard C libraries and \"main\" exist" +#: config/frv/frv.opt:137 +msgid "Disallow direct calls to global functions" msgstr "" -#: c.opt:522 -msgid "Recognize GNU-defined keywords" +#: config/frv/frv.opt:141 +msgid "Use media instructions" msgstr "" -#: c.opt:526 -msgid "Generate code for GNU runtime environment" +#: config/frv/frv.opt:145 +msgid "Use multiply add/subtract instructions" msgstr "" -#: c.opt:539 -msgid "Assume normal C execution environment" +#: config/frv/frv.opt:149 +msgid "Enable optimizing &&/|| in conditional execution" msgstr "" -#: c.opt:543 -msgid "Enable support for huge objects" +#: config/frv/frv.opt:153 +msgid "Enable nested conditional execution optimizations" msgstr "" -#: c.opt:547 -msgid "Export functions even if they can be inlined" +#: config/frv/frv.opt:158 +msgid "Do not mark ABI switches in e_flags" msgstr "" -#: c.opt:551 -msgid "Emit implicit instantiations of inline templates" +#: config/frv/frv.opt:162 +msgid "Remove redundant membars" msgstr "" -#: c.opt:555 -msgid "Emit implicit instantiations of templates" +#: config/frv/frv.opt:166 +msgid "Pack VLIW instructions" msgstr "" -#: c.opt:559 -msgid "Inject friend functions into enclosing namespace" +#: config/frv/frv.opt:170 +msgid "Enable setting GPRs to the result of comparisons" msgstr "" -#: c.opt:566 -msgid "Don't warn about uses of Microsoft extensions" +#: config/frv/frv.opt:174 +msgid "Change the amount of scheduler lookahead" msgstr "" -#: c.opt:576 -msgid "Generate code for NeXT (Apple Mac OS X) runtime environment" +#: config/frv/frv.opt:178 config/pa/pa.opt:105 +msgid "Use software floating point" msgstr "" -#: c.opt:580 -msgid "Assume that receivers of Objective-C messages may be nil" +#: config/frv/frv.opt:182 +msgid "Assume a large TLS segment" msgstr "" -#: c.opt:592 -msgid "" -"Generate special Objective-C methods to initialize/destroy non-POD C++ " -"ivars, if needed" +#: config/frv/frv.opt:186 +msgid "Do not assume a large TLS segment" msgstr "" -#: c.opt:596 -msgid "Allow fast jumps to the message dispatcher" +#: config/frv/frv.opt:191 +msgid "Cause gas to print tomcat statistics" msgstr "" -#: c.opt:602 -msgid "Enable Objective-C exception and synchronization syntax" +#: config/frv/frv.opt:196 +msgid "Link with the library-pic libraries" msgstr "" -#: c.opt:606 -msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs" +#: config/frv/frv.opt:200 +msgid "Allow branches to be packed with other instructions" msgstr "" -#: c.opt:611 -msgid "Enable Objective-C setjmp exception handling runtime" +#: config/mn10300/mn10300.opt:24 +msgid "Target the AM33 processor" msgstr "" -#: c.opt:615 -msgid "Recognize C++ kewords like \"compl\" and \"xor\"" +#: config/mn10300/mn10300.opt:28 +msgid "Target the AM33/2.0 processor" msgstr "" -#: c.opt:619 -msgid "Enable optional diagnostics" +#: config/mn10300/mn10300.opt:32 +msgid "Work around hardware multiply bug" msgstr "" -#: c.opt:626 -msgid "Look for and use PCH files even when preprocessing" +#: config/mn10300/mn10300.opt:37 +msgid "Enable linker relaxations" msgstr "" -#: c.opt:630 -msgid "Downgrade conformance errors to warnings" +#: config/mn10300/mn10300.opt:41 +msgid "Return pointers in both a0 and d0" msgstr "" -#: c.opt:634 -msgid "Treat the input file as already preprocessed" +#: config/s390/tpf.opt:24 +msgid "Enable TPF-OS tracing code" msgstr "" -#: c.opt:638 -msgid "" -"Used in Fix-and-Continue mode to indicate that object files may be swapped " -"in at runtime" +#: config/s390/tpf.opt:28 +msgid "Specify main object for TPF-OS" msgstr "" -#: c.opt:642 -msgid "Enable automatic template instantiation" +#: config/s390/s390.opt:24 +msgid "31 bit ABI" msgstr "" -#: c.opt:646 -msgid "Generate run time type descriptor information" +#: config/s390/s390.opt:28 +msgid "64 bit ABI" msgstr "" -#: c.opt:650 -msgid "Use the same size for double as for float" +#: config/s390/s390.opt:32 config/i386/i386.opt:80 +msgid "Generate code for given CPU" msgstr "" -#: c.opt:654 -msgid "Use the narrowest integer type possible for enumeration types" +#: config/s390/s390.opt:36 +msgid "Maintain backchain pointer" msgstr "" -#: c.opt:658 -msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"" +#: config/s390/s390.opt:40 +msgid "Additional debug prints" msgstr "" -#: c.opt:662 -msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed" +#: config/s390/s390.opt:44 +msgid "ESA/390 architecture" msgstr "" -#: c.opt:666 -msgid "Make \"char\" signed by default" +#: config/s390/s390.opt:48 +msgid "Enable fused multiply/add instructions" msgstr "" -#: c.opt:673 -msgid "Display statistics accumulated during compilation" +#: config/s390/s390.opt:52 config/i386/i386.opt:48 config/i386/i386.opt:118 +msgid "Use hardware fp" msgstr "" -#: c.opt:680 -msgid "Distance between tab stops for column reporting" +#: config/s390/s390.opt:56 +msgid "Use packed stack layout" msgstr "" -#: c.opt:684 -msgid "Specify maximum template instantiation depth" +#: config/s390/s390.opt:60 +msgid "Use bras for executable < 64k" msgstr "" -#: c.opt:691 -msgid "Do not generate thread-safe code for initializing local statics" +#: config/s390/s390.opt:64 +msgid "Don't use hardware fp" msgstr "" -#: c.opt:695 -msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned" +#: config/s390/s390.opt:68 +msgid "" +"Set the max. number of bytes which has to be left to stack size before a " +"trap instruction is triggered" msgstr "" -#: c.opt:699 -msgid "Make \"char\" unsigned by default" -msgstr "" - -#: c.opt:703 -msgid "Use __cxa_atexit to register destructors" +#: config/s390/s390.opt:72 +msgid "" +"Emit extra code in the function prologue in order to trap if the stack size " +"exceeds the given limit" msgstr "" -#: c.opt:707 -msgid "Marks all inlined methods as having hidden visibility" +#: config/s390/s390.opt:76 config/ia64/ia64.opt:97 config/sparc/sparc.opt:96 +#: config/i386/i386.opt:222 config/rs6000/rs6000.opt:203 +msgid "Schedule code for given CPU" msgstr "" -#: c.opt:711 -msgid "Discard unused virtual functions" +#: config/s390/s390.opt:80 +msgid "mvcle use" msgstr "" -#: c.opt:715 -msgid "Implement vtables using thunks" +#: config/s390/s390.opt:84 +msgid "Warn if a function uses alloca or creates an array with dynamic size" msgstr "" -#: c.opt:719 -msgid "Emit common-like symbols as weak symbols" +#: config/s390/s390.opt:88 +msgid "Warn if a single function's framesize exceeds the given framesize" msgstr "" -#: c.opt:723 -msgid "" -"Convert all wide strings and character constants to character set " +#: config/s390/s390.opt:92 +msgid "z/Architecture" msgstr "" -#: c.opt:727 -msgid "Generate a #line directive pointing at the current working directory" +#: config/ia64/ilp32.opt:3 +msgid "Generate ILP32 code" msgstr "" -#: c.opt:731 -msgid "Emit cross referencing information" +#: config/ia64/ilp32.opt:7 +msgid "Generate LP64 code" msgstr "" -#: c.opt:735 -msgid "" -"Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode" +#: config/ia64/ia64.opt:3 +msgid "Generate big endian code" msgstr "" -#: c.opt:739 -msgid "Dump declarations to a .decl file" +#: config/ia64/ia64.opt:7 +msgid "Generate little endian code" msgstr "" -#: c.opt:743 c.opt:771 -msgid "Add to the end of the system include path" +#: config/ia64/ia64.opt:11 +msgid "Generate code for GNU as" msgstr "" -#: c.opt:747 -msgid "Accept definition of macros in " +#: config/ia64/ia64.opt:15 +msgid "Generate code for GNU ld" msgstr "" -#: c.opt:751 -msgid "Include the contents of before other files" +#: config/ia64/ia64.opt:19 +msgid "Emit stop bits before and after volatile extended asms" msgstr "" -#: c.opt:755 -msgid "Specify as a prefix for next two options" +#: config/ia64/ia64.opt:23 +msgid "Use in/loc/out register names" msgstr "" -#: c.opt:759 -msgid "Set to be the system root directory" +#: config/ia64/ia64.opt:30 +msgid "Enable use of sdata/scommon/sbss" msgstr "" -#: c.opt:763 -msgid "Add to the start of the system include path" +#: config/ia64/ia64.opt:34 +msgid "Generate code without GP reg" msgstr "" -#: c.opt:767 -msgid "Add to the end of the quote include path" +#: config/ia64/ia64.opt:38 +msgid "gp is constant (but save/restore gp on indirect calls)" msgstr "" -#: c.opt:785 -msgid "" -"Do not search standard system include directories (those specified with -" -"isystem will still be used)" +#: config/ia64/ia64.opt:42 +msgid "Generate self-relocatable code" msgstr "" -#: c.opt:789 -msgid "Do not search standard system include directories for C++" +#: config/ia64/ia64.opt:46 +msgid "Generate inline floating point division, optimize for latency" msgstr "" -#: c.opt:805 -msgid "Generate C header of platform-specific features" +#: config/ia64/ia64.opt:50 +msgid "Generate inline floating point division, optimize for throughput" msgstr "" -#: c.opt:809 -msgid "Print a checksum of the executable for PCH validity checking, and stop" +#: config/ia64/ia64.opt:57 +msgid "Generate inline integer division, optimize for latency" msgstr "" -#: c.opt:813 -msgid "Remap file names when including files" +#: config/ia64/ia64.opt:61 +msgid "Generate inline integer division, optimize for throughput" msgstr "" -#: c.opt:817 -msgid "Conform to the ISO 1998 C++ standard" +#: config/ia64/ia64.opt:65 +msgid "Do not inline integer division" msgstr "" -#: c.opt:821 c.opt:849 -msgid "Conform to the ISO 1990 C standard" +#: config/ia64/ia64.opt:69 +msgid "Generate inline square root, optimize for latency" msgstr "" -#: c.opt:825 c.opt:857 -msgid "Conform to the ISO 1999 C standard" +#: config/ia64/ia64.opt:73 +msgid "Generate inline square root, optimize for throughput" msgstr "" -#: c.opt:829 -msgid "Deprecated in favor of -std=c99" +#: config/ia64/ia64.opt:77 +msgid "Do not inline square root" msgstr "" -#: c.opt:833 -msgid "Conform to the ISO 1998 C++ standard with GNU extensions" +#: config/ia64/ia64.opt:81 +msgid "Enable Dwarf 2 line debug info via GNU as" msgstr "" -#: c.opt:837 -msgid "Conform to the ISO 1990 C standard with GNU extensions" +#: config/ia64/ia64.opt:85 +msgid "Enable earlier placing stop bits for better scheduling" msgstr "" -#: c.opt:841 -msgid "Conform to the ISO 1999 C standard with GNU extensions" +#: config/ia64/ia64.opt:89 config/pa/pa.opt:52 +msgid "Specify range of registers to make fixed" msgstr "" -#: c.opt:845 -msgid "Deprecated in favor of -std=gnu99" +#: config/m32c/m32c.opt:25 config/ms1/ms1.opt:32 +msgid "Use simulator runtime" msgstr "" -#: c.opt:853 -msgid "Conform to the ISO 1990 C standard as amended in 1994" +#: config/m32c/m32c.opt:29 +msgid "Compile code for R8C variants" msgstr "" -#: c.opt:861 -msgid "Deprecated in favor of -std=iso9899:1999" +#: config/m32c/m32c.opt:33 +msgid "Compile code for M16C variants" msgstr "" -#: c.opt:865 -msgid "Enable traditional preprocessing" +#: config/m32c/m32c.opt:37 +msgid "Compile code for M32CM variants" msgstr "" -#: c.opt:869 -msgid "Support ISO C trigraphs" +#: config/m32c/m32c.opt:41 +msgid "Compile code for M32C variants" msgstr "" -#: c.opt:873 -msgid "Do not predefine system-specific and GCC-specific macros" +#: config/m32c/m32c.opt:45 +msgid "Number of memreg bytes (default: 16, range: 0..16)" msgstr "" -#: c.opt:877 -msgid "Enable verbose output" +#: config/sparc/little-endian.opt:24 +msgid "Generate code for little-endian" msgstr "" -#: common.opt:28 -msgid "Display this information" +#: config/sparc/little-endian.opt:28 +msgid "Generate code for big-endian" msgstr "" -#: common.opt:32 -msgid "" -"Set parameter to value. See below for a complete list of parameters" +#: config/sparc/sparc.opt:24 config/sparc/sparc.opt:28 +msgid "Use hardware FP" msgstr "" -#: common.opt:42 -msgid "" -"Put global and static data smaller than bytes into a special " -"section (on some targets)" +#: config/sparc/sparc.opt:32 +msgid "Do not use hardware FP" msgstr "" -#: common.opt:46 -msgid "Set optimization level to " +#: config/sparc/sparc.opt:36 +msgid "Assume possible double misalignment" msgstr "" -#: common.opt:50 -msgid "Optimize for space rather than speed" +#: config/sparc/sparc.opt:40 +msgid "Pass -assert pure-text to linker" msgstr "" -#: common.opt:54 -msgid "This switch is deprecated; use -Wextra instead" +#: config/sparc/sparc.opt:44 +msgid "Use ABI reserved registers" msgstr "" -#: common.opt:58 -msgid "Warn about returning structures, unions or arrays" +#: config/sparc/sparc.opt:48 +msgid "Use hardware quad FP instructions" msgstr "" -#: common.opt:62 -msgid "Warn about inappropriate attribute usage" +#: config/sparc/sparc.opt:52 +msgid "Do not use hardware quad fp instructions" msgstr "" -#: common.opt:66 -msgid "Warn about pointer casts which increase alignment" +#: config/sparc/sparc.opt:56 +msgid "Compile for V8+ ABI" msgstr "" -#: common.opt:70 -msgid "Warn about uses of __attribute__((deprecated)) declarations" +#: config/sparc/sparc.opt:60 +msgid "Use UltraSPARC Visual Instruction Set extensions" msgstr "" -#: common.opt:74 -msgid "Warn when an optimization pass is disabled" +#: config/sparc/sparc.opt:64 +msgid "Pointers are 64-bit" msgstr "" -#: common.opt:78 -msgid "Treat all warnings as errors" +#: config/sparc/sparc.opt:68 +msgid "Pointers are 32-bit" msgstr "" -#: common.opt:82 -msgid "Print extra (possibly unwanted) warnings" +#: config/sparc/sparc.opt:72 +msgid "Use 64-bit ABI" msgstr "" -#: common.opt:86 -msgid "Exit on the first error occurred" +#: config/sparc/sparc.opt:76 +msgid "Use 32-bit ABI" msgstr "" -#: common.opt:90 -msgid "Warn when an inlined function cannot be inlined" +#: config/sparc/sparc.opt:80 +msgid "Use stack bias" msgstr "" -#: common.opt:94 -msgid "Warn if an object is larger than bytes" +#: config/sparc/sparc.opt:84 +msgid "Use structs on stronger alignment for double-word copies" msgstr "" -#: common.opt:98 -msgid "Warn if the loop cannot be optimized due to nontrivial assumptions." +#: config/sparc/sparc.opt:88 +msgid "Optimize tail call instructions in assembler and linker" msgstr "" -#: common.opt:102 -msgid "" -"Warn about functions which might be candidates for __attribute__((noreturn))" +#: config/sparc/sparc.opt:92 config/rs6000/rs6000.opt:199 +msgid "Use features of and schedule code for given CPU" msgstr "" -#: common.opt:106 -msgid "Warn when the packed attribute has no effect on struct layout" +#: config/sparc/sparc.opt:100 +msgid "Use given SPARC-V9 code model" msgstr "" -#: common.opt:110 -msgid "Warn when padding is required to align structure members" +#: config/m32r/m32r.opt:24 +msgid "Compile for the m32rx" msgstr "" -#: common.opt:114 -msgid "Warn when one local variable shadows another" +#: config/m32r/m32r.opt:28 +msgid "Compile for the m32r2" msgstr "" -#: common.opt:118 -msgid "Warn when not issuing stack smashing protection for some reason" +#: config/m32r/m32r.opt:32 +msgid "Compile for the m32r" msgstr "" -#: common.opt:122 common.opt:126 -msgid "Warn about code which might break strict aliasing rules" +#: config/m32r/m32r.opt:36 +msgid "Align all loops to 32 byte boundary" msgstr "" -#: common.opt:130 -msgid "Warn about enumerated switches, with no default, missing a case" +#: config/m32r/m32r.opt:40 +msgid "Prefer branches over conditional execution" msgstr "" -#: common.opt:134 -msgid "Warn about enumerated switches missing a \"default:\" statement" +#: config/m32r/m32r.opt:44 +msgid "Give branches their default cost" msgstr "" -#: common.opt:138 -msgid "Warn about all enumerated switches missing a specific case" +#: config/m32r/m32r.opt:48 +msgid "Display compile time statistics" msgstr "" -#: common.opt:146 -msgid "Warn about uninitialized automatic variables" +#: config/m32r/m32r.opt:52 +msgid "Specify cache flush function" msgstr "" -#: common.opt:150 -msgid "Warn about code that will never be executed" +#: config/m32r/m32r.opt:56 +msgid "Specify cache flush trap number" msgstr "" -#: common.opt:154 -msgid "Enable all -Wunused- warnings" +#: config/m32r/m32r.opt:60 +msgid "Only issue one instruction per cycle" msgstr "" -#: common.opt:158 -msgid "Warn when a function is unused" +#: config/m32r/m32r.opt:64 +msgid "Allow two instructions to be issued per cycle" msgstr "" -#: common.opt:162 fortran/lang.opt:70 -msgid "Warn when a label is unused" +#: config/m32r/m32r.opt:68 +msgid "Code size: small, medium or large" msgstr "" -#: common.opt:166 -msgid "Warn when a function parameter is unused" +#: config/m32r/m32r.opt:72 +msgid "Don't call any cache flush functions" msgstr "" -#: common.opt:170 -msgid "Warn when an expression value is unused" +#: config/m32r/m32r.opt:76 +msgid "Don't call any cache flush trap" msgstr "" -#: common.opt:174 -msgid "Warn when a variable is unused" +#: config/m32r/m32r.opt:83 +msgid "Small data area: none, sdata, use" msgstr "" -#: common.opt:178 -msgid "Emit declaration information into " +#: config/m68k/m68k.opt:24 +msgid "Generate code for a 520X" msgstr "" -#: common.opt:191 -msgid "Enable dumps from specific passes of the compiler" +#: config/m68k/m68k.opt:28 +msgid "Generate code for a 5206e" msgstr "" -#: common.opt:195 -msgid "Set the file basename to be used for dumps" +#: config/m68k/m68k.opt:32 +msgid "Generate code for a 528x" msgstr "" -#: common.opt:213 -msgid "Align the start of functions" +#: config/m68k/m68k.opt:36 +msgid "Generate code for a 5307" msgstr "" -#: common.opt:220 -msgid "Align labels which are only reached by jumping" +#: config/m68k/m68k.opt:40 +msgid "Generate code for a 5407" msgstr "" -#: common.opt:227 -msgid "Align all labels" +#: config/m68k/m68k.opt:44 config/m68k/m68k.opt:97 +msgid "Generate code for a 68000" msgstr "" -#: common.opt:234 -msgid "Align the start of loops" +#: config/m68k/m68k.opt:48 config/m68k/m68k.opt:101 +msgid "Generate code for a 68020" msgstr "" -#: common.opt:247 -msgid "Specify that arguments may alias each other and globals" +#: config/m68k/m68k.opt:52 +msgid "Generate code for a 68040, without any new instructions" msgstr "" -#: common.opt:251 -msgid "Assume arguments may alias globals but not each other" +#: config/m68k/m68k.opt:56 +msgid "Generate code for a 68060, without any new instructions" msgstr "" -#: common.opt:255 -msgid "Assume arguments alias neither each other nor globals" +#: config/m68k/m68k.opt:60 +msgid "Generate code for a 68030" msgstr "" -#: common.opt:259 -msgid "Generate unwind tables that are exact at each instruction boundary" +#: config/m68k/m68k.opt:64 +msgid "Generate code for a 68040" msgstr "" -#: common.opt:267 -msgid "Generate code to check bounds before indexing arrays" +#: config/m68k/m68k.opt:68 +msgid "Generate code for a 68060" msgstr "" -#: common.opt:271 -msgid "Replace add, compare, branch with branch on count register" +#: config/m68k/m68k.opt:72 +msgid "Generate code for a 68302" msgstr "" -#: common.opt:275 -msgid "Use profiling information for branch probabilities" +#: config/m68k/m68k.opt:76 +msgid "Generate code for a 68332" msgstr "" -#: common.opt:279 -msgid "" -"Perform branch target load optimization before prologue / epilogue threading" +#: config/m68k/m68k.opt:81 +msgid "Generate code for a 68851" msgstr "" -#: common.opt:283 -msgid "" -"Perform branch target load optimization after prologue / epilogue threading" +#: config/m68k/m68k.opt:85 +msgid "Generate code that uses 68881 floating-point instructions" msgstr "" -#: common.opt:287 -msgid "" -"Restrict target load migration not to re-use registers in any basic block" +#: config/m68k/m68k.opt:89 +msgid "Align variables on a 32-bit boundary" msgstr "" -#: common.opt:291 -msgid "Mark as being preserved across functions" +#: config/m68k/m68k.opt:93 +msgid "Use the bit-field instructions" msgstr "" -#: common.opt:295 -msgid "Mark as being corrupted by function calls" +#: config/m68k/m68k.opt:105 +msgid "Generate code for a cpu32" msgstr "" -#: common.opt:302 -msgid "Save registers around function calls" +#: config/m68k/m68k.opt:109 +msgid "Enable ID based shared library" msgstr "" -#: common.opt:306 -msgid "Do not put uninitialized globals in the common section" +#: config/m68k/m68k.opt:113 +msgid "Do not use the bit-field instructions" msgstr "" -#: common.opt:310 -msgid "Perform a register copy-propagation optimization pass" +#: config/m68k/m68k.opt:117 +msgid "Use normal calling convention" msgstr "" -#: common.opt:314 -msgid "Perform cross-jumping optimization" +#: config/m68k/m68k.opt:121 +msgid "Consider type 'int' to be 32 bits wide" msgstr "" -#: common.opt:318 -msgid "When running CSE, follow jumps to their targets" +#: config/m68k/m68k.opt:125 +msgid "Generate pc-relative code" msgstr "" -#: common.opt:322 -msgid "When running CSE, follow conditional jumps" +#: config/m68k/m68k.opt:129 +msgid "Use different calling convention using 'rtd'" msgstr "" -#: common.opt:326 -msgid "Omit range reduction step when performing complex division" +#: config/m68k/m68k.opt:133 +msgid "Enable separate data segment" msgstr "" -#: common.opt:330 -msgid "Place data items into their own section" +#: config/m68k/m68k.opt:137 config/bfin/bfin.opt:45 +msgid "ID of shared library to build" msgstr "" -#: common.opt:336 -msgid "Defer popping functions args from stack until later" +#: config/m68k/m68k.opt:141 +msgid "Consider type 'int' to be 16 bits wide" msgstr "" -#: common.opt:340 -msgid "Attempt to fill delay slots of branch instructions" +#: config/m68k/m68k.opt:145 +msgid "Generate code with library calls for floating point" msgstr "" -#: common.opt:344 -msgid "Delete useless null pointer checks" +#: config/m68k/m68k.opt:149 +msgid "Do not use unaligned memory references" msgstr "" -#: common.opt:348 -msgid "" -"How often to emit source location at the beginning of line-wrapped " -"diagnostics" +#: config/m68k/ieee.opt:25 config/i386/i386.opt:122 +msgid "Use IEEE math for fp comparisons" msgstr "" -#: common.opt:352 -msgid "" -"Amend appropriate diagnostic messages with the command line option that " -"controls them" +#: config/i386/djgpp.opt:26 +msgid "Ignored (obsolete)" msgstr "" -#: common.opt:356 -msgid "Dump various compiler internals to a file" +#: config/i386/i386.opt:24 +msgid "sizeof(long double) is 16" msgstr "" -#: common.opt:360 -msgid "" -"Suppress output of instruction numbers and line number notes in debugging " -"dumps" +#: config/i386/i386.opt:28 +msgid "Generate 32bit i386 code" msgstr "" -#: common.opt:364 -msgid "Perform early inlining" +#: config/i386/i386.opt:36 +msgid "Support 3DNow! built-in functions" msgstr "" -#: common.opt:368 -msgid "Perform DWARF2 duplicate elimination" +#: config/i386/i386.opt:44 +msgid "Generate 64bit x86-64 code" msgstr "" -#: common.opt:372 common.opt:376 -msgid "Perform unused type elimination in debug info" +#: config/i386/i386.opt:52 +msgid "sizeof(long double) is 12" msgstr "" -#: common.opt:380 -msgid "Enable exception handling" +#: config/i386/i386.opt:56 +msgid "Reserve space for outgoing arguments in the function prologue" msgstr "" -#: common.opt:384 -msgid "Perform a number of minor, expensive optimizations" +#: config/i386/i386.opt:60 +msgid "Align some doubles on dword boundary" msgstr "" -#: common.opt:391 -msgid "Assume no NaNs or infinities are generated" +#: config/i386/i386.opt:64 +msgid "Function starts are aligned to this power of 2" msgstr "" -#: common.opt:395 -msgid "Mark as being unavailable to the compiler" +#: config/i386/i386.opt:68 +msgid "Jump targets are aligned to this power of 2" msgstr "" -#: common.opt:399 -msgid "Don't allocate floats and doubles in extended-precision registers" +#: config/i386/i386.opt:72 +msgid "Loop code aligned to this power of 2" msgstr "" -#: common.opt:405 -msgid "Copy memory address constants into registers before use" +#: config/i386/i386.opt:76 +msgid "Align destination of the string operations" msgstr "" -#: common.opt:411 -msgid "Copy memory operands into registers before use" +#: config/i386/i386.opt:84 +msgid "Use given assembler dialect" msgstr "" -#: common.opt:418 -msgid "Allow function addresses to be held in registers" +#: config/i386/i386.opt:88 +msgid "Branches are this expensive (1-5, arbitrary units)" msgstr "" -#: common.opt:422 -msgid "Place each function into its own section" +#: config/i386/i386.opt:92 +msgid "" +"Data greater than given threshold will go into .ldata section in x86-64 " +"medium model" msgstr "" -#: common.opt:426 -msgid "Perform global common subexpression elimination" +#: config/i386/i386.opt:96 +msgid "Use given x86-64 code model" msgstr "" -#: common.opt:430 -msgid "" -"Perform enhanced load motion during global common subexpression elimination" +#: config/i386/i386.opt:106 +msgid "Generate sin, cos, sqrt for FPU" msgstr "" -#: common.opt:434 -msgid "Perform store motion after global common subexpression elimination" +#: config/i386/i386.opt:110 +msgid "Return values of functions in FPU registers" msgstr "" -#: common.opt:438 -msgid "" -"Perform redundant load after store elimination in global common subexpression" +#: config/i386/i386.opt:114 +msgid "Generate floating point mathematics using given instruction set" msgstr "" -#: common.opt:443 -msgid "" -"Perform global common subexpression elimination after register allocation" +#: config/i386/i386.opt:126 +msgid "Inline all known string operations" msgstr "" -#: common.opt:448 -msgid "Enable guessing of branch probabilities" +#: config/i386/i386.opt:134 +msgid "Support MMX built-in functions" msgstr "" -#: common.opt:456 -msgid "Process #ident directives" +#: config/i386/i386.opt:138 +msgid "Use native (MS) bitfield layout" msgstr "" -#: common.opt:460 -msgid "Perform conversion of conditional jumps to branchless equivalents" +#: config/i386/i386.opt:154 +msgid "Omit the frame pointer in leaf functions" msgstr "" -#: common.opt:464 -msgid "Perform conversion of conditional jumps to conditional execution" +#: config/i386/i386.opt:166 +msgid "Attempt to keep stack aligned to this power of 2" msgstr "" -#: common.opt:472 -msgid "Do not generate .size directives" +#: config/i386/i386.opt:170 +msgid "Use push instructions to save outgoing arguments" msgstr "" -#: common.opt:481 -msgid "Pay attention to the \"inline\" keyword" +#: config/i386/i386.opt:174 +msgid "Use red-zone in the x86-64 code" msgstr "" -#: common.opt:485 -msgid "Integrate simple functions into their callers" +#: config/i386/i386.opt:178 +msgid "Number of registers used to pass integer arguments" msgstr "" -#: common.opt:489 -msgid "Integrate functions called once into their callers" +#: config/i386/i386.opt:182 +msgid "Alternate calling convention" msgstr "" -#: common.opt:496 -msgid "Limit the size of inlined functions to " +#: config/i386/i386.opt:190 +msgid "Support MMX and SSE built-in functions and code generation" msgstr "" -#: common.opt:500 -msgid "Instrument function entry and exit with profiling calls" +#: config/i386/i386.opt:194 +msgid "Support MMX, SSE and SSE2 built-in functions and code generation" msgstr "" -#: common.opt:504 -msgid "Perform Interprocedural constant propagation" +#: config/i386/i386.opt:198 +msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgstr "" -#: common.opt:508 -msgid "Discover pure and const functions" +#: config/i386/i386.opt:202 +msgid "Use SSE register passing conventions for SF and DF mode" msgstr "" -#: common.opt:512 -msgid "Discover readonly and non addressable static variables" +#: config/i386/i386.opt:206 +msgid "Uninitialized locals in .bss" msgstr "" -#: common.opt:516 -msgid "Type based escape and alias analysis" +#: config/i386/i386.opt:210 +msgid "Enable stack probing" msgstr "" -#: common.opt:520 -msgid "Optimize induction variables on trees" +#: config/i386/i386.opt:214 +msgid "Use given thread-local storage dialect" msgstr "" -#: common.opt:524 -msgid "Use jump tables for sufficiently large switch statements" +#: config/i386/i386.opt:218 +#, c-format +msgid "Use direct references against %gs when accessing tls data" msgstr "" -#: common.opt:528 -msgid "Generate code for functions even if they are fully inlined" +#: config/i386/cygming.opt:24 +msgid "Create console application" msgstr "" -#: common.opt:532 -msgid "Emit static const variables even if they are not used" +#: config/i386/cygming.opt:28 +msgid "Use the Cygwin interface" msgstr "" -#: common.opt:536 -msgid "Give external symbols a leading underscore" +#: config/i386/cygming.opt:32 +msgid "Generate code for a DLL" msgstr "" -#: common.opt:540 -msgid "Perform loop optimizations" +#: config/i386/cygming.opt:36 +msgid "Ignore dllimport for functions" msgstr "" -#: common.opt:544 -msgid "Perform loop optimizations using the new loop optimizer" +#: config/i386/cygming.opt:40 +msgid "Use Mingw-specific thread support" msgstr "" -#: common.opt:548 -msgid "Set errno after built-in math functions" +#: config/i386/cygming.opt:44 +msgid "Set Windows defines" msgstr "" -#: common.opt:552 -msgid "Report on permanent memory allocation" +#: config/i386/cygming.opt:48 +msgid "Create GUI application" msgstr "" -#: common.opt:559 -msgid "Attempt to merge identical constants and constant variables" +#: config/i386/sco5.opt:25 +msgid "Generate ELF output" msgstr "" -#: common.opt:563 -msgid "Attempt to merge identical constants across compilation units" +#: config/rs6000/aix41.opt:25 config/rs6000/aix64.opt:33 +msgid "Support message passing with the Parallel Environment" msgstr "" -#: common.opt:567 -msgid "" -"Limit diagnostics to characters per line. 0 suppresses line-" -"wrapping" +#: config/rs6000/aix.opt:25 config/rs6000/rs6000.opt:128 +msgid "Conform more closely to IBM XLC semantics" msgstr "" -#: common.opt:571 -msgid "Perform SMS based modulo scheduling before the first scheduling pass" +#: config/rs6000/darwin.opt:25 config/rs6000/sysv4.opt:133 +msgid "Generate 64-bit code" msgstr "" -#: common.opt:575 -msgid "Move loop invariant computations out of loops" +#: config/rs6000/darwin.opt:29 config/rs6000/sysv4.opt:137 +msgid "Generate 32-bit code" msgstr "" -#: common.opt:579 -msgid "Add mudflap bounds-checking instrumentation for single-threaded program" +#: config/rs6000/darwin.opt:33 +msgid "Generate code suitable for executables (NOT shared libs)" msgstr "" -#: common.opt:583 -msgid "Add mudflap bounds-checking instrumentation for multi-threaded program" +#: config/rs6000/rs6000.opt:25 +msgid "Use POWER instruction set" msgstr "" -#: common.opt:587 -msgid "Ignore read operations when inserting mudflap instrumentation" +#: config/rs6000/rs6000.opt:29 +msgid "Do not use POWER instruction set" msgstr "" -#: common.opt:591 -msgid "" -"Enable/Disable the traditional scheduling in loops that already passed " -"modulo scheduling" +#: config/rs6000/rs6000.opt:33 +msgid "Use POWER2 instruction set" msgstr "" -#: common.opt:595 -msgid "Support synchronous non-call exceptions" +#: config/rs6000/rs6000.opt:37 +msgid "Use PowerPC instruction set" msgstr "" -#: common.opt:599 -msgid "When possible do not generate stack frames" +#: config/rs6000/rs6000.opt:41 +msgid "Do not use PowerPC instruction set" msgstr "" -#: common.opt:603 -msgid "Do the full register move optimization pass" +#: config/rs6000/rs6000.opt:45 +msgid "Use PowerPC-64 instruction set" msgstr "" -#: common.opt:607 -msgid "Optimize sibling and tail recursive calls" +#: config/rs6000/rs6000.opt:49 +msgid "Use PowerPC General Purpose group optional instructions" msgstr "" -#: common.opt:611 -msgid "Pack structure members together without holes" +#: config/rs6000/rs6000.opt:53 +msgid "Use PowerPC Graphics group optional instructions" msgstr "" -#: common.opt:615 -msgid "Set initial maximum structure member alignment" +#: config/rs6000/rs6000.opt:57 +msgid "Use PowerPC V2.01 single field mfcr instruction" msgstr "" -#: common.opt:619 -msgid "Return small aggregates in memory, not registers" +#: config/rs6000/rs6000.opt:61 +msgid "Use PowerPC V2.02 popcntb instruction" msgstr "" -#: common.opt:623 -msgid "Perform loop peeling" +#: config/rs6000/rs6000.opt:65 +msgid "Use PowerPC V2.02 floating point rounding instructions" msgstr "" -#: common.opt:627 -msgid "Enable machine specific peephole optimizations" +#: config/rs6000/rs6000.opt:69 +msgid "Use AltiVec instructions" msgstr "" -#: common.opt:631 -msgid "Enable an RTL peephole pass before sched2" +#: config/rs6000/rs6000.opt:73 +msgid "Generate load/store multiple instructions" msgstr "" -#: common.opt:635 -msgid "Generate position-independent code if possible (large mode)" +#: config/rs6000/rs6000.opt:77 +msgid "Generate string instructions for block moves" msgstr "" -#: common.opt:639 -msgid "" -"Generate position-independent code for executables if possible (large mode)" +#: config/rs6000/rs6000.opt:81 +msgid "Use new mnemonics for PowerPC architecture" msgstr "" -#: common.opt:643 -msgid "Generate position-independent code if possible (small mode)" +#: config/rs6000/rs6000.opt:85 +msgid "Use old mnemonics for PowerPC architecture" msgstr "" -#: common.opt:647 -msgid "" -"Generate position-independent code for executables if possible (small mode)" +#: config/rs6000/rs6000.opt:89 config/pdp11/pdp11.opt:84 +msgid "Do not use hardware floating point" msgstr "" -#: common.opt:651 -msgid "Generate prefetch instructions, if available, for arrays in loops" +#: config/rs6000/rs6000.opt:97 +msgid "Do not generate load/store with update instructions" msgstr "" -#: common.opt:655 -msgid "Enable basic program profiling code" +#: config/rs6000/rs6000.opt:101 +msgid "Generate load/store with update instructions" msgstr "" -#: common.opt:659 -msgid "Insert arc-based program profiling code" +#: config/rs6000/rs6000.opt:105 +msgid "Do not generate fused multiply/add instructions" msgstr "" -#: common.opt:663 -msgid "" -"Enable common options for generating profile info for profile feedback " -"directed optimizations" +#: config/rs6000/rs6000.opt:109 +msgid "Generate fused multiply/add instructions" msgstr "" -#: common.opt:667 -msgid "" -"Enable common options for performing profile feedback directed optimizations" +#: config/rs6000/rs6000.opt:113 +msgid "Schedule the start and end of the procedure" msgstr "" -#: common.opt:671 -msgid "Insert code to profile values of expressions" +#: config/rs6000/rs6000.opt:120 +msgid "Return all structures in memory (AIX default)" msgstr "" -#: common.opt:678 -msgid "Make compile reproducible using " +#: config/rs6000/rs6000.opt:124 +msgid "Return small structures in registers (SVR4 default)" msgstr "" -#: common.opt:682 -msgid "Return small aggregates in registers" +#: config/rs6000/rs6000.opt:132 +msgid "Generate software floating point divide for better throughput" msgstr "" -#: common.opt:686 -msgid "Enables a register move optimization" +#: config/rs6000/rs6000.opt:136 +msgid "Do not place floating point constants in TOC" msgstr "" -#: common.opt:690 -msgid "Perform a register renaming optimization pass" +#: config/rs6000/rs6000.opt:140 +msgid "Place floating point constants in TOC" msgstr "" -#: common.opt:694 -msgid "Reorder basic blocks to improve code placement" +#: config/rs6000/rs6000.opt:144 +msgid "Do not place symbol+offset constants in TOC" msgstr "" -#: common.opt:698 -msgid "Reorder basic blocks and partition into hot and cold sections" +#: config/rs6000/rs6000.opt:148 +msgid "Place symbol+offset constants in TOC" msgstr "" -#: common.opt:702 -msgid "Reorder functions to improve code placement" +#: config/rs6000/rs6000.opt:159 +msgid "Use only one TOC entry per procedure" msgstr "" -#: common.opt:706 -msgid "Add a common subexpression elimination pass after loop optimizations" +#: config/rs6000/rs6000.opt:163 +msgid "Put everything in the regular TOC" msgstr "" -#: common.opt:710 -msgid "Run the loop optimizer twice" +#: config/rs6000/rs6000.opt:167 +msgid "Generate VRSAVE instructions when generating AltiVec code" msgstr "" -#: common.opt:714 -msgid "Disable optimizations that assume default FP rounding behavior" +#: config/rs6000/rs6000.opt:171 +msgid "Deprecated option. Use -mvrsave/-mno-vrsave instead" msgstr "" -#: common.opt:718 -msgid "Enable scheduling across basic blocks" +#: config/rs6000/rs6000.opt:175 +msgid "Generate isel instructions" msgstr "" -#: common.opt:722 -msgid "Allow speculative motion of non-loads" +#: config/rs6000/rs6000.opt:179 +msgid "Deprecated option. Use -misel/-mno-isel instead" msgstr "" -#: common.opt:726 -msgid "Allow speculative motion of some loads" +#: config/rs6000/rs6000.opt:183 +msgid "Generate SPE SIMD instructions on E500" msgstr "" -#: common.opt:730 -msgid "Allow speculative motion of more loads" +#: config/rs6000/rs6000.opt:187 +msgid "Deprecated option. Use -mspe/-mno-spe instead" msgstr "" -#: common.opt:734 -msgid "Set the verbosity level of the scheduler" +#: config/rs6000/rs6000.opt:191 +msgid "Enable debug output" msgstr "" -#: common.opt:738 -msgid "If scheduling post reload, do superblock scheduling" +#: config/rs6000/rs6000.opt:195 +msgid "Specify ABI to use" msgstr "" -#: common.opt:742 -msgid "If scheduling post reload, do trace scheduling" +#: config/rs6000/rs6000.opt:207 +msgid "Select full, part, or no traceback table" msgstr "" -#: common.opt:746 -msgid "Reschedule instructions before register allocation" +#: config/rs6000/rs6000.opt:211 +msgid "Avoid all range limits on call instructions" msgstr "" -#: common.opt:750 -msgid "Reschedule instructions after register allocation" +#: config/rs6000/rs6000.opt:215 +msgid "Warn about deprecated 'vector long ...' AltiVec type usage" msgstr "" -#: common.opt:756 -msgid "Allow premature scheduling of queued insns" +#: config/rs6000/rs6000.opt:219 +msgid "Select GPR floating point method" msgstr "" -#: common.opt:760 -msgid "Set number of queued insns that can be prematurely scheduled" +#: config/rs6000/rs6000.opt:223 +msgid "Specify size of long double (64 or 128 bits)" msgstr "" -#: common.opt:768 common.opt:772 -msgid "" -"Set dependence distance checking in premature scheduling of queued insns" +#: config/rs6000/rs6000.opt:227 +msgid "Determine which dependences between insns are considered costly" msgstr "" -#: common.opt:776 -msgid "Mark data as shared rather than private" +#: config/rs6000/rs6000.opt:231 +msgid "Specify which post scheduling nop insertion scheme to apply" msgstr "" -#: common.opt:780 -msgid "Show column numbers in diagnostics, when available. Default on" +#: config/rs6000/rs6000.opt:235 +msgid "Specify alignment of structure fields default/natural" msgstr "" -#: common.opt:784 -msgid "Disable optimizations observable by IEEE signaling NaNs" +#: config/rs6000/rs6000.opt:239 +msgid "Specify scheduling priority for dispatch slot restricted insns" msgstr "" -#: common.opt:788 -msgid "Convert floating point constants to single precision constants" +#: config/rs6000/aix64.opt:25 +msgid "Compile for 64-bit pointers" msgstr "" -#: common.opt:792 -msgid "Split lifetimes of induction variables when loops are unrolled" +#: config/rs6000/aix64.opt:29 +msgid "Compile for 32-bit pointers" msgstr "" -#: common.opt:796 -msgid "Apply variable expansion when loops are unrolled" +#: config/rs6000/linux64.opt:25 +msgid "Call mcount for profiling before a function prologue" msgstr "" -#: common.opt:802 -msgid "Insert stack checking code into the program" +#: config/rs6000/sysv4.opt:25 +msgid "Select ABI calling convention" msgstr "" -#: common.opt:809 -msgid "Trap if the stack goes past " +#: config/rs6000/sysv4.opt:29 +msgid "Select method for sdata handling" msgstr "" -#: common.opt:813 -msgid "Trap if the stack goes past symbol " +#: config/rs6000/sysv4.opt:37 config/rs6000/sysv4.opt:41 +msgid "Align to the base type of the bit-field" msgstr "" -#: common.opt:817 -msgid "Use propolice as a stack protection method" +#: config/rs6000/sysv4.opt:46 config/rs6000/sysv4.opt:50 +msgid "Produce code relocatable at runtime" msgstr "" -#: common.opt:821 -msgid "Use a stack protection method for every function" +#: config/rs6000/sysv4.opt:54 config/rs6000/sysv4.opt:58 +msgid "Produce little endian code" msgstr "" -#: common.opt:825 -msgid "Perform strength reduction optimizations" +#: config/rs6000/sysv4.opt:62 config/rs6000/sysv4.opt:66 +msgid "Produce big endian code" msgstr "" -#: common.opt:833 -msgid "Assume strict aliasing rules apply" +#: config/rs6000/sysv4.opt:71 config/rs6000/sysv4.opt:75 +#: config/rs6000/sysv4.opt:84 config/rs6000/sysv4.opt:101 +#: config/rs6000/sysv4.opt:129 config/rs6000/sysv4.opt:141 +msgid "no description yet" msgstr "" -#: common.opt:837 -msgid "Check for syntax errors, then stop" +#: config/rs6000/sysv4.opt:79 +msgid "Assume all variable arg functions are prototyped" msgstr "" -#: common.opt:841 -msgid "Create data files needed by \"gcov\"" +#: config/rs6000/sysv4.opt:88 +msgid "Use EABI" msgstr "" -#: common.opt:845 -msgid "Perform jump threading optimizations" +#: config/rs6000/sysv4.opt:92 +msgid "Allow bit-fields to cross word boundaries" msgstr "" -#: common.opt:849 -msgid "Report the time taken by each compiler pass" +#: config/rs6000/sysv4.opt:96 +msgid "Use alternate register names" msgstr "" -#: common.opt:853 -msgid "Set the default thread-local storage code generation model" +#: config/rs6000/sysv4.opt:105 +msgid "Link with libsim.a, libc.a and sim-crt0.o" msgstr "" -#: common.opt:857 -msgid "Perform superblock formation via tail duplication" +#: config/rs6000/sysv4.opt:109 +msgid "Link with libads.a, libc.a and crt0.o" msgstr "" -#: common.opt:864 -msgid "Assume floating-point operations can trap" +#: config/rs6000/sysv4.opt:113 +msgid "Link with libyk.a, libc.a and crt0.o" msgstr "" -#: common.opt:868 -msgid "Trap for signed overflow in addition, subtraction and multiplication" +#: config/rs6000/sysv4.opt:117 +msgid "Link with libmvme.a, libc.a and crt0.o" msgstr "" -#: common.opt:872 -msgid "Enable SSA-CCP optimization on trees" +#: config/rs6000/sysv4.opt:121 +msgid "Set the PPC_EMB bit in the ELF flags header" msgstr "" -#: common.opt:876 -msgid "Enable SSA-CCP optimization for stores and loads" +#: config/rs6000/sysv4.opt:125 +msgid "Use the WindISS simulator" msgstr "" -#: common.opt:880 -msgid "Enable loop header copying on trees" +#: config/rs6000/sysv4.opt:145 +msgid "Generate code to use a non-exec PLT and GOT" msgstr "" -#: common.opt:884 -msgid "Coalesce memory temporaries in the SSA->normal pass" +#: config/rs6000/sysv4.opt:149 +msgid "Generate code for old exec BSS PLT" msgstr "" -#: common.opt:888 -msgid "Replace SSA temporaries with better names in copies" +#: config/ms1/ms1.opt:24 +msgid "Generate multiply instructions" msgstr "" -#: common.opt:892 -msgid "Enable copy propagation on trees" +#: config/ms1/ms1.opt:28 +msgid "Use byte loads and stores when generating code." msgstr "" -#: common.opt:896 -msgid "Enable copy propagation for stores and loads" +#: config/ms1/ms1.opt:36 +msgid "Do not include crt0.o in the startup files" msgstr "" -#: common.opt:900 -msgid "Enable SSA dead code elimination optimization on trees" +#: config/ms1/ms1.opt:40 config/ms1/ms1.opt:44 config/ms1/ms1.opt:48 +#: config/ms1/ms1.opt:52 config/ms1/ms1.opt:56 +msgid "Internal debug switch" msgstr "" -#: common.opt:904 -msgid "Enable dominator optimizations" +#: config/ms1/ms1.opt:60 config/iq2000/iq2000.opt:24 +msgid "Specify CPU for code generation purposes" msgstr "" -#: common.opt:908 -msgid "Enable dead store elimination" +#: config/mcore/mcore.opt:24 +msgid "Generate code for the M*Core M210" msgstr "" -#: common.opt:912 -msgid "Enable Full Redundancy Elimination (FRE) on trees" +#: config/mcore/mcore.opt:28 +msgid "Generate code for the M*Core M340" msgstr "" -#: common.opt:916 -msgid "Enable loop invariant motion on trees" +#: config/mcore/mcore.opt:32 +msgid "Set maximum alignment to 4" msgstr "" -#: common.opt:920 -msgid "Enable linear loop transforms on trees" +#: config/mcore/mcore.opt:36 +msgid "Force functions to be aligned to a 4 byte boundary" msgstr "" -#: common.opt:924 -msgid "Create canonical induction variables in loops" +#: config/mcore/mcore.opt:40 +msgid "Set maximum alignment to 8" msgstr "" -#: common.opt:928 -msgid "Enable loop optimizations on tree level" +#: config/mcore/mcore.opt:44 +msgid "Generate big-endian code" msgstr "" -#: common.opt:932 -msgid "Enable SSA-PRE optimization on trees" +#: config/mcore/mcore.opt:48 +msgid "Emit call graph information" msgstr "" -#: common.opt:936 -msgid "Perform structural alias analysis" +#: config/mcore/mcore.opt:52 +msgid "Use the divide instruction" msgstr "" -#: common.opt:940 -msgid "Enable SSA code sinking on trees" +#: config/mcore/mcore.opt:56 +msgid "Inline constants if it can be done in 2 insns or less" msgstr "" -#: common.opt:944 -msgid "Perform scalar replacement of aggregates" +#: config/mcore/mcore.opt:60 +msgid "Generate little-endian code" msgstr "" -#: common.opt:948 -msgid "Replace temporary expressions in the SSA->normal pass" +#: config/mcore/mcore.opt:68 +msgid "Use arbitrary sized immediates in bit operations" msgstr "" -#: common.opt:952 -msgid "Perform live range splitting during the SSA->normal pass" +#: config/mcore/mcore.opt:72 +msgid "Prefer word accesses over byte accesses" msgstr "" -#: common.opt:956 -msgid "Perform Value Range Propagation on trees" +#: config/mcore/mcore.opt:76 +msgid "Set the maximum amount for a single stack increment operation" msgstr "" -#: common.opt:960 -msgid "Compile whole compilation unit at a time" +#: config/mcore/mcore.opt:80 +msgid "Always treat bitfields as int-sized" msgstr "" -#: common.opt:964 -msgid "Perform loop unrolling when iteration count is known" +#: config/arc/arc.opt:33 +msgid "Prepend the name of the cpu to all public symbol names" msgstr "" -#: common.opt:968 -msgid "Perform loop unrolling for all loops" +#: config/arc/arc.opt:43 +msgid "Compile code for ARC variant CPU" msgstr "" -#: common.opt:975 -msgid "Allow loop optimizations to assume that the loops behave in normal way" +#: config/arc/arc.opt:47 +msgid "Put functions in SECTION" msgstr "" -#: common.opt:983 -msgid "Allow math optimizations that may violate IEEE or ISO standards" +#: config/arc/arc.opt:51 +msgid "Put data in SECTION" msgstr "" -#: common.opt:987 -msgid "Perform loop unswitching" +#: config/arc/arc.opt:55 +msgid "Put read-only data in SECTION" msgstr "" -#: common.opt:991 -msgid "Just generate unwind tables for exception handling" +#: config/sh/sh.opt:45 +msgid "Generate SH1 code" msgstr "" -#: common.opt:995 -msgid "Perform variable tracking" +#: config/sh/sh.opt:49 +msgid "Generate SH2 code" msgstr "" -#: common.opt:999 -msgid "Enable loop vectorization on trees" +#: config/sh/sh.opt:53 +msgid "Generate SH2a code" msgstr "" -#: common.opt:1003 -msgid "Enable loop versioning when doing loop vectorization on trees" +#: config/sh/sh.opt:57 +msgid "Generate SH2a FPU-less code" msgstr "" -#: common.opt:1007 -msgid "Set the verbosity level of the vectorizer" +#: config/sh/sh.opt:61 +msgid "Generate default single-precision SH2a code" msgstr "" -#: common.opt:1017 -msgid "Add extra commentary to assembler output" +#: config/sh/sh.opt:65 +msgid "Generate only single-precision SH2a code" msgstr "" -#: common.opt:1021 -msgid "Set the default symbol visibility" +#: config/sh/sh.opt:69 +msgid "Generate SH2e code" msgstr "" -#: common.opt:1026 -msgid "Use expression value profiles in optimizations" +#: config/sh/sh.opt:73 +msgid "Generate SH3 code" msgstr "" -#: common.opt:1030 -msgid "Construct webs and split unrelated uses of single variable" +#: config/sh/sh.opt:77 +msgid "Generate SH3e code" msgstr "" -#: common.opt:1034 -msgid "Perform whole program optimizations" +#: config/sh/sh.opt:81 +msgid "Generate SH4 code" msgstr "" -#: common.opt:1038 -msgid "Assume signed arithmetic overflow wraps around" +#: config/sh/sh.opt:85 +msgid "Generate SH4 FPU-less code" msgstr "" -#: common.opt:1042 -msgid "Put zero initialized data in the bss section" +#: config/sh/sh.opt:89 +msgid "Generate default single-precision SH4 code" msgstr "" -#: common.opt:1046 -msgid "Generate debug information in default format" +#: config/sh/sh.opt:93 +msgid "Generate only single-precision SH4 code" msgstr "" -#: common.opt:1050 -msgid "Generate debug information in COFF format" +#: config/sh/sh.opt:97 +msgid "Generate SH4a code" msgstr "" -#: common.opt:1054 -msgid "Generate debug information in DWARF v2 format" +#: config/sh/sh.opt:101 +msgid "Generate SH4a FPU-less code" msgstr "" -#: common.opt:1058 -msgid "Generate debug information in default extended format" +#: config/sh/sh.opt:105 +msgid "Generate default single-precision SH4a code" msgstr "" -#: common.opt:1062 -msgid "Generate debug information in STABS format" +#: config/sh/sh.opt:109 +msgid "Generate only single-precision SH4a code" msgstr "" -#: common.opt:1066 -msgid "Generate debug information in extended STABS format" +#: config/sh/sh.opt:113 +msgid "Generate SH4al-dsp code" msgstr "" -#: common.opt:1070 -msgid "Generate debug information in VMS format" +#: config/sh/sh.opt:117 +msgid "Generate 32-bit SHmedia code" msgstr "" -#: common.opt:1074 -msgid "Generate debug information in XCOFF format" +#: config/sh/sh.opt:121 +msgid "Generate 32-bit FPU-less SHmedia code" msgstr "" -#: common.opt:1078 -msgid "Generate debug information in extended XCOFF format" +#: config/sh/sh.opt:125 +msgid "Generate 64-bit SHmedia code" msgstr "" -#: common.opt:1082 -msgid "Place output into " +#: config/sh/sh.opt:129 +msgid "Generate 64-bit FPU-less SHmedia code" msgstr "" -#: common.opt:1086 -msgid "Enable function profiling" +#: config/sh/sh.opt:133 +msgid "Generate SHcompact code" msgstr "" -#: common.opt:1090 -msgid "Issue warnings needed for strict compliance to the standard" +#: config/sh/sh.opt:137 +msgid "Generate FPU-less SHcompact code" msgstr "" -#: common.opt:1094 -msgid "Like -pedantic but issue them as errors" -msgstr "" - -#: common.opt:1098 -msgid "Do not display functions compiled or elapsed time" -msgstr "" - -#: common.opt:1102 -msgid "Display the compiler's version" -msgstr "" - -#: common.opt:1106 -msgid "Suppress warnings" -msgstr "" - -#: config/darwin.opt:24 -msgid "Generate code suitable for fast turn around debugging" -msgstr "" - -#: config/darwin.opt:28 -msgid "The earliest MacOS X version on which this program will run" -msgstr "" - -#: config/darwin.opt:32 -msgid "Set sizeof(bool) to 1" -msgstr "" - -#: config/lynx.opt:24 -msgid "Support legacy multi-threading" -msgstr "" - -#: config/lynx.opt:28 -msgid "Use shared libraries" -msgstr "" - -#: config/lynx.opt:32 -msgid "Support multi-threading" -msgstr "" - -#: config/vxworks.opt:25 -msgid "Assume the VxWorks RTP environment" -msgstr "" - -#: config/vxworks.opt:32 -msgid "Assume the VxWorks vThreads environment" -msgstr "" - -#: config/alpha/alpha.opt:24 config/i386/i386.opt:186 -msgid "Do not use hardware fp" -msgstr "" - -#: config/alpha/alpha.opt:28 -msgid "Use fp registers" -msgstr "" - -#: config/alpha/alpha.opt:32 -msgid "Assume GAS" -msgstr "" - -#: config/alpha/alpha.opt:36 -msgid "Do not assume GAS" -msgstr "" - -#: config/alpha/alpha.opt:40 -msgid "Request IEEE-conformant math library routines (OSF/1)" -msgstr "" - -#: config/alpha/alpha.opt:44 -msgid "Emit IEEE-conformant code, without inexact exceptions" -msgstr "" - -#: config/alpha/alpha.opt:51 -msgid "Do not emit complex integer constants to read-only memory" -msgstr "" - -#: config/alpha/alpha.opt:55 -msgid "Use VAX fp" -msgstr "" - -#: config/alpha/alpha.opt:59 -msgid "Do not use VAX fp" -msgstr "" - -#: config/alpha/alpha.opt:63 -msgid "Emit code for the byte/word ISA extension" -msgstr "" - -#: config/alpha/alpha.opt:67 -msgid "Emit code for the motion video ISA extension" -msgstr "" - -#: config/alpha/alpha.opt:71 -msgid "Emit code for the fp move and sqrt ISA extension" +#: config/sh/sh.opt:141 +msgid "" +"Throttle unrolling to avoid thrashing target registers unless the unroll " +"benefit outweighs this" msgstr "" -#: config/alpha/alpha.opt:75 -msgid "Emit code for the counting ISA extension" +#: config/sh/sh.opt:145 +msgid "Generate code in big endian mode" msgstr "" -#: config/alpha/alpha.opt:79 -msgid "Emit code using explicit relocation directives" +#: config/sh/sh.opt:149 +msgid "Generate 32-bit offsets in switch tables" msgstr "" -#: config/alpha/alpha.opt:83 -msgid "Emit 16-bit relocations to the small data areas" +#: config/sh/sh.opt:153 +msgid "Enable SH5 cut2 workaround" msgstr "" -#: config/alpha/alpha.opt:87 -msgid "Emit 32-bit relocations to the small data areas" +#: config/sh/sh.opt:157 +msgid "Align doubles at 64-bit boundaries" msgstr "" -#: config/alpha/alpha.opt:91 -msgid "Emit direct branches to local functions" +#: config/sh/sh.opt:161 +msgid "" +"Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, " +"inv:call, inv:call2, inv:fp" msgstr "" -#: config/alpha/alpha.opt:95 -msgid "Emit indirect branches to local functions" +#: config/sh/sh.opt:165 +msgid "Specify name for 32 bit signed division function" msgstr "" -#: config/alpha/alpha.opt:99 -msgid "Emit rdval instead of rduniq for thread pointer" +#: config/sh/sh.opt:172 +msgid "Cost to assume for gettr insn" msgstr "" -#: config/alpha/alpha.opt:103 config/sparc/long-double-switch.opt:24 -msgid "Use 128-bit long double" +#: config/sh/sh.opt:176 config/sh/sh.opt:222 +msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions" msgstr "" -#: config/alpha/alpha.opt:107 config/sparc/long-double-switch.opt:28 -msgid "Use 64-bit long double" +#: config/sh/sh.opt:180 +msgid "Increase the IEEE compliance for floating-point code" msgstr "" -#: config/alpha/alpha.opt:111 -msgid "Use features of and schedule given CPU" +#: config/sh/sh.opt:184 +msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact" msgstr "" -#: config/alpha/alpha.opt:115 -msgid "Schedule given CPU" +#: config/sh/sh.opt:188 +msgid "Assume symbols might be invalid" msgstr "" -#: config/alpha/alpha.opt:119 -msgid "Control the generated fp rounding mode" +#: config/sh/sh.opt:192 +msgid "Annotate assembler instructions with estimated addresses" msgstr "" -#: config/alpha/alpha.opt:123 -msgid "Control the IEEE trap mode" +#: config/sh/sh.opt:196 +msgid "Generate code in little endian mode" msgstr "" -#: config/alpha/alpha.opt:127 -msgid "Control the precision given to fp exceptions" +#: config/sh/sh.opt:200 +msgid "Mark MAC register as call-clobbered" msgstr "" -#: config/alpha/alpha.opt:131 -msgid "Tune expected memory latency" +#: config/sh/sh.opt:206 +msgid "Make structs a multiple of 4 bytes (warning: ABI altered)" msgstr "" -#: config/alpha/alpha.opt:135 config/ia64/ia64.opt:93 -#: config/rs6000/sysv4.opt:33 -msgid "Specify bit size of immediate TLS offsets" +#: config/sh/sh.opt:210 +msgid "Emit function-calls using global offset table when generating PIC" msgstr "" -#: config/arc/arc.opt:33 -msgid "Prepend the name of the cpu to all public symbol names" +#: config/sh/sh.opt:214 +msgid "Assume pt* instructions won't trap" msgstr "" -#: config/arc/arc.opt:43 -msgid "Compile code for ARC variant CPU" +#: config/sh/sh.opt:218 +msgid "Shorten address references during linking" msgstr "" -#: config/arc/arc.opt:47 -msgid "Put functions in SECTION" +#: config/sh/sh.opt:226 +msgid "Deprecated. Use -Os instead" msgstr "" -#: config/arc/arc.opt:51 -msgid "Put data in SECTION" +#: config/sh/sh.opt:230 +msgid "Cost to assume for a multiply insn" msgstr "" -#: config/arc/arc.opt:55 -msgid "Put read-only data in SECTION" +#: config/sh/sh.opt:234 +msgid "" +"Generate library function call to invalidate instruction cache entries after " +"fixing trampoline" msgstr "" #: config/arm/arm.opt:24 @@ -10853,18 +11444,22 @@ msgid "Support calls between Thumb and ARM instruction sets" msgstr "" #: config/arm/arm.opt:139 -msgid "Thumb: Generate (non-leaf) stack frames even if not needed" +msgid "Specify how to access the thread pointer" msgstr "" #: config/arm/arm.opt:143 -msgid "Thumb: Generate (leaf) stack frames even if not needed" +msgid "Thumb: Generate (non-leaf) stack frames even if not needed" msgstr "" #: config/arm/arm.opt:147 -msgid "Tune code for the given processor" +msgid "Thumb: Generate (leaf) stack frames even if not needed" msgstr "" #: config/arm/arm.opt:151 +msgid "Tune code for the given processor" +msgstr "" + +#: config/arm/arm.opt:155 msgid "Assume big endian bytes, little endian words" msgstr "" @@ -10872,68 +11467,116 @@ msgstr "" msgid "Ignore dllimport attribute for functions" msgstr "" -#: config/avr/avr.opt:24 -msgid "Use subroutines for function prologues and epilogues" +#: config/pdp11/pdp11.opt:24 +msgid "Generate code for an 11/10" msgstr "" -#: config/avr/avr.opt:28 -msgid "Select the target MCU" +#: config/pdp11/pdp11.opt:28 +msgid "Generate code for an 11/40" msgstr "" -#: config/avr/avr.opt:35 -msgid "Use STACK as the initial value of the stack pointer" +#: config/pdp11/pdp11.opt:32 +msgid "Generate code for an 11/45" msgstr "" -#: config/avr/avr.opt:39 -msgid "Use an 8-bit 'int' type" +#: config/pdp11/pdp11.opt:36 +msgid "Use 16-bit abs patterns" msgstr "" -#: config/avr/avr.opt:43 -msgid "Change the stack pointer without disabling interrupts" +#: config/pdp11/pdp11.opt:40 +msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)" msgstr "" -#: config/avr/avr.opt:47 -msgid "Do not generate tablejump insns" +#: config/pdp11/pdp11.opt:44 +msgid "Do not use inline patterns for copying memory" msgstr "" -#: config/avr/avr.opt:57 -msgid "Use rjmp/rcall (limited range) on >8K devices" +#: config/pdp11/pdp11.opt:48 +msgid "Use inline patterns for copying memory" msgstr "" -#: config/avr/avr.opt:61 -msgid "Output instruction sizes to the asm file" +#: config/pdp11/pdp11.opt:52 +msgid "Do not pretend that branches are expensive" msgstr "" -#: config/avr/avr.opt:65 -msgid "Change only the low 8 bits of the stack pointer" +#: config/pdp11/pdp11.opt:56 +msgid "Pretend that branches are expensive" msgstr "" -#: config/bfin/bfin.opt:24 -msgid "Omit frame pointer for leaf functions" +#: config/pdp11/pdp11.opt:60 +msgid "Use the DEC assembler syntax" msgstr "" -#: config/bfin/bfin.opt:28 -msgid "Program is entirely located in low 64k of memory" +#: config/pdp11/pdp11.opt:64 +msgid "Use 32 bit float" msgstr "" -#: config/bfin/bfin.opt:32 -msgid "Work around a hardware anomaly by adding a number of NOPs before a" +#: config/pdp11/pdp11.opt:68 +msgid "Use 64 bit float" msgstr "" -#: config/bfin/bfin.opt:37 -msgid "Avoid speculative loads to work around a hardware anomaly." +#: config/pdp11/pdp11.opt:76 +msgid "Use 16 bit int" msgstr "" -#: config/bfin/bfin.opt:41 -msgid "Enabled ID based shared library" +#: config/pdp11/pdp11.opt:80 +msgid "Use 32 bit int" msgstr "" -#: config/bfin/bfin.opt:45 config/m68k/m68k.opt:137 -msgid "ID of shared library to build" +#: config/pdp11/pdp11.opt:88 +msgid "Target has split I&D" msgstr "" -#: config/bfin/bfin.opt:49 -msgid "Avoid generating pc-relative calls; use indirection" +#: config/pdp11/pdp11.opt:92 +msgid "Use UNIX assembler syntax" +msgstr "" + +#: config/avr/avr.opt:24 +msgid "Use subroutines for function prologues and epilogues" +msgstr "" + +#: config/avr/avr.opt:28 +msgid "Select the target MCU" +msgstr "" + +#: config/avr/avr.opt:35 +msgid "Use STACK as the initial value of the stack pointer" +msgstr "" + +#: config/avr/avr.opt:39 +msgid "Use an 8-bit 'int' type" +msgstr "" + +#: config/avr/avr.opt:43 +msgid "Change the stack pointer without disabling interrupts" +msgstr "" + +#: config/avr/avr.opt:47 +msgid "Do not generate tablejump insns" +msgstr "" + +#: config/avr/avr.opt:57 +msgid "Use rjmp/rcall (limited range) on >8K devices" +msgstr "" + +#: config/avr/avr.opt:61 +msgid "Output instruction sizes to the asm file" +msgstr "" + +#: config/avr/avr.opt:65 +msgid "Change only the low 8 bits of the stack pointer" +msgstr "" + +#: config/crx/crx.opt:24 +msgid "Support multiply accumulate instructions" +msgstr "" + +#: config/crx/crx.opt:28 +msgid "Do not use push to store function arguments" +msgstr "" + +#: config/crx/crx.opt:32 +msgid "Restrict doloop to the given nesting level" msgstr "" #: config/c4x/c4x.opt:24 @@ -11052,16871 +11695,17824 @@ msgstr "" msgid "Emit code compatible with TI tools" msgstr "" -#: config/cris/aout.opt:28 -msgid "Compile for the MMU-less Etrax 100-based elinux system" +#: config/pa/pa-hpux.opt:24 +msgid "Generate cpp defines for server IO" msgstr "" -#: config/cris/aout.opt:34 -msgid "For elinux, request a specified stack-size for this program" +#: config/pa/pa-hpux.opt:28 config/pa/pa-hpux1010.opt:24 +#: config/pa/pa-hpux1111.opt:24 +msgid "Specify UNIX standard for predefines and linking" msgstr "" -#: config/cris/cris.opt:46 -msgid "Work around bug in multiplication instruction" +#: config/pa/pa-hpux.opt:32 +msgid "Generate cpp defines for workstation IO" msgstr "" -#: config/cris/cris.opt:52 -msgid "Compile for ETRAX 4 (CRIS v3)" +#: config/pa/pa.opt:24 config/pa/pa.opt:77 config/pa/pa.opt:85 +msgid "Generate PA1.0 code" msgstr "" -#: config/cris/cris.opt:57 -msgid "Compile for ETRAX 100 (CRIS v8)" +#: config/pa/pa.opt:28 config/pa/pa.opt:89 config/pa/pa.opt:109 +msgid "Generate PA1.1 code" msgstr "" -#: config/cris/cris.opt:65 -msgid "Emit verbose debug information in assembly code" +#: config/pa/pa.opt:32 config/pa/pa.opt:93 +msgid "Generate PA2.0 code (requires binutils 2.10 or later)" msgstr "" -#: config/cris/cris.opt:72 -msgid "Do not use condition codes from normal instructions" +#: config/pa/pa.opt:36 +msgid "Generate code for huge switch statements" msgstr "" -#: config/cris/cris.opt:81 -msgid "Do not emit addressing modes with side-effect assignment" +#: config/pa/pa.opt:40 +msgid "Disable FP regs" msgstr "" -#: config/cris/cris.opt:90 -msgid "Do not tune stack alignment" +#: config/pa/pa.opt:44 +msgid "Disable indexed addressing" msgstr "" -#: config/cris/cris.opt:99 -msgid "Do not tune writable data alignment" +#: config/pa/pa.opt:48 +msgid "Generate fast indirect calls" msgstr "" -#: config/cris/cris.opt:108 -msgid "Do not tune code and read-only data alignment" +#: config/pa/pa.opt:56 +msgid "Assume code will be assembled by GAS" msgstr "" -#: config/cris/cris.opt:117 -msgid "Align code and data to 32 bits" +#: config/pa/pa.opt:60 +msgid "Put jumps in call delay slots" msgstr "" -#: config/cris/cris.opt:134 -msgid "Don't align items in code or data" +#: config/pa/pa.opt:65 +msgid "Enable linker optimizations" msgstr "" -#: config/cris/cris.opt:143 -msgid "Do not emit function prologue or epilogue" +#: config/pa/pa.opt:69 +msgid "Always generate long calls" msgstr "" -#: config/cris/cris.opt:150 -msgid "Use the most feature-enabling options allowed by other options" +#: config/pa/pa.opt:73 +msgid "Emit long load/store sequences" msgstr "" -#: config/cris/cris.opt:159 -msgid "Override -mbest-lib-options" +#: config/pa/pa.opt:81 +msgid "Disable space regs" msgstr "" -#: config/cris/cris.opt:166 -msgid "Generate code for the specified chip or CPU version" +#: config/pa/pa.opt:97 +msgid "Use portable calling conventions" msgstr "" -#: config/cris/cris.opt:170 -msgid "Tune alignment for the specified chip or CPU version" +#: config/pa/pa.opt:101 +msgid "" +"Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, " +"7200, 7300, and 8000" msgstr "" -#: config/cris/cris.opt:174 -msgid "Warn when a stackframe is larger than the specified size" +#: config/pa/pa.opt:113 +msgid "Do not disable space regs" msgstr "" -#: config/cris/linux.opt:28 -msgid "Together with -fpic and -fPIC, do not use GOTPLT references" +#: config/pa/pa64-hpux.opt:24 +msgid "Assume code will be linked by GNU ld" msgstr "" -#: config/crx/crx.opt:24 -msgid "Support multiply accumulate instructions" +#: config/pa/pa64-hpux.opt:28 +msgid "Assume code will be linked by HP ld" msgstr "" -#: config/crx/crx.opt:28 -msgid "Do not use push to store function arguments" +#: config/xtensa/xtensa.opt:24 +msgid "Use CONST16 instruction to load constants" msgstr "" -#: config/crx/crx.opt:32 -msgid "Restrict doloop to the given nesting level" +#: config/xtensa/xtensa.opt:28 +msgid "Enable fused multiply/add and multiply/subtract FP instructions" msgstr "" -#: config/fr30/fr30.opt:24 -msgid "Assume small address space" +#: config/xtensa/xtensa.opt:32 +msgid "Use indirect CALLXn instructions for large programs" msgstr "" -#: config/frv/frv.opt:24 -msgid "Use 4 media accumulators" +#: config/xtensa/xtensa.opt:36 +msgid "Automatically align branch targets to reduce branch penalties" msgstr "" -#: config/frv/frv.opt:28 -msgid "Use 8 media accumulators" +#: config/xtensa/xtensa.opt:40 +msgid "Intersperse literal pools with code in the text section" msgstr "" -#: config/frv/frv.opt:32 -msgid "Enable label alignment optimizations" +#: config/stormy16/stormy16.opt:25 +msgid "Provide libraries for the simulator" msgstr "" -#: config/frv/frv.opt:36 -msgid "Dynamically allocate cc registers" +#: config/mips/mips.opt:24 +msgid "Generate code that conforms to the given ABI" msgstr "" -#: config/frv/frv.opt:43 -msgid "Set the cost of branches" +#: config/mips/mips.opt:28 +msgid "Use SVR4-style PIC" msgstr "" -#: config/frv/frv.opt:47 -msgid "Enable conditional execution other than moves/scc" +#: config/mips/mips.opt:32 +msgid "Use PMC-style 'mad' instructions" msgstr "" -#: config/frv/frv.opt:51 -msgid "Change the maximum length of conditionally-executed sequences" +#: config/mips/mips.opt:36 +msgid "Generate code for the given ISA" msgstr "" -#: config/frv/frv.opt:55 -msgid "" -"Change the number of temporary registers that are available to conditionally-" -"executed sequences" +#: config/mips/mips.opt:40 +msgid "Use Branch Likely instructions, overriding the architecture default" msgstr "" -#: config/frv/frv.opt:59 -msgid "Enable conditional moves" +#: config/mips/mips.opt:44 +msgid "Trap on integer divide by zero" msgstr "" -#: config/frv/frv.opt:63 -msgid "Set the target CPU type" +#: config/mips/mips.opt:48 +msgid "Use branch-and-break sequences to check for integer divide by zero" msgstr "" -#: config/frv/frv.opt:85 -msgid "Use fp double instructions" +#: config/mips/mips.opt:52 +msgid "Use trap instructions to check for integer divide by zero" msgstr "" -#: config/frv/frv.opt:89 -msgid "Change the ABI to allow double word insns" +#: config/mips/mips.opt:56 +msgid "" +"Allow hardware floating-point instructions to cover both 32-bit and 64-bit " +"operations" msgstr "" -#: config/frv/frv.opt:93 -msgid "Enable Function Descriptor PIC mode" +#: config/mips/mips.opt:60 +msgid "Use MIPS-DSP instructions" msgstr "" -#: config/frv/frv.opt:97 -msgid "Just use icc0/fcc0" +#: config/mips/mips.opt:70 +msgid "Use big-endian byte order" msgstr "" -#: config/frv/frv.opt:101 -msgid "Only use 32 FPRs" +#: config/mips/mips.opt:74 +msgid "Use little-endian byte order" msgstr "" -#: config/frv/frv.opt:105 -msgid "Use 64 FPRs" +#: config/mips/mips.opt:78 config/iq2000/iq2000.opt:32 +msgid "Use ROM instead of RAM" msgstr "" -#: config/frv/frv.opt:109 -msgid "Only use 32 GPRs" +#: config/mips/mips.opt:82 +msgid "Use NewABI-style %reloc() assembly operators" msgstr "" -#: config/frv/frv.opt:113 -msgid "Use 64 GPRs" +#: config/mips/mips.opt:86 +msgid "Work around certain R4000 errata" msgstr "" -#: config/frv/frv.opt:117 -msgid "Enable use of GPREL for read-only data in FDPIC" +#: config/mips/mips.opt:90 +msgid "Work around certain R4400 errata" msgstr "" -#: config/frv/frv.opt:121 config/pdp11/pdp11.opt:72 -#: config/rs6000/rs6000.opt:89 -msgid "Use hardware floating point" +#: config/mips/mips.opt:94 +msgid "Work around errata for early SB-1 revision 2 cores" msgstr "" -#: config/frv/frv.opt:125 -msgid "Enable inlining of PLT in function calls" +#: config/mips/mips.opt:98 +msgid "Work around certain VR4120 errata" msgstr "" -#: config/frv/frv.opt:129 -msgid "Enable PIC support for building libraries" +#: config/mips/mips.opt:102 +msgid "Work around VR4130 mflo/mfhi errata" msgstr "" -#: config/frv/frv.opt:133 -msgid "Follow the EABI linkage requirements" +#: config/mips/mips.opt:106 +msgid "Work around an early 4300 hardware bug" msgstr "" -#: config/frv/frv.opt:137 -msgid "Disallow direct calls to global functions" +#: config/mips/mips.opt:110 +msgid "FP exceptions are enabled" msgstr "" -#: config/frv/frv.opt:141 -msgid "Use media instructions" +#: config/mips/mips.opt:114 +msgid "Use 32-bit floating-point registers" msgstr "" -#: config/frv/frv.opt:145 -msgid "Use multiply add/subtract instructions" +#: config/mips/mips.opt:118 +msgid "Use 64-bit floating-point registers" msgstr "" -#: config/frv/frv.opt:149 -msgid "Enable optimizing &&/|| in conditional execution" +#: config/mips/mips.opt:122 +msgid "Use FUNC to flush the cache before calling stack trampolines" msgstr "" -#: config/frv/frv.opt:153 -msgid "Enable nested conditional execution optimizations" +#: config/mips/mips.opt:126 +msgid "Generate floating-point multiply-add instructions" msgstr "" -#: config/frv/frv.opt:158 -msgid "Do not mark ABI switches in e_flags" +#: config/mips/mips.opt:130 +msgid "Use 32-bit general registers" msgstr "" -#: config/frv/frv.opt:162 -msgid "Remove redundant membars" +#: config/mips/mips.opt:134 +msgid "Use 64-bit general registers" msgstr "" -#: config/frv/frv.opt:166 -msgid "Pack VLIW instructions" +#: config/mips/mips.opt:138 +msgid "Allow the use of hardware floating-point instructions" msgstr "" -#: config/frv/frv.opt:170 -msgid "Enable setting GPRs to the result of comparisons" +#: config/mips/mips.opt:142 +msgid "Generate code for ISA level N" msgstr "" -#: config/frv/frv.opt:174 -msgid "Change the amount of scheduler lookahead" +#: config/mips/mips.opt:146 +msgid "Generate mips16 code" msgstr "" -#: config/frv/frv.opt:178 config/pa/pa.opt:105 -msgid "Use software floating point" +#: config/mips/mips.opt:150 +msgid "Use MIPS-3D instructions" msgstr "" -#: config/frv/frv.opt:182 -msgid "Assume a large TLS segment" +#: config/mips/mips.opt:154 +msgid "Use indirect calls" msgstr "" -#: config/frv/frv.opt:186 -msgid "Do not assume a large TLS segment" +#: config/mips/mips.opt:158 +msgid "Use a 32-bit long type" msgstr "" -#: config/frv/frv.opt:191 -msgid "Cause gas to print tomcat statistics" +#: config/mips/mips.opt:162 +msgid "Use a 64-bit long type" msgstr "" -#: config/frv/frv.opt:196 -msgid "Link with the library-pic libraries" +#: config/mips/mips.opt:166 +msgid "Don't optimize block moves" msgstr "" -#: config/frv/frv.opt:200 -msgid "Allow branches to be packed with other instructions" +#: config/mips/mips.opt:170 +msgid "Use the mips-tfile postpass" msgstr "" -#: config/h8300/h8300.opt:24 -msgid "Generate H8S code" +#: config/mips/mips.opt:174 +msgid "Do not use a cache-flushing function before calling stack trampolines" msgstr "" -#: config/h8300/h8300.opt:28 -msgid "Generate H8SX code" +#: config/mips/mips.opt:178 +msgid "Generate normal-mode code" msgstr "" -#: config/h8300/h8300.opt:32 -msgid "Generate H8S/2600 code" +#: config/mips/mips.opt:182 +msgid "Do not use MIPS-3D instructions" msgstr "" -#: config/h8300/h8300.opt:36 -msgid "Make integers 32 bits wide" +#: config/mips/mips.opt:186 +msgid "Use paired-single floating-point instructions" msgstr "" -#: config/h8300/h8300.opt:43 -msgid "Use registers for argument passing" +#: config/mips/mips.opt:190 +msgid "" +"Restrict the use of hardware floating-point instructions to 32-bit operations" msgstr "" -#: config/h8300/h8300.opt:47 -msgid "Consider access to byte sized memory slow" +#: config/mips/mips.opt:194 +msgid "Prevent the use of all hardware floating-point instructions" msgstr "" -#: config/h8300/h8300.opt:51 -msgid "Enable linker relaxing" +#: config/mips/mips.opt:198 +msgid "Optimize lui/addiu address loads" msgstr "" -#: config/h8300/h8300.opt:55 -msgid "Generate H8/300H code" +#: config/mips/mips.opt:202 +msgid "Assume all symbols have 32-bit values" msgstr "" -#: config/h8300/h8300.opt:59 -msgid "Enable the normal mode" +#: config/mips/mips.opt:206 +msgid "Optimize the output for PROCESSOR" msgstr "" -#: config/h8300/h8300.opt:63 -msgid "Use H8/300 alignment rules" +#: config/mips/mips.opt:210 config/iq2000/iq2000.opt:45 +msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" -#: config/i386/cygming.opt:24 -msgid "Create console application" +#: config/mips/mips.opt:214 +msgid "Perform VR4130-specific alignment optimizations" msgstr "" -#: config/i386/cygming.opt:28 -msgid "Use the Cygwin interface" +#: config/mips/mips.opt:218 +msgid "Lift restrictions on GOT size" msgstr "" -#: config/i386/cygming.opt:32 -msgid "Generate code for a DLL" +#: config/fr30/fr30.opt:24 +msgid "Assume small address space" msgstr "" -#: config/i386/cygming.opt:36 -msgid "Ignore dllimport for functions" +#: config/m68hc11/m68hc11.opt:24 config/m68hc11/m68hc11.opt:32 +msgid "Compile for a 68HC11" msgstr "" -#: config/i386/cygming.opt:40 -msgid "Use Mingw-specific thread support" +#: config/m68hc11/m68hc11.opt:28 config/m68hc11/m68hc11.opt:36 +msgid "Compile for a 68HC12" msgstr "" -#: config/i386/cygming.opt:44 -msgid "Set Windows defines" +#: config/m68hc11/m68hc11.opt:42 config/m68hc11/m68hc11.opt:46 +msgid "Compile for a 68HCS12" msgstr "" -#: config/i386/cygming.opt:48 -msgid "Create GUI application" +#: config/m68hc11/m68hc11.opt:50 +msgid "Auto pre/post decrement increment allowed" msgstr "" -#: config/i386/djgpp.opt:26 -msgid "Ignored (obsolete)" +#: config/m68hc11/m68hc11.opt:54 +msgid "Min/max instructions allowed" msgstr "" -#: config/i386/i386.opt:24 -msgid "sizeof(long double) is 16" +#: config/m68hc11/m68hc11.opt:58 +msgid "Use call and rtc for function calls and returns" msgstr "" -#: config/i386/i386.opt:28 -msgid "Generate 32bit i386 code" +#: config/m68hc11/m68hc11.opt:62 +msgid "Auto pre/post decrement increment not allowed" msgstr "" -#: config/i386/i386.opt:36 -msgid "Support 3DNow! built-in functions" +#: config/m68hc11/m68hc11.opt:66 +msgid "Use jsr and rts for function calls and returns" msgstr "" -#: config/i386/i386.opt:44 -msgid "Generate 64bit x86-64 code" +#: config/m68hc11/m68hc11.opt:70 +msgid "Min/max instructions not allowed" msgstr "" -#: config/i386/i386.opt:48 config/i386/i386.opt:118 config/s390/s390.opt:52 -msgid "Use hardware fp" +#: config/m68hc11/m68hc11.opt:74 +msgid "Use direct addressing mode for soft registers" msgstr "" -#: config/i386/i386.opt:52 -msgid "sizeof(long double) is 12" +#: config/m68hc11/m68hc11.opt:78 +msgid "Compile with 32-bit integer mode" msgstr "" -#: config/i386/i386.opt:56 -msgid "Reserve space for outgoing arguments in the function prologue" +#: config/m68hc11/m68hc11.opt:83 +msgid "Specify the register allocation order" msgstr "" -#: config/i386/i386.opt:60 -msgid "Align some doubles on dword boundary" +#: config/m68hc11/m68hc11.opt:87 +msgid "Do not use direct addressing mode for soft registers" msgstr "" -#: config/i386/i386.opt:64 -msgid "Function starts are aligned to this power of 2" +#: config/m68hc11/m68hc11.opt:91 +msgid "Compile with 16-bit integer mode" msgstr "" -#: config/i386/i386.opt:68 -msgid "Jump targets are aligned to this power of 2" +#: config/m68hc11/m68hc11.opt:95 +msgid "Indicate the number of soft registers available" msgstr "" -#: config/i386/i386.opt:72 -msgid "Loop code aligned to this power of 2" +#: config/vax/vax.opt:24 config/vax/vax.opt:28 +msgid "Target DFLOAT double precision code" msgstr "" -#: config/i386/i386.opt:76 -msgid "Align destination of the string operations" +#: config/vax/vax.opt:32 config/vax/vax.opt:36 +msgid "Generate GFLOAT double precision code" msgstr "" -#: config/i386/i386.opt:80 config/s390/s390.opt:32 -msgid "Generate code for given CPU" +#: config/vax/vax.opt:40 +msgid "Generate code for GNU assembler (gas)" msgstr "" -#: config/i386/i386.opt:84 -msgid "Use given assembler dialect" +#: config/vax/vax.opt:44 +msgid "Generate code for UNIX assembler" msgstr "" -#: config/i386/i386.opt:88 -msgid "Branches are this expensive (1-5, arbitrary units)" +#: config/vax/vax.opt:48 +msgid "Use VAXC structure conventions" msgstr "" -#: config/i386/i386.opt:92 -msgid "" -"Data greater than given threshold will go into .ldata section in x86-64 " -"medium model" +#: config/cris/linux.opt:28 +msgid "Together with -fpic and -fPIC, do not use GOTPLT references" msgstr "" -#: config/i386/i386.opt:96 -msgid "Use given x86-64 code model" +#: config/cris/cris.opt:46 +msgid "Work around bug in multiplication instruction" msgstr "" -#: config/i386/i386.opt:106 -msgid "Generate sin, cos, sqrt for FPU" +#: config/cris/cris.opt:52 +msgid "Compile for ETRAX 4 (CRIS v3)" msgstr "" -#: config/i386/i386.opt:110 -msgid "Return values of functions in FPU registers" +#: config/cris/cris.opt:57 +msgid "Compile for ETRAX 100 (CRIS v8)" msgstr "" -#: config/i386/i386.opt:114 -msgid "Generate floating point mathematics using given instruction set" +#: config/cris/cris.opt:65 +msgid "Emit verbose debug information in assembly code" msgstr "" -#: config/i386/i386.opt:122 config/m68k/ieee.opt:25 -msgid "Use IEEE math for fp comparisons" +#: config/cris/cris.opt:72 +msgid "Do not use condition codes from normal instructions" msgstr "" -#: config/i386/i386.opt:126 -msgid "Inline all known string operations" +#: config/cris/cris.opt:81 +msgid "Do not emit addressing modes with side-effect assignment" msgstr "" -#: config/i386/i386.opt:134 -msgid "Support MMX built-in functions" +#: config/cris/cris.opt:90 +msgid "Do not tune stack alignment" msgstr "" -#: config/i386/i386.opt:138 -msgid "Use native (MS) bitfield layout" +#: config/cris/cris.opt:99 +msgid "Do not tune writable data alignment" msgstr "" -#: config/i386/i386.opt:154 -msgid "Omit the frame pointer in leaf functions" +#: config/cris/cris.opt:108 +msgid "Do not tune code and read-only data alignment" msgstr "" -#: config/i386/i386.opt:166 -msgid "Attempt to keep stack aligned to this power of 2" +#: config/cris/cris.opt:117 +msgid "Align code and data to 32 bits" msgstr "" -#: config/i386/i386.opt:170 -msgid "Use push instructions to save outgoing arguments" +#: config/cris/cris.opt:134 +msgid "Don't align items in code or data" msgstr "" -#: config/i386/i386.opt:174 -msgid "Use red-zone in the x86-64 code" +#: config/cris/cris.opt:143 +msgid "Do not emit function prologue or epilogue" msgstr "" -#: config/i386/i386.opt:178 -msgid "Number of registers used to pass integer arguments" +#: config/cris/cris.opt:150 +msgid "Use the most feature-enabling options allowed by other options" msgstr "" -#: config/i386/i386.opt:182 -msgid "Alternate calling convention" +#: config/cris/cris.opt:159 +msgid "Override -mbest-lib-options" msgstr "" -#: config/i386/i386.opt:190 -msgid "Support MMX and SSE built-in functions and code generation" +#: config/cris/cris.opt:166 +msgid "Generate code for the specified chip or CPU version" msgstr "" -#: config/i386/i386.opt:194 -msgid "Support MMX, SSE and SSE2 built-in functions and code generation" +#: config/cris/cris.opt:170 +msgid "Tune alignment for the specified chip or CPU version" msgstr "" -#: config/i386/i386.opt:198 -msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" +#: config/cris/cris.opt:174 +msgid "Warn when a stackframe is larger than the specified size" msgstr "" -#: config/i386/i386.opt:202 -msgid "Use SSE register passing conventions for SF and DF mode" +#: config/cris/aout.opt:28 +msgid "Compile for the MMU-less Etrax 100-based elinux system" msgstr "" -#: config/i386/i386.opt:206 -msgid "Uninitialized locals in .bss" +#: config/cris/aout.opt:34 +msgid "For elinux, request a specified stack-size for this program" msgstr "" -#: config/i386/i386.opt:210 -msgid "Enable stack probing" +#: config/h8300/h8300.opt:24 +msgid "Generate H8S code" msgstr "" -#: config/i386/i386.opt:214 -msgid "Use given thread-local storage dialect" +#: config/h8300/h8300.opt:28 +msgid "Generate H8SX code" msgstr "" -#: config/i386/i386.opt:218 -#, c-format -msgid "Use direct references against %gs when accessing tls data" +#: config/h8300/h8300.opt:32 +msgid "Generate H8S/2600 code" msgstr "" -#: config/i386/i386.opt:222 config/ia64/ia64.opt:97 -#: config/rs6000/rs6000.opt:199 config/s390/s390.opt:76 -#: config/sparc/sparc.opt:96 -msgid "Schedule code for given CPU" +#: config/h8300/h8300.opt:36 +msgid "Make integers 32 bits wide" msgstr "" -#: config/i386/sco5.opt:25 -msgid "Generate ELF output" +#: config/h8300/h8300.opt:43 +msgid "Use registers for argument passing" msgstr "" -#: config/ia64/ia64.opt:3 -msgid "Generate big endian code" +#: config/h8300/h8300.opt:47 +msgid "Consider access to byte sized memory slow" msgstr "" -#: config/ia64/ia64.opt:7 -msgid "Generate little endian code" +#: config/h8300/h8300.opt:51 +msgid "Enable linker relaxing" msgstr "" -#: config/ia64/ia64.opt:11 -msgid "Generate code for GNU as" +#: config/h8300/h8300.opt:55 +msgid "Generate H8/300H code" msgstr "" -#: config/ia64/ia64.opt:15 -msgid "Generate code for GNU ld" +#: config/h8300/h8300.opt:59 +msgid "Enable the normal mode" msgstr "" -#: config/ia64/ia64.opt:19 -msgid "Emit stop bits before and after volatile extended asms" +#: config/h8300/h8300.opt:63 +msgid "Use H8/300 alignment rules" msgstr "" -#: config/ia64/ia64.opt:23 -msgid "Use in/loc/out register names" +#: config/v850/v850.opt:24 +msgid "Use registers r2 and r5" msgstr "" -#: config/ia64/ia64.opt:30 -msgid "Enable use of sdata/scommon/sbss" +#: config/v850/v850.opt:28 +msgid "Use 4 byte entries in switch tables" msgstr "" -#: config/ia64/ia64.opt:34 -msgid "Generate code without GP reg" +#: config/v850/v850.opt:32 +msgid "Enable backend debugging" msgstr "" -#: config/ia64/ia64.opt:38 -msgid "gp is constant (but save/restore gp on indirect calls)" +#: config/v850/v850.opt:36 +msgid "Do not use the callt instruction" msgstr "" -#: config/ia64/ia64.opt:42 -msgid "Generate self-relocatable code" +#: config/v850/v850.opt:40 +msgid "Reuse r30 on a per function basis" msgstr "" -#: config/ia64/ia64.opt:46 -msgid "Generate inline floating point division, optimize for latency" +#: config/v850/v850.opt:44 +msgid "Support Green Hills ABI" msgstr "" -#: config/ia64/ia64.opt:50 -msgid "Generate inline floating point division, optimize for throughput" +#: config/v850/v850.opt:48 +msgid "Prohibit PC relative function calls" msgstr "" -#: config/ia64/ia64.opt:57 -msgid "Generate inline integer division, optimize for latency" +#: config/v850/v850.opt:52 +msgid "Use stubs for function prologues" msgstr "" -#: config/ia64/ia64.opt:61 -msgid "Generate inline integer division, optimize for throughput" +#: config/v850/v850.opt:56 +msgid "Set the max size of data eligible for the SDA area" msgstr "" -#: config/ia64/ia64.opt:65 -msgid "Do not inline integer division" +#: config/v850/v850.opt:60 +msgid "Enable the use of the short load instructions" msgstr "" -#: config/ia64/ia64.opt:69 -msgid "Generate inline square root, optimize for latency" +#: config/v850/v850.opt:64 +msgid "Same as: -mep -mprolog-function" msgstr "" -#: config/ia64/ia64.opt:73 -msgid "Generate inline square root, optimize for throughput" +#: config/v850/v850.opt:68 +msgid "Set the max size of data eligible for the TDA area" msgstr "" -#: config/ia64/ia64.opt:77 -msgid "Do not inline square root" +#: config/v850/v850.opt:72 +msgid "Enforce strict alignment" msgstr "" -#: config/ia64/ia64.opt:81 -msgid "Enable Dwarf 2 line debug info via GNU as" +#: config/v850/v850.opt:79 +msgid "Compile for the v850 processor" msgstr "" -#: config/ia64/ia64.opt:85 -msgid "Enable earlier placing stop bits for better scheduling" +#: config/v850/v850.opt:83 +msgid "Compile for the v850e processor" msgstr "" -#: config/ia64/ia64.opt:89 config/pa/pa.opt:52 -msgid "Specify range of registers to make fixed" +#: config/v850/v850.opt:87 +msgid "Compile for the v850e1 processor" msgstr "" -#: config/ia64/ilp32.opt:3 -msgid "Generate ILP32 code" +#: config/v850/v850.opt:91 +msgid "Set the max size of data eligible for the ZDA area" msgstr "" -#: config/ia64/ilp32.opt:7 -msgid "Generate LP64 code" +#: config/mmix/mmix.opt:25 +msgid "For intrinsics library: pass all parameters in registers" msgstr "" -#: config/iq2000/iq2000.opt:24 config/ms1/ms1.opt:60 -msgid "Specify CPU for code generation purposes" +#: config/mmix/mmix.opt:29 +msgid "Use register stack for parameters and return value" msgstr "" -#: config/iq2000/iq2000.opt:28 -msgid "Specify CPU for scheduling purposes" +#: config/mmix/mmix.opt:33 +msgid "Use call-clobbered registers for parameters and return value" msgstr "" -#: config/iq2000/iq2000.opt:32 config/mips/mips.opt:78 -msgid "Use ROM instead of RAM" +#: config/mmix/mmix.opt:38 +msgid "Use epsilon-respecting floating point compare instructions" msgstr "" -#: config/iq2000/iq2000.opt:36 -msgid "Use GP relative sdata/sbss sections" +#: config/mmix/mmix.opt:42 +msgid "Use zero-extending memory loads, not sign-extending ones" msgstr "" -#: config/iq2000/iq2000.opt:41 -msgid "No default crt0.o" +#: config/mmix/mmix.opt:46 +msgid "" +"Generate divide results with reminder having the same sign as the divisor " +"(not the dividend)" msgstr "" -#: config/iq2000/iq2000.opt:45 config/mips/mips.opt:210 -msgid "Put uninitialized constants in ROM (needs -membedded-data)" +#: config/mmix/mmix.opt:50 +msgid "Prepend global symbols with \":\" (for use with PREFIX)" msgstr "" -#: config/m32c/m32c.opt:25 config/ms1/ms1.opt:32 -msgid "Use simulator runtime" +#: config/mmix/mmix.opt:54 +msgid "Do not provide a default start-address 0x100 of the program" msgstr "" -#: config/m32c/m32c.opt:29 -msgid "Compile code for R8C variants" +#: config/mmix/mmix.opt:58 +msgid "Link to emit program in ELF format (rather than mmo)" msgstr "" -#: config/m32c/m32c.opt:33 -msgid "Compile code for M16C variants" +#: config/mmix/mmix.opt:62 +msgid "Use P-mnemonics for branches statically predicted as taken" msgstr "" -#: config/m32c/m32c.opt:37 -msgid "Compile code for M32CM variants" +#: config/mmix/mmix.opt:66 +msgid "Don't use P-mnemonics for branches" msgstr "" -#: config/m32c/m32c.opt:41 -msgid "Compile code for M32C variants" +#: config/mmix/mmix.opt:80 +msgid "Use addresses that allocate global registers" msgstr "" -#: config/m32c/m32c.opt:45 -msgid "Number of memreg bytes (default: 16, range: 0..16)" +#: config/mmix/mmix.opt:84 +msgid "Do not use addresses that allocate global registers" msgstr "" -#: config/m32r/m32r.opt:24 -msgid "Compile for the m32rx" +#: config/mmix/mmix.opt:88 +msgid "Generate a single exit point for each function" msgstr "" -#: config/m32r/m32r.opt:28 -msgid "Compile for the m32r2" +#: config/mmix/mmix.opt:92 +msgid "Do not generate a single exit point for each function" msgstr "" -#: config/m32r/m32r.opt:32 -msgid "Compile for the m32r" +#: config/mmix/mmix.opt:96 +msgid "Set start-address of the program" msgstr "" -#: config/m32r/m32r.opt:36 -msgid "Align all loops to 32 byte boundary" +#: config/mmix/mmix.opt:100 +msgid "Set start-address of data" msgstr "" -#: config/m32r/m32r.opt:40 -msgid "Prefer branches over conditional execution" +#: config/iq2000/iq2000.opt:28 +msgid "Specify CPU for scheduling purposes" msgstr "" -#: config/m32r/m32r.opt:44 -msgid "Give branches their default cost" +#: config/iq2000/iq2000.opt:36 +msgid "Use GP relative sdata/sbss sections" msgstr "" -#: config/m32r/m32r.opt:48 -msgid "Display compile time statistics" +#: config/iq2000/iq2000.opt:41 +msgid "No default crt0.o" msgstr "" -#: config/m32r/m32r.opt:52 -msgid "Specify cache flush function" +#: config/bfin/bfin.opt:24 +msgid "Omit frame pointer for leaf functions" msgstr "" -#: config/m32r/m32r.opt:56 -msgid "Specify cache flush trap number" +#: config/bfin/bfin.opt:28 +msgid "Program is entirely located in low 64k of memory" msgstr "" -#: config/m32r/m32r.opt:60 -msgid "Only issue one instruction per cycle" +#: config/bfin/bfin.opt:32 +msgid "Work around a hardware anomaly by adding a number of NOPs before a" msgstr "" -#: config/m32r/m32r.opt:64 -msgid "Allow two instructions to be issued per cycle" +#: config/bfin/bfin.opt:37 +msgid "Avoid speculative loads to work around a hardware anomaly." msgstr "" -#: config/m32r/m32r.opt:68 -msgid "Code size: small, medium or large" +#: config/bfin/bfin.opt:41 +msgid "Enabled ID based shared library" msgstr "" -#: config/m32r/m32r.opt:72 -msgid "Don't call any cache flush functions" +#: config/bfin/bfin.opt:49 +msgid "Avoid generating pc-relative calls; use indirection" msgstr "" -#: config/m32r/m32r.opt:76 -msgid "Don't call any cache flush trap" +#: config/vxworks.opt:25 +msgid "Assume the VxWorks RTP environment" msgstr "" -#: config/m32r/m32r.opt:83 -msgid "Small data area: none, sdata, use" +#: config/vxworks.opt:32 +msgid "Assume the VxWorks vThreads environment" msgstr "" -#: config/m68hc11/m68hc11.opt:24 config/m68hc11/m68hc11.opt:32 -msgid "Compile for a 68HC11" +#: config/darwin.opt:24 +msgid "Generate code suitable for fast turn around debugging" msgstr "" -#: config/m68hc11/m68hc11.opt:28 config/m68hc11/m68hc11.opt:36 -msgid "Compile for a 68HC12" +#: config/darwin.opt:28 +msgid "The earliest MacOS X version on which this program will run" msgstr "" -#: config/m68hc11/m68hc11.opt:42 config/m68hc11/m68hc11.opt:46 -msgid "Compile for a 68HCS12" +#: config/darwin.opt:32 +msgid "Set sizeof(bool) to 1" msgstr "" -#: config/m68hc11/m68hc11.opt:50 -msgid "Auto pre/post decrement increment allowed" +#: config/lynx.opt:24 +msgid "Support legacy multi-threading" msgstr "" -#: config/m68hc11/m68hc11.opt:54 -msgid "Min/max instructions allowed" +#: config/lynx.opt:28 +msgid "Use shared libraries" msgstr "" -#: config/m68hc11/m68hc11.opt:58 -msgid "Use call and rtc for function calls and returns" +#: config/lynx.opt:32 +msgid "Support multi-threading" msgstr "" -#: config/m68hc11/m68hc11.opt:62 -msgid "Auto pre/post decrement increment not allowed" +#: c.opt:42 +msgid "" +"Assert the to . Putting '-' before disables " +"the to " msgstr "" -#: config/m68hc11/m68hc11.opt:66 -msgid "Use jsr and rts for function calls and returns" +#: c.opt:46 +msgid "Do not discard comments" msgstr "" -#: config/m68hc11/m68hc11.opt:70 -msgid "Min/max instructions not allowed" +#: c.opt:50 +msgid "Do not discard comments in macro expansions" msgstr "" -#: config/m68hc11/m68hc11.opt:74 -msgid "Use direct addressing mode for soft registers" +#: c.opt:54 +msgid "" +"Define a with as its value. If just is given, " +"is taken to be 1" msgstr "" -#: config/m68hc11/m68hc11.opt:78 -msgid "Compile with 32-bit integer mode" +#: c.opt:61 +msgid "Add to the end of the main framework include path" msgstr "" -#: config/m68hc11/m68hc11.opt:83 -msgid "Specify the register allocation order" +#: c.opt:65 +msgid "Print the name of header files as they are used" msgstr "" -#: config/m68hc11/m68hc11.opt:87 -msgid "Do not use direct addressing mode for soft registers" +#: c.opt:69 c.opt:782 +msgid "Add to the end of the main include path" msgstr "" -#: config/m68hc11/m68hc11.opt:91 -msgid "Compile with 16-bit integer mode" +#: c.opt:73 +msgid "Generate make dependencies" msgstr "" -#: config/m68hc11/m68hc11.opt:95 -msgid "Indicate the number of soft registers available" +#: c.opt:77 +msgid "Generate make dependencies and compile" msgstr "" -#: config/m68k/m68k.opt:24 -msgid "Generate code for a 520X" +#: c.opt:81 +msgid "Write dependency output to the given file" msgstr "" -#: config/m68k/m68k.opt:28 -msgid "Generate code for a 5206e" +#: c.opt:85 +msgid "Treat missing header files as generated files" msgstr "" -#: config/m68k/m68k.opt:32 -msgid "Generate code for a 528x" +#: c.opt:89 +msgid "Like -M but ignore system header files" msgstr "" -#: config/m68k/m68k.opt:36 -msgid "Generate code for a 5307" +#: c.opt:93 +msgid "Like -MD but ignore system header files" msgstr "" -#: config/m68k/m68k.opt:40 -msgid "Generate code for a 5407" +#: c.opt:97 +msgid "Generate phony targets for all headers" msgstr "" -#: config/m68k/m68k.opt:44 config/m68k/m68k.opt:97 -msgid "Generate code for a 68000" +#: c.opt:101 +msgid "Add a MAKE-quoted target" msgstr "" -#: config/m68k/m68k.opt:48 config/m68k/m68k.opt:101 -msgid "Generate code for a 68020" +#: c.opt:105 +msgid "Add an unquoted target" msgstr "" -#: config/m68k/m68k.opt:52 -msgid "Generate code for a 68040, without any new instructions" +#: c.opt:109 +msgid "Do not generate #line directives" msgstr "" -#: config/m68k/m68k.opt:56 -msgid "Generate code for a 68060, without any new instructions" +#: c.opt:113 +msgid "Undefine " msgstr "" -#: config/m68k/m68k.opt:60 -msgid "Generate code for a 68030" +#: c.opt:117 +msgid "" +"Warn about things that will change when compiling with an ABI-compliant " +"compiler" msgstr "" -#: config/m68k/m68k.opt:64 -msgid "Generate code for a 68040" +#: c.opt:121 +msgid "Enable most warning messages" msgstr "" -#: config/m68k/m68k.opt:68 -msgid "Generate code for a 68060" +#: c.opt:125 +msgid "" +"Warn whenever an Objective-C assignment is being intercepted by the garbage " +"collector" msgstr "" -#: config/m68k/m68k.opt:72 -msgid "Generate code for a 68302" +#: c.opt:129 +msgid "Warn about casting functions to incompatible types" msgstr "" -#: config/m68k/m68k.opt:76 -msgid "Generate code for a 68332" +#: c.opt:133 +msgid "Warn about C constructs that are not in the common subset of C and C++" msgstr "" -#: config/m68k/m68k.opt:81 -msgid "Generate code for a 68851" +#: c.opt:138 +msgid "Warn about casts which discard qualifiers" msgstr "" -#: config/m68k/m68k.opt:85 -msgid "Generate code that uses 68881 floating-point instructions" +#: c.opt:142 +msgid "Warn about subscripts whose type is \"char\"" msgstr "" -#: config/m68k/m68k.opt:89 -msgid "Align variables on a 32-bit boundary" +#: c.opt:146 +msgid "" +"Warn about possibly nested block comments, and C++ comments spanning more " +"than one physical line" msgstr "" -#: config/m68k/m68k.opt:93 -msgid "Use the bit-field instructions" +#: c.opt:150 +msgid "Synonym for -Wcomment" msgstr "" -#: config/m68k/m68k.opt:105 -msgid "Generate code for a cpu32" +#: c.opt:154 +msgid "Warn about possibly confusing type conversions" msgstr "" -#: config/m68k/m68k.opt:109 -msgid "Enable ID based shared library" +#: c.opt:158 +msgid "Warn when all constructors and destructors are private" msgstr "" -#: config/m68k/m68k.opt:113 -msgid "Do not use the bit-field instructions" +#: c.opt:162 +msgid "Warn when a declaration is found after a statement" msgstr "" -#: config/m68k/m68k.opt:117 -msgid "Use normal calling convention" +#: c.opt:166 +msgid "Warn about deprecated compiler features" msgstr "" -#: config/m68k/m68k.opt:121 -msgid "Consider type 'int' to be 32 bits wide" +#: c.opt:170 +msgid "Warn about compile-time integer division by zero" msgstr "" -#: config/m68k/m68k.opt:125 -msgid "Generate pc-relative code" +#: c.opt:174 +msgid "Warn about violations of Effective C++ style rules" msgstr "" -#: config/m68k/m68k.opt:129 -msgid "Use different calling convention using 'rtd'" +#: c.opt:178 +msgid "Warn about stray tokens after #elif and #endif" msgstr "" -#: config/m68k/m68k.opt:133 -msgid "Enable separate data segment" +#: c.opt:186 +msgid "Make implicit function declarations an error" msgstr "" -#: config/m68k/m68k.opt:141 -msgid "Consider type 'int' to be 16 bits wide" +#: c.opt:190 +msgid "Warn if testing floating point numbers for equality" msgstr "" -#: config/m68k/m68k.opt:145 -msgid "Generate code with library calls for floating point" +#: c.opt:194 +msgid "Warn about printf/scanf/strftime/strfmon format string anomalies" msgstr "" -#: config/m68k/m68k.opt:149 -msgid "Do not use unaligned memory references" +#: c.opt:198 +msgid "Warn if passing too many arguments to a function for its format string" msgstr "" -#: config/mcore/mcore.opt:24 -msgid "Generate code for the M*Core M210" +#: c.opt:202 +msgid "Warn about format strings that are not literals" msgstr "" -#: config/mcore/mcore.opt:28 -msgid "Generate code for the M*Core M340" +#: c.opt:206 +msgid "Warn about possible security problems with format functions" msgstr "" -#: config/mcore/mcore.opt:32 -msgid "Set maximum alignment to 4" +#: c.opt:210 +msgid "Warn about strftime formats yielding 2-digit years" msgstr "" -#: config/mcore/mcore.opt:36 -msgid "Force functions to be aligned to a 4 byte boundary" +#: c.opt:214 +msgid "Warn about zero-length formats" msgstr "" -#: config/mcore/mcore.opt:40 -msgid "Set maximum alignment to 8" +#: c.opt:221 +msgid "Warn about variables which are initialized to themselves" msgstr "" -#: config/mcore/mcore.opt:44 -msgid "Generate big-endian code" +#: c.opt:228 +msgid "Warn about implicit function declarations" msgstr "" -#: config/mcore/mcore.opt:48 -msgid "Emit call graph information" +#: c.opt:232 +msgid "Warn when a declaration does not specify a type" msgstr "" -#: config/mcore/mcore.opt:52 -msgid "Use the divide instruction" +#: c.opt:236 +msgid "Deprecated. This switch has no effect" msgstr "" -#: config/mcore/mcore.opt:56 -msgid "Inline constants if it can be done in 2 insns or less" +#: c.opt:240 +msgid "" +"Warn when there is a cast to a pointer from an integer of a different size" msgstr "" -#: config/mcore/mcore.opt:60 -msgid "Generate little-endian code" +#: c.opt:244 +msgid "Warn about invalid uses of the \"offsetof\" macro" msgstr "" -#: config/mcore/mcore.opt:68 -msgid "Use arbitrary sized immediates in bit operations" +#: c.opt:248 +msgid "Warn about PCH files that are found but not used" msgstr "" -#: config/mcore/mcore.opt:72 -msgid "Prefer word accesses over byte accesses" +#: c.opt:252 +msgid "Do not warn about using \"long long\" when -pedantic" msgstr "" -#: config/mcore/mcore.opt:76 -msgid "Set the maximum amount for a single stack increment operation" +#: c.opt:256 +msgid "Warn about suspicious declarations of \"main\"" msgstr "" -#: config/mcore/mcore.opt:80 -msgid "Always treat bitfields as int-sized" +#: c.opt:260 +msgid "Warn about possibly missing braces around initializers" msgstr "" -#: config/mips/mips.opt:24 -msgid "Generate code that conforms to the given ABI" +#: c.opt:264 +msgid "Warn about global functions without previous declarations" msgstr "" -#: config/mips/mips.opt:28 -msgid "Use SVR4-style PIC" +#: c.opt:268 +msgid "Warn about missing fields in struct initializers" msgstr "" -#: config/mips/mips.opt:32 -msgid "Use PMC-style 'mad' instructions" +#: c.opt:272 +msgid "Warn about functions which might be candidates for format attributes" msgstr "" -#: config/mips/mips.opt:36 -msgid "Generate code for the given ISA" +#: c.opt:276 +msgid "Warn about user-specified include directories that do not exist" msgstr "" -#: config/mips/mips.opt:40 -msgid "Use Branch Likely instructions, overriding the architecture default" +#: c.opt:280 +msgid "Warn about global functions without prototypes" msgstr "" -#: config/mips/mips.opt:44 -msgid "Trap on integer divide by zero" +#: c.opt:284 +msgid "Warn about use of multi-character character constants" msgstr "" -#: config/mips/mips.opt:48 -msgid "Use branch-and-break sequences to check for integer divide by zero" +#: c.opt:288 +msgid "Warn about \"extern\" declarations not at file scope" msgstr "" -#: config/mips/mips.opt:52 -msgid "Use trap instructions to check for integer divide by zero" +#: c.opt:292 +msgid "" +"Warn when non-templatized friend functions are declared within a template" msgstr "" -#: config/mips/mips.opt:56 -msgid "" -"Allow hardware floating-point instructions to cover both 32-bit and 64-bit " -"operations" +#: c.opt:296 +msgid "Warn about non-virtual destructors" msgstr "" -#: config/mips/mips.opt:60 -msgid "Use MIPS-DSP instructions" +#: c.opt:300 +msgid "" +"Warn about NULL being passed to argument slots marked as requiring non-NULL" msgstr "" -#: config/mips/mips.opt:70 -msgid "Use big-endian byte order" +#: c.opt:304 +msgid "Warn about non-normalised Unicode strings" msgstr "" -#: config/mips/mips.opt:74 -msgid "Use little-endian byte order" +#: c.opt:308 +msgid "Warn if a C-style cast is used in a program" msgstr "" -#: config/mips/mips.opt:82 -msgid "Use NewABI-style %reloc() assembly operators" +#: c.opt:312 +msgid "Warn if an old-style parameter definition is used" msgstr "" -#: config/mips/mips.opt:86 -msgid "Work around certain R4000 errata" +#: c.opt:316 +msgid "Warn about overloaded virtual function names" msgstr "" -#: config/mips/mips.opt:90 -msgid "Work around certain R4400 errata" +#: c.opt:320 +msgid "Warn about possibly missing parentheses" msgstr "" -#: config/mips/mips.opt:94 -msgid "Work around errata for early SB-1 revision 2 cores" +#: c.opt:324 +msgid "Warn when converting the type of pointers to member functions" msgstr "" -#: config/mips/mips.opt:98 -msgid "Work around certain VR4120 errata" +#: c.opt:328 +msgid "Warn about function pointer arithmetic" msgstr "" -#: config/mips/mips.opt:102 -msgid "Work around VR4130 mflo/mfhi errata" +#: c.opt:332 +msgid "Warn when a pointer is cast to an integer of a different size" msgstr "" -#: config/mips/mips.opt:106 -msgid "Work around an early 4300 hardware bug" +#: c.opt:336 +msgid "Warn about misuses of pragmas" msgstr "" -#: config/mips/mips.opt:110 -msgid "FP exceptions are enabled" +#: c.opt:340 +msgid "Warn if inherited methods are unimplemented" msgstr "" -#: config/mips/mips.opt:114 -msgid "Use 32-bit floating-point registers" +#: c.opt:344 +msgid "Warn about multiple declarations of the same object" msgstr "" -#: config/mips/mips.opt:118 -msgid "Use 64-bit floating-point registers" +#: c.opt:348 +msgid "Warn when the compiler reorders code" msgstr "" -#: config/mips/mips.opt:122 -msgid "Use FUNC to flush the cache before calling stack trampolines" +#: c.opt:352 +msgid "" +"Warn whenever a function's return type defaults to \"int\" (C), or about " +"inconsistent return types (C++)" msgstr "" -#: config/mips/mips.opt:126 -msgid "Generate floating-point multiply-add instructions" +#: c.opt:356 +msgid "Warn if a selector has multiple methods" msgstr "" -#: config/mips/mips.opt:130 -msgid "Use 32-bit general registers" +#: c.opt:360 +msgid "Warn about possible violations of sequence point rules" msgstr "" -#: config/mips/mips.opt:134 -msgid "Use 64-bit general registers" +#: c.opt:364 +msgid "Warn about signed-unsigned comparisons" msgstr "" -#: config/mips/mips.opt:138 -msgid "Allow the use of hardware floating-point instructions" +#: c.opt:368 +msgid "Warn when overload promotes from unsigned to signed" msgstr "" -#: config/mips/mips.opt:142 -msgid "Generate code for ISA level N" +#: c.opt:372 +msgid "Warn about uncasted NULL used as sentinel" msgstr "" -#: config/mips/mips.opt:146 -msgid "Generate mips16 code" +#: c.opt:376 +msgid "Warn about unprototyped function declarations" msgstr "" -#: config/mips/mips.opt:150 -msgid "Use MIPS-3D instructions" +#: c.opt:380 +msgid "Warn if type signatures of candidate methods do not match exactly" msgstr "" -#: config/mips/mips.opt:154 -msgid "Use indirect calls" +#: c.opt:384 +msgid "Warn when synthesis behavior differs from Cfront" msgstr "" -#: config/mips/mips.opt:158 -msgid "Use a 32-bit long type" +#: c.opt:388 common.opt:142 +msgid "Do not suppress warnings from system headers" msgstr "" -#: config/mips/mips.opt:162 -msgid "Use a 64-bit long type" +#: c.opt:392 +msgid "Warn about features not present in traditional C" msgstr "" -#: config/mips/mips.opt:166 -msgid "Don't optimize block moves" +#: c.opt:396 +msgid "" +"Warn if trigraphs are encountered that might affect the meaning of the " +"program" msgstr "" -#: config/mips/mips.opt:170 -msgid "Use the mips-tfile postpass" +#: c.opt:400 +msgid "Warn about @selector()s without previously declared methods" msgstr "" -#: config/mips/mips.opt:174 -msgid "Do not use a cache-flushing function before calling stack trampolines" +#: c.opt:404 +msgid "Warn if an undefined macro is used in an #if directive" msgstr "" -#: config/mips/mips.opt:178 -msgid "Generate normal-mode code" +#: c.opt:408 +msgid "Warn about unrecognized pragmas" msgstr "" -#: config/mips/mips.opt:182 -msgid "Do not use MIPS-3D instructions" +#: c.opt:412 +msgid "Warn about macros defined in the main file that are not used" msgstr "" -#: config/mips/mips.opt:186 -msgid "Use paired-single floating-point instructions" +#: c.opt:416 +msgid "Do not warn about using variadic macros when -pedantic" msgstr "" -#: config/mips/mips.opt:190 -msgid "" -"Restrict the use of hardware floating-point instructions to 32-bit operations" +#: c.opt:420 +msgid "Give strings the type \"array of char\"" msgstr "" -#: config/mips/mips.opt:194 -msgid "Prevent the use of all hardware floating-point instructions" +#: c.opt:424 +msgid "Warn when a pointer differs in signedness in an assignment" msgstr "" -#: config/mips/mips.opt:198 -msgid "Optimize lui/addiu address loads" +#: c.opt:428 +msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)" msgstr "" -#: config/mips/mips.opt:202 -msgid "Assume all symbols have 32-bit values" +#: c.opt:436 +msgid "Enforce class member access control semantics" msgstr "" -#: config/mips/mips.opt:206 -msgid "Optimize the output for PROCESSOR" +#: c.opt:443 +msgid "Change when template instances are emitted" msgstr "" -#: config/mips/mips.opt:214 -msgid "Perform VR4130-specific alignment optimizations" +#: c.opt:447 +msgid "Recognize the \"asm\" keyword" msgstr "" -#: config/mips/mips.opt:218 -msgid "Lift restrictions on GOT size" +#: c.opt:451 +msgid "Recognize built-in functions" msgstr "" -#: config/mmix/mmix.opt:25 -msgid "For intrinsics library: pass all parameters in registers" +#: c.opt:458 +msgid "Check the return value of new" msgstr "" -#: config/mmix/mmix.opt:29 -msgid "Use register stack for parameters and return value" +#: c.opt:462 +msgid "Allow the arguments of the '?' operator to have different types" msgstr "" -#: config/mmix/mmix.opt:33 -msgid "Use call-clobbered registers for parameters and return value" +#: c.opt:466 +msgid "Reduce the size of object files" msgstr "" -#: config/mmix/mmix.opt:38 -msgid "Use epsilon-respecting floating point compare instructions" +#: c.opt:470 +msgid "Make string literals \"const char[]\" not \"char[]\"" msgstr "" -#: config/mmix/mmix.opt:42 -msgid "Use zero-extending memory loads, not sign-extending ones" +#: c.opt:474 +msgid "Use class for constant strings" msgstr "" -#: config/mmix/mmix.opt:46 -msgid "" -"Generate divide results with reminder having the same sign as the divisor " -"(not the dividend)" +#: c.opt:478 +msgid "Inline member functions by default" msgstr "" -#: config/mmix/mmix.opt:50 -msgid "Prepend global symbols with \":\" (for use with PREFIX)" +#: c.opt:482 +msgid "Permit '$' as an identifier character" msgstr "" -#: config/mmix/mmix.opt:54 -msgid "Do not provide a default start-address 0x100 of the program" +#: c.opt:489 +msgid "Generate code to check exception specifications" msgstr "" -#: config/mmix/mmix.opt:58 -msgid "Link to emit program in ELF format (rather than mmo)" +#: c.opt:496 +msgid "Convert all strings and character constants to character set " msgstr "" -#: config/mmix/mmix.opt:62 -msgid "Use P-mnemonics for branches statically predicted as taken" +#: c.opt:500 +msgid "Permit universal character names (\\u and \\U) in identifiers" msgstr "" -#: config/mmix/mmix.opt:66 -msgid "Don't use P-mnemonics for branches" +#: c.opt:504 +msgid "Specify the default character set for source files" msgstr "" -#: config/mmix/mmix.opt:80 -msgid "Use addresses that allocate global registers" +#: c.opt:521 +msgid "Scope of for-init-statement variables is local to the loop" msgstr "" -#: config/mmix/mmix.opt:84 -msgid "Do not use addresses that allocate global registers" +#: c.opt:525 +msgid "Do not assume that standard C libraries and \"main\" exist" msgstr "" -#: config/mmix/mmix.opt:88 -msgid "Generate a single exit point for each function" +#: c.opt:529 +msgid "Recognize GNU-defined keywords" msgstr "" -#: config/mmix/mmix.opt:92 -msgid "Do not generate a single exit point for each function" +#: c.opt:533 +msgid "Generate code for GNU runtime environment" msgstr "" -#: config/mmix/mmix.opt:96 -msgid "Set start-address of the program" +#: c.opt:546 +msgid "Assume normal C execution environment" msgstr "" -#: config/mmix/mmix.opt:100 -msgid "Set start-address of data" +#: c.opt:550 +msgid "Enable support for huge objects" msgstr "" -#: config/mn10300/mn10300.opt:24 -msgid "Target the AM33 processor" +#: c.opt:554 +msgid "Export functions even if they can be inlined" msgstr "" -#: config/mn10300/mn10300.opt:28 -msgid "Target the AM33/2.0 processor" +#: c.opt:558 +msgid "Emit implicit instantiations of inline templates" msgstr "" -#: config/mn10300/mn10300.opt:32 -msgid "Work around hardware multiply bug" +#: c.opt:562 +msgid "Emit implicit instantiations of templates" msgstr "" -#: config/mn10300/mn10300.opt:37 -msgid "Enable linker relaxations" +#: c.opt:566 +msgid "Inject friend functions into enclosing namespace" msgstr "" -#: config/ms1/ms1.opt:24 -msgid "Generate multiply instructions" +#: c.opt:573 +msgid "Don't warn about uses of Microsoft extensions" msgstr "" -#: config/ms1/ms1.opt:28 -msgid "Use byte loads and stores when generating code." +#: c.opt:583 +msgid "Generate code for NeXT (Apple Mac OS X) runtime environment" msgstr "" -#: config/ms1/ms1.opt:36 -msgid "Do not include crt0.o in the startup files" +#: c.opt:587 +msgid "Assume that receivers of Objective-C messages may be nil" msgstr "" -#: config/ms1/ms1.opt:40 config/ms1/ms1.opt:44 config/ms1/ms1.opt:48 -#: config/ms1/ms1.opt:52 config/ms1/ms1.opt:56 -msgid "Internal debug switch" +#: c.opt:599 +msgid "" +"Generate special Objective-C methods to initialize/destroy non-POD C++ " +"ivars, if needed" msgstr "" -#: config/pa/pa-hpux.opt:24 -msgid "Generate cpp defines for server IO" +#: c.opt:603 +msgid "Allow fast jumps to the message dispatcher" msgstr "" -#: config/pa/pa-hpux.opt:28 config/pa/pa-hpux1010.opt:24 -#: config/pa/pa-hpux1111.opt:24 -msgid "Specify UNIX standard for predefines and linking" +#: c.opt:609 +msgid "Enable Objective-C exception and synchronization syntax" msgstr "" -#: config/pa/pa-hpux.opt:32 -msgid "Generate cpp defines for workstation IO" +#: c.opt:613 +msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs" msgstr "" -#: config/pa/pa.opt:24 config/pa/pa.opt:77 config/pa/pa.opt:85 -msgid "Generate PA1.0 code" +#: c.opt:618 +msgid "Enable Objective-C setjmp exception handling runtime" msgstr "" -#: config/pa/pa.opt:28 config/pa/pa.opt:89 config/pa/pa.opt:109 -msgid "Generate PA1.1 code" +#: c.opt:622 +msgid "Recognize C++ kewords like \"compl\" and \"xor\"" msgstr "" -#: config/pa/pa.opt:32 config/pa/pa.opt:93 -msgid "Generate PA2.0 code (requires binutils 2.10 or later)" +#: c.opt:626 +msgid "Enable optional diagnostics" msgstr "" -#: config/pa/pa.opt:36 -msgid "Generate code for huge switch statements" +#: c.opt:633 +msgid "Look for and use PCH files even when preprocessing" msgstr "" -#: config/pa/pa.opt:40 -msgid "Disable FP regs" +#: c.opt:637 +msgid "Downgrade conformance errors to warnings" msgstr "" -#: config/pa/pa.opt:44 -msgid "Disable indexed addressing" +#: c.opt:641 +msgid "Treat the input file as already preprocessed" msgstr "" -#: config/pa/pa.opt:48 -msgid "Generate fast indirect calls" +#: c.opt:645 +msgid "" +"Used in Fix-and-Continue mode to indicate that object files may be swapped " +"in at runtime" msgstr "" -#: config/pa/pa.opt:56 -msgid "Assume code will be assembled by GAS" +#: c.opt:649 +msgid "Enable automatic template instantiation" msgstr "" -#: config/pa/pa.opt:60 -msgid "Put jumps in call delay slots" +#: c.opt:653 +msgid "Generate run time type descriptor information" msgstr "" -#: config/pa/pa.opt:65 -msgid "Enable linker optimizations" +#: c.opt:657 +msgid "Use the same size for double as for float" msgstr "" -#: config/pa/pa.opt:69 -msgid "Always generate long calls" +#: c.opt:665 +msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"" msgstr "" -#: config/pa/pa.opt:73 -msgid "Emit long load/store sequences" +#: c.opt:669 +msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed" msgstr "" -#: config/pa/pa.opt:81 -msgid "Disable space regs" +#: c.opt:673 +msgid "Make \"char\" signed by default" msgstr "" -#: config/pa/pa.opt:97 -msgid "Use portable calling conventions" +#: c.opt:680 +msgid "Display statistics accumulated during compilation" msgstr "" -#: config/pa/pa.opt:101 -msgid "" -"Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, " -"7200, 7300, and 8000" +#: c.opt:687 +msgid "Distance between tab stops for column reporting" msgstr "" -#: config/pa/pa.opt:113 -msgid "Do not disable space regs" +#: c.opt:691 +msgid "Specify maximum template instantiation depth" msgstr "" -#: config/pa/pa64-hpux.opt:24 -msgid "Assume code will be linked by GNU ld" +#: c.opt:698 +msgid "Do not generate thread-safe code for initializing local statics" msgstr "" -#: config/pa/pa64-hpux.opt:28 -msgid "Assume code will be linked by HP ld" +#: c.opt:702 +msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned" msgstr "" -#: config/pdp11/pdp11.opt:24 -msgid "Generate code for an 11/10" +#: c.opt:706 +msgid "Make \"char\" unsigned by default" msgstr "" -#: config/pdp11/pdp11.opt:28 -msgid "Generate code for an 11/40" +#: c.opt:710 +msgid "Use __cxa_atexit to register destructors" msgstr "" -#: config/pdp11/pdp11.opt:32 -msgid "Generate code for an 11/45" +#: c.opt:714 +msgid "Marks all inlined methods as having hidden visibility" msgstr "" -#: config/pdp11/pdp11.opt:36 -msgid "Use 16-bit abs patterns" +#: c.opt:718 +msgid "Discard unused virtual functions" msgstr "" -#: config/pdp11/pdp11.opt:40 -msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)" +#: c.opt:722 +msgid "Implement vtables using thunks" msgstr "" -#: config/pdp11/pdp11.opt:44 -msgid "Do not use inline patterns for copying memory" +#: c.opt:726 +msgid "Emit common-like symbols as weak symbols" msgstr "" -#: config/pdp11/pdp11.opt:48 -msgid "Use inline patterns for copying memory" +#: c.opt:730 +msgid "" +"Convert all wide strings and character constants to character set " msgstr "" -#: config/pdp11/pdp11.opt:52 -msgid "Do not pretend that branches are expensive" +#: c.opt:734 +msgid "Generate a #line directive pointing at the current working directory" msgstr "" -#: config/pdp11/pdp11.opt:56 -msgid "Pretend that branches are expensive" +#: c.opt:738 +msgid "Emit cross referencing information" msgstr "" -#: config/pdp11/pdp11.opt:60 -msgid "Use the DEC assembler syntax" +#: c.opt:742 +msgid "" +"Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode" msgstr "" -#: config/pdp11/pdp11.opt:64 -msgid "Use 32 bit float" +#: c.opt:746 +msgid "Dump declarations to a .decl file" msgstr "" -#: config/pdp11/pdp11.opt:68 -msgid "Use 64 bit float" +#: c.opt:750 c.opt:778 +msgid "Add to the end of the system include path" msgstr "" -#: config/pdp11/pdp11.opt:76 -msgid "Use 16 bit int" +#: c.opt:754 +msgid "Accept definition of macros in " msgstr "" -#: config/pdp11/pdp11.opt:80 -msgid "Use 32 bit int" +#: c.opt:758 +msgid "Include the contents of before other files" msgstr "" -#: config/pdp11/pdp11.opt:84 config/rs6000/rs6000.opt:85 -msgid "Do not use hardware floating point" +#: c.opt:762 +msgid "Specify as a prefix for next two options" msgstr "" -#: config/pdp11/pdp11.opt:88 -msgid "Target has split I&D" +#: c.opt:766 +msgid "Set to be the system root directory" msgstr "" -#: config/pdp11/pdp11.opt:92 -msgid "Use UNIX assembler syntax" +#: c.opt:770 +msgid "Add to the start of the system include path" msgstr "" -#: config/rs6000/aix41.opt:25 config/rs6000/aix64.opt:33 -msgid "Support message passing with the Parallel Environment" +#: c.opt:774 +msgid "Add to the end of the quote include path" msgstr "" -#: config/rs6000/aix.opt:25 config/rs6000/rs6000.opt:124 -msgid "Conform more closely to IBM XLC semantics" +#: c.opt:795 +msgid "" +"Do not search standard system include directories (those specified with -" +"isystem will still be used)" msgstr "" -#: config/rs6000/aix64.opt:25 -msgid "Compile for 64-bit pointers" +#: c.opt:799 +msgid "Do not search standard system include directories for C++" msgstr "" -#: config/rs6000/aix64.opt:29 -msgid "Compile for 32-bit pointers" +#: c.opt:815 +msgid "Generate C header of platform-specific features" msgstr "" -#: config/rs6000/darwin.opt:25 config/rs6000/sysv4.opt:133 -msgid "Generate 64-bit code" +#: c.opt:819 +msgid "Print a checksum of the executable for PCH validity checking, and stop" msgstr "" -#: config/rs6000/darwin.opt:29 config/rs6000/sysv4.opt:137 -msgid "Generate 32-bit code" +#: c.opt:823 +msgid "Remap file names when including files" msgstr "" -#: config/rs6000/darwin.opt:33 -msgid "Generate code suitable for executables (NOT shared libs)" +#: c.opt:827 +msgid "Conform to the ISO 1998 C++ standard" msgstr "" -#: config/rs6000/linux64.opt:25 -msgid "Call mcount for profiling before a function prologue" +#: c.opt:831 c.opt:859 +msgid "Conform to the ISO 1990 C standard" msgstr "" -#: config/rs6000/rs6000.opt:25 -msgid "Use POWER instruction set" +#: c.opt:835 c.opt:867 +msgid "Conform to the ISO 1999 C standard" msgstr "" -#: config/rs6000/rs6000.opt:29 -msgid "Do not use POWER instruction set" +#: c.opt:839 +msgid "Deprecated in favor of -std=c99" msgstr "" -#: config/rs6000/rs6000.opt:33 -msgid "Use POWER2 instruction set" +#: c.opt:843 +msgid "Conform to the ISO 1998 C++ standard with GNU extensions" msgstr "" -#: config/rs6000/rs6000.opt:37 -msgid "Use PowerPC instruction set" +#: c.opt:847 +msgid "Conform to the ISO 1990 C standard with GNU extensions" msgstr "" -#: config/rs6000/rs6000.opt:41 -msgid "Do not use PowerPC instruction set" +#: c.opt:851 +msgid "Conform to the ISO 1999 C standard with GNU extensions" msgstr "" -#: config/rs6000/rs6000.opt:45 -msgid "Use PowerPC-64 instruction set" +#: c.opt:855 +msgid "Deprecated in favor of -std=gnu99" msgstr "" -#: config/rs6000/rs6000.opt:49 -msgid "Use PowerPC General Purpose group optional instructions" +#: c.opt:863 +msgid "Conform to the ISO 1990 C standard as amended in 1994" msgstr "" -#: config/rs6000/rs6000.opt:53 -msgid "Use PowerPC Graphics group optional instructions" +#: c.opt:871 +msgid "Deprecated in favor of -std=iso9899:1999" msgstr "" -#: config/rs6000/rs6000.opt:57 -msgid "Generate single field mfcr instruction" +#: c.opt:875 +msgid "Enable traditional preprocessing" msgstr "" -#: config/rs6000/rs6000.opt:61 -msgid "Use PowerPC/AS popcntb instruction" +#: c.opt:879 +msgid "Support ISO C trigraphs" msgstr "" -#: config/rs6000/rs6000.opt:65 -msgid "Use AltiVec instructions" +#: c.opt:883 +msgid "Do not predefine system-specific and GCC-specific macros" msgstr "" -#: config/rs6000/rs6000.opt:69 -msgid "Generate load/store multiple instructions" +#: c.opt:887 +msgid "Enable verbose output" msgstr "" -#: config/rs6000/rs6000.opt:73 -msgid "Generate string instructions for block moves" +#: common.opt:28 +msgid "Display this information" msgstr "" -#: config/rs6000/rs6000.opt:77 -msgid "Use new mnemonics for PowerPC architecture" +#: common.opt:32 +msgid "" +"Set parameter to value. See below for a complete list of parameters" msgstr "" -#: config/rs6000/rs6000.opt:81 -msgid "Use old mnemonics for PowerPC architecture" +#: common.opt:42 +msgid "" +"Put global and static data smaller than bytes into a special " +"section (on some targets)" msgstr "" -#: config/rs6000/rs6000.opt:93 -msgid "Do not generate load/store with update instructions" +#: common.opt:46 +msgid "Set optimization level to " msgstr "" -#: config/rs6000/rs6000.opt:97 -msgid "Generate load/store with update instructions" +#: common.opt:50 +msgid "Optimize for space rather than speed" msgstr "" -#: config/rs6000/rs6000.opt:101 -msgid "Do not generate fused multiply/add instructions" +#: common.opt:54 +msgid "This switch is deprecated; use -Wextra instead" msgstr "" -#: config/rs6000/rs6000.opt:105 -msgid "Generate fused multiply/add instructions" +#: common.opt:58 +msgid "Warn about returning structures, unions or arrays" msgstr "" -#: config/rs6000/rs6000.opt:109 -msgid "Schedule the start and end of the procedure" +#: common.opt:62 +msgid "Warn about inappropriate attribute usage" msgstr "" -#: config/rs6000/rs6000.opt:116 -msgid "Return all structures in memory (AIX default)" +#: common.opt:66 +msgid "Warn about pointer casts which increase alignment" msgstr "" -#: config/rs6000/rs6000.opt:120 -msgid "Return small structures in registers (SVR4 default)" +#: common.opt:70 +msgid "Warn about uses of __attribute__((deprecated)) declarations" msgstr "" -#: config/rs6000/rs6000.opt:128 -msgid "Generate software floating point divide for better throughput" +#: common.opt:74 +msgid "Warn when an optimization pass is disabled" msgstr "" -#: config/rs6000/rs6000.opt:132 -msgid "Do not place floating point constants in TOC" +#: common.opt:78 +msgid "Treat all warnings as errors" msgstr "" -#: config/rs6000/rs6000.opt:136 -msgid "Place floating point constants in TOC" +#: common.opt:82 +msgid "Print extra (possibly unwanted) warnings" msgstr "" -#: config/rs6000/rs6000.opt:140 -msgid "Do not place symbol+offset constants in TOC" +#: common.opt:86 +msgid "Exit on the first error occurred" msgstr "" -#: config/rs6000/rs6000.opt:144 -msgid "Place symbol+offset constants in TOC" +#: common.opt:90 +msgid "Warn when an inlined function cannot be inlined" msgstr "" -#: config/rs6000/rs6000.opt:155 -msgid "Use only one TOC entry per procedure" +#: common.opt:94 +msgid "Warn if an object is larger than bytes" msgstr "" -#: config/rs6000/rs6000.opt:159 -msgid "Put everything in the regular TOC" +#: common.opt:98 +msgid "Warn if the loop cannot be optimized due to nontrivial assumptions." msgstr "" -#: config/rs6000/rs6000.opt:163 -msgid "Generate VRSAVE instructions when generating AltiVec code" +#: common.opt:102 +msgid "" +"Warn about functions which might be candidates for __attribute__((noreturn))" msgstr "" -#: config/rs6000/rs6000.opt:167 -msgid "Deprecated option. Use -mvrsave/-mno-vrsave instead" +#: common.opt:106 +msgid "Warn when the packed attribute has no effect on struct layout" msgstr "" -#: config/rs6000/rs6000.opt:171 -msgid "Generate isel instructions" +#: common.opt:110 +msgid "Warn when padding is required to align structure members" msgstr "" -#: config/rs6000/rs6000.opt:175 -msgid "Deprecated option. Use -misel/-mno-isel instead" +#: common.opt:114 +msgid "Warn when one local variable shadows another" msgstr "" -#: config/rs6000/rs6000.opt:179 -msgid "Generate SPE SIMD instructions on E500" +#: common.opt:118 +msgid "Warn when not issuing stack smashing protection for some reason" msgstr "" -#: config/rs6000/rs6000.opt:183 -msgid "Deprecated option. Use -mspe/-mno-spe instead" -msgstr "" +#: common.opt:122 common.opt:126 +msgid "Warn about code which might break strict aliasing rules" +msgstr "" -#: config/rs6000/rs6000.opt:187 -msgid "Enable debug output" +#: common.opt:130 +msgid "Warn about enumerated switches, with no default, missing a case" msgstr "" -#: config/rs6000/rs6000.opt:191 -msgid "Specify ABI to use" +#: common.opt:134 +msgid "Warn about enumerated switches missing a \"default:\" statement" msgstr "" -#: config/rs6000/rs6000.opt:195 config/sparc/sparc.opt:92 -msgid "Use features of and schedule code for given CPU" +#: common.opt:138 +msgid "Warn about all enumerated switches missing a specific case" msgstr "" -#: config/rs6000/rs6000.opt:203 -msgid "Select full, part, or no traceback table" +#: common.opt:146 +msgid "Warn about uninitialized automatic variables" msgstr "" -#: config/rs6000/rs6000.opt:207 -msgid "Avoid all range limits on call instructions" +#: common.opt:150 +msgid "Warn about code that will never be executed" msgstr "" -#: config/rs6000/rs6000.opt:211 -msgid "Warn about deprecated 'vector long ...' AltiVec type usage" +#: common.opt:154 +msgid "Enable all -Wunused- warnings" msgstr "" -#: config/rs6000/rs6000.opt:215 -msgid "Select GPR floating point method" +#: common.opt:158 +msgid "Warn when a function is unused" msgstr "" -#: config/rs6000/rs6000.opt:219 -msgid "Specify size of long double (64 or 128 bits)" +#: common.opt:166 +msgid "Warn when a function parameter is unused" msgstr "" -#: config/rs6000/rs6000.opt:223 -msgid "Determine which dependences between insns are considered costly" +#: common.opt:170 +msgid "Warn when an expression value is unused" msgstr "" -#: config/rs6000/rs6000.opt:227 -msgid "Specify which post scheduling nop insertion scheme to apply" +#: common.opt:174 +msgid "Warn when a variable is unused" msgstr "" -#: config/rs6000/rs6000.opt:231 -msgid "Specify alignment of structure fields default/natural" +#: common.opt:178 +msgid "Warn when a register variable is declared volatile" msgstr "" -#: config/rs6000/rs6000.opt:235 -msgid "Specify scheduling priority for dispatch slot restricted insns" +#: common.opt:182 +msgid "Emit declaration information into " msgstr "" -#: config/rs6000/sysv4.opt:25 -msgid "Select ABI calling convention" +#: common.opt:195 +msgid "Enable dumps from specific passes of the compiler" msgstr "" -#: config/rs6000/sysv4.opt:29 -msgid "Select method for sdata handling" +#: common.opt:199 +msgid "Set the file basename to be used for dumps" msgstr "" -#: config/rs6000/sysv4.opt:37 config/rs6000/sysv4.opt:41 -msgid "Align to the base type of the bit-field" +#: common.opt:217 +msgid "Align the start of functions" msgstr "" -#: config/rs6000/sysv4.opt:46 config/rs6000/sysv4.opt:50 -msgid "Produce code relocatable at runtime" +#: common.opt:224 +msgid "Align labels which are only reached by jumping" msgstr "" -#: config/rs6000/sysv4.opt:54 config/rs6000/sysv4.opt:58 -msgid "Produce little endian code" +#: common.opt:231 +msgid "Align all labels" msgstr "" -#: config/rs6000/sysv4.opt:62 config/rs6000/sysv4.opt:66 -msgid "Produce big endian code" +#: common.opt:238 +msgid "Align the start of loops" msgstr "" -#: config/rs6000/sysv4.opt:71 config/rs6000/sysv4.opt:75 -#: config/rs6000/sysv4.opt:84 config/rs6000/sysv4.opt:101 -#: config/rs6000/sysv4.opt:129 config/rs6000/sysv4.opt:141 -msgid "no description yet" +#: common.opt:251 +msgid "Specify that arguments may alias each other and globals" msgstr "" -#: config/rs6000/sysv4.opt:79 -msgid "Assume all variable arg functions are prototyped" +#: common.opt:255 +msgid "Assume arguments may alias globals but not each other" msgstr "" -#: config/rs6000/sysv4.opt:88 -msgid "Use EABI" +#: common.opt:259 +msgid "Assume arguments alias neither each other nor globals" msgstr "" -#: config/rs6000/sysv4.opt:92 -msgid "Allow bit-fields to cross word boundaries" +#: common.opt:263 +msgid "Generate unwind tables that are exact at each instruction boundary" msgstr "" -#: config/rs6000/sysv4.opt:96 -msgid "Use alternate register names" +#: common.opt:271 +msgid "Generate code to check bounds before indexing arrays" msgstr "" -#: config/rs6000/sysv4.opt:105 -msgid "Link with libsim.a, libc.a and sim-crt0.o" +#: common.opt:275 +msgid "Replace add, compare, branch with branch on count register" msgstr "" -#: config/rs6000/sysv4.opt:109 -msgid "Link with libads.a, libc.a and crt0.o" +#: common.opt:279 +msgid "Use profiling information for branch probabilities" msgstr "" -#: config/rs6000/sysv4.opt:113 -msgid "Link with libyk.a, libc.a and crt0.o" +#: common.opt:283 +msgid "" +"Perform branch target load optimization before prologue / epilogue threading" msgstr "" -#: config/rs6000/sysv4.opt:117 -msgid "Link with libmvme.a, libc.a and crt0.o" +#: common.opt:287 +msgid "" +"Perform branch target load optimization after prologue / epilogue threading" msgstr "" -#: config/rs6000/sysv4.opt:121 -msgid "Set the PPC_EMB bit in the ELF flags header" +#: common.opt:291 +msgid "" +"Restrict target load migration not to re-use registers in any basic block" msgstr "" -#: config/rs6000/sysv4.opt:125 -msgid "Use the WindISS simulator" +#: common.opt:295 +msgid "Mark as being preserved across functions" msgstr "" -#: config/rs6000/sysv4.opt:145 -msgid "Generate code to use a non-exec PLT and GOT" +#: common.opt:299 +msgid "Mark as being corrupted by function calls" msgstr "" -#: config/rs6000/sysv4.opt:149 -msgid "Generate code for old exec BSS PLT" +#: common.opt:306 +msgid "Save registers around function calls" msgstr "" -#: config/s390/s390.opt:24 -msgid "31 bit ABI" +#: common.opt:310 +msgid "Do not put uninitialized globals in the common section" msgstr "" -#: config/s390/s390.opt:28 -msgid "64 bit ABI" +#: common.opt:314 +msgid "Perform a register copy-propagation optimization pass" msgstr "" -#: config/s390/s390.opt:36 -msgid "Maintain backchain pointer" +#: common.opt:318 +msgid "Perform cross-jumping optimization" msgstr "" -#: config/s390/s390.opt:40 -msgid "Additional debug prints" +#: common.opt:322 +msgid "When running CSE, follow jumps to their targets" msgstr "" -#: config/s390/s390.opt:44 -msgid "ESA/390 architecture" +#: common.opt:326 +msgid "When running CSE, follow conditional jumps" msgstr "" -#: config/s390/s390.opt:48 -msgid "Enable fused multiply/add instructions" +#: common.opt:330 +msgid "Omit range reduction step when performing complex division" msgstr "" -#: config/s390/s390.opt:56 -msgid "Use packed stack layout" +#: common.opt:334 +msgid "Place data items into their own section" msgstr "" -#: config/s390/s390.opt:60 -msgid "Use bras for executable < 64k" +#: common.opt:340 +msgid "Defer popping functions args from stack until later" msgstr "" -#: config/s390/s390.opt:64 -msgid "Don't use hardware fp" +#: common.opt:344 +msgid "Attempt to fill delay slots of branch instructions" msgstr "" -#: config/s390/s390.opt:68 +#: common.opt:348 +msgid "Delete useless null pointer checks" +msgstr "" + +#: common.opt:352 msgid "" -"Set the max. number of bytes which has to be left to stack size before a " -"trap instruction is triggered" +"How often to emit source location at the beginning of line-wrapped " +"diagnostics" msgstr "" -#: config/s390/s390.opt:72 +#: common.opt:356 msgid "" -"Emit extra code in the function prologue in order to trap if the stack size " -"exceeds the given limit" +"Amend appropriate diagnostic messages with the command line option that " +"controls them" msgstr "" -#: config/s390/s390.opt:80 -msgid "mvcle use" +#: common.opt:360 +msgid "Dump various compiler internals to a file" msgstr "" -#: config/s390/s390.opt:84 -msgid "Warn if a function uses alloca or creates an array with dynamic size" +#: common.opt:364 +msgid "" +"Suppress output of instruction numbers and line number notes in debugging " +"dumps" msgstr "" -#: config/s390/s390.opt:88 -msgid "Warn if a single function's framesize exceeds the given framesize" +#: common.opt:368 +msgid "Perform early inlining" msgstr "" -#: config/s390/s390.opt:92 -msgid "z/Architecture" +#: common.opt:372 +msgid "Perform DWARF2 duplicate elimination" msgstr "" -#: config/s390/tpf.opt:24 -msgid "Enable TPF-OS tracing code" +#: common.opt:376 common.opt:380 +msgid "Perform unused type elimination in debug info" msgstr "" -#: config/s390/tpf.opt:28 -msgid "Specify main object for TPF-OS" +#: common.opt:384 +msgid "Enable exception handling" msgstr "" -#: config/sh/sh.opt:45 -msgid "Generate SH1 code" +#: common.opt:388 +msgid "Perform a number of minor, expensive optimizations" msgstr "" -#: config/sh/sh.opt:49 -msgid "Generate SH2 code" +#: common.opt:395 +msgid "Assume no NaNs or infinities are generated" msgstr "" -#: config/sh/sh.opt:53 -msgid "Generate SH2a code" +#: common.opt:399 +msgid "Mark as being unavailable to the compiler" msgstr "" -#: config/sh/sh.opt:57 -msgid "Generate SH2a FPU-less code" +#: common.opt:403 +msgid "Don't allocate floats and doubles in extended-precision registers" msgstr "" -#: config/sh/sh.opt:61 -msgid "Generate default single-precision SH2a code" +#: common.opt:409 +msgid "Copy memory address constants into registers before use" msgstr "" -#: config/sh/sh.opt:65 -msgid "Generate only single-precision SH2a code" +#: common.opt:415 +msgid "Copy memory operands into registers before use" msgstr "" -#: config/sh/sh.opt:69 -msgid "Generate SH2e code" +#: common.opt:422 +msgid "Allow function addresses to be held in registers" msgstr "" -#: config/sh/sh.opt:73 -msgid "Generate SH3 code" +#: common.opt:426 +msgid "Place each function into its own section" msgstr "" -#: config/sh/sh.opt:77 -msgid "Generate SH3e code" +#: common.opt:430 +msgid "Perform global common subexpression elimination" msgstr "" -#: config/sh/sh.opt:81 -msgid "Generate SH4 code" +#: common.opt:434 +msgid "" +"Perform enhanced load motion during global common subexpression elimination" msgstr "" -#: config/sh/sh.opt:85 -msgid "Generate SH4 FPU-less code" +#: common.opt:438 +msgid "Perform store motion after global common subexpression elimination" msgstr "" -#: config/sh/sh.opt:89 -msgid "Generate default single-precision SH4 code" +#: common.opt:442 +msgid "" +"Perform redundant load after store elimination in global common subexpression" msgstr "" -#: config/sh/sh.opt:93 -msgid "Generate only single-precision SH4 code" +#: common.opt:447 +msgid "" +"Perform global common subexpression elimination after register allocation" msgstr "" -#: config/sh/sh.opt:97 -msgid "Generate SH4a code" +#: common.opt:452 +msgid "Enable guessing of branch probabilities" msgstr "" -#: config/sh/sh.opt:101 -msgid "Generate SH4a FPU-less code" +#: common.opt:460 +msgid "Process #ident directives" msgstr "" -#: config/sh/sh.opt:105 -msgid "Generate default single-precision SH4a code" +#: common.opt:464 +msgid "Perform conversion of conditional jumps to branchless equivalents" msgstr "" -#: config/sh/sh.opt:109 -msgid "Generate only single-precision SH4a code" +#: common.opt:468 +msgid "Perform conversion of conditional jumps to conditional execution" msgstr "" -#: config/sh/sh.opt:113 -msgid "Generate SH4al-dsp code" +#: common.opt:476 +msgid "Do not generate .size directives" msgstr "" -#: config/sh/sh.opt:117 -msgid "Generate 32-bit SHmedia code" +#: common.opt:485 +msgid "Pay attention to the \"inline\" keyword" msgstr "" -#: config/sh/sh.opt:121 -msgid "Generate 32-bit FPU-less SHmedia code" +#: common.opt:489 +msgid "Integrate simple functions into their callers" msgstr "" -#: config/sh/sh.opt:125 -msgid "Generate 64-bit SHmedia code" +#: common.opt:493 +msgid "Integrate functions called once into their callers" msgstr "" -#: config/sh/sh.opt:129 -msgid "Generate 64-bit FPU-less SHmedia code" +#: common.opt:500 +msgid "Limit the size of inlined functions to " msgstr "" -#: config/sh/sh.opt:133 -msgid "Generate SHcompact code" +#: common.opt:504 +msgid "Instrument function entry and exit with profiling calls" msgstr "" -#: config/sh/sh.opt:137 -msgid "Generate FPU-less SHcompact code" +#: common.opt:508 +msgid "Perform Interprocedural constant propagation" msgstr "" -#: config/sh/sh.opt:141 +#: common.opt:512 +msgid "Discover pure and const functions" +msgstr "" + +#: common.opt:516 +msgid "Discover readonly and non addressable static variables" +msgstr "" + +#: common.opt:520 +msgid "Type based escape and alias analysis" +msgstr "" + +#: common.opt:524 +msgid "Optimize induction variables on trees" +msgstr "" + +#: common.opt:528 +msgid "Use jump tables for sufficiently large switch statements" +msgstr "" + +#: common.opt:532 +msgid "Generate code for functions even if they are fully inlined" +msgstr "" + +#: common.opt:536 +msgid "Emit static const variables even if they are not used" +msgstr "" + +#: common.opt:540 +msgid "Give external symbols a leading underscore" +msgstr "" + +#: common.opt:544 +msgid "Perform loop optimizations" +msgstr "" + +#: common.opt:548 +msgid "Perform loop optimizations using the new loop optimizer" +msgstr "" + +#: common.opt:552 +msgid "Set errno after built-in math functions" +msgstr "" + +#: common.opt:556 +msgid "Report on permanent memory allocation" +msgstr "" + +#: common.opt:563 +msgid "Attempt to merge identical constants and constant variables" +msgstr "" + +#: common.opt:567 +msgid "Attempt to merge identical constants across compilation units" +msgstr "" + +#: common.opt:571 msgid "" -"Throttle unrolling to avoid thrashing target registers unless the unroll " -"benefit outweighs this" +"Limit diagnostics to characters per line. 0 suppresses line-" +"wrapping" msgstr "" -#: config/sh/sh.opt:145 -msgid "Generate code in big endian mode" +#: common.opt:575 +msgid "Perform SMS based modulo scheduling before the first scheduling pass" msgstr "" -#: config/sh/sh.opt:149 -msgid "Generate 32-bit offsets in switch tables" +#: common.opt:579 +msgid "Move loop invariant computations out of loops" msgstr "" -#: config/sh/sh.opt:153 -msgid "Enable SH5 cut2 workaround" +#: common.opt:583 +msgid "Add mudflap bounds-checking instrumentation for single-threaded program" msgstr "" -#: config/sh/sh.opt:157 -msgid "Align doubles at 64-bit boundaries" +#: common.opt:587 +msgid "Add mudflap bounds-checking instrumentation for multi-threaded program" msgstr "" -#: config/sh/sh.opt:161 +#: common.opt:591 +msgid "Ignore read operations when inserting mudflap instrumentation" +msgstr "" + +#: common.opt:595 msgid "" -"Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, " -"inv:call, inv:call2, inv:fp" +"Enable/Disable the traditional scheduling in loops that already passed " +"modulo scheduling" msgstr "" -#: config/sh/sh.opt:165 -msgid "Specify name for 32 bit signed division function" +#: common.opt:599 +msgid "Support synchronous non-call exceptions" msgstr "" -#: config/sh/sh.opt:172 -msgid "Cost to assume for gettr insn" +#: common.opt:603 +msgid "When possible do not generate stack frames" msgstr "" -#: config/sh/sh.opt:176 config/sh/sh.opt:222 -msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions" +#: common.opt:607 +msgid "Do the full register move optimization pass" msgstr "" -#: config/sh/sh.opt:180 -msgid "Increase the IEEE compliance for floating-point code" +#: common.opt:611 +msgid "Optimize sibling and tail recursive calls" msgstr "" -#: config/sh/sh.opt:184 -msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact" +#: common.opt:615 +msgid "Pack structure members together without holes" msgstr "" -#: config/sh/sh.opt:188 -msgid "Assume symbols might be invalid" +#: common.opt:619 +msgid "Set initial maximum structure member alignment" msgstr "" -#: config/sh/sh.opt:192 -msgid "Annotate assembler instructions with estimated addresses" +#: common.opt:623 +msgid "Return small aggregates in memory, not registers" msgstr "" -#: config/sh/sh.opt:196 -msgid "Generate code in little endian mode" +#: common.opt:627 +msgid "Perform loop peeling" msgstr "" -#: config/sh/sh.opt:200 -msgid "Mark MAC register as call-clobbered" +#: common.opt:631 +msgid "Enable machine specific peephole optimizations" msgstr "" -#: config/sh/sh.opt:206 -msgid "Make structs a multiple of 4 bytes (warning: ABI altered)" +#: common.opt:635 +msgid "Enable an RTL peephole pass before sched2" msgstr "" -#: config/sh/sh.opt:210 -msgid "Emit function-calls using global offset table when generating PIC" +#: common.opt:639 +msgid "Generate position-independent code if possible (large mode)" msgstr "" -#: config/sh/sh.opt:214 -msgid "Assume pt* instructions won't trap" +#: common.opt:643 +msgid "" +"Generate position-independent code for executables if possible (large mode)" msgstr "" -#: config/sh/sh.opt:218 -msgid "Shorten address references during linking" +#: common.opt:647 +msgid "Generate position-independent code if possible (small mode)" msgstr "" -#: config/sh/sh.opt:226 -msgid "Deprecated. Use -Os instead" +#: common.opt:651 +msgid "" +"Generate position-independent code for executables if possible (small mode)" msgstr "" -#: config/sh/sh.opt:230 -msgid "Cost to assume for a multiply insn" +#: common.opt:655 +msgid "Generate prefetch instructions, if available, for arrays in loops" msgstr "" -#: config/sh/sh.opt:234 +#: common.opt:659 +msgid "Enable basic program profiling code" +msgstr "" + +#: common.opt:663 +msgid "Insert arc-based program profiling code" +msgstr "" + +#: common.opt:667 msgid "" -"Generate library function call to invalidate instruction cache entries after " -"fixing trampoline" +"Enable common options for generating profile info for profile feedback " +"directed optimizations" +msgstr "" + +#: common.opt:671 +msgid "" +"Enable common options for performing profile feedback directed optimizations" +msgstr "" + +#: common.opt:675 +msgid "Insert code to profile values of expressions" +msgstr "" + +#: common.opt:682 +msgid "Make compile reproducible using " +msgstr "" + +#: common.opt:686 +msgid "Return small aggregates in registers" +msgstr "" + +#: common.opt:690 +msgid "Enables a register move optimization" +msgstr "" + +#: common.opt:694 +msgid "Perform a register renaming optimization pass" +msgstr "" + +#: common.opt:698 +msgid "Reorder basic blocks to improve code placement" +msgstr "" + +#: common.opt:702 +msgid "Reorder basic blocks and partition into hot and cold sections" +msgstr "" + +#: common.opt:706 +msgid "Reorder functions to improve code placement" +msgstr "" + +#: common.opt:710 +msgid "Add a common subexpression elimination pass after loop optimizations" +msgstr "" + +#: common.opt:714 +msgid "Run the loop optimizer twice" +msgstr "" + +#: common.opt:718 +msgid "Disable optimizations that assume default FP rounding behavior" +msgstr "" + +#: common.opt:722 +msgid "Enable scheduling across basic blocks" +msgstr "" + +#: common.opt:726 +msgid "Allow speculative motion of non-loads" +msgstr "" + +#: common.opt:730 +msgid "Allow speculative motion of some loads" +msgstr "" + +#: common.opt:734 +msgid "Allow speculative motion of more loads" +msgstr "" + +#: common.opt:738 +msgid "Set the verbosity level of the scheduler" +msgstr "" + +#: common.opt:742 +msgid "If scheduling post reload, do superblock scheduling" +msgstr "" + +#: common.opt:746 +msgid "If scheduling post reload, do trace scheduling" +msgstr "" + +#: common.opt:750 +msgid "Reschedule instructions before register allocation" +msgstr "" + +#: common.opt:754 +msgid "Reschedule instructions after register allocation" +msgstr "" + +#: common.opt:760 +msgid "Allow premature scheduling of queued insns" +msgstr "" + +#: common.opt:764 +msgid "Set number of queued insns that can be prematurely scheduled" +msgstr "" + +#: common.opt:772 common.opt:776 +msgid "" +"Set dependence distance checking in premature scheduling of queued insns" +msgstr "" + +#: common.opt:780 +msgid "Mark data as shared rather than private" +msgstr "" + +#: common.opt:784 +msgid "Show column numbers in diagnostics, when available. Default on" +msgstr "" + +#: common.opt:788 +msgid "Disable optimizations observable by IEEE signaling NaNs" +msgstr "" + +#: common.opt:792 +msgid "Convert floating point constants to single precision constants" +msgstr "" + +#: common.opt:796 +msgid "Split lifetimes of induction variables when loops are unrolled" +msgstr "" + +#: common.opt:800 +msgid "Apply variable expansion when loops are unrolled" +msgstr "" + +#: common.opt:806 +msgid "Insert stack checking code into the program" +msgstr "" + +#: common.opt:813 +msgid "Trap if the stack goes past " +msgstr "" + +#: common.opt:817 +msgid "Trap if the stack goes past symbol " +msgstr "" + +#: common.opt:821 +msgid "Use propolice as a stack protection method" +msgstr "" + +#: common.opt:825 +msgid "Use a stack protection method for every function" +msgstr "" + +#: common.opt:829 +msgid "Perform strength reduction optimizations" +msgstr "" + +#: common.opt:837 +msgid "Assume strict aliasing rules apply" +msgstr "" + +#: common.opt:841 +msgid "Check for syntax errors, then stop" +msgstr "" + +#: common.opt:845 +msgid "Create data files needed by \"gcov\"" +msgstr "" + +#: common.opt:849 +msgid "Perform jump threading optimizations" +msgstr "" + +#: common.opt:853 +msgid "Report the time taken by each compiler pass" +msgstr "" + +#: common.opt:857 +msgid "Set the default thread-local storage code generation model" +msgstr "" + +#: common.opt:861 +msgid "Perform superblock formation via tail duplication" +msgstr "" + +#: common.opt:868 +msgid "Assume floating-point operations can trap" +msgstr "" + +#: common.opt:872 +msgid "Trap for signed overflow in addition, subtraction and multiplication" +msgstr "" + +#: common.opt:876 +msgid "Enable SSA-CCP optimization on trees" +msgstr "" + +#: common.opt:880 +msgid "Enable SSA-CCP optimization for stores and loads" +msgstr "" + +#: common.opt:884 +msgid "Enable loop header copying on trees" +msgstr "" + +#: common.opt:888 +msgid "Coalesce memory temporaries in the SSA->normal pass" +msgstr "" + +#: common.opt:892 +msgid "Replace SSA temporaries with better names in copies" +msgstr "" + +#: common.opt:896 +msgid "Enable copy propagation on trees" +msgstr "" + +#: common.opt:900 +msgid "Enable copy propagation for stores and loads" +msgstr "" + +#: common.opt:904 +msgid "Enable SSA dead code elimination optimization on trees" +msgstr "" + +#: common.opt:908 +msgid "Enable dominator optimizations" +msgstr "" + +#: common.opt:912 +msgid "Enable dead store elimination" +msgstr "" + +#: common.opt:916 +msgid "Enable Full Redundancy Elimination (FRE) on trees" +msgstr "" + +#: common.opt:920 +msgid "Enable loop invariant motion on trees" +msgstr "" + +#: common.opt:924 +msgid "Enable linear loop transforms on trees" +msgstr "" + +#: common.opt:928 +msgid "Create canonical induction variables in loops" +msgstr "" + +#: common.opt:932 +msgid "Enable loop optimizations on tree level" +msgstr "" + +#: common.opt:936 +msgid "Enable SSA-PRE optimization on trees" +msgstr "" + +#: common.opt:940 +msgid "Perform structural alias analysis" +msgstr "" + +#: common.opt:944 +msgid "Enable SSA code sinking on trees" +msgstr "" + +#: common.opt:948 +msgid "Perform scalar replacement of aggregates" +msgstr "" + +#: common.opt:952 +msgid "Replace temporary expressions in the SSA->normal pass" +msgstr "" + +#: common.opt:956 +msgid "Perform live range splitting during the SSA->normal pass" +msgstr "" + +#: common.opt:960 +msgid "Perform Value Range Propagation on trees" +msgstr "" + +#: common.opt:964 +msgid "Compile whole compilation unit at a time" +msgstr "" + +#: common.opt:968 +msgid "Perform loop unrolling when iteration count is known" +msgstr "" + +#: common.opt:972 +msgid "Perform loop unrolling for all loops" +msgstr "" + +#: common.opt:979 +msgid "Allow loop optimizations to assume that the loops behave in normal way" +msgstr "" + +#: common.opt:987 +msgid "Allow math optimizations that may violate IEEE or ISO standards" +msgstr "" + +#: common.opt:991 +msgid "Perform loop unswitching" +msgstr "" + +#: common.opt:995 +msgid "Just generate unwind tables for exception handling" +msgstr "" + +#: common.opt:999 +msgid "Perform variable tracking" +msgstr "" + +#: common.opt:1003 +msgid "Enable loop vectorization on trees" +msgstr "" + +#: common.opt:1007 +msgid "Enable loop versioning when doing loop vectorization on trees" +msgstr "" + +#: common.opt:1011 +msgid "Set the verbosity level of the vectorizer" +msgstr "" + +#: common.opt:1021 +msgid "Add extra commentary to assembler output" +msgstr "" + +#: common.opt:1025 +msgid "Set the default symbol visibility" +msgstr "" + +#: common.opt:1030 +msgid "Use expression value profiles in optimizations" +msgstr "" + +#: common.opt:1034 +msgid "Construct webs and split unrelated uses of single variable" +msgstr "" + +#: common.opt:1038 +msgid "Perform whole program optimizations" +msgstr "" + +#: common.opt:1042 +msgid "Assume signed arithmetic overflow wraps around" +msgstr "" + +#: common.opt:1046 +msgid "Put zero initialized data in the bss section" +msgstr "" + +#: common.opt:1050 +msgid "Generate debug information in default format" +msgstr "" + +#: common.opt:1054 +msgid "Generate debug information in COFF format" +msgstr "" + +#: common.opt:1058 +msgid "Generate debug information in DWARF v2 format" +msgstr "" + +#: common.opt:1062 +msgid "Generate debug information in default extended format" +msgstr "" + +#: common.opt:1066 +msgid "Generate debug information in STABS format" +msgstr "" + +#: common.opt:1070 +msgid "Generate debug information in extended STABS format" +msgstr "" + +#: common.opt:1074 +msgid "Generate debug information in VMS format" +msgstr "" + +#: common.opt:1078 +msgid "Generate debug information in XCOFF format" +msgstr "" + +#: common.opt:1082 +msgid "Generate debug information in extended XCOFF format" +msgstr "" + +#: common.opt:1086 +msgid "Place output into " +msgstr "" + +#: common.opt:1090 +msgid "Enable function profiling" +msgstr "" + +#: common.opt:1094 +msgid "Issue warnings needed for strict compliance to the standard" +msgstr "" + +#: common.opt:1098 +msgid "Like -pedantic but issue them as errors" +msgstr "" + +#: common.opt:1102 +msgid "Do not display functions compiled or elapsed time" +msgstr "" + +#: common.opt:1106 +msgid "Display the compiler's version" +msgstr "" + +#: common.opt:1110 +msgid "Suppress warnings" +msgstr "" + +#: attribs.c:175 +#, gcc-internal-format +msgid "%qs attribute directive ignored" +msgstr "" + +#: attribs.c:183 +#, gcc-internal-format +msgid "wrong number of arguments specified for %qs attribute" +msgstr "" + +#: attribs.c:200 +#, gcc-internal-format +msgid "%qs attribute does not apply to types" +msgstr "" + +#: attribs.c:247 +#, gcc-internal-format +msgid "%qs attribute only applies to function types" +msgstr "" + +#: bb-reorder.c:1872 +#, gcc-internal-format +msgid "multiple hot/cold transitions found (bb %i)" +msgstr "" + +#: bt-load.c:1504 +#, gcc-internal-format +msgid "" +"branch target register load optimization is not intended to be run twice" +msgstr "" + +#: builtins.c:366 +#, gcc-internal-format +msgid "offset outside bounds of constant string" +msgstr "" + +#: builtins.c:966 +#, gcc-internal-format +msgid "second argument to %<__builtin_prefetch%> must be a constant" +msgstr "" + +#: builtins.c:973 +#, gcc-internal-format +msgid "invalid second argument to %<__builtin_prefetch%>; using zero" +msgstr "" + +#: builtins.c:981 +#, gcc-internal-format +msgid "third argument to %<__builtin_prefetch%> must be a constant" +msgstr "" + +#: builtins.c:988 +#, gcc-internal-format +msgid "invalid third argument to %<__builtin_prefetch%>; using zero" +msgstr "" + +#: builtins.c:4078 +#, gcc-internal-format +msgid "argument of %<__builtin_args_info%> must be constant" +msgstr "" + +#: builtins.c:4084 +#, gcc-internal-format +msgid "argument of %<__builtin_args_info%> out of range" +msgstr "" + +#: builtins.c:4090 +#, gcc-internal-format +msgid "missing argument in %<__builtin_args_info%>" +msgstr "" + +#: builtins.c:4186 gimplify.c:1883 +#, gcc-internal-format +msgid "too few arguments to function %" +msgstr "" + +#: builtins.c:4349 +#, gcc-internal-format +msgid "first argument to % not of type %" +msgstr "" + +#. Unfortunately, this is merely undefined, rather than a constraint +#. violation, so we cannot make this an error. If this call is never +#. executed, the program is still strictly conforming. +#: builtins.c:4363 +#, gcc-internal-format +msgid "%qT is promoted to %qT when passed through %<...%>" +msgstr "" + +#: builtins.c:4368 +#, gcc-internal-format +msgid "(so you should pass %qT not %qT to %)" +msgstr "" + +#. We can, however, treat "undefined" any way we please. +#. Call abort to encourage the user to fix the program. +#: builtins.c:4374 c-typeck.c:2186 +#, gcc-internal-format +msgid "if this code is reached, the program will abort" +msgstr "" + +#: builtins.c:4493 +#, gcc-internal-format +msgid "invalid argument to %<__builtin_frame_address%>" +msgstr "" + +#: builtins.c:4495 +#, gcc-internal-format +msgid "invalid argument to %<__builtin_return_address%>" +msgstr "" + +#: builtins.c:4508 +#, gcc-internal-format +msgid "unsupported argument to %<__builtin_frame_address%>" +msgstr "" + +#: builtins.c:4510 +#, gcc-internal-format +msgid "unsupported argument to %<__builtin_return_address%>" +msgstr "" + +#: builtins.c:4613 +#, gcc-internal-format +msgid "second argument to %<__builtin_expect%> must be a constant" +msgstr "" + +#: builtins.c:6075 +#, gcc-internal-format +msgid "%<__builtin_longjmp%> second argument must be 1" +msgstr "" + +#: builtins.c:6639 +#, gcc-internal-format +msgid "target format does not support infinity" +msgstr "" + +#: builtins.c:8481 builtins.c:8575 +#, gcc-internal-format +msgid "too few arguments to function %qs" +msgstr "" + +#: builtins.c:8487 builtins.c:8581 +#, gcc-internal-format +msgid "too many arguments to function %qs" +msgstr "" + +#: builtins.c:8493 builtins.c:8606 +#, gcc-internal-format +msgid "non-floating-point argument to function %qs" +msgstr "" + +#: builtins.c:9700 +#, gcc-internal-format +msgid "% used in function with fixed args" +msgstr "" + +#. Evidently an out of date version of ; can't validate +#. va_start's second argument, but can still work as intended. +#: builtins.c:9707 +#, gcc-internal-format +msgid "%<__builtin_next_arg%> called without an argument" +msgstr "" + +#: builtins.c:9722 +#, gcc-internal-format +msgid "% used with too many arguments" +msgstr "" + +#. FIXME: Sometimes with the tree optimizers we can get the +#. not the last argument even though the user used the last +#. argument. We just warn and set the arg to be the last +#. argument so that we will get wrong-code because of +#. it. +#: builtins.c:9742 +#, gcc-internal-format +msgid "second parameter of % not last named argument" +msgstr "" + +#: builtins.c:9851 +#, gcc-internal-format +msgid "%Hfirst argument of %D must be a pointer, second integer constant" +msgstr "" + +#: builtins.c:9864 +#, gcc-internal-format +msgid "%Hlast argument of %D is not integer constant between 0 and 3" +msgstr "" + +#: builtins.c:9910 builtins.c:10063 builtins.c:10128 +#, gcc-internal-format +msgid "%Hcall to %D will always overflow destination buffer" +msgstr "" + +#: c-common.c:831 +#, gcc-internal-format +msgid "%qD is not defined outside of function scope" +msgstr "" + +#: c-common.c:852 +#, gcc-internal-format +msgid "" +"string length %qd is greater than the length %qd ISO C%d compilers are " +"required to support" +msgstr "" + +#: c-common.c:893 +#, gcc-internal-format +msgid "overflow in constant expression" +msgstr "" + +#: c-common.c:913 +#, gcc-internal-format +msgid "integer overflow in expression" +msgstr "" + +#: c-common.c:922 +#, gcc-internal-format +msgid "floating point overflow in expression" +msgstr "" + +#: c-common.c:928 +#, gcc-internal-format +msgid "vector overflow in expression" +msgstr "" + +#. This detects cases like converting -129 or 256 to unsigned char. +#: c-common.c:950 +#, gcc-internal-format +msgid "large integer implicitly truncated to unsigned type" +msgstr "" + +#: c-common.c:953 +#, gcc-internal-format +msgid "negative integer implicitly converted to unsigned type" +msgstr "" + +#: c-common.c:1013 +#, gcc-internal-format +msgid "overflow in implicit constant conversion" +msgstr "" + +#: c-common.c:1149 +#, gcc-internal-format +msgid "operation on %qE may be undefined" +msgstr "" + +#: c-common.c:1435 +#, gcc-internal-format +msgid "case label does not reduce to an integer constant" +msgstr "" + +#: c-common.c:1475 +#, gcc-internal-format +msgid "case label value is less than minimum value for type" msgstr "" -#: config/sparc/little-endian.opt:24 -msgid "Generate code for little-endian" +#: c-common.c:1483 +#, gcc-internal-format +msgid "case label value exceeds maximum value for type" msgstr "" -#: config/sparc/little-endian.opt:28 -msgid "Generate code for big-endian" +#: c-common.c:1491 +#, gcc-internal-format +msgid "lower value in case label range less than minimum value for type" msgstr "" -#: config/sparc/sparc.opt:24 config/sparc/sparc.opt:28 -msgid "Use hardware FP" +#: c-common.c:1500 +#, gcc-internal-format +msgid "upper value in case label range exceeds maximum value for type" msgstr "" -#: config/sparc/sparc.opt:32 -msgid "Do not use hardware FP" +#: c-common.c:1840 +#, gcc-internal-format +msgid "invalid truth-value expression" msgstr "" -#: config/sparc/sparc.opt:36 -msgid "Assume possible double misalignment" +#: c-common.c:1888 +#, gcc-internal-format +msgid "invalid operands to binary %s" msgstr "" -#: config/sparc/sparc.opt:40 -msgid "Pass -assert pure-text to linker" +#: c-common.c:2123 +#, gcc-internal-format +msgid "comparison is always false due to limited range of data type" msgstr "" -#: config/sparc/sparc.opt:44 -msgid "Use ABI reserved registers" +#: c-common.c:2125 +#, gcc-internal-format +msgid "comparison is always true due to limited range of data type" msgstr "" -#: config/sparc/sparc.opt:48 -msgid "Use hardware quad FP instructions" +#: c-common.c:2195 +#, gcc-internal-format +msgid "comparison of unsigned expression >= 0 is always true" msgstr "" -#: config/sparc/sparc.opt:52 -msgid "Do not use hardware quad fp instructions" +#: c-common.c:2204 +#, gcc-internal-format +msgid "comparison of unsigned expression < 0 is always false" msgstr "" -#: config/sparc/sparc.opt:56 -msgid "Compile for V8+ ABI" +#: c-common.c:2246 +#, gcc-internal-format +msgid "pointer of type % used in arithmetic" msgstr "" -#: config/sparc/sparc.opt:60 -msgid "Use UltraSPARC Visual Instruction Set extensions" +#: c-common.c:2252 +#, gcc-internal-format +msgid "pointer to a function used in arithmetic" msgstr "" -#: config/sparc/sparc.opt:64 -msgid "Pointers are 64-bit" +#: c-common.c:2258 +#, gcc-internal-format +msgid "pointer to member function used in arithmetic" msgstr "" -#: config/sparc/sparc.opt:68 -msgid "Pointers are 32-bit" +#. Common Ada/Pascal programmer's mistake. We always warn +#. about this since it is so bad. +#: c-common.c:2384 +#, gcc-internal-format +msgid "the address of %qD, will always evaluate as %" msgstr "" -#: config/sparc/sparc.opt:72 -msgid "Use 64-bit ABI" +#: c-common.c:2481 +#, gcc-internal-format +msgid "suggest parentheses around assignment used as truth value" msgstr "" -#: config/sparc/sparc.opt:76 -msgid "Use 32-bit ABI" +#: c-common.c:2549 c-common.c:2589 +#, gcc-internal-format +msgid "invalid use of %" msgstr "" -#: config/sparc/sparc.opt:80 -msgid "Use stack bias" +#: c-common.c:2805 +#, gcc-internal-format +msgid "invalid application of % to a function type" msgstr "" -#: config/sparc/sparc.opt:84 -msgid "Use structs on stronger alignment for double-word copies" +#: c-common.c:2815 +#, gcc-internal-format +msgid "invalid application of %qs to a void type" msgstr "" -#: config/sparc/sparc.opt:88 -msgid "Optimize tail call instructions in assembler and linker" +#: c-common.c:2821 +#, gcc-internal-format +msgid "invalid application of %qs to incomplete type %qT " msgstr "" -#: config/sparc/sparc.opt:100 -msgid "Use given SPARC-V9 code model" +#: c-common.c:2862 +#, gcc-internal-format +msgid "%<__alignof%> applied to a bit-field" msgstr "" -#: config/stormy16/stormy16.opt:25 -msgid "Provide libraries for the simulator" +#: c-common.c:3393 +#, gcc-internal-format +msgid "cannot disable built-in function %qs" msgstr "" -#: config/v850/v850.opt:24 -msgid "Use registers r2 and r5" +#: c-common.c:3581 +#, gcc-internal-format +msgid "pointers are not permitted as case values" msgstr "" -#: config/v850/v850.opt:28 -msgid "Use 4 byte entries in switch tables" +#: c-common.c:3587 +#, gcc-internal-format +msgid "range expressions in switch statements are non-standard" msgstr "" -#: config/v850/v850.opt:32 -msgid "Enable backend debugging" +#: c-common.c:3613 +#, gcc-internal-format +msgid "empty range specified" msgstr "" -#: config/v850/v850.opt:36 -msgid "Do not use the callt instruction" +#: c-common.c:3673 +#, gcc-internal-format +msgid "duplicate (or overlapping) case value" msgstr "" -#: config/v850/v850.opt:40 -msgid "Reuse r30 on a per function basis" +#: c-common.c:3674 +#, gcc-internal-format +msgid "%Jthis is the first entry overlapping that value" msgstr "" -#: config/v850/v850.opt:44 -msgid "Support Green Hills ABI" +#: c-common.c:3678 +#, gcc-internal-format +msgid "duplicate case value" msgstr "" -#: config/v850/v850.opt:48 -msgid "Prohibit PC relative function calls" +#: c-common.c:3679 +#, gcc-internal-format +msgid "%Jpreviously used here" msgstr "" -#: config/v850/v850.opt:52 -msgid "Use stubs for function prologues" +#: c-common.c:3683 +#, gcc-internal-format +msgid "multiple default labels in one switch" msgstr "" -#: config/v850/v850.opt:56 -msgid "Set the max size of data eligible for the SDA area" +#: c-common.c:3684 +#, gcc-internal-format +msgid "%Jthis is the first default label" msgstr "" -#: config/v850/v850.opt:60 -msgid "Enable the use of the short load instructions" +#: c-common.c:3733 +#, gcc-internal-format +msgid "%Jcase value %qs not in enumerated type" msgstr "" -#: config/v850/v850.opt:64 -msgid "Same as: -mep -mprolog-function" +#: c-common.c:3736 +#, gcc-internal-format +msgid "%Jcase value %qs not in enumerated type %qT" msgstr "" -#: config/v850/v850.opt:68 -msgid "Set the max size of data eligible for the TDA area" +#: c-common.c:3793 +#, gcc-internal-format +msgid "%Hswitch missing default case" msgstr "" -#: config/v850/v850.opt:72 -msgid "Enforce strict alignment" +#. Warn if there are enumerators that don't correspond to +#. case expressions. +#: c-common.c:3853 +#, gcc-internal-format +msgid "%Henumeration value %qE not handled in switch" msgstr "" -#: config/v850/v850.opt:79 -msgid "Compile for the v850 processor" +#: c-common.c:3880 +#, gcc-internal-format +msgid "taking the address of a label is non-standard" msgstr "" -#: config/v850/v850.opt:83 -msgid "Compile for the v850e processor" +#: c-common.c:4049 c-common.c:4068 c-common.c:4086 c-common.c:4113 +#: c-common.c:4132 c-common.c:4155 c-common.c:4176 c-common.c:4201 +#: c-common.c:4227 c-common.c:4275 c-common.c:4302 c-common.c:4353 +#: c-common.c:4378 c-common.c:4406 c-common.c:4425 c-common.c:4757 +#: c-common.c:4822 c-common.c:4918 c-common.c:4984 c-common.c:5002 +#: c-common.c:5048 c-common.c:5118 c-common.c:5142 c-common.c:5429 +#: c-common.c:5452 c-common.c:5491 +#, gcc-internal-format +msgid "%qE attribute ignored" msgstr "" -#: config/v850/v850.opt:87 -msgid "Compile for the v850e1 processor" +#: c-common.c:4256 +#, gcc-internal-format +msgid "%qE attribute have effect only on public objects" msgstr "" -#: config/v850/v850.opt:91 -msgid "Set the max size of data eligible for the ZDA area" +#: c-common.c:4463 +#, gcc-internal-format +msgid "unknown machine mode %qs" msgstr "" -#: config/vax/vax.opt:24 config/vax/vax.opt:28 -msgid "Target DFLOAT double precision code" +#: c-common.c:4483 +#, gcc-internal-format +msgid "specifying vector types with __attribute__ ((mode)) is deprecated" msgstr "" -#: config/vax/vax.opt:32 config/vax/vax.opt:36 -msgid "Generate GFLOAT double precision code" +#: c-common.c:4486 +#, gcc-internal-format +msgid "use __attribute__ ((vector_size)) instead" msgstr "" -#: config/vax/vax.opt:40 -msgid "Generate code for GNU assembler (gas)" +#: c-common.c:4495 +#, gcc-internal-format +msgid "unable to emulate %qs" msgstr "" -#: config/vax/vax.opt:44 -msgid "Generate code for UNIX assembler" +#: c-common.c:4505 +#, gcc-internal-format +msgid "invalid pointer mode %qs" msgstr "" -#: config/vax/vax.opt:48 -msgid "Use VAXC structure conventions" +#: c-common.c:4520 +#, gcc-internal-format +msgid "no data type for mode %qs" msgstr "" -#: config/xtensa/xtensa.opt:24 -msgid "Use CONST16 instruction to load constants" +#: c-common.c:4530 +#, gcc-internal-format +msgid "cannot use mode %qs for enumeral types" msgstr "" -#: config/xtensa/xtensa.opt:28 -msgid "Enable fused multiply/add and multiply/subtract FP instructions" +#: c-common.c:4557 +#, gcc-internal-format +msgid "mode %qs applied to inappropriate type" msgstr "" -#: config/xtensa/xtensa.opt:32 -msgid "Use indirect CALLXn instructions for large programs" +#: c-common.c:4588 +#, gcc-internal-format +msgid "%Jsection attribute cannot be specified for local variables" msgstr "" -#: config/xtensa/xtensa.opt:36 -msgid "Automatically align branch targets to reduce branch penalties" +#: c-common.c:4599 +#, gcc-internal-format +msgid "section of %q+D conflicts with previous declaration" msgstr "" -#: config/xtensa/xtensa.opt:40 -msgid "Intersperse literal pools with code in the text section" +#: c-common.c:4608 +#, gcc-internal-format +msgid "section attribute not allowed for %q+D" msgstr "" -#: fortran/lang.opt:30 -msgid "Add a directory for INCLUDE and MODULE searching" +#: c-common.c:4614 +#, gcc-internal-format +msgid "%Jsection attributes are not supported for this target" msgstr "" -#: fortran/lang.opt:34 -msgid "Put MODULE files in 'directory'" +#: c-common.c:4646 +#, gcc-internal-format +msgid "requested alignment is not a constant" msgstr "" -#: fortran/lang.opt:42 -msgid "Warn about possible aliasing of dummy arguments" +#: c-common.c:4651 +#, gcc-internal-format +msgid "requested alignment is not a power of 2" msgstr "" -#: fortran/lang.opt:46 -msgid "Warn about implicit conversion" +#: c-common.c:4656 +#, gcc-internal-format +msgid "requested alignment is too large" msgstr "" -#: fortran/lang.opt:50 -msgid "Warn about calls with implicit interface" +#: c-common.c:4682 +#, gcc-internal-format +msgid "alignment may not be specified for %q+D" msgstr "" -#: fortran/lang.opt:54 -msgid "Warn about truncated source lines" +#: c-common.c:4720 +#, gcc-internal-format +msgid "%q+D defined both normally and as an alias" msgstr "" -#: fortran/lang.opt:58 -msgid "Warn about usage of non-standard intrinsics" +#: c-common.c:4736 +#, gcc-internal-format +msgid "alias argument not a string" msgstr "" -#: fortran/lang.opt:62 -msgid "Warn about \"suspicious\" constructs" +#: c-common.c:4787 +#, gcc-internal-format +msgid "%Jweakref attribute must appear before alias attribute" msgstr "" -#: fortran/lang.opt:66 -msgid "Warn about underflow of numerical constant expressions" +#: c-common.c:4815 +#, gcc-internal-format +msgid "%qE attribute ignored on non-class types" msgstr "" -#: fortran/lang.opt:74 -msgid "" -"Do not treat local variables and COMMON blocks as if they were named in SAVE " -"statements" +#: c-common.c:4828 +#, gcc-internal-format +msgid "visibility argument not a string" msgstr "" -#: fortran/lang.opt:78 -msgid "Specify that backslash in string introduces an escape character" +#: c-common.c:4840 +#, gcc-internal-format +msgid "%qE attribute ignored on types" msgstr "" -#: fortran/lang.opt:82 -msgid "Set the default double precision kind to an 8 byte wide type" +#: c-common.c:4855 +#, gcc-internal-format +msgid "" +"visibility argument must be one of \"default\", \"hidden\", \"protected\" or " +"\"internal\"" msgstr "" -#: fortran/lang.opt:86 -msgid "Set the default integer kind to an 8 byte wide type" +#: c-common.c:4926 +#, gcc-internal-format +msgid "tls_model argument not a string" msgstr "" -#: fortran/lang.opt:90 -msgid "Set the default real kind to an 8 byte wide type" +#: c-common.c:4939 +#, gcc-internal-format +msgid "" +"tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-" +"dynamic\" or \"global-dynamic\"" msgstr "" -#: fortran/lang.opt:94 -msgid "Ignore 'D' in column one in fixed form" +#: c-common.c:4958 c-common.c:5022 +#, gcc-internal-format +msgid "%J%qE attribute applies only to functions" msgstr "" -#: fortran/lang.opt:98 -msgid "Treat lines with 'D' in column one as comments" +#: c-common.c:4963 c-common.c:5027 +#, gcc-internal-format +msgid "%Jcan%'t set %qE attribute after definition" msgstr "" -#: fortran/lang.opt:102 -msgid "Allow dollar signs in entity names" +#: c-common.c:5116 +#, gcc-internal-format +msgid "%qE attribute ignored for %qE" msgstr "" -#: fortran/lang.opt:106 -msgid "Display the code tree after parsing" +#: c-common.c:5171 +#, gcc-internal-format +msgid "invalid vector type for attribute %qE" msgstr "" -#: fortran/lang.opt:110 -msgid "Use f2c calling convention" +#: c-common.c:5179 +#, gcc-internal-format +msgid "number of components of the vector not a power of two" msgstr "" -#: fortran/lang.opt:114 -msgid "Assume that the source file is fixed form" +#: c-common.c:5207 +#, gcc-internal-format +msgid "nonnull attribute without arguments on a non-prototype" msgstr "" -#: fortran/lang.opt:118 -msgid "Assume that the source file is free form" +#: c-common.c:5222 +#, gcc-internal-format +msgid "nonnull argument has invalid operand number (argument %lu)" msgstr "" -#: fortran/lang.opt:122 -msgid "Append underscores to externally visible names" +#: c-common.c:5241 +#, gcc-internal-format +msgid "" +"nonnull argument with out-of-range operand number (argument %lu, operand %lu)" msgstr "" -#: fortran/lang.opt:126 -msgid "Append a second underscore if the name already contains an underscore" +#: c-common.c:5249 +#, gcc-internal-format +msgid "" +"nonnull argument references non-pointer operand (argument %lu, operand %lu)" msgstr "" -#: fortran/lang.opt:130 -msgid "" -"Specify that no implicit typing is allowed, unless overridden by explicit " -"IMPLICIT statements" +#: c-common.c:5312 c-common.c:5335 +#, gcc-internal-format +msgid "not enough variable arguments to fit a sentinel" msgstr "" -#: fortran/lang.opt:134 -msgid "Allow arbitrary character line width in fixed mode" +#: c-common.c:5356 +#, gcc-internal-format +msgid "missing sentinel in function call" msgstr "" -#: fortran/lang.opt:138 -msgid "Use n as character line width in fixed mode" +#: c-common.c:5398 +#, gcc-internal-format +msgid "null argument where non-null required (argument %lu)" msgstr "" -#: fortran/lang.opt:142 -msgid "Maximum identifier length" +#: c-common.c:5463 +#, gcc-internal-format +msgid "cleanup argument not an identifier" msgstr "" -#: fortran/lang.opt:146 -msgid "Size in bytes of the largest array that will be put on the stack" +#: c-common.c:5470 +#, gcc-internal-format +msgid "cleanup argument not a function" msgstr "" -#: fortran/lang.opt:150 -msgid "Set default accessibility of module entities to PRIVATE" +#: c-common.c:5509 +#, gcc-internal-format +msgid "%qE attribute requires prototypes with named arguments" msgstr "" -#: fortran/lang.opt:154 -msgid "Don't generate code, just do syntax and semantics checking" +#: c-common.c:5520 +#, gcc-internal-format +msgid "%qE attribute only applies to variadic functions" msgstr "" -#: fortran/lang.opt:158 -msgid "Try to layout derived types as compact as possible" +#: c-common.c:5531 +#, gcc-internal-format +msgid "requested position is not an integer constant" msgstr "" -#: fortran/lang.opt:162 -msgid "Copy array sections into a contiguous block on procedure entry" +#: c-common.c:5538 +#, gcc-internal-format +msgid "requested position is less than zero" msgstr "" -#: fortran/lang.opt:166 -msgid "Set the kind for a real with the 'q' exponent to 'n'" +#: c-common.c:5840 +#, gcc-internal-format +msgid "" +"%Hignoring return value of %qD, declared with attribute warn_unused_result" msgstr "" -#: fortran/lang.opt:170 -msgid "Conform to the ISO Fortran 95 standard" +#: c-common.c:5844 +#, gcc-internal-format +msgid "" +"%Hignoring return value of function declared with attribute " +"warn_unused_result" msgstr "" -#: fortran/lang.opt:174 -msgid "Conform to the ISO Fortran 2003 standard" +#: c-common.c:5904 cp/typeck.c:4239 +#, gcc-internal-format +msgid "attempt to take address of bit-field structure member %qD" msgstr "" -#: fortran/lang.opt:178 -msgid "Conform nothing in particular" +#: c-common.c:5951 +#, gcc-internal-format +msgid "invalid lvalue in assignment" msgstr "" -#: fortran/lang.opt:182 -msgid "Accept extensions to support legacy code" +#: c-common.c:5954 +#, gcc-internal-format +msgid "invalid lvalue in increment" msgstr "" -#: java/lang.opt:66 -msgid "Warn if a deprecated compiler feature, class, method, or field is used" +#: c-common.c:5957 +#, gcc-internal-format +msgid "invalid lvalue in decrement" msgstr "" -#: java/lang.opt:70 -msgid "Warn if deprecated empty statements are found" +#: c-common.c:5960 +#, gcc-internal-format +msgid "invalid lvalue in unary %<&%>" msgstr "" -#: java/lang.opt:74 -msgid "Warn if .class files are out of date" +#: c-common.c:5963 +#, gcc-internal-format +msgid "invalid lvalue in asm statement" msgstr "" -#: java/lang.opt:78 -msgid "Warn if modifiers are specified when not necessary" +#: c-common.c:6091 c-common.c:6140 c-typeck.c:2444 +#, gcc-internal-format +msgid "too few arguments to function %qE" msgstr "" -#: java/lang.opt:82 -msgid "Deprecated; use --classpath instead" +#. ??? This should not be an error when inlining calls to +#. unprototyped functions. +#: c-common.c:6108 c-typeck.c:4117 +#, gcc-internal-format +msgid "incompatible type for argument %d of %qE" msgstr "" -#: java/lang.opt:86 -msgid "Permit the use of the assert keyword" +#. Except for passing an argument to an unprototyped function, +#. this is a constraint violation. When passing an argument to +#. an unprototyped function, it is compile-time undefined; +#. making it a constraint in that case was rejected in +#. DR#252. +#: c-convert.c:96 c-typeck.c:1597 c-typeck.c:3758 cp/typeck.c:1372 +#: cp/typeck.c:5986 fortran/convert.c:89 treelang/tree-convert.c:79 +#, gcc-internal-format +msgid "void value not ignored as it ought to be" msgstr "" -#: java/lang.opt:108 -msgid "Replace system path" +#: c-convert.c:134 fortran/convert.c:122 java/typeck.c:154 +#: treelang/tree-convert.c:105 +#, gcc-internal-format +msgid "conversion to non-scalar type requested" msgstr "" -#: java/lang.opt:112 -msgid "Generate checks for references to NULL" +#: c-decl.c:564 +#, gcc-internal-format +msgid "array %q+D assumed to have one element" msgstr "" -#: java/lang.opt:116 -msgid "Set class path" +#: c-decl.c:669 +#, gcc-internal-format +msgid "GCC supports only %u nested scopes" msgstr "" -#: java/lang.opt:123 -msgid "Output a class file" +#: c-decl.c:755 cp/decl.c:355 java/decl.c:1685 +#, gcc-internal-format +msgid "label %q+D used but not defined" msgstr "" -#: java/lang.opt:127 -msgid "Alias for -femit-class-file" +#: c-decl.c:761 cp/decl.c:366 java/decl.c:1690 +#, gcc-internal-format +msgid "label %q+D defined but not used" msgstr "" -#: java/lang.opt:131 -msgid "Choose input encoding (defaults from your locale)" +#: c-decl.c:763 +#, gcc-internal-format +msgid "label %q+D declared but not defined" msgstr "" -#: java/lang.opt:135 -msgid "Set the extension directory path" +#: c-decl.c:798 +#, gcc-internal-format +msgid "nested function %q+D declared but never defined" msgstr "" -#: java/lang.opt:139 -msgid "Input file is a file with a list of filenames to compile" +#: c-decl.c:812 cp/decl.c:560 +#, gcc-internal-format +msgid "unused variable %q+D" msgstr "" -#: java/lang.opt:143 -msgid "Always check for non gcj generated classes archives" +#: c-decl.c:816 +#, gcc-internal-format +msgid "type of array %q+D completed incompatibly with implicit initialization" msgstr "" -#: java/lang.opt:147 +#: c-decl.c:1050 +#, gcc-internal-format msgid "" -"Assume the runtime uses a hash table to map an object to its synchronization " -"structure" +"a parameter list with an ellipsis can%'t match an empty parameter name list " +"declaration" msgstr "" -#: java/lang.opt:151 -msgid "Use offset tables for virtual method calls" +#: c-decl.c:1057 +#, gcc-internal-format +msgid "" +"an argument type that has a default promotion can%'t match an empty " +"parameter name list declaration" msgstr "" -#: java/lang.opt:158 -msgid "Assume native functions are implemented using JNI" +#: c-decl.c:1092 +#, gcc-internal-format +msgid "" +"prototype for %q+D declares more arguments than previous old-style definition" msgstr "" -#: java/lang.opt:162 -msgid "Enable optimization of static class initialization code" +#: c-decl.c:1098 +#, gcc-internal-format +msgid "" +"prototype for %q+D declares fewer arguments than previous old-style " +"definition" msgstr "" -#: java/lang.opt:169 -msgid "Enable assignability checks for stores into object arrays" +#: c-decl.c:1107 +#, gcc-internal-format +msgid "prototype for %q+D declares argument %d with incompatible type" msgstr "" -#: java/lang.opt:173 -msgid "Generate code for the Boehm GC" +#. If we get here, no errors were found, but do issue a warning +#. for this poor-style construct. +#: c-decl.c:1120 +#, gcc-internal-format +msgid "prototype for %q+D follows non-prototype definition" msgstr "" -#: java/lang.opt:177 -msgid "Call a library routine to do integer divisions" +#: c-decl.c:1135 +#, gcc-internal-format +msgid "previous definition of %q+D was here" msgstr "" -#: java/lang.opt:181 -msgid "Generated should be loaded by bootstrap loader" +#: c-decl.c:1137 +#, gcc-internal-format +msgid "previous implicit declaration of %q+D was here" msgstr "" -#: treelang/lang.opt:30 -msgid "Trace lexical analysis" +#: c-decl.c:1139 +#, gcc-internal-format +msgid "previous declaration of %q+D was here" msgstr "" -#: treelang/lang.opt:34 -msgid "Trace the parsing process" +#: c-decl.c:1179 +#, gcc-internal-format +msgid "%q+D redeclared as different kind of symbol" msgstr "" -#: attribs.c:175 +#: c-decl.c:1183 #, gcc-internal-format -msgid "%qs attribute directive ignored" +msgid "built-in function %q+D declared as non-function" msgstr "" -#: attribs.c:183 +#: c-decl.c:1186 c-decl.c:1302 c-decl.c:1926 #, gcc-internal-format -msgid "wrong number of arguments specified for %qs attribute" +msgid "declaration of %q+D shadows a built-in function" msgstr "" -#: attribs.c:200 +#: c-decl.c:1195 #, gcc-internal-format -msgid "%qs attribute does not apply to types" +msgid "redeclaration of enumerator %q+D" msgstr "" -#: attribs.c:247 +#. If types don't match for a built-in, throw away the +#. built-in. No point in calling locate_old_decl here, it +#. won't print anything. +#: c-decl.c:1216 #, gcc-internal-format -msgid "%qs attribute only applies to function types" +msgid "conflicting types for built-in function %q+D" msgstr "" -#: bb-reorder.c:1871 +#: c-decl.c:1240 c-decl.c:1253 c-decl.c:1263 #, gcc-internal-format -msgid "multiple hot/cold transitions found (bb %i)" +msgid "conflicting types for %q+D" msgstr "" -#: bt-load.c:1504 +#: c-decl.c:1261 #, gcc-internal-format -msgid "" -"branch target register load optimization is not intended to be run twice" +msgid "conflicting type qualifiers for %q+D" msgstr "" -#: builtins.c:366 +#. Allow OLDDECL to continue in use. +#: c-decl.c:1278 #, gcc-internal-format -msgid "offset outside bounds of constant string" +msgid "redefinition of typedef %q+D" msgstr "" -#: builtins.c:966 +#: c-decl.c:1326 c-decl.c:1404 #, gcc-internal-format -msgid "second argument to %<__builtin_prefetch%> must be a constant" +msgid "redefinition of %q+D" msgstr "" -#: builtins.c:973 +#: c-decl.c:1361 c-decl.c:1442 #, gcc-internal-format -msgid "invalid second argument to %<__builtin_prefetch%>; using zero" +msgid "static declaration of %q+D follows non-static declaration" msgstr "" -#: builtins.c:981 +#: c-decl.c:1371 c-decl.c:1378 c-decl.c:1431 c-decl.c:1439 #, gcc-internal-format -msgid "third argument to %<__builtin_prefetch%> must be a constant" +msgid "non-static declaration of %q+D follows static declaration" msgstr "" -#: builtins.c:988 +#: c-decl.c:1391 #, gcc-internal-format -msgid "invalid third argument to %<__builtin_prefetch%>; using zero" +msgid "thread-local declaration of %q+D follows non-thread-local declaration" msgstr "" -#: builtins.c:4078 +#: c-decl.c:1394 #, gcc-internal-format -msgid "argument of %<__builtin_args_info%> must be constant" +msgid "non-thread-local declaration of %q+D follows thread-local declaration" msgstr "" -#: builtins.c:4084 +#: c-decl.c:1424 #, gcc-internal-format -msgid "argument of %<__builtin_args_info%> out of range" +msgid "extern declaration of %q+D follows declaration with no linkage" msgstr "" -#: builtins.c:4090 +#: c-decl.c:1460 #, gcc-internal-format -msgid "missing argument in %<__builtin_args_info%>" +msgid "declaration of %q+D with no linkage follows extern declaration" msgstr "" -#: builtins.c:4186 gimplify.c:1776 +#: c-decl.c:1466 #, gcc-internal-format -msgid "too few arguments to function %" +msgid "redeclaration of %q+D with no linkage" msgstr "" -#: builtins.c:4349 +#: c-decl.c:1480 #, gcc-internal-format -msgid "first argument to % not of type %" +msgid "" +"redeclaration of %q+D with different visibility (old visibility preserved)" msgstr "" -#. Unfortunately, this is merely undefined, rather than a constraint -#. violation, so we cannot make this an error. If this call is never -#. executed, the program is still strictly conforming. -#: builtins.c:4363 +#: c-decl.c:1491 #, gcc-internal-format -msgid "%qT is promoted to %qT when passed through %<...%>" +msgid "inline declaration of %qD follows declaration with attribute noinline" msgstr "" -#: builtins.c:4368 +#: c-decl.c:1498 #, gcc-internal-format -msgid "(so you should pass %qT not %qT to %)" +msgid "declaration of %q+D with attribute noinline follows inline declaration " msgstr "" -#. We can, however, treat "undefined" any way we please. -#. Call abort to encourage the user to fix the program. -#: builtins.c:4374 c-typeck.c:2076 +#: c-decl.c:1513 #, gcc-internal-format -msgid "if this code is reached, the program will abort" +msgid "%q+D declared inline after being called" msgstr "" -#: builtins.c:4493 +#: c-decl.c:1518 #, gcc-internal-format -msgid "invalid argument to %<__builtin_frame_address%>" +msgid "%q+D declared inline after its definition" msgstr "" -#: builtins.c:4495 +#: c-decl.c:1537 #, gcc-internal-format -msgid "invalid argument to %<__builtin_return_address%>" +msgid "redefinition of parameter %q+D" msgstr "" -#: builtins.c:4508 +#: c-decl.c:1564 #, gcc-internal-format -msgid "unsupported argument to %<__builtin_frame_address%>" +msgid "redundant redeclaration of %q+D" msgstr "" -#: builtins.c:4510 +#: c-decl.c:1913 #, gcc-internal-format -msgid "unsupported argument to %<__builtin_return_address%>" +msgid "declaration of %q+D shadows previous non-variable" msgstr "" -#: builtins.c:4613 +#: c-decl.c:1918 #, gcc-internal-format -msgid "second argument to %<__builtin_expect%> must be a constant" +msgid "declaration of %q+D shadows a parameter" msgstr "" -#: builtins.c:6063 +#: c-decl.c:1921 #, gcc-internal-format -msgid "%<__builtin_longjmp%> second argument must be 1" +msgid "declaration of %q+D shadows a global declaration" msgstr "" -#: builtins.c:6610 +#: c-decl.c:1931 #, gcc-internal-format -msgid "target format does not support infinity" +msgid "declaration of %q+D shadows a previous local" msgstr "" -#: builtins.c:8439 builtins.c:8533 +#: c-decl.c:1934 cp/name-lookup.c:953 cp/name-lookup.c:984 +#: cp/name-lookup.c:992 #, gcc-internal-format -msgid "too few arguments to function %qs" +msgid "%Jshadowed declaration is here" msgstr "" -#: builtins.c:8445 builtins.c:8539 +#: c-decl.c:2134 #, gcc-internal-format -msgid "too many arguments to function %qs" +msgid "nested extern declaration of %qD" msgstr "" -#: builtins.c:8451 builtins.c:8564 +#: c-decl.c:2303 #, gcc-internal-format -msgid "non-floating-point argument to function %qs" +msgid "implicit declaration of function %qE" msgstr "" -#: builtins.c:9656 +#: c-decl.c:2364 #, gcc-internal-format -msgid "% used in function with fixed args" +msgid "incompatible implicit declaration of built-in function %qD" msgstr "" -#. Evidently an out of date version of ; can't validate -#. va_start's second argument, but can still work as intended. -#: builtins.c:9663 +#: c-decl.c:2373 #, gcc-internal-format -msgid "%<__builtin_next_arg%> called without an argument" +msgid "incompatible implicit declaration of function %qD" msgstr "" -#: builtins.c:9678 +#: c-decl.c:2426 #, gcc-internal-format -msgid "% used with too many arguments" +msgid "%H%qE undeclared here (not in a function)" msgstr "" -#. FIXME: Sometimes with the tree optimizers we can get the -#. not the last argument even though the user used the last -#. argument. We just warn and set the arg to be the last -#. argument so that we will get wrong-code because of -#. it. -#: builtins.c:9698 +#: c-decl.c:2431 #, gcc-internal-format -msgid "second parameter of % not last named argument" +msgid "%H%qE undeclared (first use in this function)" msgstr "" -#: builtins.c:9807 +#: c-decl.c:2435 #, gcc-internal-format -msgid "%Hfirst argument of %D must be a pointer, second integer constant" +msgid "%H(Each undeclared identifier is reported only once" msgstr "" -#: builtins.c:9820 +#: c-decl.c:2436 #, gcc-internal-format -msgid "%Hlast argument of %D is not integer constant between 0 and 3" +msgid "%Hfor each function it appears in.)" msgstr "" -#: builtins.c:9866 builtins.c:10019 builtins.c:10084 +#: c-decl.c:2474 cp/decl.c:2131 #, gcc-internal-format -msgid "%Hcall to %D will always overflow destination buffer" +msgid "label %qE referenced outside of any function" msgstr "" -#: c-common.c:828 +#: c-decl.c:2516 #, gcc-internal-format -msgid "%qD is not defined outside of function scope" +msgid "duplicate label declaration %qE" msgstr "" -#: c-common.c:849 +#: c-decl.c:2552 #, gcc-internal-format -msgid "" -"string length %qd is greater than the length %qd ISO C%d compilers are " -"required to support" +msgid "%Hduplicate label %qD" msgstr "" -#: c-common.c:890 +#: c-decl.c:2562 #, gcc-internal-format -msgid "overflow in constant expression" +msgid "%Jjump into statement expression" msgstr "" -#: c-common.c:910 +#: c-decl.c:2564 #, gcc-internal-format -msgid "integer overflow in expression" +msgid "%Jjump into scope of identifier with variably modified type" msgstr "" -#: c-common.c:919 +#: c-decl.c:2579 #, gcc-internal-format -msgid "floating point overflow in expression" +msgid "" +"%Htraditional C lacks a separate namespace for labels, identifier %qE " +"conflicts" msgstr "" -#: c-common.c:925 +#: c-decl.c:2654 #, gcc-internal-format -msgid "vector overflow in expression" +msgid "%H%qE defined as wrong kind of tag" msgstr "" -#. This detects cases like converting -129 or 256 to unsigned char. -#: c-common.c:947 +#: c-decl.c:2869 #, gcc-internal-format -msgid "large integer implicitly truncated to unsigned type" +msgid "unnamed struct/union that defines no instances" msgstr "" -#: c-common.c:950 +#: c-decl.c:2877 #, gcc-internal-format -msgid "negative integer implicitly converted to unsigned type" +msgid "empty declaration with storage class specifier does not redeclare tag" msgstr "" -#: c-common.c:1008 +#: c-decl.c:2888 #, gcc-internal-format -msgid "overflow in implicit constant conversion" +msgid "empty declaration with type qualifier does not redeclare tag" msgstr "" -#: c-common.c:1144 +#: c-decl.c:2909 c-decl.c:2916 #, gcc-internal-format -msgid "operation on %qE may be undefined" +msgid "useless type name in empty declaration" msgstr "" -#: c-common.c:1430 +#: c-decl.c:2924 #, gcc-internal-format -msgid "case label does not reduce to an integer constant" +msgid "% in empty declaration" msgstr "" -#: c-common.c:1470 +#: c-decl.c:2930 #, gcc-internal-format -msgid "case label value is less than minimum value for type" +msgid "% in file-scope empty declaration" msgstr "" -#: c-common.c:1478 +#: c-decl.c:2936 #, gcc-internal-format -msgid "case label value exceeds maximum value for type" +msgid "% in file-scope empty declaration" msgstr "" -#: c-common.c:1486 +#: c-decl.c:2942 #, gcc-internal-format -msgid "lower value in case label range less than minimum value for type" +msgid "useless storage class specifier in empty declaration" msgstr "" -#: c-common.c:1495 +#: c-decl.c:2948 #, gcc-internal-format -msgid "upper value in case label range exceeds maximum value for type" +msgid "useless %<__thread%> in empty declaration" msgstr "" -#: c-common.c:1835 +#: c-decl.c:2956 #, gcc-internal-format -msgid "invalid truth-value expression" +msgid "useless type qualifier in empty declaration" msgstr "" -#: c-common.c:1883 +#: c-decl.c:2963 c-parser.c:1157 #, gcc-internal-format -msgid "invalid operands to binary %s" +msgid "empty declaration" msgstr "" -#: c-common.c:2118 +#: c-decl.c:3029 #, gcc-internal-format -msgid "comparison is always false due to limited range of data type" +msgid "" +"ISO C90 does not support % or type qualifiers in parameter array " +"declarators" msgstr "" -#: c-common.c:2120 +#: c-decl.c:3032 #, gcc-internal-format -msgid "comparison is always true due to limited range of data type" +msgid "ISO C90 does not support %<[*]%> array declarators" msgstr "" -#: c-common.c:2190 +#: c-decl.c:3035 #, gcc-internal-format -msgid "comparison of unsigned expression >= 0 is always true" +msgid "GCC does not yet properly implement %<[*]%> array declarators" msgstr "" -#: c-common.c:2199 +#: c-decl.c:3054 #, gcc-internal-format -msgid "comparison of unsigned expression < 0 is always false" +msgid "static or type qualifiers in abstract declarator" msgstr "" -#: c-common.c:2241 +#: c-decl.c:3113 #, gcc-internal-format -msgid "pointer of type % used in arithmetic" +msgid "%q+D is usually a function" msgstr "" -#: c-common.c:2247 +#: c-decl.c:3122 cp/decl.c:3702 cp/decl2.c:838 #, gcc-internal-format -msgid "pointer to a function used in arithmetic" +msgid "typedef %qD is initialized (use __typeof__ instead)" msgstr "" -#: c-common.c:2253 +#: c-decl.c:3127 #, gcc-internal-format -msgid "pointer to member function used in arithmetic" +msgid "function %qD is initialized like a variable" msgstr "" -#. Common Ada/Pascal programmer's mistake. We always warn -#. about this since it is so bad. -#: c-common.c:2379 +#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. +#: c-decl.c:3133 #, gcc-internal-format -msgid "the address of %qD, will always evaluate as %" +msgid "parameter %qD is initialized" msgstr "" -#: c-common.c:2476 +#: c-decl.c:3158 #, gcc-internal-format -msgid "suggest parentheses around assignment used as truth value" +msgid "variable %qD has initializer but incomplete type" msgstr "" -#: c-common.c:2544 c-common.c:2584 +#: c-decl.c:3234 c-decl.c:5858 cp/decl.c:3741 cp/decl.c:10148 #, gcc-internal-format -msgid "invalid use of %" +msgid "inline function %q+D given attribute noinline" msgstr "" -#: c-common.c:2800 +#: c-decl.c:3306 #, gcc-internal-format -msgid "invalid application of % to a function type" +msgid "initializer fails to determine size of %q+D" msgstr "" -#: c-common.c:2810 +#: c-decl.c:3311 #, gcc-internal-format -msgid "invalid application of %qs to a void type" +msgid "array size missing in %q+D" msgstr "" -#: c-common.c:2816 +#: c-decl.c:3323 #, gcc-internal-format -msgid "invalid application of %qs to incomplete type %qT " +msgid "zero or negative size array %q+D" msgstr "" -#: c-common.c:2857 +#: c-decl.c:3375 varasm.c:1646 #, gcc-internal-format -msgid "%<__alignof%> applied to a bit-field" +msgid "storage size of %q+D isn%'t known" msgstr "" -#: c-common.c:3388 +#: c-decl.c:3385 #, gcc-internal-format -msgid "cannot disable built-in function %qs" +msgid "storage size of %q+D isn%'t constant" msgstr "" -#: c-common.c:3576 +#: c-decl.c:3432 #, gcc-internal-format -msgid "pointers are not permitted as case values" +msgid "ignoring asm-specifier for non-static local variable %q+D" msgstr "" -#: c-common.c:3582 +#: c-decl.c:3460 fortran/f95-lang.c:667 #, gcc-internal-format -msgid "range expressions in switch statements are non-standard" +msgid "cannot put object with volatile field into register" msgstr "" -#: c-common.c:3607 +#: c-decl.c:3595 #, gcc-internal-format -msgid "empty range specified" +msgid "ISO C forbids forward parameter declarations" msgstr "" -#: c-common.c:3666 +#: c-decl.c:3722 #, gcc-internal-format -msgid "duplicate (or overlapping) case value" +msgid "bit-field %qs width not an integer constant" msgstr "" -#: c-common.c:3667 +#: c-decl.c:3730 #, gcc-internal-format -msgid "%Jthis is the first entry overlapping that value" +msgid "negative width in bit-field %qs" msgstr "" -#: c-common.c:3671 +#: c-decl.c:3735 #, gcc-internal-format -msgid "duplicate case value" +msgid "zero width for bit-field %qs" msgstr "" -#: c-common.c:3672 +#: c-decl.c:3745 #, gcc-internal-format -msgid "%Jpreviously used here" +msgid "bit-field %qs has invalid type" msgstr "" -#: c-common.c:3676 +#: c-decl.c:3754 #, gcc-internal-format -msgid "multiple default labels in one switch" +msgid "type of bit-field %qs is a GCC extension" msgstr "" -#: c-common.c:3677 +#: c-decl.c:3763 #, gcc-internal-format -msgid "%Jthis is the first default label" +msgid "width of %qs exceeds its type" msgstr "" -#: c-common.c:3726 +#: c-decl.c:3776 #, gcc-internal-format -msgid "%Jcase value %qs not in enumerated type" +msgid "%qs is narrower than values of its type" msgstr "" -#: c-common.c:3729 +#: c-decl.c:3925 #, gcc-internal-format -msgid "%Jcase value %qs not in enumerated type %qT" +msgid "type defaults to % in declaration of %qs" msgstr "" -#: c-common.c:3786 +#: c-decl.c:3953 #, gcc-internal-format -msgid "%Hswitch missing default case" +msgid "duplicate %" msgstr "" -#. Warn if there are enumerators that don't correspond to -#. case expressions. -#: c-common.c:3846 +#: c-decl.c:3955 #, gcc-internal-format -msgid "%Henumeration value %qE not handled in switch" +msgid "duplicate %" msgstr "" -#: c-common.c:3873 +#: c-decl.c:3957 #, gcc-internal-format -msgid "taking the address of a label is non-standard" +msgid "duplicate %" msgstr "" -#: c-common.c:4042 c-common.c:4061 c-common.c:4079 c-common.c:4106 -#: c-common.c:4125 c-common.c:4148 c-common.c:4169 c-common.c:4194 -#: c-common.c:4220 c-common.c:4268 c-common.c:4295 c-common.c:4339 -#: c-common.c:4367 c-common.c:4395 c-common.c:4414 c-common.c:4740 -#: c-common.c:4771 c-common.c:4867 c-common.c:4933 c-common.c:4951 -#: c-common.c:4997 c-common.c:5067 c-common.c:5091 c-common.c:5378 -#: c-common.c:5401 c-common.c:5440 +#: c-decl.c:3976 #, gcc-internal-format -msgid "%qE attribute ignored" +msgid "function definition declared %" msgstr "" -#: c-common.c:4249 +#: c-decl.c:3978 #, gcc-internal-format -msgid "%qE attribute have effect only on public objects" +msgid "function definition declared %" msgstr "" -#: c-common.c:4452 +#: c-decl.c:3980 #, gcc-internal-format -msgid "unknown machine mode %qs" +msgid "function definition declared %" msgstr "" -#: c-common.c:4472 +#: c-decl.c:3982 #, gcc-internal-format -msgid "specifying vector types with __attribute__ ((mode)) is deprecated" +msgid "function definition declared %<__thread%>" msgstr "" -#: c-common.c:4475 +#: c-decl.c:3998 #, gcc-internal-format -msgid "use __attribute__ ((vector_size)) instead" +msgid "storage class specified for structure field %qs" msgstr "" -#: c-common.c:4484 +#: c-decl.c:4002 cp/decl.c:7207 #, gcc-internal-format -msgid "unable to emulate %qs" +msgid "storage class specified for parameter %qs" msgstr "" -#: c-common.c:4494 +#: c-decl.c:4005 cp/decl.c:7209 #, gcc-internal-format -msgid "invalid pointer mode %qs" +msgid "storage class specified for typename" msgstr "" -#: c-common.c:4509 +#: c-decl.c:4018 cp/decl.c:7226 #, gcc-internal-format -msgid "no data type for mode %qs" +msgid "%qs initialized and declared %" msgstr "" -#: c-common.c:4519 +#: c-decl.c:4020 cp/decl.c:7229 #, gcc-internal-format -msgid "cannot use mode %qs for enumeral types" +msgid "%qs has both % and initializer" msgstr "" -#: c-common.c:4543 +#: c-decl.c:4025 #, gcc-internal-format -msgid "mode %qs applied to inappropriate type" +msgid "file-scope declaration of %qs specifies %" msgstr "" -#: c-common.c:4574 +#: c-decl.c:4027 #, gcc-internal-format -msgid "%Jsection attribute cannot be specified for local variables" +msgid "file-scope declaration of %qs specifies %" msgstr "" -#: c-common.c:4585 +#: c-decl.c:4032 cp/decl.c:7233 #, gcc-internal-format -msgid "section of %q+D conflicts with previous declaration" +msgid "nested function %qs declared %" msgstr "" -#: c-common.c:4594 +#: c-decl.c:4035 cp/decl.c:7243 #, gcc-internal-format -msgid "section attribute not allowed for %q+D" +msgid "function-scope %qs implicitly auto and declared %<__thread%>" msgstr "" -#: c-common.c:4600 +#. Only the innermost declarator (making a parameter be of +#. array type which is converted to pointer type) +#. may have static or type qualifiers. +#: c-decl.c:4082 c-decl.c:4276 #, gcc-internal-format -msgid "%Jsection attributes are not supported for this target" +msgid "static or type qualifiers in non-parameter array declarator" msgstr "" -#: c-common.c:4632 +#: c-decl.c:4128 #, gcc-internal-format -msgid "requested alignment is not a constant" +msgid "declaration of %qs as array of voids" msgstr "" -#: c-common.c:4637 +#: c-decl.c:4134 #, gcc-internal-format -msgid "requested alignment is not a power of 2" +msgid "declaration of %qs as array of functions" msgstr "" -#: c-common.c:4642 +#: c-decl.c:4139 #, gcc-internal-format -msgid "requested alignment is too large" +msgid "invalid use of structure with flexible array member" msgstr "" -#: c-common.c:4668 +#: c-decl.c:4159 #, gcc-internal-format -msgid "alignment may not be specified for %q+D" +msgid "size of array %qs has non-integer type" msgstr "" -#: c-common.c:4706 +#: c-decl.c:4164 #, gcc-internal-format -msgid "%q+D defined both normally and as an alias" +msgid "ISO C forbids zero-size array %qs" msgstr "" -#: c-common.c:4722 +#: c-decl.c:4171 #, gcc-internal-format -msgid "alias argument not a string" +msgid "size of array %qs is negative" msgstr "" -#: c-common.c:4764 +#: c-decl.c:4185 #, gcc-internal-format -msgid "%qE attribute ignored on non-class types" +msgid "ISO C90 forbids array %qs whose size can%'t be evaluated" msgstr "" -#: c-common.c:4777 +#: c-decl.c:4189 #, gcc-internal-format -msgid "visibility argument not a string" +msgid "ISO C90 forbids variable-size array %qs" msgstr "" -#: c-common.c:4789 +#: c-decl.c:4229 c-decl.c:4398 cp/decl.c:7665 #, gcc-internal-format -msgid "%qE attribute ignored on types" +msgid "size of array %qs is too large" msgstr "" -#: c-common.c:4804 +#: c-decl.c:4240 #, gcc-internal-format -msgid "" -"visibility argument must be one of \"default\", \"hidden\", \"protected\" or " -"\"internal\"" +msgid "ISO C90 does not support flexible array members" msgstr "" -#: c-common.c:4875 +#: c-decl.c:4250 #, gcc-internal-format -msgid "tls_model argument not a string" +msgid "array type has incomplete element type" msgstr "" -#: c-common.c:4888 +#: c-decl.c:4308 cp/decl.c:7334 #, gcc-internal-format -msgid "" -"tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-" -"dynamic\" or \"global-dynamic\"" +msgid "%qs declared as function returning a function" msgstr "" -#: c-common.c:4907 c-common.c:4971 +#: c-decl.c:4313 cp/decl.c:7339 #, gcc-internal-format -msgid "%J%qE attribute applies only to functions" +msgid "%qs declared as function returning an array" msgstr "" -#: c-common.c:4912 c-common.c:4976 +#: c-decl.c:4333 #, gcc-internal-format -msgid "%Jcan%'t set %qE attribute after definition" +msgid "function definition has qualified void return type" msgstr "" -#: c-common.c:5065 +#: c-decl.c:4336 #, gcc-internal-format -msgid "%qE attribute ignored for %qE" +msgid "type qualifiers ignored on function return type" msgstr "" -#: c-common.c:5120 +#: c-decl.c:4365 c-decl.c:4411 c-decl.c:4506 c-decl.c:4596 #, gcc-internal-format -msgid "invalid vector type for attribute %qE" +msgid "ISO C forbids qualified function types" msgstr "" -#: c-common.c:5128 +#: c-decl.c:4419 #, gcc-internal-format -msgid "number of components of the vector not a power of two" +msgid "typedef %q+D declared %" msgstr "" -#: c-common.c:5156 +#: c-decl.c:4449 #, gcc-internal-format -msgid "nonnull attribute without arguments on a non-prototype" +msgid "ISO C forbids const or volatile function types" msgstr "" -#: c-common.c:5171 +#: c-decl.c:4469 #, gcc-internal-format -msgid "nonnull argument has invalid operand number (argument %lu)" +msgid "variable or field %qs declared void" msgstr "" -#: c-common.c:5190 +#: c-decl.c:4499 #, gcc-internal-format -msgid "" -"nonnull argument with out-of-range operand number (argument %lu, operand %lu)" +msgid "attributes in parameter array declarator ignored" msgstr "" -#: c-common.c:5198 +#: c-decl.c:4533 #, gcc-internal-format -msgid "" -"nonnull argument references non-pointer operand (argument %lu, operand %lu)" +msgid "parameter %q+D declared %" msgstr "" -#: c-common.c:5261 c-common.c:5284 +#: c-decl.c:4546 #, gcc-internal-format -msgid "not enough variable arguments to fit a sentinel" +msgid "field %qs declared as a function" msgstr "" -#: c-common.c:5305 +#: c-decl.c:4552 #, gcc-internal-format -msgid "missing sentinel in function call" +msgid "field %qs has incomplete type" msgstr "" -#: c-common.c:5347 +#: c-decl.c:4566 c-decl.c:4578 c-decl.c:4582 #, gcc-internal-format -msgid "null argument where non-null required (argument %lu)" +msgid "invalid storage class for function %qs" msgstr "" -#: c-common.c:5412 +#: c-decl.c:4602 #, gcc-internal-format -msgid "cleanup argument not an identifier" +msgid "% function returns non-void value" msgstr "" -#: c-common.c:5419 +#: c-decl.c:4630 #, gcc-internal-format -msgid "cleanup argument not a function" +msgid "cannot inline function %" msgstr "" -#: c-common.c:5458 +#: c-decl.c:4677 #, gcc-internal-format -msgid "%qE attribute requires prototypes with named arguments" +msgid "variable previously declared % redeclared %" msgstr "" -#: c-common.c:5469 +#: c-decl.c:4687 #, gcc-internal-format -msgid "%qE attribute only applies to variadic functions" +msgid "variable %q+D declared %" msgstr "" -#: c-common.c:5480 +#. A mere warning is sure to result in improper semantics +#. at runtime. Don't bother to allow this to compile. +#. A mere warning is sure to result in improper +#. semantics at runtime. Don't bother to allow this to +#. compile. +#: c-decl.c:4717 cp/decl.c:6094 cp/decl.c:8255 #, gcc-internal-format -msgid "requested position is not an integer constant" +msgid "thread-local storage not supported for this target" msgstr "" -#: c-common.c:5487 +#: c-decl.c:4782 c-decl.c:5937 #, gcc-internal-format -msgid "requested position is less than zero" +msgid "function declaration isn%'t a prototype" msgstr "" -#: c-common.c:5789 +#: c-decl.c:4790 #, gcc-internal-format -msgid "" -"%Hignoring return value of %qD, declared with attribute warn_unused_result" +msgid "parameter names (without types) in function declaration" msgstr "" -#: c-common.c:5793 +#: c-decl.c:4823 #, gcc-internal-format -msgid "" -"%Hignoring return value of function declared with attribute " -"warn_unused_result" +msgid "parameter %u (%q+D) has incomplete type" msgstr "" -#: c-common.c:5853 cp/typeck.c:4169 +#: c-decl.c:4826 #, gcc-internal-format -msgid "attempt to take address of bit-field structure member %qD" +msgid "%Jparameter %u has incomplete type" msgstr "" -#: c-common.c:5900 +#: c-decl.c:4835 #, gcc-internal-format -msgid "invalid lvalue in assignment" +msgid "parameter %u (%q+D) has void type" msgstr "" -#: c-common.c:5903 +#: c-decl.c:4838 #, gcc-internal-format -msgid "invalid lvalue in increment" +msgid "%Jparameter %u has void type" msgstr "" -#: c-common.c:5906 +#: c-decl.c:4898 #, gcc-internal-format -msgid "invalid lvalue in decrement" +msgid "% as only parameter may not be qualified" msgstr "" -#: c-common.c:5909 +#: c-decl.c:4902 c-decl.c:4936 #, gcc-internal-format -msgid "invalid lvalue in unary %<&%>" +msgid "% must be the only parameter" msgstr "" -#: c-common.c:5912 +#: c-decl.c:4930 #, gcc-internal-format -msgid "invalid lvalue in asm statement" +msgid "parameter %q+D has just a forward declaration" msgstr "" -#: c-common.c:6040 c-common.c:6089 c-typeck.c:2334 +#. The %s will be one of 'struct', 'union', or 'enum'. +#: c-decl.c:4975 #, gcc-internal-format -msgid "too few arguments to function %qE" +msgid "%<%s %E%> declared inside parameter list" msgstr "" -#. ??? This should not be an error when inlining calls to -#. unprototyped functions. -#: c-common.c:6057 c-typeck.c:4000 +#. The %s will be one of 'struct', 'union', or 'enum'. +#: c-decl.c:4979 #, gcc-internal-format -msgid "incompatible type for argument %d of %qE" +msgid "anonymous %s declared inside parameter list" msgstr "" -#. Except for passing an argument to an unprototyped function, -#. this is a constraint violation. When passing an argument to -#. an unprototyped function, it is compile-time undefined; -#. making it a constraint in that case was rejected in -#. DR#252. -#: c-convert.c:96 c-typeck.c:1487 c-typeck.c:3641 cp/typeck.c:1366 -#: cp/typeck.c:5908 fortran/convert.c:89 treelang/tree-convert.c:79 +#: c-decl.c:4984 #, gcc-internal-format -msgid "void value not ignored as it ought to be" +msgid "" +"its scope is only this definition or declaration, which is probably not what " +"you want" msgstr "" -#: c-convert.c:134 fortran/convert.c:122 java/typeck.c:154 -#: treelang/tree-convert.c:105 +#: c-decl.c:5117 #, gcc-internal-format -msgid "conversion to non-scalar type requested" +msgid "redefinition of %" msgstr "" -#: c-decl.c:564 +#: c-decl.c:5119 #, gcc-internal-format -msgid "array %q+D assumed to have one element" +msgid "redefinition of %" msgstr "" -#: c-decl.c:669 +#: c-decl.c:5124 #, gcc-internal-format -msgid "GCC supports only %u nested scopes" +msgid "nested redefinition of %" msgstr "" -#: c-decl.c:755 cp/decl.c:355 java/decl.c:1685 +#: c-decl.c:5126 #, gcc-internal-format -msgid "label %q+D used but not defined" +msgid "nested redefinition of %" msgstr "" -#: c-decl.c:761 cp/decl.c:366 java/decl.c:1690 +#: c-decl.c:5197 cp/decl.c:3502 #, gcc-internal-format -msgid "label %q+D defined but not used" +msgid "declaration does not declare anything" msgstr "" -#: c-decl.c:763 +#: c-decl.c:5201 #, gcc-internal-format -msgid "label %q+D declared but not defined" +msgid "ISO C doesn%'t support unnamed structs/unions" msgstr "" -#: c-decl.c:798 +#: c-decl.c:5244 c-decl.c:5260 #, gcc-internal-format -msgid "nested function %q+D declared but never defined" +msgid "duplicate member %q+D" msgstr "" -#: c-decl.c:811 cp/decl.c:560 +#: c-decl.c:5299 #, gcc-internal-format -msgid "unused variable %q+D" +msgid "union has no named members" msgstr "" -#: c-decl.c:815 +#: c-decl.c:5301 #, gcc-internal-format -msgid "type of array %q+D completed incompatibly with implicit initialization" +msgid "union has no members" msgstr "" -#: c-decl.c:1049 +#: c-decl.c:5306 #, gcc-internal-format -msgid "" -"a parameter list with an ellipsis can%'t match an empty parameter name list " -"declaration" +msgid "struct has no named members" msgstr "" -#: c-decl.c:1056 +#: c-decl.c:5308 #, gcc-internal-format -msgid "" -"an argument type that has a default promotion can%'t match an empty " -"parameter name list declaration" +msgid "struct has no members" msgstr "" -#: c-decl.c:1091 +#: c-decl.c:5365 #, gcc-internal-format -msgid "" -"prototype for %q+D declares more arguments than previous old-style definition" +msgid "%Jflexible array member in union" msgstr "" -#: c-decl.c:1097 +#: c-decl.c:5370 #, gcc-internal-format -msgid "" -"prototype for %q+D declares fewer arguments than previous old-style " -"definition" +msgid "%Jflexible array member not at end of struct" msgstr "" -#: c-decl.c:1106 +#: c-decl.c:5375 #, gcc-internal-format -msgid "prototype for %q+D declares argument %d with incompatible type" +msgid "%Jflexible array member in otherwise empty struct" msgstr "" -#. If we get here, no errors were found, but do issue a warning -#. for this poor-style construct. -#: c-decl.c:1119 +#: c-decl.c:5382 #, gcc-internal-format -msgid "prototype for %q+D follows non-prototype definition" +msgid "%Jinvalid use of structure with flexible array member" msgstr "" -#: c-decl.c:1134 +#: c-decl.c:5493 #, gcc-internal-format -msgid "previous definition of %q+D was here" +msgid "union cannot be made transparent" msgstr "" -#: c-decl.c:1136 +#: c-decl.c:5564 #, gcc-internal-format -msgid "previous implicit declaration of %q+D was here" +msgid "nested redefinition of %" msgstr "" -#: c-decl.c:1138 +#. This enum is a named one that has been declared already. +#: c-decl.c:5571 #, gcc-internal-format -msgid "previous declaration of %q+D was here" +msgid "redeclaration of %" msgstr "" -#: c-decl.c:1178 +#: c-decl.c:5634 #, gcc-internal-format -msgid "%q+D redeclared as different kind of symbol" +msgid "enumeration values exceed range of largest integer" msgstr "" -#: c-decl.c:1182 +#: c-decl.c:5651 #, gcc-internal-format -msgid "built-in function %q+D declared as non-function" +msgid "specified mode too small for enumeral values" msgstr "" -#: c-decl.c:1185 c-decl.c:1301 c-decl.c:1921 +#: c-decl.c:5747 #, gcc-internal-format -msgid "declaration of %q+D shadows a built-in function" +msgid "enumerator value for %qE is not an integer constant" msgstr "" -#: c-decl.c:1194 +#: c-decl.c:5764 #, gcc-internal-format -msgid "redeclaration of enumerator %q+D" +msgid "overflow in enumeration values" msgstr "" -#. If types don't match for a built-in, throw away the -#. built-in. No point in calling locate_old_decl here, it -#. won't print anything. -#: c-decl.c:1215 +#: c-decl.c:5769 #, gcc-internal-format -msgid "conflicting types for built-in function %q+D" +msgid "ISO C restricts enumerator values to range of %" msgstr "" -#: c-decl.c:1239 c-decl.c:1252 c-decl.c:1262 +#: c-decl.c:5865 #, gcc-internal-format -msgid "conflicting types for %q+D" +msgid "return type is an incomplete type" msgstr "" -#: c-decl.c:1260 +#: c-decl.c:5873 #, gcc-internal-format -msgid "conflicting type qualifiers for %q+D" +msgid "return type defaults to %" msgstr "" -#. Allow OLDDECL to continue in use. -#: c-decl.c:1277 +#: c-decl.c:5944 #, gcc-internal-format -msgid "redefinition of typedef %q+D" +msgid "no previous prototype for %q+D" msgstr "" -#: c-decl.c:1325 c-decl.c:1403 +#: c-decl.c:5953 #, gcc-internal-format -msgid "redefinition of %q+D" +msgid "%q+D was used with no prototype before its definition" msgstr "" -#: c-decl.c:1360 c-decl.c:1441 +#: c-decl.c:5959 #, gcc-internal-format -msgid "static declaration of %q+D follows non-static declaration" +msgid "no previous declaration for %q+D" msgstr "" -#: c-decl.c:1370 c-decl.c:1377 c-decl.c:1430 c-decl.c:1438 +#: c-decl.c:5969 #, gcc-internal-format -msgid "non-static declaration of %q+D follows static declaration" +msgid "%q+D was used with no declaration before its definition" msgstr "" -#: c-decl.c:1390 +#: c-decl.c:6001 c-decl.c:6518 #, gcc-internal-format -msgid "thread-local declaration of %q+D follows non-thread-local declaration" +msgid "return type of %q+D is not %" msgstr "" -#: c-decl.c:1393 +#: c-decl.c:6016 #, gcc-internal-format -msgid "non-thread-local declaration of %q+D follows thread-local declaration" +msgid "first argument of %q+D should be %" msgstr "" -#: c-decl.c:1423 +#: c-decl.c:6024 #, gcc-internal-format -msgid "extern declaration of %q+D follows declaration with no linkage" +msgid "second argument of %q+D should be %" msgstr "" -#: c-decl.c:1459 +#: c-decl.c:6033 #, gcc-internal-format -msgid "declaration of %q+D with no linkage follows extern declaration" +msgid "third argument of %q+D should probably be %" msgstr "" -#: c-decl.c:1465 +#: c-decl.c:6043 #, gcc-internal-format -msgid "redeclaration of %q+D with no linkage" +msgid "%q+D takes only zero or two arguments" msgstr "" -#: c-decl.c:1479 +#: c-decl.c:6046 #, gcc-internal-format -msgid "" -"redeclaration of %q+D with different visibility (old visibility preserved)" +msgid "%q+D is normally a non-static function" msgstr "" -#: c-decl.c:1490 +#: c-decl.c:6092 #, gcc-internal-format -msgid "inline declaration of %qD follows declaration with attribute noinline" +msgid "%Jold-style parameter declarations in prototyped function definition" msgstr "" -#: c-decl.c:1497 +#: c-decl.c:6106 #, gcc-internal-format -msgid "declaration of %q+D with attribute noinline follows inline declaration " +msgid "%Jtraditional C rejects ISO C style function definitions" msgstr "" -#: c-decl.c:1512 +#: c-decl.c:6122 #, gcc-internal-format -msgid "%q+D declared inline after being called" +msgid "%Jparameter name omitted" msgstr "" -#: c-decl.c:1517 +#: c-decl.c:6156 #, gcc-internal-format -msgid "%q+D declared inline after its definition" +msgid "%Jold-style function definition" msgstr "" -#: c-decl.c:1536 +#: c-decl.c:6165 #, gcc-internal-format -msgid "redefinition of parameter %q+D" +msgid "%Jparameter name missing from parameter list" msgstr "" -#: c-decl.c:1563 +#: c-decl.c:6176 #, gcc-internal-format -msgid "redundant redeclaration of %q+D" +msgid "%q+D declared as a non-parameter" msgstr "" -#: c-decl.c:1908 +#: c-decl.c:6181 #, gcc-internal-format -msgid "declaration of %q+D shadows previous non-variable" +msgid "multiple parameters named %q+D" msgstr "" -#: c-decl.c:1913 +#: c-decl.c:6189 #, gcc-internal-format -msgid "declaration of %q+D shadows a parameter" +msgid "parameter %q+D declared with void type" msgstr "" -#: c-decl.c:1916 +#: c-decl.c:6206 c-decl.c:6208 #, gcc-internal-format -msgid "declaration of %q+D shadows a global declaration" +msgid "type of %q+D defaults to %" msgstr "" -#: c-decl.c:1926 +#: c-decl.c:6227 #, gcc-internal-format -msgid "declaration of %q+D shadows a previous local" +msgid "parameter %q+D has incomplete type" msgstr "" -#: c-decl.c:1929 cp/name-lookup.c:952 cp/name-lookup.c:983 -#: cp/name-lookup.c:991 +#: c-decl.c:6233 #, gcc-internal-format -msgid "%Jshadowed declaration is here" +msgid "declaration for parameter %q+D but no such parameter" msgstr "" -#: c-decl.c:2129 +#: c-decl.c:6283 #, gcc-internal-format -msgid "nested extern declaration of %qD" +msgid "number of arguments doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:2298 +#: c-decl.c:6287 #, gcc-internal-format -msgid "implicit declaration of function %qE" +msgid "number of arguments doesn%'t match prototype" msgstr "" -#: c-decl.c:2359 +#: c-decl.c:6288 c-decl.c:6328 c-decl.c:6341 #, gcc-internal-format -msgid "incompatible implicit declaration of built-in function %qD" +msgid "%Hprototype declaration" msgstr "" -#: c-decl.c:2368 +#: c-decl.c:6322 #, gcc-internal-format -msgid "incompatible implicit declaration of function %qD" +msgid "promoted argument %qD doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:2421 +#: c-decl.c:6326 #, gcc-internal-format -msgid "%H%qE undeclared here (not in a function)" +msgid "promoted argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:2426 +#: c-decl.c:6336 #, gcc-internal-format -msgid "%H%qE undeclared (first use in this function)" +msgid "argument %qD doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:2430 +#: c-decl.c:6340 #, gcc-internal-format -msgid "%H(Each undeclared identifier is reported only once" +msgid "argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:2431 +#: c-decl.c:6563 cp/decl.c:10942 #, gcc-internal-format -msgid "%Hfor each function it appears in.)" +msgid "no return statement in function returning non-void" msgstr "" -#: c-decl.c:2469 cp/decl.c:2095 +#: c-decl.c:6572 #, gcc-internal-format -msgid "label %qE referenced outside of any function" +msgid "this function may return with or without a value" msgstr "" -#: c-decl.c:2511 +#. If we get here, declarations have been used in a for loop without +#. the C99 for loop scope. This doesn't make much sense, so don't +#. allow it. +#: c-decl.c:6665 #, gcc-internal-format -msgid "duplicate label declaration %qE" +msgid "% loop initial declaration used outside C99 mode" msgstr "" -#: c-decl.c:2547 +#: c-decl.c:6694 #, gcc-internal-format -msgid "%Hduplicate label %qD" +msgid "declaration of static variable %q+D in % loop initial declaration" msgstr "" -#: c-decl.c:2557 +#: c-decl.c:6697 #, gcc-internal-format -msgid "%Jjump into statement expression" +msgid "" +"declaration of % variable %q+D in % loop initial declaration" msgstr "" -#: c-decl.c:2559 +#: c-decl.c:6702 #, gcc-internal-format -msgid "%Jjump into scope of identifier with variably modified type" +msgid "% declared in % loop initial declaration" msgstr "" -#: c-decl.c:2574 +#: c-decl.c:6706 #, gcc-internal-format -msgid "" -"%Htraditional C lacks a separate namespace for labels, identifier %qE " -"conflicts" +msgid "% declared in % loop initial declaration" msgstr "" -#: c-decl.c:2649 +#: c-decl.c:6710 #, gcc-internal-format -msgid "%H%qE defined as wrong kind of tag" +msgid "% declared in % loop initial declaration" msgstr "" -#: c-decl.c:2864 +#: c-decl.c:6714 #, gcc-internal-format -msgid "unnamed struct/union that defines no instances" +msgid "declaration of non-variable %q+D in % loop initial declaration" msgstr "" -#: c-decl.c:2872 +#: c-decl.c:6998 c-decl.c:7149 c-decl.c:7359 #, gcc-internal-format -msgid "empty declaration with storage class specifier does not redeclare tag" +msgid "duplicate %qE" msgstr "" -#: c-decl.c:2883 +#: c-decl.c:7021 c-decl.c:7158 c-decl.c:7261 #, gcc-internal-format -msgid "empty declaration with type qualifier does not redeclare tag" +msgid "two or more data types in declaration specifiers" msgstr "" -#: c-decl.c:2904 c-decl.c:2911 +#: c-decl.c:7033 cp/decl.c:6897 #, gcc-internal-format -msgid "useless type name in empty declaration" +msgid "% is too long for GCC" msgstr "" -#: c-decl.c:2919 +#: c-decl.c:7040 c-decl.c:7232 #, gcc-internal-format -msgid "% in empty declaration" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:2925 +#: c-decl.c:7046 #, gcc-internal-format -msgid "% in file-scope empty declaration" +msgid "ISO C90 does not support %" msgstr "" -#: c-decl.c:2931 +#: c-decl.c:7051 c-decl.c:7071 #, gcc-internal-format -msgid "% in file-scope empty declaration" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:2937 +#: c-decl.c:7054 c-decl.c:7165 #, gcc-internal-format -msgid "useless storage class specifier in empty declaration" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:2943 +#: c-decl.c:7057 c-decl.c:7184 #, gcc-internal-format -msgid "useless %<__thread%> in empty declaration" +msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:2951 +#: c-decl.c:7060 c-decl.c:7203 #, gcc-internal-format -msgid "useless type qualifier in empty declaration" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:2958 c-parser.c:1157 +#: c-decl.c:7063 c-decl.c:7216 #, gcc-internal-format -msgid "empty declaration" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3024 +#: c-decl.c:7074 c-decl.c:7168 #, gcc-internal-format -msgid "" -"ISO C90 does not support % or type qualifiers in parameter array " -"declarators" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3027 +#: c-decl.c:7077 c-decl.c:7187 #, gcc-internal-format -msgid "ISO C90 does not support %<[*]%> array declarators" +msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:3030 +#: c-decl.c:7080 c-decl.c:7206 #, gcc-internal-format -msgid "GCC does not yet properly implement %<[*]%> array declarators" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3049 +#: c-decl.c:7083 c-decl.c:7219 #, gcc-internal-format -msgid "static or type qualifiers in abstract declarator" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3108 +#: c-decl.c:7086 c-decl.c:7235 #, gcc-internal-format -msgid "%q+D is usually a function" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3117 cp/decl.c:3667 cp/decl2.c:840 +#: c-decl.c:7094 c-decl.c:7114 #, gcc-internal-format -msgid "typedef %qD is initialized (use __typeof__ instead)" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3122 +#: c-decl.c:7097 c-decl.c:7171 #, gcc-internal-format -msgid "function %qD is initialized like a variable" +msgid "both % and % in declaration specifiers" msgstr "" -#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. -#: c-decl.c:3128 +#: c-decl.c:7100 c-decl.c:7190 #, gcc-internal-format -msgid "parameter %qD is initialized" +msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:3153 +#: c-decl.c:7103 c-decl.c:7222 #, gcc-internal-format -msgid "variable %qD has initializer but incomplete type" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3229 c-decl.c:5853 cp/decl.c:3706 cp/decl.c:10100 +#: c-decl.c:7106 c-decl.c:7238 #, gcc-internal-format -msgid "inline function %q+D given attribute noinline" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3301 +#: c-decl.c:7117 c-decl.c:7174 #, gcc-internal-format -msgid "initializer fails to determine size of %q+D" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3306 +#: c-decl.c:7120 c-decl.c:7193 #, gcc-internal-format -msgid "array size missing in %q+D" +msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:3318 +#: c-decl.c:7123 c-decl.c:7225 #, gcc-internal-format -msgid "zero or negative size array %q+D" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3370 varasm.c:1641 +#: c-decl.c:7126 c-decl.c:7241 #, gcc-internal-format -msgid "storage size of %q+D isn%'t known" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3380 +#: c-decl.c:7134 #, gcc-internal-format -msgid "storage size of %q+D isn%'t constant" +msgid "ISO C90 does not support complex types" msgstr "" -#: c-decl.c:3427 +#: c-decl.c:7136 c-decl.c:7177 #, gcc-internal-format -msgid "ignoring asm-specifier for non-static local variable %q+D" +msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:3457 fortran/f95-lang.c:636 +#: c-decl.c:7139 c-decl.c:7196 #, gcc-internal-format -msgid "cannot put object with volatile field into register" +msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:3592 +#: c-decl.c:7278 #, gcc-internal-format -msgid "ISO C forbids forward parameter declarations" +msgid "%qE fails to be a typedef or built in type" msgstr "" -#: c-decl.c:3719 +#: c-decl.c:7310 #, gcc-internal-format -msgid "bit-field %qs width not an integer constant" +msgid "%qE is not at beginning of declaration" msgstr "" -#: c-decl.c:3727 +#: c-decl.c:7324 #, gcc-internal-format -msgid "negative width in bit-field %qs" +msgid "%<__thread%> used with %" msgstr "" -#: c-decl.c:3732 +#: c-decl.c:7326 #, gcc-internal-format -msgid "zero width for bit-field %qs" +msgid "%<__thread%> used with %" msgstr "" -#: c-decl.c:3742 +#: c-decl.c:7328 #, gcc-internal-format -msgid "bit-field %qs has invalid type" +msgid "%<__thread%> used with %" msgstr "" -#: c-decl.c:3751 +#: c-decl.c:7339 cp/parser.c:7361 #, gcc-internal-format -msgid "type of bit-field %qs is a GCC extension" +msgid "%<__thread%> before %" msgstr "" -#: c-decl.c:3760 +#: c-decl.c:7348 cp/parser.c:7351 #, gcc-internal-format -msgid "width of %qs exceeds its type" +msgid "%<__thread%> before %" msgstr "" -#: c-decl.c:3773 +#: c-decl.c:7364 #, gcc-internal-format -msgid "%qs is narrower than values of its type" +msgid "multiple storage classes in declaration specifiers" msgstr "" -#: c-decl.c:3922 +#: c-decl.c:7371 #, gcc-internal-format -msgid "type defaults to % in declaration of %qs" +msgid "%<__thread%> used with %qE" msgstr "" -#: c-decl.c:3950 +#: c-decl.c:7425 #, gcc-internal-format -msgid "duplicate %" +msgid "ISO C does not support plain % meaning %" msgstr "" -#: c-decl.c:3952 +#: c-decl.c:7470 c-decl.c:7496 #, gcc-internal-format -msgid "duplicate %" +msgid "ISO C does not support complex integer types" msgstr "" -#: c-decl.c:3954 +#: c-decl.c:7570 toplev.c:821 #, gcc-internal-format -msgid "duplicate %" +msgid "%q+F used but never defined" msgstr "" -#: c-decl.c:3973 +#: c-format.c:97 c-format.c:206 #, gcc-internal-format -msgid "function definition declared %" +msgid "format string has invalid operand number" msgstr "" -#: c-decl.c:3975 +#: c-format.c:114 #, gcc-internal-format -msgid "function definition declared %" +msgid "function does not return string type" msgstr "" -#: c-decl.c:3977 +#: c-format.c:143 #, gcc-internal-format -msgid "function definition declared %" +msgid "format string argument not a string type" msgstr "" -#: c-decl.c:3979 +#: c-format.c:186 #, gcc-internal-format -msgid "function definition declared %<__thread%>" +msgid "unrecognized format specifier" msgstr "" -#: c-decl.c:3995 +#: c-format.c:198 #, gcc-internal-format -msgid "storage class specified for structure field %qs" +msgid "%qE is an unrecognized format function type" msgstr "" -#: c-decl.c:3999 cp/decl.c:7173 +#: c-format.c:212 #, gcc-internal-format -msgid "storage class specified for parameter %qs" +msgid "%<...%> has invalid operand number" msgstr "" -#: c-decl.c:4002 cp/decl.c:7175 +#: c-format.c:219 #, gcc-internal-format -msgid "storage class specified for typename" +msgid "format string argument follows the args to be formatted" msgstr "" -#: c-decl.c:4015 cp/decl.c:7192 +#: c-format.c:899 #, gcc-internal-format -msgid "%qs initialized and declared %" +msgid "function might be possible candidate for %qs format attribute" msgstr "" -#: c-decl.c:4017 cp/decl.c:7195 +#: c-format.c:991 c-format.c:1012 c-format.c:2026 #, gcc-internal-format -msgid "%qs has both % and initializer" +msgid "missing $ operand number in format" msgstr "" -#: c-decl.c:4022 +#: c-format.c:1021 #, gcc-internal-format -msgid "file-scope declaration of %qs specifies %" +msgid "%s does not support %%n$ operand number formats" msgstr "" -#: c-decl.c:4024 +#: c-format.c:1028 #, gcc-internal-format -msgid "file-scope declaration of %qs specifies %" +msgid "operand number out of range in format" msgstr "" -#: c-decl.c:4029 cp/decl.c:7199 +#: c-format.c:1051 #, gcc-internal-format -msgid "nested function %qs declared %" +msgid "format argument %d used more than once in %s format" msgstr "" -#: c-decl.c:4032 cp/decl.c:7209 +#: c-format.c:1083 #, gcc-internal-format -msgid "function-scope %qs implicitly auto and declared %<__thread%>" +msgid "$ operand number used after format without operand number" msgstr "" -#. Only the innermost declarator (making a parameter be of -#. array type which is converted to pointer type) -#. may have static or type qualifiers. -#: c-decl.c:4079 c-decl.c:4270 +#: c-format.c:1114 #, gcc-internal-format -msgid "static or type qualifiers in non-parameter array declarator" +msgid "format argument %d unused before used argument %d in $-style format" msgstr "" -#: c-decl.c:4125 +#: c-format.c:1209 #, gcc-internal-format -msgid "declaration of %qs as array of voids" +msgid "format not a string literal, format string not checked" msgstr "" -#: c-decl.c:4131 +#: c-format.c:1224 c-format.c:1227 #, gcc-internal-format -msgid "declaration of %qs as array of functions" +msgid "format not a string literal and no format arguments" msgstr "" -#: c-decl.c:4136 +#: c-format.c:1230 #, gcc-internal-format -msgid "invalid use of structure with flexible array member" +msgid "format not a string literal, argument types not checked" msgstr "" -#: c-decl.c:4156 +#: c-format.c:1243 #, gcc-internal-format -msgid "size of array %qs has non-integer type" +msgid "too many arguments for format" msgstr "" -#: c-decl.c:4161 +#: c-format.c:1246 #, gcc-internal-format -msgid "ISO C forbids zero-size array %qs" +msgid "unused arguments in $-style format" msgstr "" -#: c-decl.c:4168 +#: c-format.c:1249 #, gcc-internal-format -msgid "size of array %qs is negative" +msgid "zero-length %s format string" msgstr "" -#: c-decl.c:4182 +#: c-format.c:1253 #, gcc-internal-format -msgid "ISO C90 forbids array %qs whose size can%'t be evaluated" +msgid "format is a wide character string" msgstr "" -#: c-decl.c:4186 +#: c-format.c:1256 #, gcc-internal-format -msgid "ISO C90 forbids variable-size array %qs" +msgid "unterminated format string" msgstr "" -#: c-decl.c:4226 c-decl.c:4392 cp/decl.c:7636 +#: c-format.c:1470 #, gcc-internal-format -msgid "size of array %qs is too large" +msgid "embedded %<\\0%> in format" msgstr "" -#: c-decl.c:4237 +#: c-format.c:1485 #, gcc-internal-format -msgid "ISO C90 does not support flexible array members" +msgid "spurious trailing %<%%%> in format" msgstr "" -#: c-decl.c:4247 +#: c-format.c:1529 c-format.c:1774 #, gcc-internal-format -msgid "array type has incomplete element type" +msgid "repeated %s in format" msgstr "" -#: c-decl.c:4302 cp/decl.c:7300 +#: c-format.c:1542 #, gcc-internal-format -msgid "%qs declared as function returning a function" +msgid "missing fill character at end of strfmon format" msgstr "" -#: c-decl.c:4307 cp/decl.c:7305 +#: c-format.c:1586 c-format.c:1688 c-format.c:1973 c-format.c:2038 #, gcc-internal-format -msgid "%qs declared as function returning an array" +msgid "too few arguments for format" msgstr "" -#: c-decl.c:4327 +#: c-format.c:1627 #, gcc-internal-format -msgid "function definition has qualified void return type" +msgid "zero width in %s format" msgstr "" -#: c-decl.c:4330 +#: c-format.c:1645 #, gcc-internal-format -msgid "type qualifiers ignored on function return type" +msgid "empty left precision in %s format" msgstr "" -#: c-decl.c:4359 c-decl.c:4405 c-decl.c:4500 c-decl.c:4590 +#: c-format.c:1718 #, gcc-internal-format -msgid "ISO C forbids qualified function types" +msgid "empty precision in %s format" msgstr "" -#: c-decl.c:4413 +#: c-format.c:1758 #, gcc-internal-format -msgid "typedef %q+D declared %" +msgid "%s does not support the %qs %s length modifier" msgstr "" -#: c-decl.c:4443 +#: c-format.c:1808 #, gcc-internal-format -msgid "ISO C forbids const or volatile function types" +msgid "conversion lacks type at end of format" msgstr "" -#: c-decl.c:4463 +#: c-format.c:1819 #, gcc-internal-format -msgid "variable or field %qs declared void" +msgid "unknown conversion type character %qc in format" msgstr "" -#: c-decl.c:4493 +#: c-format.c:1822 #, gcc-internal-format -msgid "attributes in parameter array declarator ignored" +msgid "unknown conversion type character 0x%x in format" msgstr "" -#: c-decl.c:4527 +#: c-format.c:1829 #, gcc-internal-format -msgid "parameter %q+D declared %" +msgid "%s does not support the %<%%%c%> %s format" msgstr "" -#: c-decl.c:4540 +#: c-format.c:1845 #, gcc-internal-format -msgid "field %qs declared as a function" +msgid "%s used with %<%%%c%> %s format" msgstr "" -#: c-decl.c:4546 +#: c-format.c:1854 #, gcc-internal-format -msgid "field %qs has incomplete type" +msgid "%s does not support %s" msgstr "" -#: c-decl.c:4560 c-decl.c:4572 c-decl.c:4576 +#: c-format.c:1864 #, gcc-internal-format -msgid "invalid storage class for function %qs" +msgid "%s does not support %s with the %<%%%c%> %s format" msgstr "" -#: c-decl.c:4596 +#: c-format.c:1898 #, gcc-internal-format -msgid "% function returns non-void value" +msgid "%s ignored with %s and %<%%%c%> %s format" msgstr "" -#: c-decl.c:4624 +#: c-format.c:1902 #, gcc-internal-format -msgid "cannot inline function %" +msgid "%s ignored with %s in %s format" msgstr "" -#: c-decl.c:4671 +#: c-format.c:1909 #, gcc-internal-format -msgid "variable previously declared % redeclared %" +msgid "use of %s and %s together with %<%%%c%> %s format" msgstr "" -#: c-decl.c:4681 +#: c-format.c:1913 #, gcc-internal-format -msgid "variable %q+D declared %" +msgid "use of %s and %s together in %s format" msgstr "" -#. A mere warning is sure to result in improper semantics -#. at runtime. Don't bother to allow this to compile. -#: c-decl.c:4712 cp/decl.c:6060 +#: c-format.c:1932 #, gcc-internal-format -msgid "thread-local storage not supported for this target" +msgid "%<%%%c%> yields only last 2 digits of year in some locales" msgstr "" -#: c-decl.c:4777 c-decl.c:5932 +#: c-format.c:1935 #, gcc-internal-format -msgid "function declaration isn%'t a prototype" +msgid "%<%%%c%> yields only last 2 digits of year" msgstr "" -#: c-decl.c:4785 +#. The end of the format string was reached. +#: c-format.c:1952 #, gcc-internal-format -msgid "parameter names (without types) in function declaration" +msgid "no closing %<]%> for %<%%[%> format" msgstr "" -#: c-decl.c:4818 +#: c-format.c:1966 #, gcc-internal-format -msgid "parameter %u (%q+D) has incomplete type" +msgid "use of %qs length modifier with %qc type character" msgstr "" -#: c-decl.c:4821 +#: c-format.c:1988 #, gcc-internal-format -msgid "%Jparameter %u has incomplete type" +msgid "%s does not support the %<%%%s%c%> %s format" msgstr "" -#: c-decl.c:4830 +#: c-format.c:2005 #, gcc-internal-format -msgid "parameter %u (%q+D) has void type" +msgid "operand number specified with suppressed assignment" msgstr "" -#: c-decl.c:4833 +#: c-format.c:2008 #, gcc-internal-format -msgid "%Jparameter %u has void type" +msgid "operand number specified for format taking no argument" msgstr "" -#: c-decl.c:4893 +#: c-format.c:2151 #, gcc-internal-format -msgid "% as only parameter may not be qualified" +msgid "writing through null pointer (argument %d)" msgstr "" -#: c-decl.c:4897 c-decl.c:4931 +#: c-format.c:2159 #, gcc-internal-format -msgid "% must be the only parameter" +msgid "reading through null pointer (argument %d)" msgstr "" -#: c-decl.c:4925 +#: c-format.c:2179 #, gcc-internal-format -msgid "parameter %q+D has just a forward declaration" +msgid "writing into constant object (argument %d)" msgstr "" -#. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:4970 +#: c-format.c:2190 #, gcc-internal-format -msgid "%<%s %E%> declared inside parameter list" +msgid "extra type qualifiers in format argument (argument %d)" msgstr "" -#. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:4974 +#: c-format.c:2301 #, gcc-internal-format -msgid "anonymous %s declared inside parameter list" +msgid "%s should have type %<%s%s%>, but argument %d has type %qT" msgstr "" -#: c-decl.c:4979 +#: c-format.c:2305 #, gcc-internal-format -msgid "" -"its scope is only this definition or declaration, which is probably not what " -"you want" +msgid "format %q.*s expects type %<%s%s%>, but argument %d has type %qT" msgstr "" -#: c-decl.c:5112 +#: c-format.c:2313 #, gcc-internal-format -msgid "redefinition of %" +msgid "%s should have type %<%T%s%>, but argument %d has type %qT" msgstr "" -#: c-decl.c:5114 +#: c-format.c:2317 #, gcc-internal-format -msgid "redefinition of %" +msgid "format %q.*s expects type %<%T%s%>, but argument %d has type %qT" msgstr "" -#: c-decl.c:5119 +#: c-format.c:2376 c-format.c:2382 c-format.c:2532 #, gcc-internal-format -msgid "nested redefinition of %" +msgid "%<__gcc_host_wide_int__%> is not defined as a type" msgstr "" -#: c-decl.c:5121 +#: c-format.c:2389 c-format.c:2542 #, gcc-internal-format -msgid "nested redefinition of %" +msgid "%<__gcc_host_wide_int__%> is not defined as % or %" msgstr "" -#: c-decl.c:5192 cp/decl.c:3465 +#: c-format.c:2438 #, gcc-internal-format -msgid "declaration does not declare anything" +msgid "% is not defined as a type" msgstr "" -#: c-decl.c:5196 +#: c-format.c:2491 #, gcc-internal-format -msgid "ISO C doesn%'t support unnamed structs/unions" +msgid "% is not defined as a type" msgstr "" -#: c-decl.c:5239 c-decl.c:5255 +#: c-format.c:2508 #, gcc-internal-format -msgid "duplicate member %q+D" +msgid "% is not defined as a type" msgstr "" -#: c-decl.c:5294 +#: c-format.c:2513 #, gcc-internal-format -msgid "union has no named members" +msgid "% is not defined as a pointer type" msgstr "" -#: c-decl.c:5296 +#: c-format.c:2724 #, gcc-internal-format -msgid "union has no members" +msgid "args to be formatted is not %<...%>" msgstr "" -#: c-decl.c:5301 +#: c-format.c:2733 #, gcc-internal-format -msgid "struct has no named members" +msgid "strftime formats cannot format arguments" msgstr "" -#: c-decl.c:5303 +#: c-lex.c:254 #, gcc-internal-format -msgid "struct has no members" +msgid "badly nested C headers from preprocessor" msgstr "" -#: c-decl.c:5360 +#: c-lex.c:302 #, gcc-internal-format -msgid "%Jflexible array member in union" +msgid "%Hignoring #pragma %s %s" msgstr "" -#: c-decl.c:5365 +#. ... or not. +#: c-lex.c:412 #, gcc-internal-format -msgid "%Jflexible array member not at end of struct" +msgid "%Hstray %<@%> in program" msgstr "" -#: c-decl.c:5370 +#: c-lex.c:426 #, gcc-internal-format -msgid "%Jflexible array member in otherwise empty struct" +msgid "stray %qs in program" msgstr "" -#: c-decl.c:5377 +#: c-lex.c:436 #, gcc-internal-format -msgid "%Jinvalid use of structure with flexible array member" +msgid "missing terminating %c character" msgstr "" -#: c-decl.c:5488 +#: c-lex.c:438 #, gcc-internal-format -msgid "union cannot be made transparent" +msgid "stray %qc in program" msgstr "" -#: c-decl.c:5559 +#: c-lex.c:440 #, gcc-internal-format -msgid "nested redefinition of %" +msgid "stray %<\\%o%> in program" msgstr "" -#. This enum is a named one that has been declared already. -#: c-decl.c:5566 +#: c-lex.c:601 #, gcc-internal-format -msgid "redeclaration of %" +msgid "this decimal constant is unsigned only in ISO C90" msgstr "" -#: c-decl.c:5629 +#: c-lex.c:605 #, gcc-internal-format -msgid "enumeration values exceed range of largest integer" +msgid "this decimal constant would be unsigned in ISO C90" msgstr "" -#: c-decl.c:5646 +#: c-lex.c:621 #, gcc-internal-format -msgid "specified mode too small for enumeral values" +msgid "integer constant is too large for %qs type" msgstr "" -#: c-decl.c:5742 +#: c-lex.c:687 #, gcc-internal-format -msgid "enumerator value for %qE is not an integer constant" +msgid "floating constant exceeds range of %<%s%>" msgstr "" -#: c-decl.c:5759 +#: c-lex.c:770 #, gcc-internal-format -msgid "overflow in enumeration values" +msgid "traditional C rejects string constant concatenation" msgstr "" -#: c-decl.c:5764 +#: c-objc-common.c:81 #, gcc-internal-format -msgid "ISO C restricts enumerator values to range of %" +msgid "" +"function %q+F can never be inlined because it is suppressed using -fno-inline" msgstr "" -#: c-decl.c:5860 +#: c-objc-common.c:91 #, gcc-internal-format -msgid "return type is an incomplete type" +msgid "" +"function %q+F can never be inlined because it might not be bound within this " +"unit of translation" msgstr "" -#: c-decl.c:5868 +#: c-objc-common.c:99 #, gcc-internal-format -msgid "return type defaults to %" +msgid "" +"function %q+F can never be inlined because it uses attributes conflicting " +"with inlining" msgstr "" -#: c-decl.c:5939 +#: c-opts.c:147 #, gcc-internal-format -msgid "no previous prototype for %q+D" +msgid "no class name specified with %qs" msgstr "" -#: c-decl.c:5948 +#: c-opts.c:151 #, gcc-internal-format -msgid "%q+D was used with no prototype before its definition" +msgid "assertion missing after %qs" msgstr "" -#: c-decl.c:5954 +#: c-opts.c:156 #, gcc-internal-format -msgid "no previous declaration for %q+D" +msgid "macro name missing after %qs" msgstr "" -#: c-decl.c:5964 +#: c-opts.c:165 #, gcc-internal-format -msgid "%q+D was used with no declaration before its definition" +msgid "missing path after %qs" msgstr "" -#: c-decl.c:5996 c-decl.c:6513 +#: c-opts.c:174 #, gcc-internal-format -msgid "return type of %q+D is not %" +msgid "missing filename after %qs" msgstr "" -#: c-decl.c:6011 +#: c-opts.c:179 #, gcc-internal-format -msgid "first argument of %q+D should be %" +msgid "missing makefile target after %qs" msgstr "" -#: c-decl.c:6019 +#: c-opts.c:319 #, gcc-internal-format -msgid "second argument of %q+D should be %" +msgid "-I- specified twice" msgstr "" -#: c-decl.c:6028 +#: c-opts.c:322 #, gcc-internal-format -msgid "third argument of %q+D should probably be %" +msgid "obsolete option -I- used, please use -iquote instead" msgstr "" -#: c-decl.c:6038 +#: c-opts.c:489 #, gcc-internal-format -msgid "%q+D takes only zero or two arguments" +msgid "argument %qs to %<-Wnormalized%> not recognized" msgstr "" -#: c-decl.c:6041 +#: c-opts.c:573 #, gcc-internal-format -msgid "%q+D is normally a non-static function" +msgid "switch %qs is no longer supported" msgstr "" -#: c-decl.c:6087 +#: c-opts.c:683 #, gcc-internal-format -msgid "%Jold-style parameter declarations in prototyped function definition" +msgid "" +"-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" msgstr "" -#: c-decl.c:6101 +#: c-opts.c:865 #, gcc-internal-format -msgid "%Jtraditional C rejects ISO C style function definitions" +msgid "output filename specified twice" msgstr "" -#: c-decl.c:6117 +#: c-opts.c:1002 #, gcc-internal-format -msgid "%Jparameter name omitted" +msgid "-Wformat-y2k ignored without -Wformat" msgstr "" -#: c-decl.c:6151 +#: c-opts.c:1004 #, gcc-internal-format -msgid "%Jold-style function definition" +msgid "-Wformat-extra-args ignored without -Wformat" msgstr "" -#: c-decl.c:6160 +#: c-opts.c:1006 #, gcc-internal-format -msgid "%Jparameter name missing from parameter list" +msgid "-Wformat-zero-length ignored without -Wformat" msgstr "" -#: c-decl.c:6171 +#: c-opts.c:1008 #, gcc-internal-format -msgid "%q+D declared as a non-parameter" +msgid "-Wformat-nonliteral ignored without -Wformat" msgstr "" -#: c-decl.c:6176 +#: c-opts.c:1010 #, gcc-internal-format -msgid "multiple parameters named %q+D" +msgid "-Wformat-security ignored without -Wformat" msgstr "" -#: c-decl.c:6184 +#: c-opts.c:1030 #, gcc-internal-format -msgid "parameter %q+D declared with void type" +msgid "opening output file %s: %m" msgstr "" -#: c-decl.c:6201 c-decl.c:6203 +#: c-opts.c:1035 #, gcc-internal-format -msgid "type of %q+D defaults to %" +msgid "too many filenames given. Type %s --help for usage" msgstr "" -#: c-decl.c:6222 +#: c-opts.c:1121 #, gcc-internal-format -msgid "parameter %q+D has incomplete type" +msgid "YYDEBUG was not defined at build time, -dy ignored" msgstr "" -#: c-decl.c:6228 +#: c-opts.c:1167 #, gcc-internal-format -msgid "declaration for parameter %q+D but no such parameter" +msgid "opening dependency file %s: %m" msgstr "" -#: c-decl.c:6278 +#: c-opts.c:1177 #, gcc-internal-format -msgid "number of arguments doesn%'t match built-in prototype" +msgid "closing dependency file %s: %m" msgstr "" -#: c-decl.c:6282 +#: c-opts.c:1180 #, gcc-internal-format -msgid "number of arguments doesn%'t match prototype" +msgid "when writing output to %s: %m" msgstr "" -#: c-decl.c:6283 c-decl.c:6323 c-decl.c:6336 +#: c-opts.c:1260 #, gcc-internal-format -msgid "%Hprototype declaration" +msgid "to generate dependencies you must specify either -M or -MM" msgstr "" -#: c-decl.c:6317 +#: c-opts.c:1428 #, gcc-internal-format -msgid "promoted argument %qD doesn%'t match built-in prototype" +msgid "too late for # directive to set debug directory" msgstr "" -#: c-decl.c:6321 +#: c-parser.c:969 #, gcc-internal-format -msgid "promoted argument %qD doesn%'t match prototype" +msgid "ISO C forbids an empty source file" msgstr "" -#: c-decl.c:6331 +#: c-parser.c:1054 c-parser.c:5762 #, gcc-internal-format -msgid "argument %qD doesn%'t match built-in prototype" +msgid "ISO C does not allow extra %<;%> outside of a function" msgstr "" -#: c-decl.c:6335 +#: c-parser.c:1145 #, gcc-internal-format -msgid "argument %qD doesn%'t match prototype" +msgid "expected declaration specifiers" msgstr "" -#: c-decl.c:6558 cp/decl.c:10877 +#: c-parser.c:1193 #, gcc-internal-format -msgid "no return statement in function returning non-void" +msgid "data definition has no type or storage class" msgstr "" -#: c-decl.c:6567 +#: c-parser.c:1247 #, gcc-internal-format -msgid "this function may return with or without a value" +msgid "expected %<,%> or %<;%>" msgstr "" -#. If we get here, declarations have been used in a for loop without -#. the C99 for loop scope. This doesn't make much sense, so don't -#. allow it. -#: c-decl.c:6660 +#. This can appear in many cases looking nothing like a +#. function definition, so we don't give a more specific +#. error suggesting there was one. +#: c-parser.c:1254 c-parser.c:1271 #, gcc-internal-format -msgid "% loop initial declaration used outside C99 mode" +msgid "expected %<=%>, %<,%>, %<;%>, % or %<__attribute__%>" msgstr "" -#: c-decl.c:6689 +#: c-parser.c:1263 #, gcc-internal-format -msgid "declaration of static variable %q+D in % loop initial declaration" +msgid "ISO C forbids nested functions" msgstr "" -#: c-decl.c:6692 +#: c-parser.c:1609 c-parser.c:2372 c-parser.c:2981 c-parser.c:3222 +#: c-parser.c:4009 c-parser.c:4590 c-parser.c:4980 c-parser.c:5000 +#: c-parser.c:5115 c-parser.c:5261 c-parser.c:5278 c-parser.c:5410 +#: c-parser.c:5422 c-parser.c:5447 c-parser.c:5575 c-parser.c:5604 +#: c-parser.c:5612 c-parser.c:5640 c-parser.c:5654 c-parser.c:5867 +#: c-parser.c:5966 #, gcc-internal-format -msgid "" -"declaration of % variable %q+D in % loop initial declaration" +msgid "expected identifier" msgstr "" -#: c-decl.c:6697 +#: c-parser.c:1635 cp/parser.c:10194 #, gcc-internal-format -msgid "% declared in % loop initial declaration" +msgid "comma at end of enumerator list" msgstr "" -#: c-decl.c:6701 +#: c-parser.c:1641 #, gcc-internal-format -msgid "% declared in % loop initial declaration" +msgid "expected %<,%> or %<}%>" msgstr "" -#: c-decl.c:6705 +#: c-parser.c:1655 c-parser.c:1825 c-parser.c:5729 #, gcc-internal-format -msgid "% declared in % loop initial declaration" +msgid "expected %<{%>" msgstr "" -#: c-decl.c:6709 +#: c-parser.c:1664 #, gcc-internal-format -msgid "declaration of non-variable %q+D in % loop initial declaration" +msgid "ISO C forbids forward references to % types" msgstr "" -#: c-decl.c:6993 c-decl.c:7144 c-decl.c:7354 +#: c-parser.c:1767 #, gcc-internal-format -msgid "duplicate %qE" +msgid "expected class name" msgstr "" -#: c-decl.c:7016 c-decl.c:7153 c-decl.c:7256 +#: c-parser.c:1786 c-parser.c:5514 #, gcc-internal-format -msgid "two or more data types in declaration specifiers" +msgid "extra semicolon in struct or union specified" msgstr "" -#: c-decl.c:7028 cp/decl.c:6863 +#: c-parser.c:1808 #, gcc-internal-format -msgid "% is too long for GCC" +msgid "no semicolon at end of struct or union" msgstr "" -#: c-decl.c:7035 c-decl.c:7227 +#: c-parser.c:1811 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "expected %<;%>" msgstr "" -#: c-decl.c:7041 +#: c-parser.c:1888 c-parser.c:2815 #, gcc-internal-format -msgid "ISO C90 does not support %" +msgid "expected specifier-qualifier-list" msgstr "" -#: c-decl.c:7046 c-decl.c:7066 +#: c-parser.c:1898 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "ISO C forbids member declarations with no members" msgstr "" -#: c-decl.c:7049 c-decl.c:7160 +#: c-parser.c:1967 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "expected %<,%>, %<;%> or %<}%>" msgstr "" -#: c-decl.c:7052 c-decl.c:7179 +#: c-parser.c:1974 #, gcc-internal-format -msgid "both % and %<_Bool%> in declaration specifiers" +msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>" msgstr "" -#: c-decl.c:7055 c-decl.c:7198 +#: c-parser.c:2023 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "% applied to a bit-field" msgstr "" -#: c-decl.c:7058 c-decl.c:7211 +#: c-parser.c:2242 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "expected identifier or %<(%>" msgstr "" -#: c-decl.c:7069 c-decl.c:7163 +#: c-parser.c:2435 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "ISO C requires a named argument before %<...%>" msgstr "" -#: c-decl.c:7072 c-decl.c:7182 +#: c-parser.c:2537 #, gcc-internal-format -msgid "both % and %<_Bool%> in declaration specifiers" +msgid "expected declaration specifiers or %<...%>" msgstr "" -#: c-decl.c:7075 c-decl.c:7201 +#: c-parser.c:2587 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "wide string literal in %" msgstr "" -#: c-decl.c:7078 c-decl.c:7214 +#: c-parser.c:2593 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "expected string literal" msgstr "" -#: c-decl.c:7081 c-decl.c:7230 +#: c-parser.c:2907 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "ISO C forbids empty initializer braces" msgstr "" -#: c-decl.c:7089 c-decl.c:7109 +#: c-parser.c:2952 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "obsolete use of designated initializer with %<:%>" msgstr "" -#: c-decl.c:7092 c-decl.c:7166 +#: c-parser.c:3075 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "ISO C forbids specifying range of elements to initialize" msgstr "" -#: c-decl.c:7095 c-decl.c:7185 +#: c-parser.c:3088 #, gcc-internal-format -msgid "both % and %<_Bool%> in declaration specifiers" +msgid "ISO C90 forbids specifying subobject to initialize" msgstr "" -#: c-decl.c:7098 c-decl.c:7217 +#: c-parser.c:3096 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "obsolete use of designated initializer without %<=%>" msgstr "" -#: c-decl.c:7101 c-decl.c:7233 +#: c-parser.c:3104 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "expected %<=%>" msgstr "" -#: c-decl.c:7112 c-decl.c:7169 +#: c-parser.c:3241 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "ISO C forbids label declarations" msgstr "" -#: c-decl.c:7115 c-decl.c:7188 +#: c-parser.c:3246 c-parser.c:3255 #, gcc-internal-format -msgid "both % and %<_Bool%> in declaration specifiers" +msgid "expected declaration or statement" msgstr "" -#: c-decl.c:7118 c-decl.c:7220 +#: c-parser.c:3275 c-parser.c:3303 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "%HISO C90 forbids mixed declarations and code" msgstr "" -#: c-decl.c:7121 c-decl.c:7236 +#: c-parser.c:3319 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "label at end of compound statement" msgstr "" -#: c-decl.c:7129 +#: c-parser.c:3362 #, gcc-internal-format -msgid "ISO C90 does not support complex types" +msgid "expected %<:%> or %<...%>" msgstr "" -#: c-decl.c:7131 c-decl.c:7172 +#: c-parser.c:3498 #, gcc-internal-format -msgid "both % and % in declaration specifiers" +msgid "expected identifier or %<*%>" msgstr "" -#: c-decl.c:7134 c-decl.c:7191 +#. Avoid infinite loop in error recovery: +#. c_parser_skip_until_found stops at a closing nesting +#. delimiter without consuming it, but here we need to consume +#. it to proceed further. +#: c-parser.c:3560 #, gcc-internal-format -msgid "both % and %<_Bool%> in declaration specifiers" +msgid "expected statement" msgstr "" -#: c-decl.c:7273 +#: c-parser.c:3894 #, gcc-internal-format -msgid "%qE fails to be a typedef or built in type" +msgid "%E qualifier ignored on asm" msgstr "" -#: c-decl.c:7305 +#: c-parser.c:4174 #, gcc-internal-format -msgid "%qE is not at beginning of declaration" +msgid "ISO C forbids omitting the middle term of a ?: expression" msgstr "" -#: c-decl.c:7319 +#: c-parser.c:4560 #, gcc-internal-format -msgid "%<__thread%> used with %" +msgid "traditional C rejects the unary plus operator" msgstr "" -#: c-decl.c:7321 +#: c-parser.c:4673 #, gcc-internal-format -msgid "%<__thread%> used with %" +msgid "% applied to a bit-field" msgstr "" -#: c-decl.c:7323 +#: c-parser.c:4816 c-parser.c:5157 c-parser.c:5179 #, gcc-internal-format -msgid "%<__thread%> used with %" +msgid "expected expression" msgstr "" -#: c-decl.c:7334 cp/parser.c:7366 +#: c-parser.c:4842 #, gcc-internal-format -msgid "%<__thread%> before %" +msgid "braced-group within expression allowed only inside a function" msgstr "" -#: c-decl.c:7343 cp/parser.c:7356 +#: c-parser.c:4856 #, gcc-internal-format -msgid "%<__thread%> before %" +msgid "ISO C forbids braced-groups within expressions" msgstr "" -#: c-decl.c:7359 +#: c-parser.c:5039 #, gcc-internal-format -msgid "multiple storage classes in declaration specifiers" +msgid "first argument to %<__builtin_choose_expr%> not a constant" msgstr "" -#: c-decl.c:7366 +#: c-parser.c:5206 #, gcc-internal-format -msgid "%<__thread%> used with %qE" +msgid "compound literal has variable size" msgstr "" -#: c-decl.c:7420 +#: c-parser.c:5214 #, gcc-internal-format -msgid "ISO C does not support plain % meaning %" +msgid "ISO C90 forbids compound literals" msgstr "" -#: c-decl.c:7465 c-decl.c:7491 +#: c-parser.c:5725 #, gcc-internal-format -msgid "ISO C does not support complex integer types" +msgid "extra semicolon in method definition specified" msgstr "" -#: c-decl.c:7564 toplev.c:821 +#: c-pch.c:132 #, gcc-internal-format -msgid "%q+F used but never defined" +msgid "can%'t create precompiled header %s: %m" msgstr "" -#: c-format.c:97 c-format.c:206 +#: c-pch.c:153 #, gcc-internal-format -msgid "format string has invalid operand number" +msgid "can%'t write to %s: %m" msgstr "" -#: c-format.c:114 +#: c-pch.c:159 #, gcc-internal-format -msgid "function does not return string type" +msgid "%qs is not a valid output file" msgstr "" -#: c-format.c:143 +#: c-pch.c:188 c-pch.c:203 c-pch.c:217 #, gcc-internal-format -msgid "format string argument not a string type" +msgid "can%'t write %s: %m" msgstr "" -#: c-format.c:186 +#: c-pch.c:193 c-pch.c:210 #, gcc-internal-format -msgid "unrecognized format specifier" +msgid "can%'t seek in %s: %m" msgstr "" -#: c-format.c:198 +#: c-pch.c:201 c-pch.c:243 c-pch.c:283 c-pch.c:334 #, gcc-internal-format -msgid "%qE is an unrecognized format function type" +msgid "can%'t read %s: %m" msgstr "" -#: c-format.c:212 +#: c-pch.c:452 #, gcc-internal-format -msgid "%<...%> has invalid operand number" +msgid "malformed #pragma GCC pch_preprocess, ignored" msgstr "" -#: c-format.c:219 +#: c-pch.c:458 #, gcc-internal-format -msgid "format string argument follows the args to be formatted" +msgid "pch_preprocess pragma should only be used with -fpreprocessed" msgstr "" -#: c-format.c:899 +#: c-pch.c:459 #, gcc-internal-format -msgid "function might be possible candidate for %qs format attribute" +msgid "use #include instead" msgstr "" -#: c-format.c:991 c-format.c:1012 c-format.c:2026 +#: c-pch.c:467 #, gcc-internal-format -msgid "missing $ operand number in format" +msgid "%s: couldn%'t open PCH file: %m" msgstr "" -#: c-format.c:1021 +#: c-pch.c:472 #, gcc-internal-format -msgid "%s does not support %%n$ operand number formats" +msgid "use -Winvalid-pch for more information" msgstr "" -#: c-format.c:1028 +#: c-pch.c:473 #, gcc-internal-format -msgid "operand number out of range in format" +msgid "%s: PCH file was invalid" msgstr "" -#: c-format.c:1051 +#: c-pragma.c:101 #, gcc-internal-format -msgid "format argument %d used more than once in %s format" +msgid "#pragma pack (pop) encountered without matching #pragma pack (push)" msgstr "" -#: c-format.c:1083 +#: c-pragma.c:114 #, gcc-internal-format -msgid "$ operand number used after format without operand number" +msgid "" +"#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s)" msgstr "" -#: c-format.c:1114 +#: c-pragma.c:128 #, gcc-internal-format -msgid "format argument %d unused before used argument %d in $-style format" +msgid "#pragma pack(push[, id], ) is not supported on this target" msgstr "" -#: c-format.c:1209 +#: c-pragma.c:130 #, gcc-internal-format -msgid "format not a string literal, format string not checked" +msgid "#pragma pack(pop[, id], ) is not supported on this target" msgstr "" -#: c-format.c:1224 c-format.c:1227 +#: c-pragma.c:151 #, gcc-internal-format -msgid "format not a string literal and no format arguments" +msgid "missing %<(%> after %<#pragma pack%> - ignored" msgstr "" -#: c-format.c:1230 +#: c-pragma.c:164 c-pragma.c:204 #, gcc-internal-format -msgid "format not a string literal, argument types not checked" +msgid "malformed %<#pragma pack%> - ignored" msgstr "" -#: c-format.c:1243 +#: c-pragma.c:169 #, gcc-internal-format -msgid "too many arguments for format" +msgid "malformed %<#pragma pack(push[, id][, ])%> - ignored" msgstr "" -#: c-format.c:1246 +#: c-pragma.c:171 #, gcc-internal-format -msgid "unused arguments in $-style format" +msgid "malformed %<#pragma pack(pop[, id])%> - ignored" msgstr "" -#: c-format.c:1249 +#: c-pragma.c:180 #, gcc-internal-format -msgid "zero-length %s format string" +msgid "unknown action %qs for %<#pragma pack%> - ignored" msgstr "" -#: c-format.c:1253 +#: c-pragma.c:207 #, gcc-internal-format -msgid "format is a wide character string" +msgid "junk at end of %<#pragma pack%>" msgstr "" -#: c-format.c:1256 +#: c-pragma.c:210 #, gcc-internal-format -msgid "unterminated format string" +msgid "#pragma pack has no effect with -fpack-struct - ignored" msgstr "" -#: c-format.c:1470 +#: c-pragma.c:230 #, gcc-internal-format -msgid "embedded %<\\0%> in format" +msgid "alignment must be a small power of two, not %d" msgstr "" -#: c-format.c:1485 +#: c-pragma.c:263 #, gcc-internal-format -msgid "spurious trailing %<%%%> in format" +msgid "" +"applying #pragma weak %q+D after first use results in unspecified behavior" msgstr "" -#: c-format.c:1529 c-format.c:1774 +#: c-pragma.c:337 c-pragma.c:342 #, gcc-internal-format -msgid "repeated %s in format" +msgid "malformed #pragma weak, ignored" msgstr "" -#: c-format.c:1542 +#: c-pragma.c:346 #, gcc-internal-format -msgid "missing fill character at end of strfmon format" +msgid "junk at end of #pragma weak" msgstr "" -#: c-format.c:1586 c-format.c:1688 c-format.c:1973 c-format.c:2038 +#: c-pragma.c:414 c-pragma.c:416 #, gcc-internal-format -msgid "too few arguments for format" +msgid "malformed #pragma redefine_extname, ignored" msgstr "" -#: c-format.c:1627 +#: c-pragma.c:419 #, gcc-internal-format -msgid "zero width in %s format" +msgid "junk at end of #pragma redefine_extname" msgstr "" -#: c-format.c:1645 +#: c-pragma.c:425 #, gcc-internal-format -msgid "empty left precision in %s format" +msgid "#pragma redefine_extname not supported on this target" msgstr "" -#: c-format.c:1718 +#: c-pragma.c:442 c-pragma.c:529 #, gcc-internal-format -msgid "empty precision in %s format" +msgid "#pragma redefine_extname ignored due to conflict with previous rename" msgstr "" -#: c-format.c:1758 +#: c-pragma.c:465 #, gcc-internal-format -msgid "%s does not support the %qs %s length modifier" +msgid "" +"#pragma redefine_extname ignored due to conflict with previous #pragma " +"redefine_extname" msgstr "" -#: c-format.c:1808 +#: c-pragma.c:484 #, gcc-internal-format -msgid "conversion lacks type at end of format" +msgid "malformed #pragma extern_prefix, ignored" msgstr "" -#: c-format.c:1819 +#: c-pragma.c:487 #, gcc-internal-format -msgid "unknown conversion type character %qc in format" +msgid "junk at end of #pragma extern_prefix" msgstr "" -#: c-format.c:1822 +#: c-pragma.c:494 #, gcc-internal-format -msgid "unknown conversion type character 0x%x in format" +msgid "#pragma extern_prefix not supported on this target" msgstr "" -#: c-format.c:1829 +#: c-pragma.c:520 #, gcc-internal-format -msgid "%s does not support the %<%%%c%> %s format" +msgid "asm declaration ignored due to conflict with previous rename" msgstr "" -#: c-format.c:1845 +#: c-pragma.c:551 #, gcc-internal-format -msgid "%s used with %<%%%c%> %s format" +msgid "" +"#pragma redefine_extname ignored due to conflict with __asm__ declaration" msgstr "" -#: c-format.c:1854 +#: c-pragma.c:616 #, gcc-internal-format -msgid "%s does not support %s" +msgid "#pragma GCC visibility must be followed by push or pop" msgstr "" -#: c-format.c:1864 +#: c-pragma.c:623 #, gcc-internal-format -msgid "%s does not support %s with the %<%%%c%> %s format" +msgid "no matching push for %<#pragma GCC visibility pop%>" msgstr "" -#: c-format.c:1898 +#: c-pragma.c:635 c-pragma.c:661 #, gcc-internal-format -msgid "%s ignored with %s and %<%%%c%> %s format" +msgid "missing %<(%> after %<#pragma GCC visibility push%> - ignored" msgstr "" -#: c-format.c:1902 +#: c-pragma.c:639 #, gcc-internal-format -msgid "%s ignored with %s in %s format" +msgid "malformed #pragma GCC visibility push" msgstr "" -#: c-format.c:1909 +#: c-pragma.c:656 #, gcc-internal-format -msgid "use of %s and %s together with %<%%%c%> %s format" +msgid "" +"#pragma GCC visibility push() must specify default, internal, hidden or " +"protected" msgstr "" -#: c-format.c:1913 +#: c-pragma.c:665 #, gcc-internal-format -msgid "use of %s and %s together in %s format" +msgid "junk at end of %<#pragma GCC visibility%>" msgstr "" -#: c-format.c:1932 +#: c-typeck.c:157 #, gcc-internal-format -msgid "%<%%%c%> yields only last 2 digits of year in some locales" +msgid "%qD has an incomplete type" msgstr "" -#: c-format.c:1935 +#: c-typeck.c:178 cp/call.c:2696 #, gcc-internal-format -msgid "%<%%%c%> yields only last 2 digits of year" +msgid "invalid use of void expression" msgstr "" -#. The end of the format string was reached. -#: c-format.c:1952 +#: c-typeck.c:186 #, gcc-internal-format -msgid "no closing %<]%> for %<%%[%> format" +msgid "invalid use of flexible array member" msgstr "" -#: c-format.c:1966 +#: c-typeck.c:192 #, gcc-internal-format -msgid "use of %qs length modifier with %qc type character" +msgid "invalid use of array with unspecified bounds" msgstr "" -#: c-format.c:1988 +#: c-typeck.c:200 #, gcc-internal-format -msgid "%s does not support the %<%%%s%c%> %s format" +msgid "invalid use of undefined type %<%s %E%>" msgstr "" -#: c-format.c:2005 +#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. +#: c-typeck.c:204 #, gcc-internal-format -msgid "operand number specified with suppressed assignment" +msgid "invalid use of incomplete typedef %qD" msgstr "" -#: c-format.c:2008 +#: c-typeck.c:431 c-typeck.c:456 #, gcc-internal-format -msgid "operand number specified for format taking no argument" +msgid "function types not truly compatible in ISO C" msgstr "" -#: c-format.c:2151 +#: c-typeck.c:858 #, gcc-internal-format -msgid "writing through null pointer (argument %d)" +msgid "types are not quite compatible" msgstr "" -#: c-format.c:2159 +#: c-typeck.c:1176 #, gcc-internal-format -msgid "reading through null pointer (argument %d)" +msgid "function return types not compatible due to %" msgstr "" -#: c-format.c:2179 +#: c-typeck.c:1335 c-typeck.c:2629 #, gcc-internal-format -msgid "writing into constant object (argument %d)" +msgid "arithmetic on pointer to an incomplete type" msgstr "" -#: c-format.c:2190 +#: c-typeck.c:1726 #, gcc-internal-format -msgid "extra type qualifiers in format argument (argument %d)" +msgid "%qT has no member named %qE" msgstr "" -#: c-format.c:2301 +#: c-typeck.c:1761 #, gcc-internal-format -msgid "%s should have type %<%s%s%>, but argument %d has type %qT" +msgid "request for member %qE in something not a structure or union" msgstr "" -#: c-format.c:2305 +#: c-typeck.c:1792 #, gcc-internal-format -msgid "format %q.*s expects type %<%s%s%>, but argument %d has type %qT" +msgid "dereferencing pointer to incomplete type" msgstr "" -#: c-format.c:2313 +#: c-typeck.c:1796 #, gcc-internal-format -msgid "%s should have type %<%T%s%>, but argument %d has type %qT" +msgid "dereferencing % pointer" msgstr "" -#: c-format.c:2317 +#: c-typeck.c:1813 cp/typeck.c:2198 #, gcc-internal-format -msgid "format %q.*s expects type %<%T%s%>, but argument %d has type %qT" +msgid "invalid type argument of %qs" msgstr "" -#: c-format.c:2376 c-format.c:2382 c-format.c:2532 +#: c-typeck.c:1841 cp/typeck.c:2349 #, gcc-internal-format -msgid "%<__gcc_host_wide_int__%> is not defined as a type" +msgid "subscripted value is neither array nor pointer" msgstr "" -#: c-format.c:2389 c-format.c:2542 +#: c-typeck.c:1852 cp/typeck.c:2268 cp/typeck.c:2354 #, gcc-internal-format -msgid "%<__gcc_host_wide_int__%> is not defined as % or %" +msgid "array subscript is not an integer" msgstr "" -#: c-format.c:2438 +#: c-typeck.c:1858 #, gcc-internal-format -msgid "% is not defined as a type" +msgid "subscripted value is pointer to function" msgstr "" -#: c-format.c:2491 +#: c-typeck.c:1871 cp/typeck.c:2264 #, gcc-internal-format -msgid "% is not defined as a type" +msgid "array subscript has type %" msgstr "" -#: c-format.c:2508 +#: c-typeck.c:1911 #, gcc-internal-format -msgid "% is not defined as a type" +msgid "ISO C forbids subscripting % array" msgstr "" -#: c-format.c:2513 +#: c-typeck.c:1913 #, gcc-internal-format -msgid "% is not defined as a pointer type" +msgid "ISO C90 forbids subscripting non-lvalue array" msgstr "" -#: c-format.c:2724 +#: c-typeck.c:2155 #, gcc-internal-format -msgid "args to be formatted is not %<...%>" +msgid "called object %qE is not a function" msgstr "" -#: c-format.c:2733 +#. This situation leads to run-time undefined behavior. We can't, +#. therefore, simply error unless we can prove that all possible +#. executions of the program must execute the code. +#: c-typeck.c:2182 #, gcc-internal-format -msgid "strftime formats cannot format arguments" +msgid "function called through a non-compatible type" msgstr "" -#: c-lex.c:254 +#: c-typeck.c:2289 #, gcc-internal-format -msgid "badly nested C headers from preprocessor" +msgid "too many arguments to function %qE" msgstr "" -#: c-lex.c:302 +#: c-typeck.c:2310 #, gcc-internal-format -msgid "%Hignoring #pragma %s %s" +msgid "type of formal parameter %d is incomplete" msgstr "" -#. ... or not. -#: c-lex.c:412 +#: c-typeck.c:2323 #, gcc-internal-format -msgid "%Hstray %<@%> in program" +msgid "" +"passing argument %d of %qE as integer rather than floating due to prototype" msgstr "" -#: c-lex.c:426 +#: c-typeck.c:2328 #, gcc-internal-format -msgid "stray %qs in program" +msgid "" +"passing argument %d of %qE as integer rather than complex due to prototype" msgstr "" -#: c-lex.c:436 +#: c-typeck.c:2333 #, gcc-internal-format -msgid "missing terminating %c character" +msgid "" +"passing argument %d of %qE as complex rather than floating due to prototype" msgstr "" -#: c-lex.c:438 +#: c-typeck.c:2338 #, gcc-internal-format -msgid "stray %qc in program" +msgid "" +"passing argument %d of %qE as floating rather than integer due to prototype" msgstr "" -#: c-lex.c:440 +#: c-typeck.c:2343 #, gcc-internal-format -msgid "stray %<\\%o%> in program" +msgid "" +"passing argument %d of %qE as complex rather than integer due to prototype" msgstr "" -#: c-lex.c:601 +#: c-typeck.c:2348 #, gcc-internal-format -msgid "this decimal constant is unsigned only in ISO C90" +msgid "" +"passing argument %d of %qE as floating rather than complex due to prototype" msgstr "" -#: c-lex.c:605 +#: c-typeck.c:2360 #, gcc-internal-format -msgid "this decimal constant would be unsigned in ISO C90" +msgid "" +"passing argument %d of %qE as % rather than % due to " +"prototype" msgstr "" -#: c-lex.c:621 +#: c-typeck.c:2380 #, gcc-internal-format -msgid "integer constant is too large for %qs type" +msgid "passing argument %d of %qE with different width due to prototype" msgstr "" -#: c-lex.c:687 +#: c-typeck.c:2403 #, gcc-internal-format -msgid "floating constant exceeds range of %<%s%>" +msgid "passing argument %d of %qE as unsigned due to prototype" msgstr "" -#: c-lex.c:770 +#: c-typeck.c:2407 #, gcc-internal-format -msgid "traditional C rejects string constant concatenation" +msgid "passing argument %d of %qE as signed due to prototype" msgstr "" -#: c-objc-common.c:81 +#: c-typeck.c:2497 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it is suppressed using -fno-inline" +msgid "suggest parentheses around + or - inside shift" msgstr "" -#: c-objc-common.c:91 +#: c-typeck.c:2505 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it might not be bound within this " -"unit of translation" +msgid "suggest parentheses around && within ||" msgstr "" -#: c-objc-common.c:99 +#: c-typeck.c:2515 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it uses attributes conflicting " -"with inlining" +msgid "suggest parentheses around arithmetic in operand of |" msgstr "" -#: c-opts.c:144 +#: c-typeck.c:2520 #, gcc-internal-format -msgid "no class name specified with %qs" +msgid "suggest parentheses around comparison in operand of |" msgstr "" -#: c-opts.c:148 +#: c-typeck.c:2530 #, gcc-internal-format -msgid "assertion missing after %qs" +msgid "suggest parentheses around arithmetic in operand of ^" msgstr "" -#: c-opts.c:153 +#: c-typeck.c:2535 #, gcc-internal-format -msgid "macro name missing after %qs" +msgid "suggest parentheses around comparison in operand of ^" msgstr "" -#: c-opts.c:162 +#: c-typeck.c:2543 #, gcc-internal-format -msgid "missing path after %qs" +msgid "suggest parentheses around + or - in operand of &" msgstr "" -#: c-opts.c:171 +#: c-typeck.c:2548 #, gcc-internal-format -msgid "missing filename after %qs" +msgid "suggest parentheses around comparison in operand of &" msgstr "" -#: c-opts.c:176 +#: c-typeck.c:2554 #, gcc-internal-format -msgid "missing makefile target after %qs" +msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" msgstr "" -#: c-opts.c:303 +#: c-typeck.c:2581 #, gcc-internal-format -msgid "-I- specified twice" +msgid "pointer of type % used in subtraction" msgstr "" -#: c-opts.c:306 +#: c-typeck.c:2583 #, gcc-internal-format -msgid "obsolete option -I- used, please use -iquote instead" +msgid "pointer to a function used in subtraction" msgstr "" -#: c-opts.c:473 +#: c-typeck.c:2680 #, gcc-internal-format -msgid "argument %qs to %<-Wnormalized%> not recognized" +msgid "wrong type argument to unary plus" msgstr "" -#: c-opts.c:557 +#: c-typeck.c:2693 #, gcc-internal-format -msgid "switch %qs is no longer supported" +msgid "wrong type argument to unary minus" msgstr "" -#: c-opts.c:670 +#: c-typeck.c:2710 #, gcc-internal-format -msgid "" -"-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" +msgid "ISO C does not support %<~%> for complex conjugation" msgstr "" -#: c-opts.c:848 +#: c-typeck.c:2716 #, gcc-internal-format -msgid "output filename specified twice" +msgid "wrong type argument to bit-complement" msgstr "" -#: c-opts.c:985 +#: c-typeck.c:2724 #, gcc-internal-format -msgid "-Wformat-y2k ignored without -Wformat" +msgid "wrong type argument to abs" msgstr "" -#: c-opts.c:987 +#: c-typeck.c:2736 #, gcc-internal-format -msgid "-Wformat-extra-args ignored without -Wformat" +msgid "wrong type argument to conjugation" msgstr "" -#: c-opts.c:989 +#: c-typeck.c:2748 #, gcc-internal-format -msgid "-Wformat-zero-length ignored without -Wformat" +msgid "wrong type argument to unary exclamation mark" msgstr "" -#: c-opts.c:991 +#: c-typeck.c:2785 #, gcc-internal-format -msgid "-Wformat-nonliteral ignored without -Wformat" +msgid "ISO C does not support %<++%> and %<--%> on complex types" msgstr "" -#: c-opts.c:993 +#: c-typeck.c:2801 c-typeck.c:2833 #, gcc-internal-format -msgid "-Wformat-security ignored without -Wformat" +msgid "wrong type argument to increment" msgstr "" -#: c-opts.c:1013 +#: c-typeck.c:2803 c-typeck.c:2835 #, gcc-internal-format -msgid "opening output file %s: %m" +msgid "wrong type argument to decrement" msgstr "" -#: c-opts.c:1018 +#: c-typeck.c:2824 #, gcc-internal-format -msgid "too many filenames given. Type %s --help for usage" +msgid "increment of pointer to unknown structure" msgstr "" -#: c-opts.c:1104 +#: c-typeck.c:2826 #, gcc-internal-format -msgid "YYDEBUG was not defined at build time, -dy ignored" +msgid "decrement of pointer to unknown structure" msgstr "" -#: c-opts.c:1150 +#: c-typeck.c:2998 #, gcc-internal-format -msgid "opening dependency file %s: %m" +msgid "assignment of read-only member %qD" msgstr "" -#: c-opts.c:1160 +#: c-typeck.c:2999 #, gcc-internal-format -msgid "closing dependency file %s: %m" +msgid "increment of read-only member %qD" msgstr "" -#: c-opts.c:1163 +#: c-typeck.c:3000 #, gcc-internal-format -msgid "when writing output to %s: %m" +msgid "decrement of read-only member %qD" msgstr "" -#: c-opts.c:1243 +#: c-typeck.c:3001 #, gcc-internal-format -msgid "to generate dependencies you must specify either -M or -MM" +msgid "read-only member %qD used as % output" msgstr "" -#: c-opts.c:1411 +#: c-typeck.c:3005 #, gcc-internal-format -msgid "too late for # directive to set debug directory" +msgid "assignment of read-only variable %qD" msgstr "" -#: c-parser.c:969 +#: c-typeck.c:3006 #, gcc-internal-format -msgid "ISO C forbids an empty source file" +msgid "increment of read-only variable %qD" msgstr "" -#: c-parser.c:1054 c-parser.c:5761 +#: c-typeck.c:3007 #, gcc-internal-format -msgid "ISO C does not allow extra %<;%> outside of a function" +msgid "decrement of read-only variable %qD" msgstr "" -#: c-parser.c:1145 +#: c-typeck.c:3008 #, gcc-internal-format -msgid "expected declaration specifiers" +msgid "read-only variable %qD used as % output" msgstr "" -#: c-parser.c:1193 +#: c-typeck.c:3011 #, gcc-internal-format -msgid "data definition has no type or storage class" +msgid "assignment of read-only location" msgstr "" -#: c-parser.c:1247 +#: c-typeck.c:3012 #, gcc-internal-format -msgid "expected %<,%> or %<;%>" +msgid "increment of read-only location" msgstr "" -#. This can appear in many cases looking nothing like a -#. function definition, so we don't give a more specific -#. error suggesting there was one. -#: c-parser.c:1254 c-parser.c:1271 +#: c-typeck.c:3013 #, gcc-internal-format -msgid "expected %<=%>, %<,%>, %<;%>, % or %<__attribute__%>" +msgid "decrement of read-only location" msgstr "" -#: c-parser.c:1263 +#: c-typeck.c:3014 #, gcc-internal-format -msgid "ISO C forbids nested functions" +msgid "read-only location used as % output" msgstr "" -#: c-parser.c:1609 c-parser.c:2372 c-parser.c:2981 c-parser.c:3222 -#: c-parser.c:4008 c-parser.c:4589 c-parser.c:4979 c-parser.c:4999 -#: c-parser.c:5114 c-parser.c:5260 c-parser.c:5277 c-parser.c:5409 -#: c-parser.c:5421 c-parser.c:5446 c-parser.c:5574 c-parser.c:5603 -#: c-parser.c:5611 c-parser.c:5639 c-parser.c:5653 c-parser.c:5866 -#: c-parser.c:5965 +#: c-typeck.c:3049 #, gcc-internal-format -msgid "expected identifier" +msgid "cannot take address of bit-field %qD" msgstr "" -#: c-parser.c:1635 cp/parser.c:10164 +#: c-typeck.c:3077 #, gcc-internal-format -msgid "comma at end of enumerator list" +msgid "global register variable %qD used in nested function" msgstr "" -#: c-parser.c:1641 +#: c-typeck.c:3080 #, gcc-internal-format -msgid "expected %<,%> or %<}%>" +msgid "register variable %qD used in nested function" msgstr "" -#: c-parser.c:1655 c-parser.c:1825 c-parser.c:5728 +#: c-typeck.c:3085 #, gcc-internal-format -msgid "expected %<{%>" +msgid "address of global register variable %qD requested" msgstr "" -#: c-parser.c:1664 +#: c-typeck.c:3087 #, gcc-internal-format -msgid "ISO C forbids forward references to % types" +msgid "address of register variable %qD requested" msgstr "" -#: c-parser.c:1767 +#: c-typeck.c:3133 #, gcc-internal-format -msgid "expected class name" +msgid "non-lvalue array in conditional expression" msgstr "" -#: c-parser.c:1786 c-parser.c:5513 +#: c-typeck.c:3177 #, gcc-internal-format -msgid "extra semicolon in struct or union specified" +msgid "signed and unsigned type in conditional expression" msgstr "" -#: c-parser.c:1808 +#: c-typeck.c:3184 #, gcc-internal-format -msgid "no semicolon at end of struct or union" +msgid "ISO C forbids conditional expr with only one void side" msgstr "" -#: c-parser.c:1811 +#: c-typeck.c:3200 c-typeck.c:3208 #, gcc-internal-format -msgid "expected %<;%>" +msgid "ISO C forbids conditional expr between % and function pointer" msgstr "" -#: c-parser.c:1888 c-parser.c:2815 +#: c-typeck.c:3215 #, gcc-internal-format -msgid "expected specifier-qualifier-list" +msgid "pointer type mismatch in conditional expression" msgstr "" -#: c-parser.c:1898 +#: c-typeck.c:3222 c-typeck.c:3232 #, gcc-internal-format -msgid "ISO C forbids member declarations with no members" +msgid "pointer/integer type mismatch in conditional expression" msgstr "" -#: c-parser.c:1967 +#: c-typeck.c:3246 #, gcc-internal-format -msgid "expected %<,%>, %<;%> or %<}%>" +msgid "type mismatch in conditional expression" msgstr "" -#: c-parser.c:1974 +#: c-typeck.c:3286 #, gcc-internal-format -msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>" +msgid "left-hand operand of comma expression has no effect" msgstr "" -#: c-parser.c:2023 +#: c-typeck.c:3320 #, gcc-internal-format -msgid "% applied to a bit-field" +msgid "cast specifies array type" msgstr "" -#: c-parser.c:2242 +#: c-typeck.c:3326 #, gcc-internal-format -msgid "expected identifier or %<(%>" +msgid "cast specifies function type" msgstr "" -#: c-parser.c:2435 +#: c-typeck.c:3336 #, gcc-internal-format -msgid "ISO C requires a named argument before %<...%>" +msgid "ISO C forbids casting nonscalar to the same type" msgstr "" -#: c-parser.c:2537 +#: c-typeck.c:3353 #, gcc-internal-format -msgid "expected declaration specifiers or %<...%>" +msgid "ISO C forbids casts to union type" msgstr "" -#: c-parser.c:2587 +#: c-typeck.c:3361 #, gcc-internal-format -msgid "wide string literal in %" +msgid "cast to union type from type not present in union" msgstr "" -#: c-parser.c:2593 +#: c-typeck.c:3407 #, gcc-internal-format -msgid "expected string literal" +msgid "cast adds new qualifiers to function type" msgstr "" -#: c-parser.c:2907 +#. There are qualifiers present in IN_OTYPE that are not +#. present in IN_TYPE. +#: c-typeck.c:3412 #, gcc-internal-format -msgid "ISO C forbids empty initializer braces" +msgid "cast discards qualifiers from pointer target type" msgstr "" -#: c-parser.c:2952 +#: c-typeck.c:3428 #, gcc-internal-format -msgid "obsolete use of designated initializer with %<:%>" +msgid "cast increases required alignment of target type" msgstr "" -#: c-parser.c:3075 +#: c-typeck.c:3435 #, gcc-internal-format -msgid "ISO C forbids specifying range of elements to initialize" +msgid "cast from pointer to integer of different size" msgstr "" -#: c-parser.c:3088 +#: c-typeck.c:3439 #, gcc-internal-format -msgid "ISO C90 forbids specifying subobject to initialize" +msgid "cast from function call of type %qT to non-matching type %qT" msgstr "" -#: c-parser.c:3096 +#: c-typeck.c:3447 #, gcc-internal-format -msgid "obsolete use of designated initializer without %<=%>" +msgid "cast to pointer from integer of different size" msgstr "" -#: c-parser.c:3104 +#: c-typeck.c:3461 #, gcc-internal-format -msgid "expected %<=%>" +msgid "type-punning to incomplete type might break strict-aliasing rules" msgstr "" -#: c-parser.c:3241 +#: c-typeck.c:3469 #, gcc-internal-format -msgid "ISO C forbids label declarations" +msgid "dereferencing type-punned pointer will break strict-aliasing rules" msgstr "" -#: c-parser.c:3246 c-parser.c:3255 +#: c-typeck.c:3473 #, gcc-internal-format -msgid "expected declaration or statement" +msgid "dereferencing type-punned pointer might break strict-aliasing rules" msgstr "" -#: c-parser.c:3275 c-parser.c:3303 +#: c-typeck.c:3486 #, gcc-internal-format -msgid "%HISO C90 forbids mixed declarations and code" +msgid "ISO C forbids conversion of function pointer to object pointer type" msgstr "" -#: c-parser.c:3319 +#: c-typeck.c:3495 #, gcc-internal-format -msgid "label at end of compound statement" +msgid "ISO C forbids conversion of object pointer to function pointer type" msgstr "" -#: c-parser.c:3362 +#: c-typeck.c:3769 #, gcc-internal-format -msgid "expected %<:%> or %<...%>" +msgid "cannot pass rvalue to reference parameter" msgstr "" -#: c-parser.c:3498 +#: c-typeck.c:3876 c-typeck.c:4044 #, gcc-internal-format -msgid "expected identifier or %<*%>" +msgid "" +"passing argument %d of %qE makes qualified function pointer from unqualified" msgstr "" -#. Avoid infinite loop in error recovery: -#. c_parser_skip_until_found stops at a closing nesting -#. delimiter without consuming it, but here we need to consume -#. it to proceed further. -#: c-parser.c:3560 +#: c-typeck.c:3879 c-typeck.c:4047 #, gcc-internal-format -msgid "expected statement" +msgid "assignment makes qualified function pointer from unqualified" msgstr "" -#: c-parser.c:3893 +#: c-typeck.c:3882 c-typeck.c:4049 #, gcc-internal-format -msgid "%E qualifier ignored on asm" +msgid "initialization makes qualified function pointer from unqualified" msgstr "" -#: c-parser.c:4173 +#: c-typeck.c:3885 c-typeck.c:4051 #, gcc-internal-format -msgid "ISO C forbids omitting the middle term of a ?: expression" +msgid "return makes qualified function pointer from unqualified" msgstr "" -#: c-parser.c:4559 +#: c-typeck.c:3889 c-typeck.c:4011 #, gcc-internal-format -msgid "traditional C rejects the unary plus operator" +msgid "passing argument %d of %qE discards qualifiers from pointer target type" msgstr "" -#: c-parser.c:4672 +#: c-typeck.c:3891 c-typeck.c:4013 #, gcc-internal-format -msgid "% applied to a bit-field" +msgid "assignment discards qualifiers from pointer target type" msgstr "" -#: c-parser.c:4815 c-parser.c:5156 c-parser.c:5178 +#: c-typeck.c:3893 c-typeck.c:4015 #, gcc-internal-format -msgid "expected expression" +msgid "initialization discards qualifiers from pointer target type" msgstr "" -#: c-parser.c:4841 +#: c-typeck.c:3895 c-typeck.c:4017 #, gcc-internal-format -msgid "braced-group within expression allowed only inside a function" +msgid "return discards qualifiers from pointer target type" msgstr "" -#: c-parser.c:4855 +#: c-typeck.c:3902 #, gcc-internal-format -msgid "ISO C forbids braced-groups within expressions" +msgid "ISO C prohibits argument conversion to union type" msgstr "" -#: c-parser.c:5038 +#: c-typeck.c:3937 #, gcc-internal-format -msgid "first argument to %<__builtin_choose_expr%> not a constant" +msgid "request for implicit conversion from %qT to %qT not permitted in C++" msgstr "" -#: c-parser.c:5205 +#: c-typeck.c:3950 #, gcc-internal-format -msgid "compound literal has variable size" +msgid "argument %d of %qE might be a candidate for a format attribute" msgstr "" -#: c-parser.c:5213 +#: c-typeck.c:3956 #, gcc-internal-format -msgid "ISO C90 forbids compound literals" +msgid "assignment left-hand side might be a candidate for a format attribute" msgstr "" -#: c-parser.c:5724 +#: c-typeck.c:3961 #, gcc-internal-format -msgid "extra semicolon in method definition specified" +msgid "" +"initialization left-hand side might be a candidate for a format attribute" msgstr "" -#: c-pch.c:132 +#: c-typeck.c:3966 #, gcc-internal-format -msgid "can%'t create precompiled header %s: %m" +msgid "return type might be a candidate for a format attribute" msgstr "" -#: c-pch.c:153 +#: c-typeck.c:3991 #, gcc-internal-format -msgid "can%'t write to %s: %m" +msgid "" +"ISO C forbids passing argument %d of %qE between function pointer and %" msgstr "" -#: c-pch.c:159 +#: c-typeck.c:3994 #, gcc-internal-format -msgid "%qs is not a valid output file" +msgid "ISO C forbids assignment between function pointer and %" msgstr "" -#: c-pch.c:188 c-pch.c:203 c-pch.c:217 +#: c-typeck.c:3996 #, gcc-internal-format -msgid "can%'t write %s: %m" +msgid "ISO C forbids initialization between function pointer and %" msgstr "" -#: c-pch.c:193 c-pch.c:210 +#: c-typeck.c:3998 #, gcc-internal-format -msgid "can%'t seek in %s: %m" +msgid "ISO C forbids return between function pointer and %" msgstr "" -#: c-pch.c:201 c-pch.c:243 c-pch.c:283 c-pch.c:334 +#: c-typeck.c:4027 #, gcc-internal-format -msgid "can%'t read %s: %m" +msgid "pointer targets in passing argument %d of %qE differ in signedness" msgstr "" -#: c-pch.c:452 +#: c-typeck.c:4029 #, gcc-internal-format -msgid "malformed #pragma GCC pch_preprocess, ignored" +msgid "pointer targets in assignment differ in signedness" msgstr "" -#: c-pch.c:458 +#: c-typeck.c:4031 #, gcc-internal-format -msgid "pch_preprocess pragma should only be used with -fpreprocessed" +msgid "pointer targets in initialization differ in signedness" msgstr "" -#: c-pch.c:459 +#: c-typeck.c:4033 #, gcc-internal-format -msgid "use #include instead" +msgid "pointer targets in return differ in signedness" msgstr "" -#: c-pch.c:467 +#: c-typeck.c:4058 #, gcc-internal-format -msgid "%s: couldn%'t open PCH file: %m" +msgid "passing argument %d of %qE from incompatible pointer type" msgstr "" -#: c-pch.c:472 +#: c-typeck.c:4060 #, gcc-internal-format -msgid "use -Winvalid-pch for more information" +msgid "assignment from incompatible pointer type" msgstr "" -#: c-pch.c:473 +#: c-typeck.c:4061 #, gcc-internal-format -msgid "%s: PCH file was invalid" +msgid "initialization from incompatible pointer type" msgstr "" -#: c-pragma.c:101 +#: c-typeck.c:4063 #, gcc-internal-format -msgid "#pragma pack (pop) encountered without matching #pragma pack (push)" +msgid "return from incompatible pointer type" msgstr "" -#: c-pragma.c:114 +#: c-typeck.c:4085 #, gcc-internal-format -msgid "" -"#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s)" +msgid "passing argument %d of %qE makes pointer from integer without a cast" msgstr "" -#: c-pragma.c:128 +#: c-typeck.c:4087 #, gcc-internal-format -msgid "#pragma pack(push[, id], ) is not supported on this target" +msgid "assignment makes pointer from integer without a cast" msgstr "" -#: c-pragma.c:130 +#: c-typeck.c:4089 #, gcc-internal-format -msgid "#pragma pack(pop[, id], ) is not supported on this target" +msgid "initialization makes pointer from integer without a cast" msgstr "" -#: c-pragma.c:151 +#: c-typeck.c:4091 #, gcc-internal-format -msgid "missing %<(%> after %<#pragma pack%> - ignored" +msgid "return makes pointer from integer without a cast" msgstr "" -#: c-pragma.c:164 c-pragma.c:204 +#: c-typeck.c:4098 #, gcc-internal-format -msgid "malformed %<#pragma pack%> - ignored" +msgid "passing argument %d of %qE makes integer from pointer without a cast" msgstr "" -#: c-pragma.c:169 +#: c-typeck.c:4100 #, gcc-internal-format -msgid "malformed %<#pragma pack(push[, id][, ])%> - ignored" +msgid "assignment makes integer from pointer without a cast" msgstr "" -#: c-pragma.c:171 +#: c-typeck.c:4102 #, gcc-internal-format -msgid "malformed %<#pragma pack(pop[, id])%> - ignored" +msgid "initialization makes integer from pointer without a cast" msgstr "" -#: c-pragma.c:180 +#: c-typeck.c:4104 #, gcc-internal-format -msgid "unknown action %qs for %<#pragma pack%> - ignored" +msgid "return makes integer from pointer without a cast" msgstr "" -#: c-pragma.c:207 +#: c-typeck.c:4120 #, gcc-internal-format -msgid "junk at end of %<#pragma pack%>" +msgid "incompatible types in assignment" msgstr "" -#: c-pragma.c:210 +#: c-typeck.c:4123 #, gcc-internal-format -msgid "#pragma pack has no effect with -fpack-struct - ignored" +msgid "incompatible types in initialization" msgstr "" -#: c-pragma.c:230 +#: c-typeck.c:4126 #, gcc-internal-format -msgid "alignment must be a small power of two, not %d" +msgid "incompatible types in return" msgstr "" -#: c-pragma.c:263 +#: c-typeck.c:4207 #, gcc-internal-format -msgid "" -"applying #pragma weak %q+D after first use results in unspecified behavior" +msgid "traditional C rejects automatic aggregate initialization" msgstr "" -#: c-pragma.c:337 c-pragma.c:342 +#: c-typeck.c:4375 c-typeck.c:4390 c-typeck.c:4405 #, gcc-internal-format -msgid "malformed #pragma weak, ignored" +msgid "(near initialization for %qs)" msgstr "" -#: c-pragma.c:346 +#: c-typeck.c:4942 cp/decl.c:4597 #, gcc-internal-format -msgid "junk at end of #pragma weak" +msgid "opaque vector types cannot be initialized" msgstr "" -#: c-pragma.c:414 c-pragma.c:416 +#: c-typeck.c:5572 #, gcc-internal-format -msgid "malformed #pragma redefine_extname, ignored" +msgid "unknown field %qE specified in initializer" msgstr "" -#: c-pragma.c:419 +#: c-typeck.c:6466 #, gcc-internal-format -msgid "junk at end of #pragma redefine_extname" +msgid "traditional C rejects initialization of unions" msgstr "" -#: c-pragma.c:425 +#: c-typeck.c:6774 #, gcc-internal-format -msgid "#pragma redefine_extname not supported on this target" +msgid "jump into statement expression" msgstr "" -#: c-pragma.c:442 c-pragma.c:529 +#: c-typeck.c:6780 #, gcc-internal-format -msgid "#pragma redefine_extname ignored due to conflict with previous rename" +msgid "jump into scope of identifier with variably modified type" msgstr "" -#: c-pragma.c:465 +#: c-typeck.c:6817 #, gcc-internal-format -msgid "" -"#pragma redefine_extname ignored due to conflict with previous #pragma " -"redefine_extname" +msgid "ISO C forbids %" msgstr "" -#: c-pragma.c:484 +#: c-typeck.c:6832 cp/typeck.c:6234 #, gcc-internal-format -msgid "malformed #pragma extern_prefix, ignored" +msgid "function declared % has a % statement" msgstr "" -#: c-pragma.c:487 +#: c-typeck.c:6840 #, gcc-internal-format -msgid "junk at end of #pragma extern_prefix" +msgid "% with no value, in function returning non-void" msgstr "" -#: c-pragma.c:494 +#: c-typeck.c:6849 #, gcc-internal-format -msgid "#pragma extern_prefix not supported on this target" +msgid "% with a value, in function returning void" msgstr "" -#: c-pragma.c:520 +#: c-typeck.c:6906 #, gcc-internal-format -msgid "asm declaration ignored due to conflict with previous rename" +msgid "function returns address of local variable" msgstr "" -#: c-pragma.c:551 +#: c-typeck.c:6979 cp/semantics.c:908 #, gcc-internal-format -msgid "" -"#pragma redefine_extname ignored due to conflict with __asm__ declaration" +msgid "switch quantity not an integer" msgstr "" -#: c-pragma.c:616 +#: c-typeck.c:6990 #, gcc-internal-format -msgid "#pragma GCC visibility must be followed by push or pop" +msgid "% switch expression not converted to % in ISO C" msgstr "" -#: c-pragma.c:623 +#: c-typeck.c:7031 #, gcc-internal-format -msgid "no matching push for %<#pragma GCC visibility pop%>" +msgid "" +"case label in statement expression not containing enclosing switch statement" msgstr "" -#: c-pragma.c:635 c-pragma.c:661 +#: c-typeck.c:7034 #, gcc-internal-format -msgid "missing %<(%> after %<#pragma GCC visibility push%> - ignored" +msgid "" +"% label in statement expression not containing enclosing switch " +"statement" msgstr "" -#: c-pragma.c:639 +#: c-typeck.c:7040 #, gcc-internal-format -msgid "malformed #pragma GCC visibility push" +msgid "" +"case label in scope of identifier with variably modified type not containing " +"enclosing switch statement" msgstr "" -#: c-pragma.c:656 +#: c-typeck.c:7043 #, gcc-internal-format msgid "" -"#pragma GCC visibility push() must specify default, internal, hidden or " -"protected" +"% label in scope of identifier with variably modified type not " +"containing enclosing switch statement" msgstr "" -#: c-pragma.c:665 +#: c-typeck.c:7047 cp/parser.c:6185 #, gcc-internal-format -msgid "junk at end of %<#pragma GCC visibility%>" +msgid "case label not within a switch statement" msgstr "" -#: c-typeck.c:143 +#: c-typeck.c:7049 #, gcc-internal-format -msgid "%qD has an incomplete type" +msgid "% label not within a switch statement" msgstr "" -#: c-typeck.c:164 cp/call.c:2696 +#: c-typeck.c:7126 #, gcc-internal-format -msgid "invalid use of void expression" +msgid "%Hsuggest explicit braces to avoid ambiguous %" msgstr "" -#: c-typeck.c:172 +#: c-typeck.c:7145 #, gcc-internal-format -msgid "invalid use of flexible array member" +msgid "%Hempty body in an if-statement" msgstr "" -#: c-typeck.c:178 +#: c-typeck.c:7154 #, gcc-internal-format -msgid "invalid use of array with unspecified bounds" +msgid "%Hempty body in an else-statement" msgstr "" -#: c-typeck.c:186 +#: c-typeck.c:7263 cp/cp-gimplify.c:118 cp/parser.c:6677 #, gcc-internal-format -msgid "invalid use of undefined type %<%s %E%>" +msgid "break statement not within loop or switch" msgstr "" -#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. -#: c-typeck.c:190 +#: c-typeck.c:7265 cp/parser.c:6688 #, gcc-internal-format -msgid "invalid use of incomplete typedef %qD" +msgid "continue statement not within a loop" msgstr "" -#: c-typeck.c:417 c-typeck.c:442 +#: c-typeck.c:7285 #, gcc-internal-format -msgid "function types not truly compatible in ISO C" +msgid "%Hstatement with no effect" msgstr "" -#: c-typeck.c:824 +#: c-typeck.c:7307 #, gcc-internal-format -msgid "types are not quite compatible" +msgid "expression statement has incomplete type" msgstr "" -#: c-typeck.c:1066 +#: c-typeck.c:7765 c-typeck.c:7806 #, gcc-internal-format -msgid "function return types not compatible due to %" +msgid "division by zero" msgstr "" -#: c-typeck.c:1225 c-typeck.c:2519 +#: c-typeck.c:7851 cp/typeck.c:3037 #, gcc-internal-format -msgid "arithmetic on pointer to an incomplete type" +msgid "right shift count is negative" msgstr "" -#: c-typeck.c:1616 +#: c-typeck.c:7858 cp/typeck.c:3043 #, gcc-internal-format -msgid "%qT has no member named %qE" +msgid "right shift count >= width of type" msgstr "" -#: c-typeck.c:1651 +#: c-typeck.c:7879 cp/typeck.c:3062 #, gcc-internal-format -msgid "request for member %qE in something not a structure or union" +msgid "left shift count is negative" msgstr "" -#: c-typeck.c:1682 +#: c-typeck.c:7882 cp/typeck.c:3064 #, gcc-internal-format -msgid "dereferencing pointer to incomplete type" +msgid "left shift count >= width of type" msgstr "" -#: c-typeck.c:1686 +#: c-typeck.c:7900 cp/typeck.c:3099 #, gcc-internal-format -msgid "dereferencing % pointer" +msgid "comparing floating point with == or != is unsafe" msgstr "" -#: c-typeck.c:1703 cp/typeck.c:2128 +#: c-typeck.c:7924 c-typeck.c:7931 #, gcc-internal-format -msgid "invalid type argument of %qs" +msgid "ISO C forbids comparison of % with function pointer" msgstr "" -#: c-typeck.c:1731 cp/typeck.c:2279 +#: c-typeck.c:7937 c-typeck.c:7983 #, gcc-internal-format -msgid "subscripted value is neither array nor pointer" +msgid "comparison of distinct pointer types lacks a cast" msgstr "" -#: c-typeck.c:1742 cp/typeck.c:2198 cp/typeck.c:2284 +#: c-typeck.c:7951 c-typeck.c:7956 c-typeck.c:8003 c-typeck.c:8008 #, gcc-internal-format -msgid "array subscript is not an integer" +msgid "comparison between pointer and integer" msgstr "" -#: c-typeck.c:1748 +#: c-typeck.c:7975 #, gcc-internal-format -msgid "subscripted value is pointer to function" +msgid "comparison of complete and incomplete pointers" msgstr "" -#: c-typeck.c:1761 cp/typeck.c:2194 +#: c-typeck.c:7978 #, gcc-internal-format -msgid "array subscript has type %" +msgid "ISO C forbids ordered comparisons of pointers to functions" msgstr "" -#: c-typeck.c:1801 +#: c-typeck.c:7991 c-typeck.c:7998 #, gcc-internal-format -msgid "ISO C forbids subscripting % array" +msgid "ordered comparison of pointer with integer zero" msgstr "" -#: c-typeck.c:1803 +#: c-typeck.c:8228 #, gcc-internal-format -msgid "ISO C90 forbids subscripting non-lvalue array" +msgid "comparison between signed and unsigned" msgstr "" -#: c-typeck.c:2045 +#: c-typeck.c:8274 cp/typeck.c:3522 #, gcc-internal-format -msgid "called object %qE is not a function" +msgid "comparison of promoted ~unsigned with constant" msgstr "" -#. This situation leads to run-time undefined behavior. We can't, -#. therefore, simply error unless we can prove that all possible -#. executions of the program must execute the code. -#: c-typeck.c:2072 +#: c-typeck.c:8282 cp/typeck.c:3530 #, gcc-internal-format -msgid "function called through a non-compatible type" +msgid "comparison of promoted ~unsigned with unsigned" msgstr "" -#: c-typeck.c:2179 +#: c-typeck.c:8340 #, gcc-internal-format -msgid "too many arguments to function %qE" +msgid "used array that cannot be converted to pointer where scalar is required" msgstr "" -#: c-typeck.c:2200 +#: c-typeck.c:8344 #, gcc-internal-format -msgid "type of formal parameter %d is incomplete" +msgid "used struct type value where scalar is required" msgstr "" -#: c-typeck.c:2213 +#: c-typeck.c:8348 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as integer rather than floating due to prototype" +msgid "used union type value where scalar is required" msgstr "" -#: c-typeck.c:2218 +#: calls.c:1929 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as integer rather than complex due to prototype" +msgid "function call has aggregate value" msgstr "" -#: c-typeck.c:2223 +#: cfgexpand.c:1558 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as complex rather than floating due to prototype" +msgid "not protecting local variables: variable length buffer" msgstr "" -#: c-typeck.c:2228 +#: cfgexpand.c:1560 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as floating rather than integer due to prototype" +msgid "not protecting function: no buffer at least %d bytes long" msgstr "" -#: c-typeck.c:2233 +#: cfghooks.c:90 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as complex rather than integer due to prototype" +msgid "bb %d on wrong place" msgstr "" -#: c-typeck.c:2238 +#: cfghooks.c:96 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as floating rather than complex due to prototype" +msgid "prev_bb of %d should be %d, not %d" msgstr "" -#: c-typeck.c:2250 +#: cfghooks.c:113 #, gcc-internal-format -msgid "" -"passing argument %d of %qE as % rather than % due to " -"prototype" +msgid "verify_flow_info: Wrong count of block %i %i" msgstr "" -#: c-typeck.c:2270 +#: cfghooks.c:119 #, gcc-internal-format -msgid "passing argument %d of %qE with different width due to prototype" +msgid "verify_flow_info: Wrong frequency of block %i %i" msgstr "" -#: c-typeck.c:2293 +#: cfghooks.c:127 #, gcc-internal-format -msgid "passing argument %d of %qE as unsigned due to prototype" +msgid "verify_flow_info: Duplicate edge %i->%i" msgstr "" -#: c-typeck.c:2297 +#: cfghooks.c:133 #, gcc-internal-format -msgid "passing argument %d of %qE as signed due to prototype" +msgid "verify_flow_info: Wrong probability of edge %i->%i %i" msgstr "" -#: c-typeck.c:2387 +#: cfghooks.c:139 #, gcc-internal-format -msgid "suggest parentheses around + or - inside shift" +msgid "verify_flow_info: Wrong count of edge %i->%i %i" msgstr "" -#: c-typeck.c:2395 +#: cfghooks.c:151 #, gcc-internal-format -msgid "suggest parentheses around && within ||" +msgid "verify_flow_info: Basic block %d succ edge is corrupted" msgstr "" -#: c-typeck.c:2405 +#: cfghooks.c:165 cfgrtl.c:2045 #, gcc-internal-format -msgid "suggest parentheses around arithmetic in operand of |" +msgid "wrong amount of branch edges after unconditional jump %i" msgstr "" -#: c-typeck.c:2410 +#: cfghooks.c:173 cfghooks.c:184 #, gcc-internal-format -msgid "suggest parentheses around comparison in operand of |" +msgid "basic block %d pred edge is corrupted" msgstr "" -#: c-typeck.c:2420 +#: cfghooks.c:185 #, gcc-internal-format -msgid "suggest parentheses around arithmetic in operand of ^" +msgid "its dest_idx should be %d, not %d" msgstr "" -#: c-typeck.c:2425 +#: cfghooks.c:214 #, gcc-internal-format -msgid "suggest parentheses around comparison in operand of ^" +msgid "basic block %i edge lists are corrupted" msgstr "" -#: c-typeck.c:2433 +#: cfghooks.c:227 #, gcc-internal-format -msgid "suggest parentheses around + or - in operand of &" +msgid "verify_flow_info failed" msgstr "" -#: c-typeck.c:2438 +#: cfghooks.c:288 #, gcc-internal-format -msgid "suggest parentheses around comparison in operand of &" +msgid "%s does not support redirect_edge_and_branch" msgstr "" -#: c-typeck.c:2444 +#: cfghooks.c:306 #, gcc-internal-format -msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" +msgid "%s does not support redirect_edge_and_branch_force" msgstr "" -#: c-typeck.c:2471 +#: cfghooks.c:324 #, gcc-internal-format -msgid "pointer of type % used in subtraction" +msgid "%s does not support split_block" msgstr "" -#: c-typeck.c:2473 +#: cfghooks.c:360 #, gcc-internal-format -msgid "pointer to a function used in subtraction" +msgid "%s does not support move_block_after" msgstr "" -#: c-typeck.c:2570 +#: cfghooks.c:373 #, gcc-internal-format -msgid "wrong type argument to unary plus" +msgid "%s does not support delete_basic_block" msgstr "" -#: c-typeck.c:2583 +#: cfghooks.c:405 #, gcc-internal-format -msgid "wrong type argument to unary minus" +msgid "%s does not support split_edge" msgstr "" -#: c-typeck.c:2600 +#: cfghooks.c:466 #, gcc-internal-format -msgid "ISO C does not support %<~%> for complex conjugation" +msgid "%s does not support create_basic_block" msgstr "" -#: c-typeck.c:2606 +#: cfghooks.c:494 #, gcc-internal-format -msgid "wrong type argument to bit-complement" +msgid "%s does not support can_merge_blocks_p" msgstr "" -#: c-typeck.c:2614 +#: cfghooks.c:505 #, gcc-internal-format -msgid "wrong type argument to abs" +msgid "%s does not support predict_edge" msgstr "" -#: c-typeck.c:2626 +#: cfghooks.c:514 #, gcc-internal-format -msgid "wrong type argument to conjugation" +msgid "%s does not support predicted_by_p" msgstr "" -#: c-typeck.c:2638 +#: cfghooks.c:528 #, gcc-internal-format -msgid "wrong type argument to unary exclamation mark" +msgid "%s does not support merge_blocks" msgstr "" -#: c-typeck.c:2675 +#: cfghooks.c:573 #, gcc-internal-format -msgid "ISO C does not support %<++%> and %<--%> on complex types" +msgid "%s does not support make_forwarder_block" msgstr "" -#: c-typeck.c:2691 c-typeck.c:2723 +#: cfghooks.c:678 #, gcc-internal-format -msgid "wrong type argument to increment" +msgid "%s does not support can_duplicate_block_p" msgstr "" -#: c-typeck.c:2693 c-typeck.c:2725 +#: cfghooks.c:706 #, gcc-internal-format -msgid "wrong type argument to decrement" +msgid "%s does not support duplicate_block" msgstr "" -#: c-typeck.c:2714 +#: cfghooks.c:774 #, gcc-internal-format -msgid "increment of pointer to unknown structure" +msgid "%s does not support block_ends_with_call_p" msgstr "" -#: c-typeck.c:2716 +#: cfghooks.c:785 #, gcc-internal-format -msgid "decrement of pointer to unknown structure" +msgid "%s does not support block_ends_with_condjump_p" msgstr "" -#: c-typeck.c:2887 +#: cfghooks.c:803 #, gcc-internal-format -msgid "assignment of read-only member %qD" +msgid "%s does not support flow_call_edges_add" msgstr "" -#: c-typeck.c:2888 +#: cfgloop.c:1088 #, gcc-internal-format -msgid "increment of read-only member %qD" +msgid "size of loop %d should be %d, not %d" msgstr "" -#: c-typeck.c:2889 +#: cfgloop.c:1105 #, gcc-internal-format -msgid "decrement of read-only member %qD" +msgid "bb %d do not belong to loop %d" msgstr "" -#: c-typeck.c:2893 +#: cfgloop.c:1122 #, gcc-internal-format -msgid "assignment of read-only variable %qD" +msgid "loop %d's header does not have exactly 2 entries" msgstr "" -#: c-typeck.c:2894 +#: cfgloop.c:1129 #, gcc-internal-format -msgid "increment of read-only variable %qD" +msgid "loop %d's latch does not have exactly 1 successor" msgstr "" -#: c-typeck.c:2895 +#: cfgloop.c:1134 #, gcc-internal-format -msgid "decrement of read-only variable %qD" +msgid "loop %d's latch does not have header as successor" msgstr "" -#: c-typeck.c:2898 +#: cfgloop.c:1139 #, gcc-internal-format -msgid "assignment of read-only location" +msgid "loop %d's latch does not belong directly to it" msgstr "" -#: c-typeck.c:2899 +#: cfgloop.c:1145 #, gcc-internal-format -msgid "increment of read-only location" +msgid "loop %d's header does not belong directly to it" msgstr "" -#: c-typeck.c:2900 +#: cfgloop.c:1151 #, gcc-internal-format -msgid "decrement of read-only location" +msgid "loop %d's latch is marked as part of irreducible region" msgstr "" -#: c-typeck.c:2935 +#: cfgloop.c:1184 #, gcc-internal-format -msgid "cannot take address of bit-field %qD" +msgid "basic block %d should be marked irreducible" msgstr "" -#: c-typeck.c:2963 +#: cfgloop.c:1190 #, gcc-internal-format -msgid "global register variable %qD used in nested function" +msgid "basic block %d should not be marked irreducible" msgstr "" -#: c-typeck.c:2966 +#: cfgloop.c:1198 #, gcc-internal-format -msgid "register variable %qD used in nested function" +msgid "edge from %d to %d should be marked irreducible" msgstr "" -#: c-typeck.c:2971 +#: cfgloop.c:1205 #, gcc-internal-format -msgid "address of global register variable %qD requested" +msgid "edge from %d to %d should not be marked irreducible" msgstr "" -#: c-typeck.c:2973 +#: cfgloop.c:1240 #, gcc-internal-format -msgid "address of register variable %qD requested" +msgid "wrong single exit %d->%d recorded for loop %d" msgstr "" -#: c-typeck.c:3019 +#: cfgloop.c:1244 #, gcc-internal-format -msgid "non-lvalue array in conditional expression" +msgid "right exit is %d->%d" msgstr "" -#: c-typeck.c:3063 +#: cfgloop.c:1261 #, gcc-internal-format -msgid "signed and unsigned type in conditional expression" +msgid "single exit not recorded for loop %d" msgstr "" -#: c-typeck.c:3070 +#: cfgloop.c:1268 #, gcc-internal-format -msgid "ISO C forbids conditional expr with only one void side" +msgid "loop %d should not have single exit (%d -> %d)" msgstr "" -#: c-typeck.c:3086 c-typeck.c:3094 +#: cfgrtl.c:1931 #, gcc-internal-format -msgid "ISO C forbids conditional expr between % and function pointer" +msgid "BB_RTL flag not set for block %d" msgstr "" -#: c-typeck.c:3101 +#: cfgrtl.c:1937 #, gcc-internal-format -msgid "pointer type mismatch in conditional expression" +msgid "end insn %d for block %d not found in the insn stream" msgstr "" -#: c-typeck.c:3108 c-typeck.c:3118 +#: cfgrtl.c:1951 #, gcc-internal-format -msgid "pointer/integer type mismatch in conditional expression" +msgid "insn %d is in multiple basic blocks (%d and %d)" msgstr "" -#: c-typeck.c:3132 +#: cfgrtl.c:1963 #, gcc-internal-format -msgid "type mismatch in conditional expression" +msgid "head insn %d for block %d not found in the insn stream" msgstr "" -#: c-typeck.c:3172 +#: cfgrtl.c:1987 #, gcc-internal-format -msgid "left-hand operand of comma expression has no effect" +msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" msgstr "" -#: c-typeck.c:3206 +#: cfgrtl.c:2002 #, gcc-internal-format -msgid "cast specifies array type" +msgid "fallthru edge crosses section boundary (bb %i)" msgstr "" -#: c-typeck.c:3212 +#: cfgrtl.c:2027 #, gcc-internal-format -msgid "cast specifies function type" +msgid "missing REG_EH_REGION note in the end of bb %i" msgstr "" -#: c-typeck.c:3222 +#: cfgrtl.c:2035 #, gcc-internal-format -msgid "ISO C forbids casting nonscalar to the same type" +msgid "too many outgoing branch edges from bb %i" msgstr "" -#: c-typeck.c:3239 +#: cfgrtl.c:2040 #, gcc-internal-format -msgid "ISO C forbids casts to union type" +msgid "fallthru edge after unconditional jump %i" msgstr "" -#: c-typeck.c:3247 +#: cfgrtl.c:2051 #, gcc-internal-format -msgid "cast to union type from type not present in union" +msgid "wrong amount of branch edges after conditional jump %i" msgstr "" -#: c-typeck.c:3293 +#: cfgrtl.c:2056 #, gcc-internal-format -msgid "cast adds new qualifiers to function type" +msgid "call edges for non-call insn in bb %i" msgstr "" -#. There are qualifiers present in IN_OTYPE that are not -#. present in IN_TYPE. -#: c-typeck.c:3298 +#: cfgrtl.c:2065 #, gcc-internal-format -msgid "cast discards qualifiers from pointer target type" +msgid "abnormal edges for no purpose in bb %i" msgstr "" -#: c-typeck.c:3314 +#: cfgrtl.c:2077 #, gcc-internal-format -msgid "cast increases required alignment of target type" +msgid "insn %d inside basic block %d but block_for_insn is NULL" msgstr "" -#: c-typeck.c:3321 +#: cfgrtl.c:2081 #, gcc-internal-format -msgid "cast from pointer to integer of different size" +msgid "insn %d inside basic block %d but block_for_insn is %i" msgstr "" -#: c-typeck.c:3325 +#: cfgrtl.c:2095 cfgrtl.c:2105 #, gcc-internal-format -msgid "cast from function call of type %qT to non-matching type %qT" +msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" -#: c-typeck.c:3333 +#: cfgrtl.c:2118 #, gcc-internal-format -msgid "cast to pointer from integer of different size" +msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" msgstr "" -#: c-typeck.c:3347 +#: cfgrtl.c:2128 #, gcc-internal-format -msgid "type-punning to incomplete type might break strict-aliasing rules" +msgid "in basic block %d:" msgstr "" -#: c-typeck.c:3355 +#: cfgrtl.c:2165 #, gcc-internal-format -msgid "dereferencing type-punned pointer will break strict-aliasing rules" +msgid "bb prediction set for block %i, but it is not used in RTL land" msgstr "" -#: c-typeck.c:3359 +#: cfgrtl.c:2183 #, gcc-internal-format -msgid "dereferencing type-punned pointer might break strict-aliasing rules" +msgid "missing barrier after block %i" msgstr "" -#: c-typeck.c:3372 +#: cfgrtl.c:2196 #, gcc-internal-format -msgid "ISO C forbids conversion of function pointer to object pointer type" +msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" msgstr "" -#: c-typeck.c:3381 +#: cfgrtl.c:2205 #, gcc-internal-format -msgid "ISO C forbids conversion of object pointer to function pointer type" +msgid "verify_flow_info: Incorrect fallthru %i->%i" msgstr "" -#: c-typeck.c:3652 +#: cfgrtl.c:2224 #, gcc-internal-format -msgid "cannot pass rvalue to reference parameter" +msgid "basic blocks not laid down consecutively" msgstr "" -#: c-typeck.c:3761 c-typeck.c:3927 +#: cfgrtl.c:2263 #, gcc-internal-format -msgid "" -"passing argument %d of %qE makes qualified function pointer from unqualified" +msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" -#: c-typeck.c:3764 c-typeck.c:3930 +#: cgraph.c:763 #, gcc-internal-format -msgid "assignment makes qualified function pointer from unqualified" +msgid "%D renamed after being referenced in assembly" msgstr "" -#: c-typeck.c:3767 c-typeck.c:3932 +#: cgraphunit.c:664 #, gcc-internal-format -msgid "initialization makes qualified function pointer from unqualified" +msgid "aux field set for edge %s->%s" msgstr "" -#: c-typeck.c:3770 c-typeck.c:3934 +#: cgraphunit.c:670 #, gcc-internal-format -msgid "return makes qualified function pointer from unqualified" +msgid "Execution count is negative" msgstr "" -#: c-typeck.c:3774 c-typeck.c:3894 +#: cgraphunit.c:677 #, gcc-internal-format -msgid "passing argument %d of %qE discards qualifiers from pointer target type" +msgid "caller edge count is negative" msgstr "" -#: c-typeck.c:3776 c-typeck.c:3896 +#: cgraphunit.c:686 #, gcc-internal-format -msgid "assignment discards qualifiers from pointer target type" +msgid "inlined_to pointer is wrong" msgstr "" -#: c-typeck.c:3778 c-typeck.c:3898 +#: cgraphunit.c:691 #, gcc-internal-format -msgid "initialization discards qualifiers from pointer target type" +msgid "multiple inline callers" msgstr "" -#: c-typeck.c:3780 c-typeck.c:3900 +#: cgraphunit.c:698 #, gcc-internal-format -msgid "return discards qualifiers from pointer target type" +msgid "inlined_to pointer set for noninline callers" msgstr "" -#: c-typeck.c:3785 +#: cgraphunit.c:704 #, gcc-internal-format -msgid "ISO C prohibits argument conversion to union type" +msgid "inlined_to pointer is set but no predecesors found" msgstr "" -#: c-typeck.c:3820 +#: cgraphunit.c:709 #, gcc-internal-format -msgid "request for implicit conversion from %qT to %qT not permitted in C++" +msgid "inlined_to pointer refers to itself" msgstr "" -#: c-typeck.c:3833 +#: cgraphunit.c:719 #, gcc-internal-format -msgid "argument %d of %qE might be a candidate for a format attribute" +msgid "node not found in DECL_ASSEMBLER_NAME hash" msgstr "" -#: c-typeck.c:3839 +#: cgraphunit.c:747 #, gcc-internal-format -msgid "assignment left-hand side might be a candidate for a format attribute" +msgid "shared call_stmt:" msgstr "" -#: c-typeck.c:3844 +#: cgraphunit.c:753 #, gcc-internal-format -msgid "" -"initialization left-hand side might be a candidate for a format attribute" +msgid "edge points to wrong declaration:" msgstr "" -#: c-typeck.c:3849 +#: cgraphunit.c:762 #, gcc-internal-format -msgid "return type might be a candidate for a format attribute" +msgid "missing callgraph edge for call stmt:" msgstr "" -#: c-typeck.c:3874 +#: cgraphunit.c:779 #, gcc-internal-format -msgid "" -"ISO C forbids passing argument %d of %qE between function pointer and %" +msgid "edge %s->%s has no corresponding call_stmt" msgstr "" -#: c-typeck.c:3877 +#: cgraphunit.c:791 #, gcc-internal-format -msgid "ISO C forbids assignment between function pointer and %" +msgid "verify_cgraph_node failed" msgstr "" -#: c-typeck.c:3879 +#: cgraphunit.c:1028 #, gcc-internal-format -msgid "ISO C forbids initialization between function pointer and %" +msgid "failed to reclaim unneeded function" msgstr "" -#: c-typeck.c:3881 +#: cgraphunit.c:1308 #, gcc-internal-format -msgid "ISO C forbids return between function pointer and %" +msgid "nodes with no released memory found" msgstr "" -#: c-typeck.c:3910 +#: collect2.c:1172 #, gcc-internal-format -msgid "pointer targets in passing argument %d of %qE differ in signedness" +msgid "unknown demangling style '%s'" msgstr "" -#: c-typeck.c:3912 +#: collect2.c:1495 #, gcc-internal-format -msgid "pointer targets in assignment differ in signedness" +msgid "%s terminated with signal %d [%s]%s" msgstr "" -#: c-typeck.c:3914 +#: collect2.c:1513 #, gcc-internal-format -msgid "pointer targets in initialization differ in signedness" +msgid "%s returned %d exit status" msgstr "" -#: c-typeck.c:3916 +#: collect2.c:2175 #, gcc-internal-format -msgid "pointer targets in return differ in signedness" +msgid "cannot find 'ldd'" msgstr "" -#: c-typeck.c:3941 +#: convert.c:65 #, gcc-internal-format -msgid "passing argument %d of %qE from incompatible pointer type" +msgid "cannot convert to a pointer type" msgstr "" -#: c-typeck.c:3943 +#: convert.c:304 #, gcc-internal-format -msgid "assignment from incompatible pointer type" +msgid "pointer value used where a floating point value was expected" msgstr "" -#: c-typeck.c:3944 +#: convert.c:308 #, gcc-internal-format -msgid "initialization from incompatible pointer type" +msgid "aggregate value used where a float was expected" msgstr "" -#: c-typeck.c:3946 +#: convert.c:333 #, gcc-internal-format -msgid "return from incompatible pointer type" +msgid "conversion to incomplete type" msgstr "" -#: c-typeck.c:3968 +#: convert.c:678 convert.c:754 #, gcc-internal-format -msgid "passing argument %d of %qE makes pointer from integer without a cast" +msgid "can't convert between vector values of different size" msgstr "" -#: c-typeck.c:3970 +#: convert.c:684 #, gcc-internal-format -msgid "assignment makes pointer from integer without a cast" +msgid "aggregate value used where an integer was expected" msgstr "" -#: c-typeck.c:3972 +#: convert.c:734 #, gcc-internal-format -msgid "initialization makes pointer from integer without a cast" +msgid "pointer value used where a complex was expected" msgstr "" -#: c-typeck.c:3974 +#: convert.c:738 #, gcc-internal-format -msgid "return makes pointer from integer without a cast" +msgid "aggregate value used where a complex was expected" msgstr "" -#: c-typeck.c:3981 +#: convert.c:760 #, gcc-internal-format -msgid "passing argument %d of %qE makes integer from pointer without a cast" +msgid "can't convert value to a vector" msgstr "" -#: c-typeck.c:3983 +#: coverage.c:183 #, gcc-internal-format -msgid "assignment makes integer from pointer without a cast" +msgid "%qs is not a gcov data file" msgstr "" -#: c-typeck.c:3985 +#: coverage.c:194 #, gcc-internal-format -msgid "initialization makes integer from pointer without a cast" +msgid "%qs is version %q.*s, expected version %q.*s" msgstr "" -#: c-typeck.c:3987 +#: coverage.c:274 coverage.c:282 #, gcc-internal-format -msgid "return makes integer from pointer without a cast" +msgid "coverage mismatch for function %u while reading execution counters" msgstr "" -#: c-typeck.c:4003 +#: coverage.c:276 coverage.c:359 #, gcc-internal-format -msgid "incompatible types in assignment" +msgid "checksum is %x instead of %x" msgstr "" -#: c-typeck.c:4006 +#: coverage.c:284 coverage.c:367 #, gcc-internal-format -msgid "incompatible types in initialization" +msgid "number of counters is %d instead of %d" msgstr "" -#: c-typeck.c:4009 +#: coverage.c:290 #, gcc-internal-format -msgid "incompatible types in return" +msgid "cannot merge separate %s counters for function %u" msgstr "" -#: c-typeck.c:4090 +#: coverage.c:311 #, gcc-internal-format -msgid "traditional C rejects automatic aggregate initialization" +msgid "%qs has overflowed" msgstr "" -#: c-typeck.c:4258 c-typeck.c:4273 c-typeck.c:4288 +#: coverage.c:311 #, gcc-internal-format -msgid "(near initialization for %qs)" +msgid "%qs is corrupted" msgstr "" -#: c-typeck.c:4825 cp/decl.c:4562 +#: coverage.c:348 #, gcc-internal-format -msgid "opaque vector types cannot be initialized" +msgid "no coverage for function %qs found" msgstr "" -#: c-typeck.c:5455 +#: coverage.c:356 coverage.c:364 #, gcc-internal-format -msgid "unknown field %qE specified in initializer" +msgid "coverage mismatch for function %qs while reading counter %qs" msgstr "" -#: c-typeck.c:6349 +#: coverage.c:529 #, gcc-internal-format -msgid "traditional C rejects initialization of unions" +msgid "cannot open %s" msgstr "" -#: c-typeck.c:6651 +#: coverage.c:564 #, gcc-internal-format -msgid "jump into statement expression" +msgid "error writing %qs" msgstr "" -#: c-typeck.c:6657 +#: diagnostic.c:602 #, gcc-internal-format -msgid "jump into scope of identifier with variably modified type" +msgid "in %s, at %s:%d" msgstr "" -#: c-typeck.c:6694 +#: dominance.c:855 #, gcc-internal-format -msgid "ISO C forbids %" +msgid "dominator of %d status unknown" msgstr "" -#: c-typeck.c:6709 cp/typeck.c:6156 +#: dominance.c:857 #, gcc-internal-format -msgid "function declared % has a % statement" +msgid "dominator of %d should be %d, not %d" msgstr "" -#: c-typeck.c:6717 +#: dominance.c:869 #, gcc-internal-format -msgid "% with no value, in function returning non-void" +msgid "ENTRY does not dominate bb %d" msgstr "" -#: c-typeck.c:6726 +#: dwarf2out.c:3526 #, gcc-internal-format -msgid "% with a value, in function returning void" +msgid "DW_LOC_OP %s not implemented" msgstr "" -#: c-typeck.c:6783 +#: emit-rtl.c:2266 #, gcc-internal-format -msgid "function returns address of local variable" +msgid "invalid rtl sharing found in the insn" msgstr "" -#: c-typeck.c:6856 cp/semantics.c:908 +#: emit-rtl.c:2268 #, gcc-internal-format -msgid "switch quantity not an integer" +msgid "shared rtx" msgstr "" -#: c-typeck.c:6867 +#: emit-rtl.c:2270 flow.c:492 flow.c:517 flow.c:539 #, gcc-internal-format -msgid "% switch expression not converted to % in ISO C" +msgid "internal consistency failure" msgstr "" -#: c-typeck.c:6908 +#: emit-rtl.c:3334 #, gcc-internal-format -msgid "" -"case label in statement expression not containing enclosing switch statement" +msgid "ICE: emit_insn used where emit_jump_insn needed:\n" msgstr "" -#: c-typeck.c:6911 +#: errors.c:133 java/jv-scan.c:289 #, gcc-internal-format -msgid "" -"% label in statement expression not containing enclosing switch " -"statement" +msgid "abort in %s, at %s:%d" msgstr "" -#: c-typeck.c:6917 +#: except.c:338 #, gcc-internal-format -msgid "" -"case label in scope of identifier with variably modified type not containing " -"enclosing switch statement" +msgid "exception handling disabled, use -fexceptions to enable" msgstr "" -#: c-typeck.c:6920 +#: except.c:2786 #, gcc-internal-format -msgid "" -"% label in scope of identifier with variably modified type not " -"containing enclosing switch statement" +msgid "argument of %<__builtin_eh_return_regno%> must be constant" msgstr "" -#: c-typeck.c:6924 cp/parser.c:6190 +#: except.c:2917 #, gcc-internal-format -msgid "case label not within a switch statement" +msgid "__builtin_eh_return not supported on this target" msgstr "" -#: c-typeck.c:6926 +#: except.c:3771 except.c:3780 #, gcc-internal-format -msgid "% label not within a switch statement" +msgid "region_array is corrupted for region %i" msgstr "" -#: c-typeck.c:7003 +#: except.c:3785 #, gcc-internal-format -msgid "%Hsuggest explicit braces to avoid ambiguous %" +msgid "outer block of region %i is wrong" msgstr "" -#: c-typeck.c:7022 +#: except.c:3790 #, gcc-internal-format -msgid "%Hempty body in an if-statement" +msgid "region %i may contain throw and is contained in region that may not" msgstr "" -#: c-typeck.c:7031 +#: except.c:3796 #, gcc-internal-format -msgid "%Hempty body in an else-statement" +msgid "negative nesting depth of region %i" msgstr "" -#: c-typeck.c:7140 cp/cp-gimplify.c:118 cp/parser.c:6682 +#: except.c:3816 #, gcc-internal-format -msgid "break statement not within loop or switch" +msgid "tree list ends on depth %i" msgstr "" -#: c-typeck.c:7142 cp/parser.c:6693 +#: except.c:3821 #, gcc-internal-format -msgid "continue statement not within a loop" +msgid "array does not match the region tree" msgstr "" -#: c-typeck.c:7162 +#: except.c:3827 #, gcc-internal-format -msgid "%Hstatement with no effect" +msgid "verify_eh_tree failed" msgstr "" -#: c-typeck.c:7184 +#: explow.c:1212 #, gcc-internal-format -msgid "expression statement has incomplete type" +msgid "stack limits not supported on this target" msgstr "" -#: c-typeck.c:7642 c-typeck.c:7683 +#: fold-const.c:3328 fold-const.c:3339 #, gcc-internal-format -msgid "division by zero" +msgid "comparison is always %d due to width of bit-field" msgstr "" -#: c-typeck.c:7728 cp/typeck.c:2967 +#: fold-const.c:4940 fold-const.c:4955 #, gcc-internal-format -msgid "right shift count is negative" +msgid "comparison is always %d" msgstr "" -#: c-typeck.c:7735 cp/typeck.c:2973 +#: fold-const.c:5084 #, gcc-internal-format -msgid "right shift count >= width of type" +msgid "% of unmatched not-equal tests is always 1" msgstr "" -#: c-typeck.c:7756 cp/typeck.c:2992 +#: fold-const.c:5089 #, gcc-internal-format -msgid "left shift count is negative" +msgid "% of mutually exclusive equal-tests is always 0" msgstr "" -#: c-typeck.c:7759 cp/typeck.c:2994 +#: fold-const.c:10285 #, gcc-internal-format -msgid "left shift count >= width of type" +msgid "fold check: original tree changed by fold" msgstr "" -#: c-typeck.c:7777 cp/typeck.c:3029 +#: function.c:491 #, gcc-internal-format -msgid "comparing floating point with == or != is unsafe" +msgid "%Jtotal size of local objects too large" msgstr "" -#: c-typeck.c:7801 c-typeck.c:7808 +#: function.c:838 varasm.c:1674 #, gcc-internal-format -msgid "ISO C forbids comparison of % with function pointer" +msgid "size of variable %q+D is too large" msgstr "" -#: c-typeck.c:7814 c-typeck.c:7860 +#: function.c:1548 #, gcc-internal-format -msgid "comparison of distinct pointer types lacks a cast" +msgid "impossible constraint in %" msgstr "" -#: c-typeck.c:7828 c-typeck.c:7833 c-typeck.c:7880 c-typeck.c:7885 +#: function.c:3478 #, gcc-internal-format -msgid "comparison between pointer and integer" +msgid "variable %q+D might be clobbered by % or %" msgstr "" -#: c-typeck.c:7852 +#: function.c:3499 #, gcc-internal-format -msgid "comparison of complete and incomplete pointers" +msgid "argument %q+D might be clobbered by % or %" msgstr "" -#: c-typeck.c:7855 +#: function.c:3894 #, gcc-internal-format -msgid "ISO C forbids ordered comparisons of pointers to functions" +msgid "function returns an aggregate" msgstr "" -#: c-typeck.c:7868 c-typeck.c:7875 +#: function.c:4286 #, gcc-internal-format -msgid "ordered comparison of pointer with integer zero" +msgid "unused parameter %q+D" msgstr "" -#: c-typeck.c:8105 +#: gcc.c:1243 #, gcc-internal-format -msgid "comparison between signed and unsigned" +msgid "ambiguous abbreviation %s" msgstr "" -#: c-typeck.c:8151 cp/typeck.c:3452 +#: gcc.c:1270 #, gcc-internal-format -msgid "comparison of promoted ~unsigned with constant" +msgid "incomplete '%s' option" msgstr "" -#: c-typeck.c:8159 cp/typeck.c:3460 +#: gcc.c:1281 #, gcc-internal-format -msgid "comparison of promoted ~unsigned with unsigned" +msgid "missing argument to '%s' option" msgstr "" -#: c-typeck.c:8217 +#: gcc.c:1294 #, gcc-internal-format -msgid "used array that cannot be converted to pointer where scalar is required" +msgid "extraneous argument to '%s' option" msgstr "" -#: c-typeck.c:8221 +#: gcc.c:3804 #, gcc-internal-format -msgid "used struct type value where scalar is required" +msgid "warning: -pipe ignored because -save-temps specified" msgstr "" -#: c-typeck.c:8225 +#: gcc.c:4105 #, gcc-internal-format -msgid "used union type value where scalar is required" +msgid "warning: '-x %s' after last input file has no effect" msgstr "" -#: calls.c:1906 +#. Catch the case where a spec string contains something like +#. '%{foo:%*}'. i.e. there is no * in the pattern on the left +#. hand side of the :. +#: gcc.c:5174 #, gcc-internal-format -msgid "function call has aggregate value" +msgid "spec failure: '%%*' has not been initialized by pattern match" msgstr "" -#: cfgexpand.c:1494 +#: gcc.c:5183 #, gcc-internal-format -msgid "not protecting local variables: variable length buffer" +msgid "warning: use of obsolete %%[ operator in specs" msgstr "" -#: cfgexpand.c:1496 +#: gcc.c:5264 #, gcc-internal-format -msgid "not protecting function: no buffer at least %d bytes long" +msgid "spec failure: unrecognized spec option '%c'" msgstr "" -#: cfghooks.c:90 +#: gcc.c:6188 #, gcc-internal-format -msgid "bb %d on wrong place" +msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC" msgstr "" -#: cfghooks.c:96 +#: gcc.c:6211 #, gcc-internal-format -msgid "prev_bb of %d should be %d, not %d" +msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC" msgstr "" -#: cfghooks.c:113 +#: gcc.c:6300 #, gcc-internal-format -msgid "verify_flow_info: Wrong count of block %i %i" +msgid "unrecognized option '-%s'" msgstr "" -#: cfghooks.c:119 +#: gcc.c:6491 gcc.c:6554 #, gcc-internal-format -msgid "verify_flow_info: Wrong frequency of block %i %i" +msgid "%s: %s compiler not installed on this system" msgstr "" -#: cfghooks.c:127 +#: gcc.c:6646 #, gcc-internal-format -msgid "verify_flow_info: Duplicate edge %i->%i" +msgid "%s: linker input file unused because linking not done" msgstr "" -#: cfghooks.c:133 +#: gcc.c:6686 #, gcc-internal-format -msgid "verify_flow_info: Wrong probability of edge %i->%i %i" +msgid "language %s not recognized" msgstr "" -#: cfghooks.c:139 +#: gcc.c:6757 #, gcc-internal-format -msgid "verify_flow_info: Wrong count of edge %i->%i %i" +msgid "%s: %s" msgstr "" -#: cfghooks.c:151 +#: gcse.c:6579 #, gcc-internal-format -msgid "verify_flow_info: Basic block %d succ edge is corrupted" +msgid "%s: %d basic blocks and %d edges/basic block" msgstr "" -#: cfghooks.c:165 cfgrtl.c:2051 +#: gcse.c:6592 #, gcc-internal-format -msgid "wrong amount of branch edges after unconditional jump %i" +msgid "%s: %d basic blocks and %d registers" msgstr "" -#: cfghooks.c:173 cfghooks.c:184 +#: ggc-common.c:404 ggc-common.c:412 ggc-common.c:480 ggc-common.c:499 +#: ggc-page.c:2110 ggc-page.c:2141 ggc-page.c:2148 ggc-zone.c:2291 +#: ggc-zone.c:2306 #, gcc-internal-format -msgid "basic block %d pred edge is corrupted" +msgid "can't write PCH file: %m" msgstr "" -#: cfghooks.c:185 +#: ggc-common.c:492 config/i386/host-cygwin.c:58 #, gcc-internal-format -msgid "its dest_idx should be %d, not %d" +msgid "can't get position in PCH file: %m" msgstr "" -#: cfghooks.c:214 +#: ggc-common.c:502 #, gcc-internal-format -msgid "basic block %i edge lists are corrupted" +msgid "can't write padding to PCH file: %m" msgstr "" -#: cfghooks.c:227 +#: ggc-common.c:557 ggc-common.c:565 ggc-common.c:572 ggc-common.c:575 +#: ggc-common.c:585 ggc-common.c:588 ggc-page.c:2235 ggc-zone.c:2325 #, gcc-internal-format -msgid "verify_flow_info failed" +msgid "can't read PCH file: %m" msgstr "" -#: cfghooks.c:288 +#: ggc-common.c:580 #, gcc-internal-format -msgid "%s does not support redirect_edge_and_branch" +msgid "had to relocate PCH" msgstr "" -#: cfghooks.c:306 +#: ggc-page.c:1448 #, gcc-internal-format -msgid "%s does not support redirect_edge_and_branch_force" +msgid "open /dev/zero: %m" msgstr "" -#: cfghooks.c:324 +#: ggc-page.c:2126 ggc-page.c:2132 #, gcc-internal-format -msgid "%s does not support split_block" +msgid "can't write PCH file" msgstr "" -#: cfghooks.c:360 +#: ggc-zone.c:2288 ggc-zone.c:2299 #, gcc-internal-format -msgid "%s does not support move_block_after" +msgid "can't seek PCH file: %m" msgstr "" -#: cfghooks.c:373 +#: ggc-zone.c:2302 #, gcc-internal-format -msgid "%s does not support delete_basic_block" +msgid "can't write PCH fle: %m" msgstr "" -#: cfghooks.c:405 +#: gimple-low.c:202 #, gcc-internal-format -msgid "%s does not support split_edge" +msgid "unexpected node" msgstr "" -#: cfghooks.c:466 +#: gimplify.c:3662 #, gcc-internal-format -msgid "%s does not support create_basic_block" +msgid "invalid lvalue in asm output %d" msgstr "" -#: cfghooks.c:494 +#: gimplify.c:3774 #, gcc-internal-format -msgid "%s does not support can_merge_blocks_p" +msgid "memory input %d is not directly addressable" msgstr "" -#: cfghooks.c:505 +#: gimplify.c:4646 #, gcc-internal-format -msgid "%s does not support predict_edge" +msgid "gimplification failed" msgstr "" -#: cfghooks.c:514 +#: global.c:376 global.c:389 global.c:403 #, gcc-internal-format -msgid "%s does not support predicted_by_p" +msgid "%s cannot be used in asm here" msgstr "" -#: cfghooks.c:528 +#: graph.c:403 java/jcf-parse.c:1080 java/jcf-parse.c:1215 java/lex.c:1855 +#: objc/objc-act.c:501 #, gcc-internal-format -msgid "%s does not support merge_blocks" +msgid "can't open %s: %m" msgstr "" -#: cfghooks.c:573 +#: haifa-sched.c:182 #, gcc-internal-format -msgid "%s does not support make_forwarder_block" +msgid "fix_sched_param: unknown param: %s" msgstr "" -#: cfghooks.c:678 +#. Eventually this should become a hard error IMO. +#: opts.c:261 #, gcc-internal-format -msgid "%s does not support can_duplicate_block_p" +msgid "command line option \"%s\" is valid for %s but not for %s" msgstr "" -#: cfghooks.c:706 +#: opts.c:315 #, gcc-internal-format -msgid "%s does not support duplicate_block" +msgid "command line option %qs is not supported by this configuration" msgstr "" -#: cfghooks.c:774 +#: opts.c:359 #, gcc-internal-format -msgid "%s does not support block_ends_with_call_p" +msgid "missing argument to \"%s\"" msgstr "" -#: cfghooks.c:785 +#: opts.c:369 #, gcc-internal-format -msgid "%s does not support block_ends_with_condjump_p" +msgid "argument to \"%s\" should be a non-negative integer" msgstr "" -#: cfghooks.c:803 +#: opts.c:457 #, gcc-internal-format -msgid "%s does not support flow_call_edges_add" +msgid "unrecognized command line option \"%s\"" msgstr "" -#: cfgloop.c:1088 +#: opts.c:670 #, gcc-internal-format -msgid "size of loop %d should be %d, not %d" +msgid "-Wuninitialized is not supported without -O" msgstr "" -#: cfgloop.c:1105 +#: opts.c:684 #, gcc-internal-format -msgid "bb %d do not belong to loop %d" +msgid "-freorder-blocks-and-partition does not work with exceptions" msgstr "" -#: cfgloop.c:1122 +#: opts.c:693 #, gcc-internal-format -msgid "loop %d's header does not have exactly 2 entries" +msgid "-freorder-blocks-and-partition does not work on this architecture" msgstr "" -#: cfgloop.c:1129 +#: opts.c:861 #, gcc-internal-format -msgid "loop %d's latch does not have exactly 1 successor" +msgid "structure alignment must be a small power of two, not %d" msgstr "" -#: cfgloop.c:1134 +#: opts.c:919 #, gcc-internal-format -msgid "loop %d's latch does not have header as successor" +msgid "unrecognized visibility value \"%s\"" msgstr "" -#: cfgloop.c:1139 +#: opts.c:967 #, gcc-internal-format -msgid "loop %d's latch does not belong directly to it" +msgid "unrecognized register name \"%s\"" msgstr "" -#: cfgloop.c:1145 +#: opts.c:991 #, gcc-internal-format -msgid "loop %d's header does not belong directly to it" +msgid "unknown tls-model \"%s\"" msgstr "" -#: cfgloop.c:1151 +#: opts.c:1041 #, gcc-internal-format -msgid "loop %d's latch is marked as part of irreducible region" +msgid "-f[no-]force-mem is nop and option will be removed in 4.2" msgstr "" -#: cfgloop.c:1184 +#: opts.c:1064 #, gcc-internal-format -msgid "basic block %d should be marked irreducible" +msgid "%s: --param arguments should be of the form NAME=VALUE" msgstr "" -#: cfgloop.c:1190 +#: opts.c:1069 #, gcc-internal-format -msgid "basic block %d should not be marked irreducible" +msgid "invalid --param value %qs" msgstr "" -#: cfgloop.c:1198 +#: opts.c:1166 #, gcc-internal-format -msgid "edge from %d to %d should be marked irreducible" +msgid "target system does not support debug output" msgstr "" -#: cfgloop.c:1205 +#: opts.c:1173 #, gcc-internal-format -msgid "edge from %d to %d should not be marked irreducible" +msgid "debug format \"%s\" conflicts with prior selection" msgstr "" -#: cfgloop.c:1240 +#: opts.c:1189 #, gcc-internal-format -msgid "wrong single exit %d->%d recorded for loop %d" +msgid "unrecognised debug output level \"%s\"" msgstr "" -#: cfgloop.c:1244 +#: opts.c:1191 #, gcc-internal-format -msgid "right exit is %d->%d" +msgid "debug output level %s is too high" msgstr "" -#: cfgloop.c:1261 +#: params.c:71 #, gcc-internal-format -msgid "single exit not recorded for loop %d" +msgid "minimum value of parameter %qs is %u" msgstr "" -#: cfgloop.c:1268 +#: params.c:76 #, gcc-internal-format -msgid "loop %d should not have single exit (%d -> %d)" +msgid "maximum value of parameter %qs is %u" msgstr "" -#: cfgrtl.c:1937 +#. If we didn't find this parameter, issue an error message. +#: params.c:85 #, gcc-internal-format -msgid "BB_RTL flag not set for block %d" +msgid "invalid parameter %qs" msgstr "" -#: cfgrtl.c:1943 +#: profile.c:287 #, gcc-internal-format -msgid "end insn %d for block %d not found in the insn stream" +msgid "corrupted profile info: run_max * runs < sum_max" msgstr "" -#: cfgrtl.c:1957 +#: profile.c:293 #, gcc-internal-format -msgid "insn %d is in multiple basic blocks (%d and %d)" +msgid "corrupted profile info: sum_all is smaller than sum_max" msgstr "" -#: cfgrtl.c:1969 +#: profile.c:338 #, gcc-internal-format -msgid "head insn %d for block %d not found in the insn stream" +msgid "corrupted profile info: edge from %i to %i exceeds maximal count" msgstr "" -#: cfgrtl.c:1993 +#: profile.c:503 #, gcc-internal-format -msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" +msgid "" +"corrupted profile info: number of iterations for basic block %d thought to " +"be %i" msgstr "" -#: cfgrtl.c:2008 +#: profile.c:524 #, gcc-internal-format -msgid "fallthru edge crosses section boundary (bb %i)" +msgid "" +"corrupted profile info: number of executions for edge %d-%d thought to be %i" msgstr "" -#: cfgrtl.c:2033 +#: reg-stack.c:526 #, gcc-internal-format -msgid "missing REG_EH_REGION note in the end of bb %i" +msgid "output constraint %d must specify a single register" msgstr "" -#: cfgrtl.c:2041 +#: reg-stack.c:536 #, gcc-internal-format -msgid "too many outgoing branch edges from bb %i" +msgid "output constraint %d cannot be specified together with \"%s\" clobber" msgstr "" -#: cfgrtl.c:2046 +#: reg-stack.c:559 #, gcc-internal-format -msgid "fallthru edge after unconditional jump %i" +msgid "output regs must be grouped at top of stack" msgstr "" -#: cfgrtl.c:2057 +#: reg-stack.c:596 #, gcc-internal-format -msgid "wrong amount of branch edges after conditional jump %i" +msgid "implicitly popped regs must be grouped at top of stack" msgstr "" -#: cfgrtl.c:2062 +#: reg-stack.c:615 #, gcc-internal-format -msgid "call edges for non-call insn in bb %i" +msgid "output operand %d must use %<&%> constraint" msgstr "" -#: cfgrtl.c:2071 +#: regclass.c:766 #, gcc-internal-format -msgid "abnormal edges for no purpose in bb %i" +msgid "can't use '%s' as a %s register" msgstr "" -#: cfgrtl.c:2083 +#: regclass.c:781 config/ia64/ia64.c:5035 config/ia64/ia64.c:5042 +#: config/pa/pa.c:339 config/pa/pa.c:346 #, gcc-internal-format -msgid "insn %d inside basic block %d but block_for_insn is NULL" +msgid "unknown register name: %s" msgstr "" -#: cfgrtl.c:2087 +#: regclass.c:791 #, gcc-internal-format -msgid "insn %d inside basic block %d but block_for_insn is %i" +msgid "global register variable follows a function definition" msgstr "" -#: cfgrtl.c:2101 cfgrtl.c:2111 +#: regclass.c:795 #, gcc-internal-format -msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" +msgid "register used for two global register variables" msgstr "" -#: cfgrtl.c:2124 +#: regclass.c:800 #, gcc-internal-format -msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" +msgid "call-clobbered register used for global register variable" msgstr "" -#: cfgrtl.c:2134 +#: regrename.c:1893 #, gcc-internal-format -msgid "in basic block %d:" +msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" msgstr "" -#: cfgrtl.c:2171 +#: regrename.c:1905 #, gcc-internal-format -msgid "bb prediction set for block %i, but it is not used in RTL land" +msgid "validate_value_data: Loop in regno chain (%u)" msgstr "" -#: cfgrtl.c:2189 +#: regrename.c:1908 #, gcc-internal-format -msgid "missing barrier after block %i" +msgid "validate_value_data: [%u] Bad oldest_regno (%u)" msgstr "" -#: cfgrtl.c:2202 +#: regrename.c:1920 #, gcc-internal-format -msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" +msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" msgstr "" -#: cfgrtl.c:2211 +#: reload.c:1270 #, gcc-internal-format -msgid "verify_flow_info: Incorrect fallthru %i->%i" +msgid "cannot reload integer constant operand in %" msgstr "" -#: cfgrtl.c:2230 +#: reload.c:1293 #, gcc-internal-format -msgid "basic blocks not laid down consecutively" +msgid "impossible register constraint in %" msgstr "" -#: cfgrtl.c:2269 +#: reload.c:3560 #, gcc-internal-format -msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" +msgid "%<&%> constraint used with no register class" msgstr "" -#: cgraph.c:763 +#: reload.c:3731 reload.c:3963 #, gcc-internal-format -msgid "%D renamed after being referenced in assembly" +msgid "inconsistent operand constraints in an %" msgstr "" -#: cgraphunit.c:662 +#: reload1.c:1235 #, gcc-internal-format -msgid "aux field set for edge %s->%s" +msgid "frame size too large for reliable stack checking" msgstr "" -#: cgraphunit.c:674 +#: reload1.c:1238 #, gcc-internal-format -msgid "inlined_to pointer is wrong" +msgid "try reducing the number of local variables" msgstr "" -#: cgraphunit.c:679 +#: reload1.c:1894 #, gcc-internal-format -msgid "multiple inline callers" +msgid "can't find a register in class %qs while reloading %" msgstr "" -#: cgraphunit.c:686 +#: reload1.c:1899 #, gcc-internal-format -msgid "inlined_to pointer set for noninline callers" +msgid "unable to find a register to spill in class %qs" msgstr "" -#: cgraphunit.c:692 +#: reload1.c:3969 #, gcc-internal-format -msgid "inlined_to pointer is set but no predecesors found" +msgid "% operand requires impossible reload" msgstr "" -#: cgraphunit.c:697 +#: reload1.c:5093 #, gcc-internal-format -msgid "inlined_to pointer refers to itself" +msgid "% operand constraint incompatible with operand size" msgstr "" -#: cgraphunit.c:707 +#: reload1.c:6723 #, gcc-internal-format -msgid "node not found in DECL_ASSEMBLER_NAME hash" +msgid "output operand is constant in %" msgstr "" -#: cgraphunit.c:735 +#: rtl.c:474 #, gcc-internal-format -msgid "shared call_stmt:" +msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d" msgstr "" -#: cgraphunit.c:741 +#: rtl.c:484 #, gcc-internal-format -msgid "edge points to wrong declaration:" +msgid "" +"RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" msgstr "" -#: cgraphunit.c:750 +#: rtl.c:494 #, gcc-internal-format -msgid "missing callgraph edge for call stmt:" +msgid "" +"RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %" +"s:%d" msgstr "" -#: cgraphunit.c:767 +#: rtl.c:503 #, gcc-internal-format -msgid "edge %s->%s has no corresponding call_stmt" +msgid "RTL check: expected code '%s', have '%s' in %s, at %s:%d" msgstr "" -#: cgraphunit.c:779 +#: rtl.c:513 #, gcc-internal-format -msgid "verify_cgraph_node failed" +msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d" msgstr "" -#: cgraphunit.c:1016 +#: rtl.c:539 #, gcc-internal-format -msgid "failed to reclaim unneeded function" +msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" msgstr "" -#: cgraphunit.c:1296 +#: rtl.c:550 #, gcc-internal-format -msgid "nodes with no released memory found" +msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d" msgstr "" -#: collect2.c:1172 +#: stmt.c:317 #, gcc-internal-format -msgid "unknown demangling style '%s'" +msgid "output operand constraint lacks %<=%>" msgstr "" -#: collect2.c:1495 +#: stmt.c:332 #, gcc-internal-format -msgid "%s terminated with signal %d [%s]%s" +msgid "output constraint %qc for operand %d is not at the beginning" msgstr "" -#: collect2.c:1513 +#: stmt.c:355 #, gcc-internal-format -msgid "%s returned %d exit status" +msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>" msgstr "" -#: collect2.c:2175 +#: stmt.c:362 stmt.c:461 #, gcc-internal-format -msgid "cannot find 'ldd'" +msgid "%<%%%> constraint used with last operand" msgstr "" -#: convert.c:65 +#: stmt.c:381 #, gcc-internal-format -msgid "cannot convert to a pointer type" +msgid "matching constraint not valid in output operand" msgstr "" -#: convert.c:298 +#: stmt.c:452 #, gcc-internal-format -msgid "pointer value used where a floating point value was expected" +msgid "input operand constraint contains %qc" msgstr "" -#: convert.c:302 +#: stmt.c:494 #, gcc-internal-format -msgid "aggregate value used where a float was expected" +msgid "matching constraint references invalid operand number" msgstr "" -#: convert.c:327 +#: stmt.c:532 #, gcc-internal-format -msgid "conversion to incomplete type" +msgid "invalid punctuation %qc in constraint" msgstr "" -#: convert.c:684 convert.c:760 +#: stmt.c:556 #, gcc-internal-format -msgid "can't convert between vector values of different size" +msgid "matching constraint does not allow a register" msgstr "" -#: convert.c:690 +#: stmt.c:598 #, gcc-internal-format -msgid "aggregate value used where an integer was expected" +msgid "asm-specifier for variable %qs conflicts with asm clobber list" msgstr "" -#: convert.c:740 +#: stmt.c:686 #, gcc-internal-format -msgid "pointer value used where a complex was expected" +msgid "unknown register name %qs in %" msgstr "" -#: convert.c:744 +#: stmt.c:694 #, gcc-internal-format -msgid "aggregate value used where a complex was expected" +msgid "PIC register %qs clobbered in %" msgstr "" -#: convert.c:766 +#: stmt.c:741 #, gcc-internal-format -msgid "can't convert value to a vector" +msgid "more than %d operands in %" msgstr "" -#: coverage.c:183 +#: stmt.c:804 #, gcc-internal-format -msgid "%qs is not a gcov data file" +msgid "output number %d not directly addressable" msgstr "" -#: coverage.c:194 +#: stmt.c:883 #, gcc-internal-format -msgid "%qs is version %q.*s, expected version %q.*s" +msgid "asm operand %d probably doesn%'t match constraints" msgstr "" -#: coverage.c:274 coverage.c:282 +#: stmt.c:893 #, gcc-internal-format -msgid "coverage mismatch for function %u while reading execution counters" +msgid "use of memory input without lvalue in asm operand %d is deprecated" msgstr "" -#: coverage.c:276 coverage.c:359 +#: stmt.c:1040 #, gcc-internal-format -msgid "checksum is %x instead of %x" +msgid "asm clobber conflict with output operand" msgstr "" -#: coverage.c:284 coverage.c:367 +#: stmt.c:1045 #, gcc-internal-format -msgid "number of counters is %d instead of %d" +msgid "asm clobber conflict with input operand" msgstr "" -#: coverage.c:290 +#: stmt.c:1122 #, gcc-internal-format -msgid "cannot merge separate %s counters for function %u" +msgid "too many alternatives in %" msgstr "" -#: coverage.c:311 +#: stmt.c:1134 #, gcc-internal-format -msgid "%qs has overflowed" +msgid "operand constraints for % differ in number of alternatives" msgstr "" -#: coverage.c:311 +#: stmt.c:1187 #, gcc-internal-format -msgid "%qs is corrupted" +msgid "duplicate asm operand name %qs" msgstr "" -#: coverage.c:348 +#: stmt.c:1285 #, gcc-internal-format -msgid "no coverage for function %qs found" +msgid "missing close brace for named operand" msgstr "" -#: coverage.c:356 coverage.c:364 +#: stmt.c:1313 #, gcc-internal-format -msgid "coverage mismatch for function %qs while reading counter %qs" +msgid "undefined named operand %qs" msgstr "" -#: coverage.c:523 +#: stmt.c:1457 #, gcc-internal-format -msgid "cannot open %s" +msgid "%Hvalue computed is not used" msgstr "" -#: coverage.c:558 +#: stor-layout.c:149 #, gcc-internal-format -msgid "error writing %qs" +msgid "type size can%'t be explicitly evaluated" msgstr "" -#: diagnostic.c:590 +#: stor-layout.c:151 #, gcc-internal-format -msgid "in %s, at %s:%d" +msgid "variable-size type declared outside of any function" msgstr "" -#: dominance.c:855 +#: stor-layout.c:455 #, gcc-internal-format -msgid "dominator of %d status unknown" +msgid "size of %q+D is %d bytes" msgstr "" -#: dominance.c:857 +#: stor-layout.c:457 #, gcc-internal-format -msgid "dominator of %d should be %d, not %d" +msgid "size of %q+D is larger than %wd bytes" msgstr "" -#: dominance.c:869 +#: stor-layout.c:865 #, gcc-internal-format -msgid "ENTRY does not dominate bb %d" +msgid "packed attribute causes inefficient alignment for %q+D" msgstr "" -#: dwarf2out.c:3469 +#: stor-layout.c:868 #, gcc-internal-format -msgid "DW_LOC_OP %s not implemented" +msgid "packed attribute is unnecessary for %q+D" msgstr "" -#: emit-rtl.c:2266 +#. No, we need to skip space before this field. +#. Bump the cumulative size to multiple of field alignment. +#: stor-layout.c:883 #, gcc-internal-format -msgid "invalid rtl sharing found in the insn" +msgid "padding struct to align %q+D" msgstr "" -#: emit-rtl.c:2268 +#: stor-layout.c:1282 #, gcc-internal-format -msgid "shared rtx" +msgid "padding struct size to alignment boundary" msgstr "" -#: emit-rtl.c:2270 flow.c:495 flow.c:520 flow.c:542 +#: stor-layout.c:1312 #, gcc-internal-format -msgid "internal consistency failure" +msgid "packed attribute causes inefficient alignment for %qs" msgstr "" -#: emit-rtl.c:3334 +#: stor-layout.c:1316 #, gcc-internal-format -msgid "ICE: emit_insn used where emit_jump_insn needed:\n" +msgid "packed attribute is unnecessary for %qs" msgstr "" -#: errors.c:133 java/jv-scan.c:289 +#: stor-layout.c:1322 #, gcc-internal-format -msgid "abort in %s, at %s:%d" +msgid "packed attribute causes inefficient alignment" msgstr "" -#: except.c:333 +#: stor-layout.c:1324 #, gcc-internal-format -msgid "exception handling disabled, use -fexceptions to enable" +msgid "packed attribute is unnecessary" msgstr "" -#: except.c:2757 +#: stor-layout.c:1835 #, gcc-internal-format -msgid "argument of %<__builtin_eh_return_regno%> must be constant" +msgid "alignment of array elements is greater than element size" msgstr "" -#: except.c:2888 +#: targhooks.c:98 #, gcc-internal-format -msgid "__builtin_eh_return not supported on this target" +msgid "__builtin_saveregs not supported by this target" msgstr "" -#: except.c:3738 except.c:3747 +#: tlink.c:484 #, gcc-internal-format -msgid "region_array is corrupted for region %i" +msgid "repository file '%s' does not contain command-line arguments" msgstr "" -#: except.c:3752 +#: tlink.c:705 #, gcc-internal-format -msgid "outer block of region %i is wrong" +msgid "" +"'%s' was assigned to '%s', but was not defined during recompilation, or vice " +"versa" msgstr "" -#: except.c:3757 +#: tlink.c:775 #, gcc-internal-format -msgid "region %i may contain throw and is contained in region that may not" +msgid "ld returned %d exit status" msgstr "" -#: except.c:3763 +#: toplev.c:512 #, gcc-internal-format -msgid "negative nesting depth of region %i" +msgid "invalid option argument %qs" msgstr "" -#: except.c:3783 +#: toplev.c:602 #, gcc-internal-format -msgid "tree list ends on depth %i" +msgid "getting core file size maximum limit: %m" msgstr "" -#: except.c:3788 +#: toplev.c:605 #, gcc-internal-format -msgid "array does not match the region tree" +msgid "setting core file size limit to maximum: %m" msgstr "" -#: except.c:3794 +#: toplev.c:823 #, gcc-internal-format -msgid "verify_eh_tree failed" +msgid "%q+F declared % but never defined" msgstr "" -#: explow.c:1212 +#: toplev.c:848 #, gcc-internal-format -msgid "stack limits not supported on this target" +msgid "%q+D defined but not used" msgstr "" -#: fold-const.c:3309 fold-const.c:3320 +#: toplev.c:891 toplev.c:915 #, gcc-internal-format -msgid "comparison is always %d due to width of bit-field" +msgid "%qs is deprecated (declared at %s:%d)" msgstr "" -#: fold-const.c:4903 fold-const.c:4918 +#: toplev.c:919 #, gcc-internal-format -msgid "comparison is always %d" +msgid "type is deprecated (declared at %s:%d)" msgstr "" -#: fold-const.c:5047 +#: toplev.c:925 #, gcc-internal-format -msgid "% of unmatched not-equal tests is always 1" +msgid "%qs is deprecated" msgstr "" -#: fold-const.c:5052 +#: toplev.c:927 #, gcc-internal-format -msgid "% of mutually exclusive equal-tests is always 0" +msgid "type is deprecated" msgstr "" -#: fold-const.c:10273 +#: toplev.c:1094 #, gcc-internal-format -msgid "fold check: original tree changed by fold" +msgid "unrecognized gcc debugging option: %c" msgstr "" -#: function.c:823 varasm.c:1669 +#: toplev.c:1247 #, gcc-internal-format -msgid "size of variable %q+D is too large" +msgid "can%'t open %s for writing: %m" msgstr "" -#: function.c:1526 +#: toplev.c:1591 #, gcc-internal-format -msgid "impossible constraint in %" +msgid "instruction scheduling not supported on this target machine" msgstr "" -#: function.c:3467 +#: toplev.c:1595 #, gcc-internal-format -msgid "variable %q+D might be clobbered by % or %" +msgid "this target machine does not have delayed branches" msgstr "" -#: function.c:3488 +#: toplev.c:1609 #, gcc-internal-format -msgid "argument %q+D might be clobbered by % or %" +msgid "-f%sleading-underscore not supported on this target machine" msgstr "" -#: function.c:3883 +#: toplev.c:1682 #, gcc-internal-format -msgid "function returns an aggregate" +msgid "target system does not support the \"%s\" debug format" msgstr "" -#: function.c:4311 +#: toplev.c:1694 #, gcc-internal-format -msgid "unused parameter %q+D" +msgid "variable tracking requested, but useless unless producing debug info" msgstr "" -#: gcc.c:1244 +#: toplev.c:1697 #, gcc-internal-format -msgid "ambiguous abbreviation %s" +msgid "variable tracking requested, but not supported by this debug format" msgstr "" -#: gcc.c:1271 +#: toplev.c:1717 #, gcc-internal-format -msgid "incomplete '%s' option" +msgid "can%'t open %s: %m" msgstr "" -#: gcc.c:1282 +#: toplev.c:1724 #, gcc-internal-format -msgid "missing argument to '%s' option" +msgid "-ffunction-sections not supported for this target" msgstr "" -#: gcc.c:1295 +#: toplev.c:1729 #, gcc-internal-format -msgid "extraneous argument to '%s' option" +msgid "-fdata-sections not supported for this target" msgstr "" -#: gcc.c:3799 +#: toplev.c:1736 #, gcc-internal-format -msgid "warning: -pipe ignored because -save-temps specified" +msgid "-ffunction-sections disabled; it makes profiling impossible" msgstr "" -#: gcc.c:4100 +#: toplev.c:1743 #, gcc-internal-format -msgid "warning: '-x %s' after last input file has no effect" +msgid "-fprefetch-loop-arrays not supported for this target" msgstr "" -#. Catch the case where a spec string contains something like -#. '%{foo:%*}'. i.e. there is no * in the pattern on the left -#. hand side of the :. -#: gcc.c:5169 +#: toplev.c:1749 #, gcc-internal-format -msgid "spec failure: '%%*' has not been initialized by pattern match" +msgid "" +"-fprefetch-loop-arrays not supported for this target (try -march switches)" msgstr "" -#: gcc.c:5178 +#: toplev.c:1758 #, gcc-internal-format -msgid "warning: use of obsolete %%[ operator in specs" +msgid "-fprefetch-loop-arrays is not supported with -Os" msgstr "" -#: gcc.c:5259 +#: toplev.c:1764 #, gcc-internal-format -msgid "spec failure: unrecognized spec option '%c'" +msgid "-ffunction-sections may affect debugging on some targets" msgstr "" -#: gcc.c:6183 +#: toplev.c:1779 #, gcc-internal-format -msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC" +msgid "-fstack-protector not supported for this target" msgstr "" -#: gcc.c:6206 +#: toplev.c:1792 #, gcc-internal-format -msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC" +msgid "unwind tables currently requires a frame pointer for correctness" msgstr "" -#: gcc.c:6295 +#: toplev.c:1897 #, gcc-internal-format -msgid "unrecognized option '-%s'" +msgid "error writing to %s: %m" msgstr "" -#: gcc.c:6483 gcc.c:6546 +#: toplev.c:1899 java/jcf-parse.c:1099 java/jcf-write.c:3539 #, gcc-internal-format -msgid "%s: %s compiler not installed on this system" +msgid "error closing %s: %m" msgstr "" -#: gcc.c:6638 +#: tree-cfg.c:1422 tree-cfg.c:2060 tree-cfg.c:2063 #, gcc-internal-format -msgid "%s: linker input file unused because linking not done" +msgid "%Hwill never be executed" msgstr "" -#: gcc.c:6678 +#: tree-cfg.c:3149 #, gcc-internal-format -msgid "language %s not recognized" +msgid "SSA name in freelist but still referenced" msgstr "" -#: gcc.c:6749 +#: tree-cfg.c:3158 #, gcc-internal-format -msgid "%s: %s" +msgid "ASSERT_EXPR with an always-false condition" msgstr "" -#: gcse.c:6542 +#: tree-cfg.c:3168 #, gcc-internal-format -msgid "%s: %d basic blocks and %d edges/basic block" +msgid "GIMPLE register modified with BIT_FIELD_REF" msgstr "" -#: gcse.c:6555 +#: tree-cfg.c:3203 #, gcc-internal-format -msgid "%s: %d basic blocks and %d registers" +msgid "invariant not recomputed when ADDR_EXPR changed" msgstr "" -#: ggc-common.c:404 ggc-common.c:412 ggc-common.c:480 ggc-common.c:499 -#: ggc-page.c:2110 ggc-page.c:2141 ggc-page.c:2148 ggc-zone.c:2291 -#: ggc-zone.c:2306 +#: tree-cfg.c:3209 #, gcc-internal-format -msgid "can't write PCH file: %m" +msgid "constant not recomputed when ADDR_EXPR changed" msgstr "" -#: ggc-common.c:492 config/i386/host-cygwin.c:58 +#: tree-cfg.c:3214 #, gcc-internal-format -msgid "can't get position in PCH file: %m" +msgid "side effects not recomputed when ADDR_EXPR changed" msgstr "" -#: ggc-common.c:502 +#: tree-cfg.c:3230 #, gcc-internal-format -msgid "can't write padding to PCH file: %m" +msgid "address taken, but ADDRESSABLE bit not set" msgstr "" -#: ggc-common.c:557 ggc-common.c:565 ggc-common.c:572 ggc-common.c:575 -#: ggc-common.c:585 ggc-common.c:588 ggc-page.c:2235 ggc-zone.c:2325 +#: tree-cfg.c:3240 #, gcc-internal-format -msgid "can't read PCH file: %m" +msgid "non-boolean used in condition" msgstr "" -#: ggc-common.c:580 +#: tree-cfg.c:3245 #, gcc-internal-format -msgid "had to relocate PCH" +msgid "invalid conditional operand" msgstr "" -#: ggc-page.c:1448 +#: tree-cfg.c:3300 #, gcc-internal-format -msgid "open /dev/zero: %m" +msgid "invalid reference prefix" msgstr "" -#: ggc-page.c:2126 ggc-page.c:2132 +#: tree-cfg.c:3365 #, gcc-internal-format -msgid "can't write PCH file" +msgid "is not a valid GIMPLE statement" msgstr "" -#: ggc-zone.c:2288 ggc-zone.c:2299 +#: tree-cfg.c:3385 #, gcc-internal-format -msgid "can't seek PCH file: %m" +msgid "statement marked for throw, but doesn%'t" msgstr "" -#: ggc-zone.c:2302 +#: tree-cfg.c:3390 #, gcc-internal-format -msgid "can't write PCH fle: %m" +msgid "statement marked for throw in middle of block" msgstr "" -#: gimple-low.c:202 +#: tree-cfg.c:3485 #, gcc-internal-format -msgid "unexpected node" +msgid "bb_for_stmt (phi) is set to a wrong basic block" msgstr "" -#: gimplify.c:3554 +#: tree-cfg.c:3500 #, gcc-internal-format -msgid "invalid lvalue in asm output %d" +msgid "PHI def is not a GIMPLE value" msgstr "" -#: gimplify.c:3666 +#: tree-cfg.c:3516 tree-cfg.c:3539 #, gcc-internal-format -msgid "memory input %d is not directly addressable" +msgid "incorrect sharing of tree nodes" msgstr "" -#: gimplify.c:4552 +#: tree-cfg.c:3530 #, gcc-internal-format -msgid "gimplification failed" +msgid "bb_for_stmt (stmt) is set to a wrong basic block" msgstr "" -#: global.c:376 global.c:389 global.c:403 +#: tree-cfg.c:3548 #, gcc-internal-format -msgid "%s cannot be used in asm here" +msgid "verify_stmts failed" msgstr "" -#: graph.c:403 java/jcf-parse.c:1080 java/jcf-parse.c:1215 java/lex.c:1855 -#: objc/objc-act.c:501 +#: tree-cfg.c:3569 #, gcc-internal-format -msgid "can't open %s: %m" +msgid "ENTRY_BLOCK has a statement list associated with it" msgstr "" -#: haifa-sched.c:182 +#: tree-cfg.c:3575 #, gcc-internal-format -msgid "fix_sched_param: unknown param: %s" +msgid "EXIT_BLOCK has a statement list associated with it" msgstr "" -#. Eventually this should become a hard error IMO. -#: opts.c:261 +#: tree-cfg.c:3582 #, gcc-internal-format -msgid "command line option \"%s\" is valid for %s but not for %s" +msgid "fallthru to exit from bb %d" msgstr "" -#: opts.c:315 +#: tree-cfg.c:3604 #, gcc-internal-format -msgid "command line option %qs is not supported by this configuration" +msgid "nonlocal label %s is not first in a sequence of labels in bb %d" msgstr "" -#: opts.c:359 +#: tree-cfg.c:3613 #, gcc-internal-format -msgid "missing argument to \"%s\"" +msgid "label %s to block does not match in bb %d" msgstr "" -#: opts.c:369 +#: tree-cfg.c:3622 #, gcc-internal-format -msgid "argument to \"%s\" should be a non-negative integer" +msgid "label %s has incorrect context in bb %d" msgstr "" -#: opts.c:457 +#: tree-cfg.c:3636 #, gcc-internal-format -msgid "unrecognized command line option \"%s\"" +msgid "control flow in the middle of basic block %d" msgstr "" -#: opts.c:670 +#: tree-cfg.c:3646 #, gcc-internal-format -msgid "-Wuninitialized is not supported without -O" +msgid "label %s in the middle of basic block %d" msgstr "" -#: opts.c:684 +#: tree-cfg.c:3665 #, gcc-internal-format -msgid "-freorder-blocks-and-partition does not work with exceptions" +msgid "fallthru edge after a control statement in bb %d" msgstr "" -#: opts.c:693 +#: tree-cfg.c:3680 #, gcc-internal-format -msgid "-freorder-blocks-and-partition does not work on this architecture" +msgid "structured COND_EXPR at the end of bb %d" msgstr "" -#: opts.c:861 +#: tree-cfg.c:3693 tree-cfg.c:3731 tree-cfg.c:3744 tree-cfg.c:3815 #, gcc-internal-format -msgid "structure alignment must be a small power of two, not %d" +msgid "wrong outgoing edge flags at end of bb %d" msgstr "" -#: opts.c:919 +#: tree-cfg.c:3701 #, gcc-internal-format -msgid "unrecognized visibility value \"%s\"" +msgid "% label does not match edge at end of bb %d" msgstr "" -#: opts.c:967 +#: tree-cfg.c:3709 #, gcc-internal-format -msgid "unrecognized register name \"%s\"" +msgid "% label does not match edge at end of bb %d" msgstr "" -#: opts.c:991 +#: tree-cfg.c:3719 #, gcc-internal-format -msgid "unknown tls-model \"%s\"" +msgid "explicit goto at end of bb %d" msgstr "" -#: opts.c:1041 +#: tree-cfg.c:3749 #, gcc-internal-format -msgid "-f[no-]force-mem is nop and option will be removed in 4.2" +msgid "return edge does not point to exit in bb %d" msgstr "" -#: opts.c:1064 +#: tree-cfg.c:3782 #, gcc-internal-format -msgid "%s: --param arguments should be of the form NAME=VALUE" +msgid "found default case not at end of case vector" msgstr "" -#: opts.c:1069 +#: tree-cfg.c:3788 #, gcc-internal-format -msgid "invalid --param value %qs" +msgid "case labels not sorted:" msgstr "" -#: opts.c:1166 +#: tree-cfg.c:3799 #, gcc-internal-format -msgid "target system does not support debug output" +msgid "no default case found at end of case vector" msgstr "" -#: opts.c:1173 +#: tree-cfg.c:3807 #, gcc-internal-format -msgid "debug format \"%s\" conflicts with prior selection" +msgid "extra outgoing edge %d->%d" msgstr "" -#: opts.c:1189 +#: tree-cfg.c:3829 #, gcc-internal-format -msgid "unrecognised debug output level \"%s\"" +msgid "missing edge %i->%i" msgstr "" -#: opts.c:1191 +#: tree-cfg.c:5123 tree-cfg.c:5127 #, gcc-internal-format -msgid "debug output level %s is too high" +msgid "%H% function does return" msgstr "" -#: params.c:71 +#: tree-cfg.c:5149 tree-cfg.c:5154 #, gcc-internal-format -msgid "minimum value of parameter %qs is %u" +msgid "%Hcontrol reaches end of non-void function" msgstr "" -#: params.c:76 +#: tree-cfg.c:5214 #, gcc-internal-format -msgid "maximum value of parameter %qs is %u" +msgid "%Jfunction might be possible candidate for attribute %" msgstr "" -#. If we didn't find this parameter, issue an error message. -#: params.c:85 +#: tree-dump.c:856 #, gcc-internal-format -msgid "invalid parameter %qs" +msgid "could not open dump file %qs: %s" msgstr "" -#: profile.c:287 +#: tree-dump.c:987 #, gcc-internal-format -msgid "corrupted profile info: run_max * runs < sum_max" +msgid "ignoring unknown option %q.*s in %<-fdump-%s%>" msgstr "" -#: profile.c:293 +#: tree-eh.c:1767 #, gcc-internal-format -msgid "corrupted profile info: sum_all is smaller than sum_max" +msgid "EH edge %i->%i is missing" msgstr "" -#: profile.c:338 +#: tree-eh.c:1772 #, gcc-internal-format -msgid "corrupted profile info: edge from %i to %i exceeds maximal count" +msgid "EH edge %i->%i miss EH flag" msgstr "" -#: profile.c:503 +#. ??? might not be mistake. +#: tree-eh.c:1778 #, gcc-internal-format -msgid "" -"corrupted profile info: number of iterations for basic block %d thought to " -"be %i" +msgid "EH edge %i->%i has duplicated regions" msgstr "" -#: profile.c:524 +#: tree-eh.c:1812 #, gcc-internal-format -msgid "" -"corrupted profile info: number of executions for edge %d-%d thought to be %i" +msgid "BB %i can not throw but has EH edges" msgstr "" -#: reg-stack.c:526 +#: tree-eh.c:1819 #, gcc-internal-format -msgid "output constraint %d must specify a single register" +msgid "BB %i last statement has incorrectly set region" msgstr "" -#: reg-stack.c:536 +#: tree-eh.c:1830 #, gcc-internal-format -msgid "output constraint %d cannot be specified together with \"%s\" clobber" +msgid "unnecessary EH edge %i->%i" msgstr "" -#: reg-stack.c:559 +#: tree-inline.c:1373 #, gcc-internal-format -msgid "output regs must be grouped at top of stack" +msgid "" +"function %q+F can never be inlined because it uses alloca (override using " +"the always_inline attribute)" msgstr "" -#: reg-stack.c:596 +#: tree-inline.c:1385 #, gcc-internal-format -msgid "implicitly popped regs must be grouped at top of stack" +msgid "function %q+F can never be inlined because it uses setjmp" msgstr "" -#: reg-stack.c:615 +#: tree-inline.c:1399 #, gcc-internal-format -msgid "output operand %d must use %<&%> constraint" +msgid "" +"function %q+F can never be inlined because it uses variable argument lists" msgstr "" -#: regclass.c:766 +#: tree-inline.c:1410 #, gcc-internal-format -msgid "can't use '%s' as a %s register" +msgid "" +"function %q+F can never be inlined because it uses setjmp-longjmp exception " +"handling" msgstr "" -#: regclass.c:781 config/ia64/ia64.c:4943 config/ia64/ia64.c:4950 -#: config/pa/pa.c:339 config/pa/pa.c:346 +#: tree-inline.c:1417 #, gcc-internal-format -msgid "unknown register name: %s" +msgid "function %q+F can never be inlined because it uses non-local goto" msgstr "" -#: regclass.c:791 +#: tree-inline.c:1428 #, gcc-internal-format -msgid "global register variable follows a function definition" +msgid "" +"function %q+F can never be inlined because it uses __builtin_return or " +"__builtin_apply_args" msgstr "" -#: regclass.c:795 +#: tree-inline.c:1447 #, gcc-internal-format -msgid "register used for two global register variables" +msgid "function %q+F can never be inlined because it contains a computed goto" msgstr "" -#: regclass.c:800 +#: tree-inline.c:1461 #, gcc-internal-format -msgid "call-clobbered register used for global register variable" +msgid "function %q+F can never be inlined because it receives a non-local goto" msgstr "" -#: regrename.c:1880 +#: tree-inline.c:1486 #, gcc-internal-format -msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" +msgid "" +"function %q+F can never be inlined because it uses variable sized variables" msgstr "" -#: regrename.c:1892 +#: tree-inline.c:2025 tree-inline.c:2035 #, gcc-internal-format -msgid "validate_value_data: Loop in regno chain (%u)" +msgid "inlining failed in call to %q+F: %s" msgstr "" -#: regrename.c:1895 +#: tree-inline.c:2026 tree-inline.c:2037 #, gcc-internal-format -msgid "validate_value_data: [%u] Bad oldest_regno (%u)" +msgid "called from here" msgstr "" -#: regrename.c:1907 +#: tree-mudflap.c:847 #, gcc-internal-format -msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" +msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF" msgstr "" -#: reload.c:1270 +#: tree-mudflap.c:1038 #, gcc-internal-format -msgid "cannot reload integer constant operand in %" +msgid "mudflap cannot track %qs in stub function" msgstr "" -#: reload.c:1293 +#: tree-mudflap.c:1265 #, gcc-internal-format -msgid "impossible register constraint in %" +msgid "mudflap cannot track unknown size extern %qs" msgstr "" -#: reload.c:3560 +#: tree-nomudflap.c:51 #, gcc-internal-format -msgid "%<&%> constraint used with no register class" +msgid "mudflap: this language is not supported" msgstr "" -#: reload.c:3731 reload.c:3963 +#: tree-optimize.c:478 #, gcc-internal-format -msgid "inconsistent operand constraints in an %" +msgid "size of return value of %q+D is %u bytes" msgstr "" -#: reload1.c:1229 +#: tree-optimize.c:481 #, gcc-internal-format -msgid "frame size too large for reliable stack checking" +msgid "size of return value of %q+D is larger than %wd bytes" msgstr "" -#: reload1.c:1232 +#: tree-outof-ssa.c:614 tree-outof-ssa.c:629 tree-outof-ssa.c:643 +#: tree-outof-ssa.c:665 tree-outof-ssa.c:1120 tree-outof-ssa.c:1872 +#: tree-ssa-live.c:429 tree-ssa-live.c:1835 #, gcc-internal-format -msgid "try reducing the number of local variables" +msgid "SSA corruption" msgstr "" -#: reload1.c:1883 +#: tree-outof-ssa.c:2287 #, gcc-internal-format -msgid "can't find a register in class %qs while reloading %" +msgid " Pending stmts not issued on PRED edge (%d, %d)\n" msgstr "" -#: reload1.c:1888 +#: tree-outof-ssa.c:2293 #, gcc-internal-format -msgid "unable to find a register to spill in class %qs" +msgid " Pending stmts not issued on SUCC edge (%d, %d)\n" msgstr "" -#: reload1.c:3925 +#: tree-outof-ssa.c:2300 #, gcc-internal-format -msgid "% operand requires impossible reload" +msgid " Pending stmts not issued on ENTRY edge (%d, %d)\n" msgstr "" -#: reload1.c:5049 +#: tree-outof-ssa.c:2306 #, gcc-internal-format -msgid "% operand constraint incompatible with operand size" +msgid " Pending stmts not issued on EXIT edge (%d, %d)\n" msgstr "" -#: reload1.c:6676 +#: tree-profile.c:216 #, gcc-internal-format -msgid "output operand is constant in %" +msgid "unimplemented functionality" msgstr "" -#: rtl.c:474 +#: tree-ssa-loop-niter.c:1035 #, gcc-internal-format -msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d" +msgid "%H%s" msgstr "" -#: rtl.c:484 +#: tree-ssa-operands.c:1328 #, gcc-internal-format -msgid "" -"RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" +msgid "internal error" msgstr "" -#: rtl.c:494 +#: tree-ssa.c:111 #, gcc-internal-format -msgid "" -"RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %" -"s:%d" +msgid "expected an SSA_NAME object" msgstr "" -#: rtl.c:503 +#: tree-ssa.c:117 #, gcc-internal-format -msgid "RTL check: expected code '%s', have '%s' in %s, at %s:%d" +msgid "type mismatch between an SSA_NAME and its symbol" msgstr "" -#: rtl.c:513 +#: tree-ssa.c:123 #, gcc-internal-format -msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d" +msgid "found an SSA_NAME that had been released into the free pool" msgstr "" -#: rtl.c:539 +#: tree-ssa.c:129 #, gcc-internal-format -msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" +msgid "found a virtual definition for a GIMPLE register" msgstr "" -#: rtl.c:550 +#: tree-ssa.c:135 #, gcc-internal-format -msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d" +msgid "found a real definition for a non-register" msgstr "" -#: stmt.c:317 +#: tree-ssa.c:142 #, gcc-internal-format -msgid "output operand constraint lacks %<=%>" +msgid "found real variable when subvariables should have appeared" msgstr "" -#: stmt.c:332 +#: tree-ssa.c:171 #, gcc-internal-format -msgid "output constraint %qc for operand %d is not at the beginning" +msgid "SSA_NAME created in two different blocks %i and %i" msgstr "" -#: stmt.c:355 +#: tree-ssa.c:180 #, gcc-internal-format -msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>" +msgid "SSA_NAME_DEF_STMT is wrong" msgstr "" -#: stmt.c:362 stmt.c:461 +#: tree-ssa.c:238 #, gcc-internal-format -msgid "%<%%%> constraint used with last operand" +msgid "missing definition" msgstr "" -#: stmt.c:381 +#: tree-ssa.c:244 #, gcc-internal-format -msgid "matching constraint not valid in output operand" +msgid "definition in block %i does not dominate use in block %i" msgstr "" -#: stmt.c:452 +#: tree-ssa.c:252 #, gcc-internal-format -msgid "input operand constraint contains %qc" +msgid "definition in block %i follows the use" msgstr "" -#: stmt.c:494 +#: tree-ssa.c:259 #, gcc-internal-format -msgid "matching constraint references invalid operand number" +msgid "SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set" msgstr "" -#: stmt.c:532 +#: tree-ssa.c:267 #, gcc-internal-format -msgid "invalid punctuation %qc in constraint" +msgid "no immediate_use list" msgstr "" -#: stmt.c:556 +#: tree-ssa.c:279 #, gcc-internal-format -msgid "matching constraint does not allow a register" +msgid "wrong immediate use list" msgstr "" -#: stmt.c:598 +#: tree-ssa.c:312 #, gcc-internal-format -msgid "asm-specifier for variable %qs conflicts with asm clobber list" +msgid "incoming edge count does not match number of PHI arguments" msgstr "" -#: stmt.c:686 +#: tree-ssa.c:327 #, gcc-internal-format -msgid "unknown register name %qs in %" +msgid "PHI argument is missing for edge %d->%d" msgstr "" -#: stmt.c:694 +#: tree-ssa.c:336 #, gcc-internal-format -msgid "PIC register %qs clobbered in %" +msgid "PHI argument is not SSA_NAME, or invariant" msgstr "" -#: stmt.c:741 +#: tree-ssa.c:348 #, gcc-internal-format -msgid "more than %d operands in %" +msgid "wrong edge %d->%d for PHI argument" msgstr "" -#: stmt.c:804 +#: tree-ssa.c:397 #, gcc-internal-format -msgid "output number %d not directly addressable" +msgid "non-addressable variable inside an alias set" msgstr "" -#: stmt.c:883 +#: tree-ssa.c:413 #, gcc-internal-format -msgid "asm operand %d probably doesn%'t match constraints" +msgid "addressable variable that is an alias tag but is not in any alias set" msgstr "" -#: stmt.c:893 +#: tree-ssa.c:423 #, gcc-internal-format -msgid "use of memory input without lvalue in asm operand %d is deprecated" +msgid "verify_flow_insensitive_alias_info failed" msgstr "" -#: stmt.c:1040 +#: tree-ssa.c:465 #, gcc-internal-format -msgid "asm clobber conflict with output operand" +msgid "dereferenced pointers should have a name or a type tag" msgstr "" -#: stmt.c:1045 +#: tree-ssa.c:472 #, gcc-internal-format -msgid "asm clobber conflict with input operand" +msgid "pointers with a memory tag, should have points-to sets" msgstr "" -#: stmt.c:1122 +#: tree-ssa.c:480 #, gcc-internal-format -msgid "too many alternatives in %" +msgid "pointer escapes but its name tag is not call-clobbered" msgstr "" -#: stmt.c:1134 +#: tree-ssa.c:489 #, gcc-internal-format -msgid "operand constraints for % differ in number of alternatives" +msgid "verify_flow_sensitive_alias_info failed" msgstr "" -#: stmt.c:1187 +#: tree-ssa.c:566 #, gcc-internal-format -msgid "duplicate asm operand name %qs" +msgid "" +"alias set of a pointer's type tag should be a superset of the corresponding " +"name tag" msgstr "" -#: stmt.c:1285 +#: tree-ssa.c:582 #, gcc-internal-format -msgid "missing close brace for named operand" +msgid "" +"two different pointers with identical points-to sets but different name tags" msgstr "" -#: stmt.c:1313 +#: tree-ssa.c:614 #, gcc-internal-format -msgid "undefined named operand %qs" +msgid "verify_name_tags failed" msgstr "" -#: stmt.c:1457 +#: tree-ssa.c:685 #, gcc-internal-format -msgid "%Hvalue computed is not used" +msgid "AUX pointer initialized for edge %d->%d" msgstr "" -#: stor-layout.c:149 +#: tree-ssa.c:708 #, gcc-internal-format -msgid "type size can%'t be explicitly evaluated" +msgid "stmt (%p) marked modified after optimization pass : " msgstr "" -#: stor-layout.c:151 +#: tree-ssa.c:726 #, gcc-internal-format -msgid "variable-size type declared outside of any function" +msgid "statement makes a memory store, but has no V_MAY_DEFS nor V_MUST_DEFS" msgstr "" -#: stor-layout.c:455 +#: tree-ssa.c:737 #, gcc-internal-format -msgid "size of %q+D is %d bytes" +msgid "statement makes aliased stores, but has no V_MAY_DEFS" msgstr "" -#: stor-layout.c:457 +#: tree-ssa.c:776 #, gcc-internal-format -msgid "size of %q+D is larger than %wd bytes" +msgid "verify_ssa failed" msgstr "" -#: stor-layout.c:855 +#. We only do data flow with SSA_NAMEs, so that's all we +#. can warn about. +#: tree-ssa.c:1163 #, gcc-internal-format -msgid "packed attribute causes inefficient alignment for %q+D" +msgid "%H%qD is used uninitialized in this function" msgstr "" -#: stor-layout.c:858 +#: tree-ssa.c:1201 #, gcc-internal-format -msgid "packed attribute is unnecessary for %q+D" +msgid "%H%qD may be used uninitialized in this function" msgstr "" -#. No, we need to skip space before this field. -#. Bump the cumulative size to multiple of field alignment. -#: stor-layout.c:873 +#: tree-vect-transform.c:561 #, gcc-internal-format -msgid "padding struct to align %q+D" +msgid "no support for induction" msgstr "" -#: stor-layout.c:1272 +#: tree.c:3495 #, gcc-internal-format -msgid "padding struct size to alignment boundary" +msgid "%q+D already declared with dllexport attribute: dllimport ignored" msgstr "" -#: stor-layout.c:1302 +#: tree.c:3507 #, gcc-internal-format -msgid "packed attribute causes inefficient alignment for %qs" +msgid "" +"%q+D redeclared without dllimport attribute after being referenced with dll " +"linkage" msgstr "" -#: stor-layout.c:1306 +#: tree.c:3523 config/i386/winnt-cxx.c:70 #, gcc-internal-format -msgid "packed attribute is unnecessary for %qs" +msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored" msgstr "" -#: stor-layout.c:1312 +#: tree.c:3575 config/darwin.c:1209 config/arm/arm.c:2888 +#: config/arm/arm.c:2916 config/avr/avr.c:4656 config/h8300/h8300.c:5282 +#: config/h8300/h8300.c:5306 config/i386/i386.c:2057 config/i386/i386.c:16691 +#: config/ia64/ia64.c:533 config/m68hc11/m68hc11.c:1118 +#: config/sh/symbian.c:409 config/sh/symbian.c:416 #, gcc-internal-format -msgid "packed attribute causes inefficient alignment" +msgid "%qs attribute ignored" msgstr "" -#: stor-layout.c:1314 +#: tree.c:3594 #, gcc-internal-format -msgid "packed attribute is unnecessary" +msgid "inline function %q+D declared as dllimport: attribute ignored" msgstr "" -#: targhooks.c:97 +#: tree.c:3602 #, gcc-internal-format -msgid "__builtin_saveregs not supported by this target" +msgid "function %q+D definition is marked dllimport" msgstr "" -#: tlink.c:484 +#: tree.c:3610 config/sh/symbian.c:431 #, gcc-internal-format -msgid "repository file '%s' does not contain command-line arguments" +msgid "variable %q+D definition is marked dllimport" msgstr "" -#: tlink.c:705 +#: tree.c:3633 config/sh/symbian.c:506 #, gcc-internal-format -msgid "" -"'%s' was assigned to '%s', but was not defined during recompilation, or vice " -"versa" +msgid "external linkage required for symbol %q+D because of %qs attribute" msgstr "" -#: tlink.c:775 +#: tree.c:5045 #, gcc-internal-format -msgid "ld returned %d exit status" +msgid "arrays of functions are not meaningful" msgstr "" -#: toplev.c:512 +#: tree.c:5097 #, gcc-internal-format -msgid "invalid option argument %qs" +msgid "function return type cannot be function" msgstr "" -#: toplev.c:602 +#: tree.c:5997 #, gcc-internal-format -msgid "getting core file size maximum limit: %m" +msgid "tree check: %s, have %s in %s, at %s:%d" msgstr "" -#: toplev.c:605 +#: tree.c:6034 #, gcc-internal-format -msgid "setting core file size limit to maximum: %m" +msgid "tree check: expected none of %s, have %s in %s, at %s:%d" msgstr "" -#: toplev.c:823 +#: tree.c:6047 #, gcc-internal-format -msgid "%q+F declared % but never defined" +msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: toplev.c:848 +#: tree.c:6072 #, gcc-internal-format -msgid "%q+D defined but not used" +msgid "" +"tree check: expected tree that contains %qs structure, have %qs in %s, at %" +"s:%d" msgstr "" -#: toplev.c:891 toplev.c:915 +#: tree.c:6086 #, gcc-internal-format -msgid "%qs is deprecated (declared at %s:%d)" +msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" msgstr "" -#: toplev.c:919 +#: tree.c:6098 #, gcc-internal-format -msgid "type is deprecated (declared at %s:%d)" +msgid "tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d" msgstr "" -#: toplev.c:925 +#: tree.c:6110 #, gcc-internal-format -msgid "%qs is deprecated" +msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" msgstr "" -#: toplev.c:927 +#: value-prof.c:101 #, gcc-internal-format -msgid "type is deprecated" +msgid "" +"%HCorrupted value profile: %s profiler overall count (%d) does not match BB " +"count (%d)" msgstr "" -#: toplev.c:1094 +#: varasm.c:470 #, gcc-internal-format -msgid "unrecognized gcc debugging option: %c" +msgid "%+D causes a section type conflict" msgstr "" -#: toplev.c:1247 +#: varasm.c:930 varasm.c:938 #, gcc-internal-format -msgid "can%'t open %s for writing: %m" +msgid "register name not specified for %q+D" msgstr "" -#: toplev.c:1587 +#: varasm.c:940 #, gcc-internal-format -msgid "instruction scheduling not supported on this target machine" +msgid "invalid register name for %q+D" msgstr "" -#: toplev.c:1591 +#: varasm.c:942 #, gcc-internal-format -msgid "this target machine does not have delayed branches" +msgid "data type of %q+D isn%'t suitable for a register" msgstr "" -#: toplev.c:1605 +#: varasm.c:945 #, gcc-internal-format -msgid "-f%sleading-underscore not supported on this target machine" +msgid "register specified for %q+D isn%'t suitable for data type" msgstr "" -#: toplev.c:1679 +#: varasm.c:955 #, gcc-internal-format -msgid "target system does not support the \"%s\" debug format" +msgid "global register variable has initial value" msgstr "" -#: toplev.c:1691 +#: varasm.c:959 #, gcc-internal-format -msgid "variable tracking requested, but useless unless producing debug info" +msgid "optimization may eliminate reads and/or writes to register variables" msgstr "" -#: toplev.c:1694 +#: varasm.c:997 #, gcc-internal-format -msgid "variable tracking requested, but not supported by this debug format" +msgid "register name given for non-register variable %q+D" msgstr "" -#: toplev.c:1714 +#: varasm.c:1074 #, gcc-internal-format -msgid "can%'t open %s: %m" +msgid "global destructors not supported on this target" msgstr "" -#: toplev.c:1721 +#: varasm.c:1135 #, gcc-internal-format -msgid "-ffunction-sections not supported for this target" +msgid "global constructors not supported on this target" msgstr "" -#: toplev.c:1726 +#: varasm.c:1697 #, gcc-internal-format -msgid "-fdata-sections not supported for this target" +msgid "" +"alignment of %q+D is greater than maximum object file alignment. Using %d" msgstr "" -#: toplev.c:1733 +#: varasm.c:1736 #, gcc-internal-format -msgid "-ffunction-sections disabled; it makes profiling impossible" +msgid "thread-local COMMON data not implemented" msgstr "" -#: toplev.c:1740 +#: varasm.c:1761 #, gcc-internal-format -msgid "-fprefetch-loop-arrays not supported for this target" +msgid "" +"requested alignment for %q+D is greater than implemented alignment of %wu" msgstr "" -#: toplev.c:1746 +#: varasm.c:3919 #, gcc-internal-format -msgid "" -"-fprefetch-loop-arrays not supported for this target (try -march switches)" +msgid "no-op convert from %wd to %wd bytes in initializer" msgstr "" -#: toplev.c:1755 +#: varasm.c:3963 #, gcc-internal-format -msgid "-fprefetch-loop-arrays is not supported with -Os" +msgid "initializer for integer value is too complicated" msgstr "" -#: toplev.c:1761 +#: varasm.c:3968 #, gcc-internal-format -msgid "-ffunction-sections may affect debugging on some targets" +msgid "initializer for floating value is not a floating constant" msgstr "" -#: toplev.c:1776 +#: varasm.c:4237 #, gcc-internal-format -msgid "-fstack-protector not supported for this target" +msgid "invalid initial value for member %qs" msgstr "" -#: toplev.c:1882 +#: varasm.c:4437 varasm.c:4481 #, gcc-internal-format -msgid "error writing to %s: %m" +msgid "weak declaration of %q+D must precede definition" msgstr "" -#: toplev.c:1884 java/jcf-parse.c:1099 java/jcf-write.c:3539 +#: varasm.c:4445 #, gcc-internal-format -msgid "error closing %s: %m" +msgid "" +"weak declaration of %q+D after first use results in unspecified behavior" msgstr "" -#: tree-cfg.c:1422 tree-cfg.c:2054 tree-cfg.c:2057 +#: varasm.c:4479 #, gcc-internal-format -msgid "%Hwill never be executed" +msgid "weak declaration of %q+D must be public" msgstr "" -#: tree-cfg.c:3143 +#: varasm.c:4488 #, gcc-internal-format -msgid "SSA name in freelist but still referenced" +msgid "weak declaration of %q+D not supported" msgstr "" -#: tree-cfg.c:3152 +#: varasm.c:4518 #, gcc-internal-format -msgid "ASSERT_EXPR with an always-false condition" +msgid "only weak aliases are supported in this configuration" msgstr "" -#: tree-cfg.c:3162 +#: varasm.c:4748 #, gcc-internal-format -msgid "GIMPLE register modified with BIT_FIELD_REF" +msgid "%Jweakref is not supported in this configuration" msgstr "" -#: tree-cfg.c:3197 +#: varasm.c:4821 #, gcc-internal-format -msgid "invariant not recomputed when ADDR_EXPR changed" +msgid "%q+D aliased to undefined symbol %qs" msgstr "" -#: tree-cfg.c:3203 +#: varasm.c:4826 #, gcc-internal-format -msgid "constant not recomputed when ADDR_EXPR changed" +msgid "%q+D aliased to external symbol %qs" msgstr "" -#: tree-cfg.c:3208 +#: varasm.c:4865 #, gcc-internal-format -msgid "side effects not recomputed when ADDR_EXPR changed" +msgid "weakref %q+D ultimately targets itself" msgstr "" -#: tree-cfg.c:3224 +#: varasm.c:4878 #, gcc-internal-format -msgid "address taken, but ADDRESSABLE bit not set" +msgid "%Jalias definitions not supported in this configuration" msgstr "" -#: tree-cfg.c:3234 +#: varasm.c:4883 #, gcc-internal-format -msgid "non-boolean used in condition" +msgid "%Jonly weak aliases are supported in this configuration" msgstr "" -#: tree-cfg.c:3239 +#: varasm.c:4940 #, gcc-internal-format -msgid "invalid conditional operand" +msgid "visibility attribute not supported in this configuration; ignored" msgstr "" -#: tree-cfg.c:3294 +#: varray.c:207 #, gcc-internal-format -msgid "invalid reference prefix" +msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" msgstr "" -#: tree-cfg.c:3359 +#: varray.c:217 #, gcc-internal-format -msgid "is not a valid GIMPLE statement" +msgid "underflowed virtual array %s in %s, at %s:%d" msgstr "" -#: tree-cfg.c:3379 +#: vec.c:153 #, gcc-internal-format -msgid "statement marked for throw, but doesn%'t" +msgid "vector %s %s domain error, in %s at %s:%u" msgstr "" -#: tree-cfg.c:3384 +#. Print an error message for unrecognized stab codes. +#: xcoffout.c:187 #, gcc-internal-format -msgid "statement marked for throw in middle of block" +msgid "no sclass for %s stab (0x%x)" msgstr "" -#: tree-cfg.c:3479 +#: config/darwin-c.c:86 #, gcc-internal-format -msgid "bb_for_stmt (phi) is set to a wrong basic block" +msgid "too many #pragma options align=reset" msgstr "" -#: tree-cfg.c:3494 +#: config/darwin-c.c:106 config/darwin-c.c:109 config/darwin-c.c:111 +#: config/darwin-c.c:113 #, gcc-internal-format -msgid "PHI def is not a GIMPLE value" +msgid "malformed '#pragma options', ignoring" msgstr "" -#: tree-cfg.c:3510 tree-cfg.c:3533 +#: config/darwin-c.c:116 #, gcc-internal-format -msgid "incorrect sharing of tree nodes" +msgid "junk at end of '#pragma options'" msgstr "" -#: tree-cfg.c:3524 +#: config/darwin-c.c:126 #, gcc-internal-format -msgid "bb_for_stmt (stmt) is set to a wrong basic block" +msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" msgstr "" -#: tree-cfg.c:3542 +#: config/darwin-c.c:138 #, gcc-internal-format -msgid "verify_stmts failed" +msgid "missing '(' after '#pragma unused', ignoring" msgstr "" -#: tree-cfg.c:3563 +#: config/darwin-c.c:156 #, gcc-internal-format -msgid "ENTRY_BLOCK has a statement list associated with it" +msgid "missing ')' after '#pragma unused', ignoring" msgstr "" -#: tree-cfg.c:3569 +#: config/darwin-c.c:159 #, gcc-internal-format -msgid "EXIT_BLOCK has a statement list associated with it" +msgid "junk at end of '#pragma unused'" msgstr "" -#: tree-cfg.c:3576 +#: config/darwin-c.c:385 #, gcc-internal-format -msgid "fallthru to exit from bb %d" +msgid "subframework include %s conflicts with framework include" msgstr "" -#: tree-cfg.c:3598 +#: config/darwin-c.c:577 #, gcc-internal-format -msgid "nonlocal label %s is not first in a sequence of labels in bb %d" +msgid "Unknown value %qs of -mmacosx-version-min" msgstr "" -#: tree-cfg.c:3607 +#: config/darwin.c:1323 #, gcc-internal-format -msgid "label %s to block does not match in bb %d" +msgid "" +"internal and protected visibility attributes not supported in this " +"configuration; ignored" msgstr "" -#: tree-cfg.c:3616 +#: config/host-darwin.c:63 #, gcc-internal-format -msgid "label %s has incorrect context in bb %d" +msgid "couldn't unmap pch_address_space: %m" msgstr "" -#: tree-cfg.c:3630 +#: config/sol2-c.c:94 config/sol2-c.c:110 #, gcc-internal-format -msgid "control flow in the middle of basic block %d" +msgid "malformed %<#pragma align%>, ignoring" msgstr "" -#: tree-cfg.c:3640 +#: config/sol2-c.c:103 #, gcc-internal-format -msgid "label %s in the middle of basic block %d" +msgid "invalid alignment for %<#pragma align%>, ignoring" msgstr "" -#: tree-cfg.c:3659 +#: config/sol2-c.c:118 #, gcc-internal-format -msgid "fallthru edge after a control statement in bb %d" +msgid "%<#pragma align%> must appear before the declaration of %D, ignoring" msgstr "" -#: tree-cfg.c:3674 +#: config/sol2-c.c:130 config/sol2-c.c:142 #, gcc-internal-format -msgid "structured COND_EXPR at the end of bb %d" +msgid "malformed %<#pragma align%>" msgstr "" -#: tree-cfg.c:3687 tree-cfg.c:3725 tree-cfg.c:3738 tree-cfg.c:3809 +#: config/sol2-c.c:137 #, gcc-internal-format -msgid "wrong outgoing edge flags at end of bb %d" +msgid "junk at end of %<#pragma align%>" msgstr "" -#: tree-cfg.c:3695 +#: config/sol2-c.c:158 config/sol2-c.c:165 #, gcc-internal-format -msgid "% label does not match edge at end of bb %d" +msgid "malformed %<#pragma init%>, ignoring" msgstr "" -#: tree-cfg.c:3703 +#: config/sol2-c.c:188 config/sol2-c.c:200 #, gcc-internal-format -msgid "% label does not match edge at end of bb %d" +msgid "malformed %<#pragma init%>" msgstr "" -#: tree-cfg.c:3713 +#: config/sol2-c.c:195 #, gcc-internal-format -msgid "explicit goto at end of bb %d" +msgid "junk at end of %<#pragma init%>" msgstr "" -#: tree-cfg.c:3743 +#: config/sol2-c.c:216 config/sol2-c.c:223 #, gcc-internal-format -msgid "return edge does not point to exit in bb %d" +msgid "malformed %<#pragma fini%>, ignoring" msgstr "" -#: tree-cfg.c:3776 +#: config/sol2-c.c:246 config/sol2-c.c:258 #, gcc-internal-format -msgid "found default case not at end of case vector" +msgid "malformed %<#pragma fini%>" msgstr "" -#: tree-cfg.c:3782 +#: config/sol2-c.c:253 #, gcc-internal-format -msgid "case labels not sorted:" +msgid "junk at end of %<#pragma fini%>" msgstr "" -#: tree-cfg.c:3793 +#: config/sol2.c:54 #, gcc-internal-format -msgid "no default case found at end of case vector" +msgid "ignoring %<#pragma align%> for explicitly aligned %q+D" msgstr "" -#: tree-cfg.c:3801 +#. Mach-O supports 'weak imports', and 'weak definitions' in coalesced +#. sections. machopic_select_section ensures that weak variables go in +#. coalesced sections. Weak aliases (or any other kind of aliases) are +#. not supported. Weak symbols that aren't visible outside the .s file +#. are not supported. +#: config/darwin.h:395 #, gcc-internal-format -msgid "extra outgoing edge %d->%d" +msgid "alias definitions not supported in Mach-O; ignored" msgstr "" -#: tree-cfg.c:3823 +#. No profiling. +#: config/vx-common.h:83 #, gcc-internal-format -msgid "missing edge %i->%i" +msgid "profiler support for VxWorks" msgstr "" -#: tree-cfg.c:5117 tree-cfg.c:5121 +#: config/windiss.h:37 #, gcc-internal-format -msgid "%H% function does return" +msgid "profiler support for WindISS" msgstr "" -#: tree-cfg.c:5143 tree-cfg.c:5148 +#: config/alpha/alpha.c:231 config/rs6000/rs6000.c:1570 #, gcc-internal-format -msgid "%Hcontrol reaches end of non-void function" +msgid "bad value %qs for -mtls-size switch" msgstr "" -#: tree-cfg.c:5208 +#: config/alpha/alpha.c:270 #, gcc-internal-format -msgid "%Jfunction might be possible candidate for attribute %" +msgid "-f%s ignored for Unicos/Mk (not supported)" msgstr "" -#: tree-dump.c:856 +#: config/alpha/alpha.c:294 #, gcc-internal-format -msgid "could not open dump file %qs: %s" +msgid "-mieee not supported on Unicos/Mk" msgstr "" -#: tree-dump.c:987 +#: config/alpha/alpha.c:305 #, gcc-internal-format -msgid "ignoring unknown option %q.*s in %<-fdump-%s%>" +msgid "-mieee-with-inexact not supported on Unicos/Mk" msgstr "" -#: tree-eh.c:1767 +#: config/alpha/alpha.c:322 #, gcc-internal-format -msgid "EH edge %i->%i is missing" +msgid "bad value %qs for -mtrap-precision switch" msgstr "" -#: tree-eh.c:1772 +#: config/alpha/alpha.c:336 #, gcc-internal-format -msgid "EH edge %i->%i miss EH flag" +msgid "bad value %qs for -mfp-rounding-mode switch" msgstr "" -#. ??? might not be mistake. -#: tree-eh.c:1778 +#: config/alpha/alpha.c:351 #, gcc-internal-format -msgid "EH edge %i->%i has duplicated regions" +msgid "bad value %qs for -mfp-trap-mode switch" msgstr "" -#: tree-eh.c:1812 +#: config/alpha/alpha.c:365 config/alpha/alpha.c:377 #, gcc-internal-format -msgid "BB %i can not throw but has EH edges" +msgid "bad value %qs for -mcpu switch" msgstr "" -#: tree-eh.c:1819 +#: config/alpha/alpha.c:384 #, gcc-internal-format -msgid "BB %i last statement has incorrectly set region" +msgid "trap mode not supported on Unicos/Mk" msgstr "" -#: tree-eh.c:1830 +#: config/alpha/alpha.c:391 #, gcc-internal-format -msgid "unnecessary EH edge %i->%i" +msgid "fp software completion requires -mtrap-precision=i" msgstr "" -#: tree-inline.c:1338 +#: config/alpha/alpha.c:407 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it uses alloca (override using " -"the always_inline attribute)" +msgid "rounding mode not supported for VAX floats" msgstr "" -#: tree-inline.c:1350 +#: config/alpha/alpha.c:412 #, gcc-internal-format -msgid "function %q+F can never be inlined because it uses setjmp" +msgid "trap mode not supported for VAX floats" msgstr "" -#: tree-inline.c:1364 +#: config/alpha/alpha.c:416 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it uses variable argument lists" +msgid "128-bit long double not supported for VAX floats" msgstr "" -#: tree-inline.c:1375 +#: config/alpha/alpha.c:444 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it uses setjmp-longjmp exception " -"handling" +msgid "L%d cache latency unknown for %s" msgstr "" -#: tree-inline.c:1382 +#: config/alpha/alpha.c:459 #, gcc-internal-format -msgid "function %q+F can never be inlined because it uses non-local goto" +msgid "bad value %qs for -mmemory-latency" msgstr "" -#: tree-inline.c:1393 +#: config/alpha/alpha.c:6551 config/alpha/alpha.c:6554 config/s390/s390.c:7796 +#: config/s390/s390.c:7799 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it uses __builtin_return or " -"__builtin_apply_args" +msgid "bad builtin fcode" msgstr "" -#: tree-inline.c:1412 +#: config/arc/arc.c:390 #, gcc-internal-format -msgid "function %q+F can never be inlined because it contains a computed goto" +msgid "argument of %qs attribute is not a string constant" msgstr "" -#: tree-inline.c:1426 +#: config/arc/arc.c:398 #, gcc-internal-format -msgid "function %q+F can never be inlined because it receives a non-local goto" +msgid "argument of %qs attribute is not \"ilink1\" or \"ilink2\"" msgstr "" -#: tree-inline.c:1451 +#: config/arm/arm.c:912 #, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it uses variable sized variables" +msgid "switch -mcpu=%s conflicts with -march= switch" msgstr "" -#: tree-inline.c:1990 tree-inline.c:2000 +#: config/arm/arm.c:922 config/rs6000/rs6000.c:1226 config/sparc/sparc.c:698 #, gcc-internal-format -msgid "inlining failed in call to %q+F: %s" +msgid "bad value (%s) for %s switch" msgstr "" -#: tree-inline.c:1991 tree-inline.c:2002 +#: config/arm/arm.c:1032 #, gcc-internal-format -msgid "called from here" +msgid "target CPU does not support interworking" msgstr "" -#: tree-mudflap.c:847 +#: config/arm/arm.c:1038 #, gcc-internal-format -msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF" +msgid "target CPU does not support THUMB instructions" msgstr "" -#: tree-mudflap.c:1038 +#: config/arm/arm.c:1056 #, gcc-internal-format -msgid "mudflap cannot track %qs in stub function" +msgid "" +"enabling backtrace support is only meaningful when compiling for the Thumb" msgstr "" -#: tree-mudflap.c:1265 +#: config/arm/arm.c:1059 #, gcc-internal-format -msgid "mudflap cannot track unknown size extern %qs" +msgid "" +"enabling callee interworking support is only meaningful when compiling for " +"the Thumb" msgstr "" -#: tree-nomudflap.c:51 +#: config/arm/arm.c:1062 #, gcc-internal-format -msgid "mudflap: this language is not supported" +msgid "" +"enabling caller interworking support is only meaningful when compiling for " +"the Thumb" msgstr "" -#: tree-optimize.c:478 +#: config/arm/arm.c:1066 #, gcc-internal-format -msgid "size of return value of %q+D is %u bytes" +msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" -#: tree-optimize.c:481 +#: config/arm/arm.c:1074 #, gcc-internal-format -msgid "size of return value of %q+D is larger than %wd bytes" +msgid "-fpic and -mapcs-reent are incompatible" msgstr "" -#: tree-outof-ssa.c:614 tree-outof-ssa.c:629 tree-outof-ssa.c:643 -#: tree-outof-ssa.c:665 tree-outof-ssa.c:1120 tree-outof-ssa.c:1935 -#: tree-ssa-live.c:429 tree-ssa-live.c:1835 +#: config/arm/arm.c:1077 #, gcc-internal-format -msgid "SSA corruption" +msgid "APCS reentrant code not supported. Ignored" msgstr "" -#: tree-outof-ssa.c:2350 +#: config/arm/arm.c:1085 #, gcc-internal-format -msgid " Pending stmts not issued on PRED edge (%d, %d)\n" +msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" -#: tree-outof-ssa.c:2356 +#: config/arm/arm.c:1093 #, gcc-internal-format -msgid " Pending stmts not issued on SUCC edge (%d, %d)\n" +msgid "passing floating point arguments in fp regs not yet supported" msgstr "" -#: tree-outof-ssa.c:2363 +#: config/arm/arm.c:1135 #, gcc-internal-format -msgid " Pending stmts not issued on ENTRY edge (%d, %d)\n" +msgid "invalid ABI option: -mabi=%s" msgstr "" -#: tree-outof-ssa.c:2369 +#: config/arm/arm.c:1141 #, gcc-internal-format -msgid " Pending stmts not issued on EXIT edge (%d, %d)\n" +msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" msgstr "" -#: tree-profile.c:216 +#: config/arm/arm.c:1144 #, gcc-internal-format -msgid "unimplemented functionality" +msgid "iwmmxt abi requires an iwmmxt capable cpu" msgstr "" -#: tree-ssa-loop-niter.c:1031 +#: config/arm/arm.c:1154 #, gcc-internal-format -msgid "%H%s" +msgid "invalid floating point emulation option: -mfpe=%s" msgstr "" -#: tree-ssa-operands.c:1487 +#: config/arm/arm.c:1171 #, gcc-internal-format -msgid "internal error" +msgid "invalid floating point option: -mfpu=%s" msgstr "" -#: tree-ssa.c:111 +#: config/arm/arm.c:1211 #, gcc-internal-format -msgid "expected an SSA_NAME object" +msgid "invalid floating point abi: -mfloat-abi=%s" msgstr "" -#: tree-ssa.c:117 +#: config/arm/arm.c:1218 #, gcc-internal-format -msgid "type mismatch between an SSA_NAME and its symbol" +msgid "-mfloat-abi=hard and VFP" msgstr "" -#: tree-ssa.c:123 +#: config/arm/arm.c:1241 #, gcc-internal-format -msgid "found an SSA_NAME that had been released into the free pool" +msgid "invalid thread pointer option: -mtp=%s" msgstr "" -#: tree-ssa.c:129 +#: config/arm/arm.c:1254 #, gcc-internal-format -msgid "found a virtual definition for a GIMPLE register" +msgid "can not use -mtp=cp15 with -mthumb" msgstr "" -#: tree-ssa.c:135 +#: config/arm/arm.c:1268 #, gcc-internal-format -msgid "found a real definition for a non-register" +msgid "structure size boundary can only be set to %s" msgstr "" -#: tree-ssa.c:142 +#: config/arm/arm.c:1277 #, gcc-internal-format -msgid "found real variable when subvariables should have appeared" +msgid "-mpic-register= is useless without -fpic" msgstr "" -#: tree-ssa.c:171 +#: config/arm/arm.c:1284 #, gcc-internal-format -msgid "SSA_NAME created in two different blocks %i and %i" +msgid "unable to use '%s' for PIC register" msgstr "" -#: tree-ssa.c:180 +#: config/arm/arm.c:2856 config/arm/arm.c:2874 config/avr/avr.c:4676 +#: config/bfin/bfin.c:2723 config/c4x/c4x.c:4076 config/h8300/h8300.c:5258 +#: config/i386/i386.c:2021 config/m68hc11/m68hc11.c:1155 +#: config/m68k/m68k.c:376 config/mcore/mcore.c:3032 config/ms1/ms1.c:1285 +#: config/rs6000/rs6000.c:17343 config/sh/sh.c:7529 config/sh/sh.c:7550 +#: config/sh/sh.c:7585 config/stormy16/stormy16.c:2241 config/v850/v850.c:2111 #, gcc-internal-format -msgid "SSA_NAME_DEF_STMT is wrong" +msgid "%qs attribute only applies to functions" msgstr "" -#: tree-ssa.c:238 +#: config/arm/arm.c:11995 #, gcc-internal-format -msgid "missing definition" +msgid "unable to compute real location of stacked parameter" msgstr "" -#: tree-ssa.c:244 +#. @@@ better error message +#: config/arm/arm.c:12640 config/arm/arm.c:12677 #, gcc-internal-format -msgid "definition in block %i does not dominate use in block %i" +msgid "selector must be an immediate" msgstr "" -#: tree-ssa.c:252 +#. @@@ better error message +#: config/arm/arm.c:12720 config/i386/i386.c:15465 config/i386/i386.c:15499 #, gcc-internal-format -msgid "definition in block %i follows the use" +msgid "mask must be an immediate" msgstr "" -#: tree-ssa.c:259 +#: config/arm/arm.c:13379 #, gcc-internal-format -msgid "SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set" +msgid "no low registers available for popping high registers" msgstr "" -#: tree-ssa.c:267 +#: config/arm/arm.c:13603 #, gcc-internal-format -msgid "no immediate_use list" +msgid "interrupt Service Routines cannot be coded in Thumb mode" msgstr "" -#: tree-ssa.c:279 +#: config/arm/pe.c:165 config/mcore/mcore.c:2898 #, gcc-internal-format -msgid "wrong immediate use list" +msgid "initialized variable %q+D is marked dllimport" msgstr "" -#: tree-ssa.c:312 +#: config/arm/pe.c:174 #, gcc-internal-format -msgid "incoming edge count does not match number of PHI arguments" +msgid "static variable %q+D is marked dllimport" msgstr "" -#: tree-ssa.c:327 +#: config/avr/avr.c:531 #, gcc-internal-format -msgid "PHI argument is missing for edge %d->%d" +msgid "large frame pointer change (%d) with -mtiny-stack" msgstr "" -#: tree-ssa.c:336 +#: config/avr/avr.c:4649 #, gcc-internal-format -msgid "PHI argument is not SSA_NAME, or invariant" +msgid "only initialized variables can be placed into program memory area" msgstr "" -#: tree-ssa.c:348 +#: config/avr/avr.c:4693 #, gcc-internal-format -msgid "wrong edge %d->%d for PHI argument" +msgid "%qs appears to be a misspelled interrupt handler" msgstr "" -#: tree-ssa.c:397 +#: config/avr/avr.c:4701 #, gcc-internal-format -msgid "non-addressable variable inside an alias set" +msgid "%qs appears to be a misspelled signal handler" msgstr "" -#: tree-ssa.c:413 +#: config/avr/avr.c:4770 #, gcc-internal-format -msgid "addressable variable that is an alias tag but is not in any alias set" +msgid "only uninitialized variables can be placed in the .noinit section" msgstr "" -#: tree-ssa.c:423 +#: config/avr/avr.c:4784 #, gcc-internal-format -msgid "verify_flow_insensitive_alias_info failed" +msgid "MCU %qs supported for assembler only" msgstr "" -#: tree-ssa.c:465 +#: config/avr/avr.h:713 #, gcc-internal-format -msgid "dereferenced pointers should have a name or a type tag" +msgid "trampolines not supported" msgstr "" -#: tree-ssa.c:472 +#: config/bfin/bfin.c:1805 config/m68k/m68k.c:294 #, gcc-internal-format -msgid "pointers with a memory tag, should have points-to sets" +msgid "-mshared-library-id=%s is not between 0 and %d" msgstr "" -#: tree-ssa.c:480 +#: config/bfin/bfin.c:1825 #, gcc-internal-format -msgid "pointer escapes but its name tag is not call-clobbered" +msgid "-mshared-library-id= specified without -mid-shared-library" msgstr "" -#: tree-ssa.c:489 +#: config/bfin/bfin.c:2728 #, gcc-internal-format -msgid "verify_flow_sensitive_alias_info failed" +msgid "multiple function type attributes specified" msgstr "" -#: tree-ssa.c:566 +#: config/bfin/bfin.c:2784 #, gcc-internal-format -msgid "" -"alias set of a pointer's type tag should be a superset of the corresponding " -"name tag" +msgid "`%s' attribute only applies to functions" msgstr "" -#: tree-ssa.c:582 +#: config/bfin/bfin.c:2795 #, gcc-internal-format -msgid "" -"two different pointers with identical points-to sets but different name tags" +msgid "can't apply both longcall and shortcall attributes to the same function" msgstr "" -#: tree-ssa.c:614 +#: config/c4x/c4x-c.c:72 #, gcc-internal-format -msgid "verify_name_tags failed" +msgid "missing '(' after '#pragma %s' - ignored" msgstr "" -#: tree-ssa.c:685 +#: config/c4x/c4x-c.c:75 #, gcc-internal-format -msgid "AUX pointer initialized for edge %d->%d" +msgid "missing function name in '#pragma %s' - ignored" msgstr "" -#: tree-ssa.c:708 +#: config/c4x/c4x-c.c:80 #, gcc-internal-format -msgid "stmt (%p) marked modified after optimization pass : " +msgid "malformed '#pragma %s' - ignored" msgstr "" -#: tree-ssa.c:726 +#: config/c4x/c4x-c.c:82 #, gcc-internal-format -msgid "statement makes a memory store, but has no V_MAY_DEFS nor V_MUST_DEFS" +msgid "missing section name in '#pragma %s' - ignored" msgstr "" -#: tree-ssa.c:737 +#: config/c4x/c4x-c.c:87 #, gcc-internal-format -msgid "statement makes aliased stores, but has no V_MAY_DEFS" +msgid "missing ')' for '#pragma %s' - ignored" msgstr "" -#: tree-ssa.c:776 +#: config/c4x/c4x-c.c:90 #, gcc-internal-format -msgid "verify_ssa failed" +msgid "junk at end of '#pragma %s'" msgstr "" -#: tree-ssa.c:1159 +#: config/c4x/c4x.c:860 #, gcc-internal-format -msgid "%H%qD is used uninitialized in this function" +msgid "ISR %s requires %d words of local vars, max is 32767" msgstr "" -#: tree-ssa.c:1184 +#. This function is for retrieving a part of an instruction name for +#. an operator, for immediate output. If that ever happens for +#. MULT, we need to apply TARGET_MUL_BUG in the caller. Make sure +#. we notice. +#: config/cris/cris.c:435 #, gcc-internal-format -msgid "%H%qD may be used uninitialized in this function" +msgid "MULT case in cris_op_str" msgstr "" -#: tree-vect-transform.c:634 +#: config/cris/cris.c:813 #, gcc-internal-format -msgid "no support for induction" +msgid "invalid use of ':' modifier" msgstr "" -#: tree.c:3532 config/darwin.c:1209 config/arm/arm.c:2828 -#: config/arm/arm.c:2856 config/avr/avr.c:4656 config/h8300/h8300.c:5282 -#: config/h8300/h8300.c:5306 config/i386/i386.c:2030 config/i386/i386.c:16527 -#: config/ia64/ia64.c:537 config/m68hc11/m68hc11.c:1118 -#: config/sh/symbian.c:409 config/sh/symbian.c:416 +#: config/cris/cris.c:979 #, gcc-internal-format -msgid "%qs attribute ignored" +msgid "internal error: bad register: %d" msgstr "" -#: tree.c:3551 +#: config/cris/cris.c:1521 #, gcc-internal-format -msgid "function %q+D definition is marked dllimport" +msgid "internal error: sideeffect-insn affecting main effect" msgstr "" -#: tree.c:3559 config/sh/symbian.c:431 +#: config/cris/cris.c:1545 #, gcc-internal-format -msgid "variable %q+D definition is marked dllimport" +msgid "unknown cc_attr value" msgstr "" -#: tree.c:3579 config/sh/symbian.c:506 +#. If we get here, the caller got its initial tests wrong. +#: config/cris/cris.c:1896 #, gcc-internal-format -msgid "external linkage required for symbol %q+D because of %qs attribute" +msgid "internal error: cris_side_effect_mode_ok with bad operands" msgstr "" -#: tree.c:4928 +#: config/cris/cris.c:2099 #, gcc-internal-format -msgid "arrays of functions are not meaningful" +msgid "-max-stackframe=%d is not usable, not between 0 and %d" msgstr "" -#: tree.c:4980 +#: config/cris/cris.c:2127 #, gcc-internal-format -msgid "function return type cannot be function" +msgid "unknown CRIS version specification in -march= or -mcpu= : %s" msgstr "" -#: tree.c:5876 +#: config/cris/cris.c:2163 #, gcc-internal-format -msgid "tree check: %s, have %s in %s, at %s:%d" +msgid "unknown CRIS cpu version specification in -mtune= : %s" msgstr "" -#: tree.c:5913 +#: config/cris/cris.c:2181 #, gcc-internal-format -msgid "tree check: expected none of %s, have %s in %s, at %s:%d" +msgid "-fPIC and -fpic are not supported in this configuration" msgstr "" -#: tree.c:5926 +#: config/cris/cris.c:2196 #, gcc-internal-format -msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" +msgid "that particular -g option is invalid with -maout and -melinux" msgstr "" -#: tree.c:5951 +#: config/cris/cris.c:2390 #, gcc-internal-format -msgid "" -"tree check: expected tree that contains %qs structure, have %qs in %s, at %" -"s:%d" +msgid "Unknown src" msgstr "" -#: tree.c:5965 +#: config/cris/cris.c:2432 #, gcc-internal-format -msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" +msgid "Unknown dest" msgstr "" -#: tree.c:5977 +#: config/cris/cris.c:2717 #, gcc-internal-format -msgid "tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d" +msgid "stackframe too big: %d bytes" msgstr "" -#: tree.c:5989 +#: config/cris/cris.c:3133 config/cris/cris.c:3160 #, gcc-internal-format -msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" +msgid "expand_binop failed in movsi got" msgstr "" -#: value-prof.c:101 +#: config/cris/cris.c:3225 #, gcc-internal-format -msgid "" -"%HCorrupted value profile: %s profiler overall count (%d) does not match BB " -"count (%d)" +msgid "emitting PIC operand, but PIC register isn't set up" msgstr "" -#: varasm.c:470 +#. Definitions for GCC. Part of the machine description for CRIS. +#. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +#. Free Software Foundation, Inc. +#. Contributed by Axis Communications. Written by Hans-Peter Nilsson. +#. +#. This file is part of GCC. +#. +#. GCC is free software; you can redistribute it and/or modify +#. it under the terms of the GNU General Public License as published by +#. the Free Software Foundation; either version 2, or (at your option) +#. any later version. +#. +#. GCC is distributed in the hope that it will be useful, +#. but WITHOUT ANY WARRANTY; without even the implied warranty of +#. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#. GNU General Public License for more details. +#. +#. You should have received a copy of the GNU General Public License +#. along with GCC; see the file COPYING. If not, write to +#. the Free Software Foundation, 51 Franklin Street, Fifth Floor, +#. Boston, MA 02110-1301, USA. +#. After the first "Node:" comment comes all preprocessor directives and +#. attached declarations described in the info files, the "Using and +#. Porting GCC" manual (uapgcc), in the same order as found in the "Target +#. macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not +#. really, but needs an update anyway. +#. +#. There is no generic copy-of-uapgcc comment, you'll have to see uapgcc +#. for that. If applicable, there is a CRIS-specific comment. The order +#. of macro definitions follow the order in the manual. Every section in +#. the manual (node in the info pages) has an introductory `Node: +#. ' comment. If no macros are defined for a section, only +#. the section-comment is present. +#. Note that other header files (e.g. config/elfos.h, config/linux.h, +#. config/cris/linux.h and config/cris/aout.h) are responsible for lots of +#. settings not repeated below. This file contains general CRIS +#. definitions and definitions for the cris-*-elf subtarget. +#. We don't want to use gcc_assert for everything, as that can be +#. compiled out. +#: config/cris/cris.h:44 #, gcc-internal-format -msgid "%+D causes a section type conflict" +msgid "CRIS-port assertion failed: " msgstr "" -#: varasm.c:932 +#. Node: Caller Saves +#. (no definitions) +#. Node: Function entry +#. See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and +#. TARGET_ASM_FUNCTION_EPILOGUE. +#. Node: Profiling +#: config/cris/cris.h:867 #, gcc-internal-format -msgid "register name not specified for %q+D" +msgid "no FUNCTION_PROFILER for CRIS" msgstr "" -#: varasm.c:934 +#: config/crx/crx.h:355 #, gcc-internal-format -msgid "invalid register name for %q+D" +msgid "Profiler support for CRX" msgstr "" -#: varasm.c:936 +#: config/crx/crx.h:366 #, gcc-internal-format -msgid "data type of %q+D isn%'t suitable for a register" +msgid "Trampoline support for CRX" msgstr "" -#: varasm.c:939 +#: config/frv/frv.c:8623 #, gcc-internal-format -msgid "register specified for %q+D isn%'t suitable for data type" +msgid "accumulator is not a constant integer" msgstr "" -#: varasm.c:949 +#: config/frv/frv.c:8628 #, gcc-internal-format -msgid "global register variable has initial value" +msgid "accumulator number is out of bounds" msgstr "" -#: varasm.c:952 +#: config/frv/frv.c:8639 #, gcc-internal-format -msgid "volatile register variables don%'t work as you might wish" +msgid "inappropriate accumulator for %qs" msgstr "" -#: varasm.c:990 +#: config/frv/frv.c:8717 #, gcc-internal-format -msgid "register name given for non-register variable %q+D" +msgid "invalid IACC argument" msgstr "" -#: varasm.c:1067 +#: config/frv/frv.c:8740 #, gcc-internal-format -msgid "global destructors not supported on this target" +msgid "%qs expects a constant argument" msgstr "" -#: varasm.c:1128 +#: config/frv/frv.c:8745 #, gcc-internal-format -msgid "global constructors not supported on this target" +msgid "constant argument out of range for %qs" msgstr "" -#: varasm.c:1692 +#: config/frv/frv.c:9227 #, gcc-internal-format -msgid "" -"alignment of %q+D is greater than maximum object file alignment. Using %d" +msgid "media functions are not available unless -mmedia is used" msgstr "" -#: varasm.c:1731 +#: config/frv/frv.c:9239 #, gcc-internal-format -msgid "thread-local COMMON data not implemented" +msgid "this media function is only available on the fr500" msgstr "" -#: varasm.c:1756 +#: config/frv/frv.c:9267 #, gcc-internal-format -msgid "" -"requested alignment for %q+D is greater than implemented alignment of %wu" +msgid "this media function is only available on the fr400 and fr550" msgstr "" -#: varasm.c:3886 +#: config/frv/frv.c:9286 #, gcc-internal-format -msgid "no-op convert from %wd to %wd bytes in initializer" +msgid "this builtin function is only available on the fr405 and fr450" msgstr "" -#: varasm.c:3930 +#: config/frv/frv.c:9295 #, gcc-internal-format -msgid "initializer for integer value is too complicated" +msgid "this builtin function is only available on the fr500 and fr550" msgstr "" -#: varasm.c:3935 +#: config/frv/frv.c:9307 #, gcc-internal-format -msgid "initializer for floating value is not a floating constant" +msgid "this builtin function is only available on the fr450" msgstr "" -#: varasm.c:4204 +#: config/h8300/h8300.c:331 #, gcc-internal-format -msgid "invalid initial value for member %qs" +msgid "-ms2600 is used without -ms" msgstr "" -#: varasm.c:4404 varasm.c:4448 +#: config/h8300/h8300.c:337 #, gcc-internal-format -msgid "weak declaration of %q+D must precede definition" +msgid "-mn is used without -mh or -ms" msgstr "" -#: varasm.c:4412 +#: config/i386/host-cygwin.c:65 #, gcc-internal-format -msgid "" -"weak declaration of %q+D after first use results in unspecified behavior" +msgid "can't extend PCH file: %m" msgstr "" -#: varasm.c:4446 +#: config/i386/host-cygwin.c:76 #, gcc-internal-format -msgid "weak declaration of %q+D must be public" +msgid "can't set position in PCH file: %m" msgstr "" -#: varasm.c:4455 +#: config/i386/i386.c:1322 #, gcc-internal-format -msgid "weak declaration of %q+D not supported" +msgid "code model %s not supported in PIC mode" msgstr "" -#: varasm.c:4484 +#: config/i386/i386.c:1330 config/sparc/sparc.c:662 #, gcc-internal-format -msgid "only weak aliases are supported in this configuration" +msgid "bad value (%s) for -mcmodel= switch" msgstr "" -#: varasm.c:4652 +#: config/i386/i386.c:1346 #, gcc-internal-format -msgid "%q+D aliased to undefined symbol %qs" +msgid "bad value (%s) for -masm= switch" msgstr "" -#: varasm.c:4655 +#: config/i386/i386.c:1349 #, gcc-internal-format -msgid "%q+D aliased to external symbol %qs" +msgid "code model %qs not supported in the %s bit mode" msgstr "" -#: varasm.c:4686 +#: config/i386/i386.c:1352 #, gcc-internal-format -msgid "%Jalias definitions not supported in this configuration" +msgid "code model % not supported yet" msgstr "" -#: varasm.c:4691 +#: config/i386/i386.c:1354 #, gcc-internal-format -msgid "%Jonly weak aliases are supported in this configuration" +msgid "%i-bit mode not compiled in" msgstr "" -#: varasm.c:4746 +#: config/i386/i386.c:1384 config/i386/i386.c:1408 #, gcc-internal-format -msgid "visibility attribute not supported in this configuration; ignored" +msgid "CPU you selected does not support x86-64 instruction set" msgstr "" -#: varray.c:207 +#: config/i386/i386.c:1390 config/ms1/ms1.c:811 #, gcc-internal-format -msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" +msgid "bad value (%s) for -march= switch" msgstr "" -#: varray.c:217 +#: config/i386/i386.c:1421 #, gcc-internal-format -msgid "underflowed virtual array %s in %s, at %s:%d" +msgid "bad value (%s) for -mtune= switch" msgstr "" -#: vec.c:153 +#: config/i386/i386.c:1438 #, gcc-internal-format -msgid "vector %s %s domain error, in %s at %s:%u" +msgid "-mregparm=%d is not between 0 and %d" msgstr "" -#. Print an error message for unrecognized stab codes. -#: xcoffout.c:187 +#: config/i386/i386.c:1451 #, gcc-internal-format -msgid "no sclass for %s stab (0x%x)" +msgid "-malign-loops is obsolete, use -falign-loops" msgstr "" -#: config/darwin-c.c:85 +#: config/i386/i386.c:1456 config/i386/i386.c:1469 config/i386/i386.c:1482 #, gcc-internal-format -msgid "too many #pragma options align=reset" +msgid "-malign-loops=%d is not between 0 and %d" msgstr "" -#: config/darwin-c.c:105 config/darwin-c.c:108 config/darwin-c.c:110 -#: config/darwin-c.c:112 +#: config/i386/i386.c:1464 #, gcc-internal-format -msgid "malformed '#pragma options', ignoring" +msgid "-malign-jumps is obsolete, use -falign-jumps" msgstr "" -#: config/darwin-c.c:115 +#: config/i386/i386.c:1477 #, gcc-internal-format -msgid "junk at end of '#pragma options'" +msgid "-malign-functions is obsolete, use -falign-functions" msgstr "" -#: config/darwin-c.c:125 +#: config/i386/i386.c:1515 #, gcc-internal-format -msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" +msgid "-mpreferred-stack-boundary=%d is not between %d and 12" msgstr "" -#: config/darwin-c.c:137 +#: config/i386/i386.c:1527 #, gcc-internal-format -msgid "missing '(' after '#pragma unused', ignoring" +msgid "-mbranch-cost=%d is not between 0 and 5" msgstr "" -#: config/darwin-c.c:155 +#: config/i386/i386.c:1535 #, gcc-internal-format -msgid "missing ')' after '#pragma unused', ignoring" +msgid "-mlarge-data-threshold=%d is negative" msgstr "" -#: config/darwin-c.c:158 +#: config/i386/i386.c:1547 #, gcc-internal-format -msgid "junk at end of '#pragma unused'" +msgid "bad value (%s) for -mtls-dialect= switch" msgstr "" -#: config/darwin-c.c:384 +#: config/i386/i386.c:1594 #, gcc-internal-format -msgid "subframework include %s conflicts with framework include" +msgid "-malign-double makes no sense in the 64bit mode" msgstr "" -#: config/darwin-c.c:576 +#: config/i386/i386.c:1596 #, gcc-internal-format -msgid "Unknown value %qs of -mmacosx-version-min" +msgid "-mrtd calling convention not supported in the 64bit mode" msgstr "" -#: config/darwin.c:1323 +#: config/i386/i386.c:1616 #, gcc-internal-format -msgid "" -"internal and protected visibility attributes not supported in this " -"configuration; ignored" +msgid "-msseregparm used without SSE enabled" msgstr "" -#: config/host-darwin.c:63 +#: config/i386/i386.c:1628 config/i386/i386.c:1639 #, gcc-internal-format -msgid "couldn't unmap pch_address_space: %m" +msgid "SSE instruction set disabled, using 387 arithmetics" msgstr "" -#: config/sol2-c.c:94 config/sol2-c.c:110 +#: config/i386/i386.c:1644 #, gcc-internal-format -msgid "malformed %<#pragma align%>, ignoring" +msgid "387 instruction set disabled, using SSE arithmetics" msgstr "" -#: config/sol2-c.c:103 +#: config/i386/i386.c:1651 #, gcc-internal-format -msgid "invalid alignment for %<#pragma align%>, ignoring" +msgid "bad value (%s) for -mfpmath= switch" msgstr "" -#: config/sol2-c.c:118 +#: config/i386/i386.c:1673 #, gcc-internal-format -msgid "%<#pragma align%> must appear before the declaration of %D, ignoring" +msgid "" +"unwind tables currently require either a frame pointer or -maccumulate-" +"outgoing-args for correctness" msgstr "" -#: config/sol2-c.c:130 config/sol2-c.c:142 +#: config/i386/i386.c:2034 config/i386/i386.c:2076 #, gcc-internal-format -msgid "malformed %<#pragma align%>" +msgid "fastcall and regparm attributes are not compatible" msgstr "" -#: config/sol2-c.c:137 +#: config/i386/i386.c:2041 #, gcc-internal-format -msgid "junk at end of %<#pragma align%>" +msgid "%qs attribute requires an integer constant argument" msgstr "" -#: config/sol2-c.c:158 config/sol2-c.c:165 +#: config/i386/i386.c:2047 #, gcc-internal-format -msgid "malformed %<#pragma init%>, ignoring" +msgid "argument to %qs attribute larger than %d" msgstr "" -#: config/sol2-c.c:188 config/sol2-c.c:200 +#: config/i386/i386.c:2068 config/i386/i386.c:2103 #, gcc-internal-format -msgid "malformed %<#pragma init%>" +msgid "fastcall and cdecl attributes are not compatible" msgstr "" -#: config/sol2-c.c:195 +#: config/i386/i386.c:2072 #, gcc-internal-format -msgid "junk at end of %<#pragma init%>" +msgid "fastcall and stdcall attributes are not compatible" msgstr "" -#: config/sol2-c.c:216 config/sol2-c.c:223 +#: config/i386/i386.c:2086 config/i386/i386.c:2099 #, gcc-internal-format -msgid "malformed %<#pragma fini%>, ignoring" +msgid "stdcall and cdecl attributes are not compatible" msgstr "" -#: config/sol2-c.c:246 config/sol2-c.c:258 +#: config/i386/i386.c:2090 #, gcc-internal-format -msgid "malformed %<#pragma fini%>" +msgid "stdcall and fastcall attributes are not compatible" msgstr "" -#: config/sol2-c.c:253 +#: config/i386/i386.c:2225 #, gcc-internal-format -msgid "junk at end of %<#pragma fini%>" +msgid "Calling %qD with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/sol2.c:54 +#: config/i386/i386.c:2228 #, gcc-internal-format -msgid "ignoring %<#pragma align%> for explicitly aligned %q+D" +msgid "Calling %qT with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#. Mach-O supports 'weak imports', and 'weak definitions' in coalesced -#. sections. machopic_select_section ensures that weak variables go in -#. coalesced sections. Weak aliases (or any other kind of aliases) are -#. not supported. Weak symbols that aren't visible outside the .s file -#. are not supported. -#: config/darwin.h:382 +#: config/i386/i386.c:2953 #, gcc-internal-format -msgid "alias definitions not supported in Mach-O; ignored" +msgid "SSE register return with SSE disabled" msgstr "" -#. No profiling. -#: config/vx-common.h:83 +#: config/i386/i386.c:2955 #, gcc-internal-format -msgid "profiler support for VxWorks" +msgid "SSE register argument with SSE disabled" msgstr "" -#: config/windiss.h:37 +#: config/i386/i386.c:3270 #, gcc-internal-format -msgid "profiler support for WindISS" +msgid "SSE vector argument without SSE enabled changes the ABI" msgstr "" -#: config/alpha/alpha.c:231 config/rs6000/rs6000.c:1566 +#: config/i386/i386.c:3287 #, gcc-internal-format -msgid "bad value %qs for -mtls-size switch" +msgid "MMX vector argument without MMX enabled changes the ABI" msgstr "" -#: config/alpha/alpha.c:270 +#: config/i386/i386.c:3553 #, gcc-internal-format -msgid "-f%s ignored for Unicos/Mk (not supported)" +msgid "SSE vector return without SSE enabled changes the ABI" msgstr "" -#: config/alpha/alpha.c:294 +#: config/i386/i386.c:3563 #, gcc-internal-format -msgid "-mieee not supported on Unicos/Mk" +msgid "MMX vector return without MMX enabled changes the ABI" msgstr "" -#: config/alpha/alpha.c:305 +#: config/i386/i386.c:6923 #, gcc-internal-format -msgid "-mieee-with-inexact not supported on Unicos/Mk" +msgid "extended registers have no high halves" msgstr "" -#: config/alpha/alpha.c:322 +#: config/i386/i386.c:6938 #, gcc-internal-format -msgid "bad value %qs for -mtrap-precision switch" +msgid "unsupported operand size for extended register" msgstr "" -#: config/alpha/alpha.c:336 +#: config/i386/i386.c:15193 config/rs6000/rs6000.c:7128 #, gcc-internal-format -msgid "bad value %qs for -mfp-rounding-mode switch" +msgid "selector must be an integer constant in the range 0..%wi" msgstr "" -#: config/alpha/alpha.c:351 +#: config/i386/i386.c:15531 #, gcc-internal-format -msgid "bad value %qs for -mfp-trap-mode switch" +msgid "shift must be an immediate" msgstr "" -#: config/alpha/alpha.c:365 config/alpha/alpha.c:377 +#: config/i386/i386.c:16701 #, gcc-internal-format -msgid "bad value %qs for -mcpu switch" +msgid "%qs incompatible attribute ignored" msgstr "" -#: config/alpha/alpha.c:384 +#: config/i386/winnt-cxx.c:74 #, gcc-internal-format -msgid "trap mode not supported on Unicos/Mk" +msgid "key method %q+D of dllimport'd class defined" msgstr "" -#: config/alpha/alpha.c:391 +#: config/i386/winnt-cxx.c:95 config/sh/symbian.c:173 #, gcc-internal-format -msgid "fp software completion requires -mtrap-precision=i" +msgid "definition of static data member %q+D of dllimport'd class" msgstr "" -#: config/alpha/alpha.c:407 +#: config/i386/winnt.c:74 #, gcc-internal-format -msgid "rounding mode not supported for VAX floats" +msgid "%qs attribute only applies to variables" msgstr "" -#: config/alpha/alpha.c:412 +#: config/i386/winnt.c:103 #, gcc-internal-format -msgid "trap mode not supported for VAX floats" +msgid "" +"%qs attribute applies only to initialized variables with external linkage" msgstr "" -#: config/alpha/alpha.c:416 +#: config/i386/winnt.c:214 #, gcc-internal-format -msgid "128-bit long double not supported for VAX floats" +msgid "inconsistent dll linkage for %q+D, dllexport assumed" msgstr "" -#: config/alpha/alpha.c:444 +#: config/i386/winnt.c:254 config/sh/symbian.c:273 #, gcc-internal-format -msgid "L%d cache latency unknown for %s" +msgid "%qs declared as both exported to and imported from a DLL" msgstr "" -#: config/alpha/alpha.c:459 +#: config/i386/winnt.c:549 #, gcc-internal-format -msgid "bad value %qs for -mmemory-latency" +msgid "%q+D causes a section type conflict" msgstr "" -#: config/alpha/alpha.c:6542 config/alpha/alpha.c:6545 config/s390/s390.c:7579 -#: config/s390/s390.c:7582 +#: config/i386/cygming.h:166 #, gcc-internal-format -msgid "bad builtin fcode" +msgid "-f%s ignored for target (all code is position independent)" msgstr "" -#: config/arc/arc.c:390 +#: config/i386/djgpp.h:181 #, gcc-internal-format -msgid "argument of %qs attribute is not a string constant" +msgid "-mbnu210 is ignored (option is obsolete)" msgstr "" -#: config/arc/arc.c:398 +#: config/i386/i386-interix.h:257 #, gcc-internal-format -msgid "argument of %qs attribute is not \"ilink1\" or \"ilink2\"" +msgid "ms-bitfields not supported for objc" msgstr "" -#: config/arm/arm.c:877 +#: config/ia64/ia64-c.c:52 #, gcc-internal-format -msgid "switch -mcpu=%s conflicts with -march= switch" +msgid "malformed #pragma builtin" msgstr "" -#: config/arm/arm.c:887 config/rs6000/rs6000.c:1222 config/sparc/sparc.c:698 +#: config/ia64/ia64.c:501 config/m32r/m32r.c:373 #, gcc-internal-format -msgid "bad value (%s) for %s switch" +msgid "invalid argument of %qs attribute" msgstr "" -#: config/arm/arm.c:997 +#: config/ia64/ia64.c:513 #, gcc-internal-format -msgid "target CPU does not support interworking" +msgid "%Jan address area attribute cannot be specified for local variables" msgstr "" -#: config/arm/arm.c:1003 +#: config/ia64/ia64.c:520 #, gcc-internal-format -msgid "target CPU does not support THUMB instructions" +msgid "address area of %q+D conflicts with previous declaration" msgstr "" -#: config/arm/arm.c:1021 +#: config/ia64/ia64.c:527 #, gcc-internal-format -msgid "" -"enabling backtrace support is only meaningful when compiling for the Thumb" +msgid "%Jaddress area attribute cannot be specified for functions" msgstr "" -#: config/arm/arm.c:1024 +#: config/ia64/ia64.c:5023 config/pa/pa.c:327 #, gcc-internal-format -msgid "" -"enabling callee interworking support is only meaningful when compiling for " -"the Thumb" +msgid "value of -mfixed-range must have form REG1-REG2" msgstr "" -#: config/arm/arm.c:1027 +#: config/ia64/ia64.c:5050 config/pa/pa.c:354 #, gcc-internal-format -msgid "" -"enabling caller interworking support is only meaningful when compiling for " -"the Thumb" +msgid "%s-%s is an empty range" msgstr "" -#: config/arm/arm.c:1031 +#: config/ia64/ia64.c:5078 #, gcc-internal-format -msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" +msgid "bad value %<%s%> for -mtls-size= switch" msgstr "" -#: config/arm/arm.c:1039 +#: config/ia64/ia64.c:5106 #, gcc-internal-format -msgid "-fpic and -mapcs-reent are incompatible" +msgid "bad value %<%s%> for -mtune= switch" msgstr "" -#: config/arm/arm.c:1042 +#: config/ia64/ia64.c:5125 #, gcc-internal-format -msgid "APCS reentrant code not supported. Ignored" +msgid "not yet implemented: latency-optimized inline square root" msgstr "" -#: config/arm/arm.c:1050 +#: config/iq2000/iq2000.c:1808 #, gcc-internal-format -msgid "-g with -mno-apcs-frame may not give sensible debugging" +msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" msgstr "" -#: config/arm/arm.c:1058 +#: config/iq2000/iq2000.c:2589 #, gcc-internal-format -msgid "passing floating point arguments in fp regs not yet supported" +msgid "argument %qd is not a constant" msgstr "" -#: config/arm/arm.c:1099 +#: config/iq2000/iq2000.c:2892 config/ms1/ms1.c:352 +#: config/xtensa/xtensa.c:1773 #, gcc-internal-format -msgid "invalid ABI option: -mabi=%s" +msgid "PRINT_OPERAND_ADDRESS, null pointer" msgstr "" -#: config/arm/arm.c:1105 +#: config/iq2000/iq2000.c:3047 #, gcc-internal-format -msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" +msgid "PRINT_OPERAND: Unknown punctuation '%c'" msgstr "" -#: config/arm/arm.c:1108 +#: config/iq2000/iq2000.c:3056 config/mips/mips.c:5390 +#: config/xtensa/xtensa.c:1627 #, gcc-internal-format -msgid "iwmmxt abi requires an iwmmxt capable cpu" +msgid "PRINT_OPERAND null pointer" msgstr "" -#: config/arm/arm.c:1118 +#: config/m32c/m32c-pragma.c:64 #, gcc-internal-format -msgid "invalid floating point emulation option: -mfpe=%s" +msgid "junk at end of #pragma GCC memregs [0..16]" msgstr "" -#: config/arm/arm.c:1135 +#: config/m32c/m32c-pragma.c:71 #, gcc-internal-format -msgid "invalid floating point option: -mfpu=%s" +msgid "#pragma GCC memregs must precede any function decls" msgstr "" -#: config/arm/arm.c:1175 +#: config/m32c/m32c-pragma.c:82 config/m32c/m32c-pragma.c:89 #, gcc-internal-format -msgid "invalid floating point abi: -mfloat-abi=%s" +msgid "#pragma GCC memregs takes a number [0..16]" msgstr "" -#: config/arm/arm.c:1182 +#: config/m32c/m32c.c:412 #, gcc-internal-format -msgid "-mfloat-abi=hard and VFP" +msgid "invalid target memregs value '%d'" msgstr "" -#: config/arm/arm.c:1208 +#: config/m68hc11/m68hc11.c:279 #, gcc-internal-format -msgid "structure size boundary can only be set to %s" +msgid "-f%s ignored for 68HC11/68HC12 (not supported)" msgstr "" -#: config/arm/arm.c:1217 +#: config/m68hc11/m68hc11.c:1240 #, gcc-internal-format -msgid "-mpic-register= is useless without -fpic" +msgid "% and % attributes are not compatible, ignoring %" msgstr "" -#: config/arm/arm.c:1224 +#: config/m68hc11/m68hc11.c:1247 #, gcc-internal-format -msgid "unable to use '%s' for PIC register" +msgid "% attribute is already used" msgstr "" -#: config/arm/arm.c:2796 config/arm/arm.c:2814 config/avr/avr.c:4676 -#: config/bfin/bfin.c:2703 config/c4x/c4x.c:4076 config/h8300/h8300.c:5258 -#: config/i386/i386.c:1994 config/m68hc11/m68hc11.c:1155 -#: config/m68k/m68k.c:376 config/mcore/mcore.c:3032 config/ms1/ms1.c:1268 -#: config/rs6000/rs6000.c:17275 config/sh/sh.c:7516 config/sh/sh.c:7537 -#: config/sh/sh.c:7572 config/stormy16/stormy16.c:2241 config/v850/v850.c:2111 +#: config/m68k/m68k.c:321 #, gcc-internal-format -msgid "%qs attribute only applies to functions" +msgid "cannot specify both -msep-data and -mid-shared-library" msgstr "" -#: config/arm/arm.c:11652 +#: config/m68k/m68k.c:333 #, gcc-internal-format -msgid "unable to compute real location of stacked parameter" +msgid "-fPIC is not currently supported on the 68000 or 68010" msgstr "" -#. @@@ better error message -#: config/arm/arm.c:12282 config/arm/arm.c:12319 +#: config/m68k/m68k.c:640 config/rs6000/rs6000.c:13614 #, gcc-internal-format -msgid "selector must be an immediate" +msgid "stack limit expression is not supported" msgstr "" -#. @@@ better error message -#: config/arm/arm.c:12362 config/i386/i386.c:15301 config/i386/i386.c:15335 +#: config/mips/mips.c:4584 #, gcc-internal-format -msgid "mask must be an immediate" +msgid "" +"-%s conflicts with the other architecture options, which specify a %s " +"processor" msgstr "" -#: config/arm/arm.c:13018 +#: config/mips/mips.c:4600 #, gcc-internal-format -msgid "no low registers available for popping high registers" +msgid "-march=%s is not compatible with the selected ABI" msgstr "" -#: config/arm/arm.c:13242 +#: config/mips/mips.c:4618 #, gcc-internal-format -msgid "interrupt Service Routines cannot be coded in Thumb mode" +msgid "-mgp64 used with a 32-bit processor" msgstr "" -#: config/arm/pe.c:165 config/mcore/mcore.c:2898 +#: config/mips/mips.c:4620 #, gcc-internal-format -msgid "initialized variable %q+D is marked dllimport" +msgid "-mgp32 used with a 64-bit ABI" msgstr "" -#: config/arm/pe.c:174 +#: config/mips/mips.c:4622 #, gcc-internal-format -msgid "static variable %q+D is marked dllimport" +msgid "-mgp64 used with a 32-bit ABI" msgstr "" -#: config/avr/avr.c:531 +#: config/mips/mips.c:4640 config/mips/mips.c:4642 config/mips/mips.c:4644 +#: config/mips/mips.c:4720 #, gcc-internal-format -msgid "large frame pointer change (%d) with -mtiny-stack" +msgid "unsupported combination: %s" msgstr "" -#: config/avr/avr.c:4649 +#: config/mips/mips.c:4715 #, gcc-internal-format -msgid "only initialized variables can be placed into program memory area" +msgid "" +"generation of Branch Likely instructions enabled, but not supported by " +"architecture" msgstr "" -#: config/avr/avr.c:4693 +#: config/mips/mips.c:4732 #, gcc-internal-format -msgid "%qs appears to be a misspelled interrupt handler" +msgid "-G is incompatible with PIC code which is the default" msgstr "" -#: config/avr/avr.c:4701 +#: config/mips/mips.c:4799 #, gcc-internal-format -msgid "%qs appears to be a misspelled signal handler" +msgid "-mips3d requires -mpaired-single" msgstr "" -#: config/avr/avr.c:4770 +#: config/mips/mips.c:4808 #, gcc-internal-format -msgid "only uninitialized variables can be placed in the .noinit section" +msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float" msgstr "" -#: config/avr/avr.c:4784 +#: config/mips/mips.c:4813 #, gcc-internal-format -msgid "MCU %qs supported for assembler only" +msgid "-mips3d/-mpaired-single must be used with -mips64" msgstr "" -#: config/avr/avr.h:713 +#: config/mips/mips.c:4816 #, gcc-internal-format -msgid "trampolines not supported" +msgid "-mips16 and -mdsp cannot be used together" msgstr "" -#: config/bfin/bfin.c:1785 config/m68k/m68k.c:294 +#: config/mips/mips.c:5327 #, gcc-internal-format -msgid "-mshared-library-id=%s is not between 0 and %d" +msgid "internal error: %%) found without a %%( in assembler pattern" msgstr "" -#: config/bfin/bfin.c:1805 +#: config/mips/mips.c:5341 #, gcc-internal-format -msgid "-mshared-library-id= specified without -mid-shared-library" +msgid "internal error: %%] found without a %%[ in assembler pattern" msgstr "" -#: config/bfin/bfin.c:2708 +#: config/mips/mips.c:5354 #, gcc-internal-format -msgid "multiple function type attributes specified" +msgid "internal error: %%> found without a %%< in assembler pattern" msgstr "" -#: config/bfin/bfin.c:2764 +#: config/mips/mips.c:5367 #, gcc-internal-format -msgid "`%s' attribute only applies to functions" +msgid "internal error: %%} found without a %%{ in assembler pattern" msgstr "" -#: config/bfin/bfin.c:2775 +#: config/mips/mips.c:5381 #, gcc-internal-format -msgid "can't apply both longcall and shortcall attributes to the same function" +msgid "PRINT_OPERAND: unknown punctuation '%c'" msgstr "" -#: config/c4x/c4x-c.c:72 +#: config/mips/mips.c:8144 #, gcc-internal-format -msgid "missing '(' after '#pragma %s' - ignored" +msgid "cannot handle inconsistent calls to %qs" msgstr "" -#: config/c4x/c4x-c.c:75 +#: config/mips/mips.c:9543 #, gcc-internal-format -msgid "missing function name in '#pragma %s' - ignored" +msgid "the cpu name must be lower case" msgstr "" -#: config/c4x/c4x-c.c:80 +#: config/mips/mips.c:10209 #, gcc-internal-format -msgid "malformed '#pragma %s' - ignored" +msgid "invalid argument to builtin function" msgstr "" -#: config/c4x/c4x-c.c:82 +#. Output assembler code to FILE to increment profiler label # LABELNO +#. for profiling a function entry. +#: config/mips/mips.h:2106 #, gcc-internal-format -msgid "missing section name in '#pragma %s' - ignored" +msgid "mips16 function profiling" msgstr "" -#: config/c4x/c4x-c.c:87 +#: config/mmix/mmix.c:227 #, gcc-internal-format -msgid "missing ')' for '#pragma %s' - ignored" +msgid "-f%s not supported: ignored" msgstr "" -#: config/c4x/c4x-c.c:90 +#: config/mmix/mmix.c:655 #, gcc-internal-format -msgid "junk at end of '#pragma %s'" +msgid "support for mode %qs" msgstr "" -#: config/c4x/c4x.c:860 +#: config/mmix/mmix.c:669 #, gcc-internal-format -msgid "ISR %s requires %d words of local vars, max is 32767" +msgid "" +"too large function value type, needs %d registers, have only %d registers " +"for this" msgstr "" -#. This function is for retrieving a part of an instruction name for -#. an operator, for immediate output. If that ever happens for -#. MULT, we need to apply TARGET_MUL_BUG in the caller. Make sure -#. we notice. -#: config/cris/cris.c:434 +#: config/mmix/mmix.c:839 #, gcc-internal-format -msgid "MULT case in cris_op_str" +msgid "function_profiler support for MMIX" msgstr "" -#: config/cris/cris.c:812 +#: config/mmix/mmix.c:861 #, gcc-internal-format -msgid "invalid use of ':' modifier" +msgid "MMIX Internal: Last named vararg would not fit in a register" msgstr "" -#: config/cris/cris.c:978 +#: config/mmix/mmix.c:1476 config/mmix/mmix.c:1500 config/mmix/mmix.c:1616 #, gcc-internal-format -msgid "internal error: bad register: %d" +msgid "MMIX Internal: Bad register: %d" msgstr "" -#: config/cris/cris.c:1445 +#. Presumably there's a missing case above if we get here. +#: config/mmix/mmix.c:1608 #, gcc-internal-format -msgid "internal error: sideeffect-insn affecting main effect" +msgid "MMIX Internal: Missing %qc case in mmix_print_operand" msgstr "" -#: config/cris/cris.c:1469 +#: config/mmix/mmix.c:1894 #, gcc-internal-format -msgid "unknown cc_attr value" +msgid "stack frame not a multiple of 8 bytes: %wd" msgstr "" -#. If we get here, the caller got its initial tests wrong. -#: config/cris/cris.c:1820 +#: config/mmix/mmix.c:2130 #, gcc-internal-format -msgid "internal error: cris_side_effect_mode_ok with bad operands" +msgid "stack frame not a multiple of octabyte: %wd" msgstr "" -#: config/cris/cris.c:2023 +#: config/mmix/mmix.c:2470 config/mmix/mmix.c:2534 #, gcc-internal-format -msgid "-max-stackframe=%d is not usable, not between 0 and %d" +msgid "MMIX Internal: %s is not a shiftable int" msgstr "" -#: config/cris/cris.c:2051 +#: config/ms1/ms1.c:315 #, gcc-internal-format -msgid "unknown CRIS version specification in -march= or -mcpu= : %s" +msgid "info pointer NULL" msgstr "" -#: config/cris/cris.c:2087 +#: config/pa/pa.c:459 #, gcc-internal-format -msgid "unknown CRIS cpu version specification in -mtune= : %s" +msgid "PIC code generation is not supported in the portable runtime model" msgstr "" -#: config/cris/cris.c:2105 +#: config/pa/pa.c:464 #, gcc-internal-format -msgid "-fPIC and -fpic are not supported in this configuration" +msgid "PIC code generation is not compatible with fast indirect calls" msgstr "" -#: config/cris/cris.c:2120 +#: config/pa/pa.c:469 #, gcc-internal-format -msgid "that particular -g option is invalid with -maout and -melinux" +msgid "-g is only supported when using GAS on this processor," msgstr "" -#: config/cris/cris.c:2314 +#: config/pa/pa.c:470 #, gcc-internal-format -msgid "Unknown src" +msgid "-g option disabled" msgstr "" -#: config/cris/cris.c:2356 +#: config/pa/pa.c:7996 #, gcc-internal-format -msgid "Unknown dest" +msgid "" +"alignment (%u) for %s exceeds maximum alignment for global common data. " +"Using %u" msgstr "" -#: config/cris/cris.c:2641 +#: config/pa/pa-hpux11.h:85 #, gcc-internal-format -msgid "stackframe too big: %d bytes" +msgid "-munix=98 option required for C89 Amendment 1 features.\n" msgstr "" -#: config/cris/cris.c:3057 config/cris/cris.c:3084 +#: config/rs6000/host-darwin.c:52 #, gcc-internal-format -msgid "expand_binop failed in movsi got" +msgid "Segmentation Fault (code)" msgstr "" -#: config/cris/cris.c:3149 +#: config/rs6000/host-darwin.c:117 #, gcc-internal-format -msgid "emitting PIC operand, but PIC register isn't set up" +msgid "Segmentation Fault" msgstr "" -#. Definitions for GCC. Part of the machine description for CRIS. -#. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -#. Free Software Foundation, Inc. -#. Contributed by Axis Communications. Written by Hans-Peter Nilsson. -#. -#. This file is part of GCC. -#. -#. GCC is free software; you can redistribute it and/or modify -#. it under the terms of the GNU General Public License as published by -#. the Free Software Foundation; either version 2, or (at your option) -#. any later version. -#. -#. GCC is distributed in the hope that it will be useful, -#. but WITHOUT ANY WARRANTY; without even the implied warranty of -#. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#. GNU General Public License for more details. -#. -#. You should have received a copy of the GNU General Public License -#. along with GCC; see the file COPYING. If not, write to -#. the Free Software Foundation, 51 Franklin Street, Fifth Floor, -#. Boston, MA 02110-1301, USA. -#. After the first "Node:" comment comes all preprocessor directives and -#. attached declarations described in the info files, the "Using and -#. Porting GCC" manual (uapgcc), in the same order as found in the "Target -#. macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not -#. really, but needs an update anyway. -#. -#. There is no generic copy-of-uapgcc comment, you'll have to see uapgcc -#. for that. If applicable, there is a CRIS-specific comment. The order -#. of macro definitions follow the order in the manual. Every section in -#. the manual (node in the info pages) has an introductory `Node: -#. ' comment. If no macros are defined for a section, only -#. the section-comment is present. -#. Note that other header files (e.g. config/elfos.h, config/linux.h, -#. config/cris/linux.h and config/cris/aout.h) are responsible for lots of -#. settings not repeated below. This file contains general CRIS -#. definitions and definitions for the cris-*-elf subtarget. -#. We don't want to use gcc_assert for everything, as that can be -#. compiled out. -#: config/cris/cris.h:44 +#: config/rs6000/host-darwin.c:131 #, gcc-internal-format -msgid "CRIS-port assertion failed: " +msgid "While setting up signal stack: %m" msgstr "" -#. Node: Caller Saves -#. (no definitions) -#. Node: Function entry -#. See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and -#. TARGET_ASM_FUNCTION_EPILOGUE. -#. Node: Profiling -#: config/cris/cris.h:867 +#: config/rs6000/host-darwin.c:137 #, gcc-internal-format -msgid "no FUNCTION_PROFILER for CRIS" +msgid "While setting up signal handler: %m" msgstr "" -#: config/crx/crx.h:355 +#. Handle the machine specific pragma longcall. Its syntax is +#. +#. # pragma longcall ( TOGGLE ) +#. +#. where TOGGLE is either 0 or 1. +#. +#. rs6000_default_long_calls is set to the value of TOGGLE, changing +#. whether or not new function declarations receive a longcall +#. attribute by default. +#: config/rs6000/rs6000-c.c:53 #, gcc-internal-format -msgid "Profiler support for CRX" +msgid "ignoring malformed #pragma longcall" msgstr "" -#: config/crx/crx.h:366 +#: config/rs6000/rs6000-c.c:66 #, gcc-internal-format -msgid "Trampoline support for CRX" +msgid "missing open paren" msgstr "" -#: config/frv/frv.c:8623 +#: config/rs6000/rs6000-c.c:68 #, gcc-internal-format -msgid "accumulator is not a constant integer" +msgid "missing number" msgstr "" -#: config/frv/frv.c:8628 +#: config/rs6000/rs6000-c.c:70 #, gcc-internal-format -msgid "accumulator number is out of bounds" +msgid "missing close paren" msgstr "" -#: config/frv/frv.c:8639 +#: config/rs6000/rs6000-c.c:73 #, gcc-internal-format -msgid "inappropriate accumulator for %qs" +msgid "number must be 0 or 1" msgstr "" -#: config/frv/frv.c:8717 +#: config/rs6000/rs6000-c.c:76 #, gcc-internal-format -msgid "invalid IACC argument" +msgid "junk at end of #pragma longcall" msgstr "" -#: config/frv/frv.c:8740 +#: config/rs6000/rs6000-c.c:2530 #, gcc-internal-format -msgid "%qs expects a constant argument" +msgid "passing arg %d of %qE discards qualifiers frompointer target type" msgstr "" -#: config/frv/frv.c:8745 +#: config/rs6000/rs6000-c.c:2573 #, gcc-internal-format -msgid "constant argument out of range for %qs" +msgid "invalid parameter combination for AltiVec intrinsic" msgstr "" -#: config/frv/frv.c:9227 +#: config/rs6000/rs6000.c:1250 #, gcc-internal-format -msgid "media functions are not available unless -mmedia is used" +msgid "-mmultiple is not supported on little endian systems" msgstr "" -#: config/frv/frv.c:9239 +#: config/rs6000/rs6000.c:1257 #, gcc-internal-format -msgid "this media function is only available on the fr500" +msgid "-mstring is not supported on little endian systems" msgstr "" -#: config/frv/frv.c:9267 +#: config/rs6000/rs6000.c:1271 #, gcc-internal-format -msgid "this media function is only available on the fr400 and fr550" +msgid "unknown -mdebug-%s switch" msgstr "" -#: config/frv/frv.c:9286 +#: config/rs6000/rs6000.c:1283 #, gcc-internal-format -msgid "this builtin function is only available on the fr405 and fr450" +msgid "" +"unknown -mtraceback arg %qs; expecting %, % or %" msgstr "" -#: config/frv/frv.c:9295 +#: config/rs6000/rs6000.c:1324 #, gcc-internal-format -msgid "this builtin function is only available on the fr500 and fr550" +msgid "AltiVec and E500 instructions cannot coexist" msgstr "" -#: config/frv/frv.c:9307 +#: config/rs6000/rs6000.c:1553 #, gcc-internal-format -msgid "this builtin function is only available on the fr450" +msgid "unknown -m%s= option specified: '%s'" msgstr "" -#: config/h8300/h8300.c:331 +#: config/rs6000/rs6000.c:1758 #, gcc-internal-format -msgid "-ms2600 is used without -ms" +msgid "not configured for ABI: '%s'" msgstr "" -#: config/h8300/h8300.c:337 +#: config/rs6000/rs6000.c:1768 #, gcc-internal-format -msgid "-mn is used without -mh or -ms" +msgid "Using darwin64 ABI" msgstr "" -#: config/i386/host-cygwin.c:65 +#: config/rs6000/rs6000.c:1773 #, gcc-internal-format -msgid "can't extend PCH file: %m" +msgid "Using old darwin ABI" msgstr "" -#: config/i386/host-cygwin.c:76 +#: config/rs6000/rs6000.c:1778 #, gcc-internal-format -msgid "can't set position in PCH file: %m" +msgid "unknown ABI specified: '%s'" msgstr "" -#: config/i386/i386.c:1316 +#: config/rs6000/rs6000.c:1805 #, gcc-internal-format -msgid "code model %s not supported in PIC mode" +msgid "invalid option for -mfloat-gprs: '%s'" msgstr "" -#: config/i386/i386.c:1324 config/sparc/sparc.c:662 +#: config/rs6000/rs6000.c:1815 #, gcc-internal-format -msgid "bad value (%s) for -mcmodel= switch" +msgid "Unknown switch -mlong-double-%s" msgstr "" -#: config/i386/i386.c:1339 +#: config/rs6000/rs6000.c:1836 #, gcc-internal-format -msgid "bad value (%s) for -masm= switch" +msgid "" +"-malign-power is not supported for 64-bit Darwin; it is incompatible with " +"the installed C and C++ libraries" msgstr "" -#: config/i386/i386.c:1342 +#: config/rs6000/rs6000.c:1844 #, gcc-internal-format -msgid "code model %qs not supported in the %s bit mode" +msgid "unknown -malign-XXXXX option specified: '%s'" msgstr "" -#: config/i386/i386.c:1345 +#: config/rs6000/rs6000.c:4201 #, gcc-internal-format -msgid "code model % not supported yet" +msgid "" +"GCC vector returned by reference: non-standard ABI extension with no " +"compatibility guarantee" msgstr "" -#: config/i386/i386.c:1347 +#: config/rs6000/rs6000.c:4274 #, gcc-internal-format -msgid "%i-bit mode not compiled in" +msgid "" +"cannot return value in vector register because altivec instructions are " +"disabled, use -maltivec to enable them" msgstr "" -#: config/i386/i386.c:1377 config/i386/i386.c:1401 +#: config/rs6000/rs6000.c:4520 #, gcc-internal-format -msgid "CPU you selected does not support x86-64 instruction set" +msgid "" +"cannot pass argument in vector register because altivec instructions are " +"disabled, use -maltivec to enable them" msgstr "" -#: config/i386/i386.c:1383 config/ms1/ms1.c:798 +#: config/rs6000/rs6000.c:5373 #, gcc-internal-format -msgid "bad value (%s) for -march= switch" +msgid "" +"GCC vector passed by reference: non-standard ABI extension with no " +"compatibility guarantee" msgstr "" -#: config/i386/i386.c:1414 +#: config/rs6000/rs6000.c:6542 #, gcc-internal-format -msgid "bad value (%s) for -mtune= switch" +msgid "argument 1 must be a 5-bit signed literal" msgstr "" -#: config/i386/i386.c:1431 +#: config/rs6000/rs6000.c:6645 config/rs6000/rs6000.c:7439 #, gcc-internal-format -msgid "-mregparm=%d is not between 0 and %d" +msgid "argument 2 must be a 5-bit unsigned literal" msgstr "" -#: config/i386/i386.c:1444 +#: config/rs6000/rs6000.c:6685 #, gcc-internal-format -msgid "-malign-loops is obsolete, use -falign-loops" +msgid "argument 1 of __builtin_altivec_predicate must be a constant" msgstr "" -#: config/i386/i386.c:1449 config/i386/i386.c:1462 config/i386/i386.c:1475 +#: config/rs6000/rs6000.c:6738 #, gcc-internal-format -msgid "-malign-loops=%d is not between 0 and %d" +msgid "argument 1 of __builtin_altivec_predicate is out of range" msgstr "" -#: config/i386/i386.c:1457 +#: config/rs6000/rs6000.c:6900 #, gcc-internal-format -msgid "-malign-jumps is obsolete, use -falign-jumps" +msgid "argument 3 must be a 4-bit unsigned literal" msgstr "" -#: config/i386/i386.c:1470 +#: config/rs6000/rs6000.c:7072 #, gcc-internal-format -msgid "-malign-functions is obsolete, use -falign-functions" +msgid "argument to %qs must be a 2-bit unsigned literal" msgstr "" -#: config/i386/i386.c:1508 +#: config/rs6000/rs6000.c:7216 #, gcc-internal-format -msgid "-mpreferred-stack-boundary=%d is not between %d and 12" +msgid "unresolved overload for Altivec builtin %qF" msgstr "" -#: config/i386/i386.c:1520 +#: config/rs6000/rs6000.c:7298 #, gcc-internal-format -msgid "-mbranch-cost=%d is not between 0 and 5" +msgid "argument to dss must be a 2-bit unsigned literal" msgstr "" -#: config/i386/i386.c:1528 +#: config/rs6000/rs6000.c:7559 #, gcc-internal-format -msgid "-mlarge-data-threshold=%d is negative" +msgid "argument 1 of __builtin_spe_predicate must be a constant" msgstr "" -#: config/i386/i386.c:1540 +#: config/rs6000/rs6000.c:7631 #, gcc-internal-format -msgid "bad value (%s) for -mtls-dialect= switch" +msgid "argument 1 of __builtin_spe_predicate is out of range" msgstr "" -#: config/i386/i386.c:1587 +#: config/rs6000/rs6000.c:13577 #, gcc-internal-format -msgid "-malign-double makes no sense in the 64bit mode" +msgid "stack frame too large" msgstr "" -#: config/i386/i386.c:1589 +#: config/rs6000/rs6000.c:16137 #, gcc-internal-format -msgid "-mrtd calling convention not supported in the 64bit mode" +msgid "no profiling of 64-bit code for this ABI" msgstr "" -#: config/i386/i386.c:1609 +#: config/rs6000/rs6000.c:17246 #, gcc-internal-format -msgid "-msseregparm used without SSE enabled" +msgid "use of % in AltiVec types is invalid for 64-bit code" msgstr "" -#: config/i386/i386.c:1621 config/i386/i386.c:1632 +#: config/rs6000/rs6000.c:17248 #, gcc-internal-format -msgid "SSE instruction set disabled, using 387 arithmetics" +msgid "use of % in AltiVec types is deprecated; use %" msgstr "" -#: config/i386/i386.c:1637 +#: config/rs6000/rs6000.c:17252 #, gcc-internal-format -msgid "387 instruction set disabled, using SSE arithmetics" +msgid "use of % in AltiVec types is invalid" msgstr "" -#: config/i386/i386.c:1644 +#: config/rs6000/rs6000.c:17254 #, gcc-internal-format -msgid "bad value (%s) for -mfpmath= switch" +msgid "use of % in AltiVec types is invalid" msgstr "" -#: config/i386/i386.c:2007 config/i386/i386.c:2049 +#: config/rs6000/rs6000.c:17256 #, gcc-internal-format -msgid "fastcall and regparm attributes are not compatible" +msgid "use of % in AltiVec types is invalid" msgstr "" -#: config/i386/i386.c:2014 +#: config/rs6000/rs6000.c:17258 #, gcc-internal-format -msgid "%qs attribute requires an integer constant argument" +msgid "use of boolean types in AltiVec types is invalid" msgstr "" -#: config/i386/i386.c:2020 +#: config/rs6000/rs6000.c:17260 #, gcc-internal-format -msgid "argument to %qs attribute larger than %d" +msgid "use of % in AltiVec types is invalid" msgstr "" -#: config/i386/i386.c:2041 config/i386/i386.c:2076 +#: config/rs6000/aix43.h:39 config/rs6000/aix51.h:38 config/rs6000/aix52.h:38 #, gcc-internal-format -msgid "fastcall and cdecl attributes are not compatible" +msgid "-maix64 and POWER architecture are incompatible" msgstr "" -#: config/i386/i386.c:2045 +#: config/rs6000/aix43.h:44 config/rs6000/aix51.h:43 config/rs6000/aix52.h:43 #, gcc-internal-format -msgid "fastcall and stdcall attributes are not compatible" +msgid "-maix64 requires PowerPC64 architecture remain enabled" msgstr "" -#: config/i386/i386.c:2059 config/i386/i386.c:2072 +#: config/rs6000/aix43.h:48 config/rs6000/aix51.h:47 config/rs6000/aix52.h:47 #, gcc-internal-format -msgid "stdcall and cdecl attributes are not compatible" +msgid "" +"-maix64 required: 64-bit computation with 32-bit addressing not yet supported" msgstr "" -#: config/i386/i386.c:2063 +#. The Darwin ABI always includes AltiVec, can't be (validly) turned +#. off. +#: config/rs6000/darwin.h:75 #, gcc-internal-format -msgid "stdcall and fastcall attributes are not compatible" +msgid "-mdynamic-no-pic overrides -fpic or -fPIC" msgstr "" -#: config/i386/i386.c:2197 +#. Darwin doesn't support -fpic. +#: config/rs6000/darwin.h:81 #, gcc-internal-format -msgid "Calling %qD with attribute sseregparm without SSE/SSE2 enabled" +msgid "-fpic is not supported; -fPIC assumed" msgstr "" -#: config/i386/i386.c:2200 +#: config/rs6000/darwin.h:88 #, gcc-internal-format -msgid "Calling %qT with attribute sseregparm without SSE/SSE2 enabled" +msgid "-m64 requires PowerPC64 architecture, enabling" msgstr "" -#: config/i386/i386.c:2925 +#. See note below. +#. if (!rs6000_explicit_options.long_double) +#. rs6000_long_double_type_size = 128; +#: config/rs6000/eabispe.h:45 config/rs6000/linuxspe.h:62 #, gcc-internal-format -msgid "SSE register return with SSE disabled" +msgid "-m64 not supported in this configuration" msgstr "" -#: config/i386/i386.c:2927 +#: config/rs6000/linux64.h:109 #, gcc-internal-format -msgid "SSE register argument with SSE disabled" +msgid "-m64 requires a PowerPC64 cpu" msgstr "" -#: config/i386/i386.c:3242 +#. Definitions for __builtin_return_address and __builtin_frame_address. +#. __builtin_return_address (0) should give link register (65), enable +#. this. +#. This should be uncommented, so that the link register is used, but +#. currently this would result in unmatched insns and spilling fixed +#. registers so we'll leave it for another day. When these problems are +#. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. +#. (mrs) +#. #define RETURN_ADDR_IN_PREVIOUS_FRAME +#. Number of bytes into the frame return addresses can be found. See +#. rs6000_stack_info in rs6000.c for more information on how the different +#. abi's store the return address. +#: config/rs6000/rs6000.h:1590 #, gcc-internal-format -msgid "SSE vector argument without SSE enabled changes the ABI" +msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" -#: config/i386/i386.c:3259 +#. Sometimes certain combinations of command options do not make sense +#. on a particular target machine. You can define a macro +#. `OVERRIDE_OPTIONS' to take account of this. This macro, if +#. defined, is executed once just after all the command options have +#. been parsed. +#. +#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to +#. get control. +#: config/rs6000/sysv4.h:130 #, gcc-internal-format -msgid "MMX vector argument without MMX enabled changes the ABI" +msgid "bad value for -mcall-%s" msgstr "" -#: config/i386/i386.c:3525 +#: config/rs6000/sysv4.h:146 #, gcc-internal-format -msgid "SSE vector return without SSE enabled changes the ABI" +msgid "bad value for -msdata=%s" msgstr "" -#: config/i386/i386.c:3535 +#: config/rs6000/sysv4.h:163 #, gcc-internal-format -msgid "MMX vector return without MMX enabled changes the ABI" +msgid "-mrelocatable and -msdata=%s are incompatible" msgstr "" -#: config/i386/i386.c:6762 +#: config/rs6000/sysv4.h:172 #, gcc-internal-format -msgid "extended registers have no high halves" +msgid "-f%s and -msdata=%s are incompatible" msgstr "" -#: config/i386/i386.c:6777 +#: config/rs6000/sysv4.h:181 #, gcc-internal-format -msgid "unsupported operand size for extended register" +msgid "-msdata=%s and -mcall-%s are incompatible" msgstr "" -#: config/i386/i386.c:15029 config/rs6000/rs6000.c:7060 +#: config/rs6000/sysv4.h:190 #, gcc-internal-format -msgid "selector must be an integer constant in the range 0..%wi" +msgid "-mrelocatable and -mno-minimal-toc are incompatible" msgstr "" -#: config/i386/i386.c:15367 +#: config/rs6000/sysv4.h:196 #, gcc-internal-format -msgid "shift must be an immediate" +msgid "-mrelocatable and -mcall-%s are incompatible" msgstr "" -#: config/i386/i386.c:16537 +#: config/rs6000/sysv4.h:203 #, gcc-internal-format -msgid "%qs incompatible attribute ignored" +msgid "-fPIC and -mcall-%s are incompatible" msgstr "" -#: config/i386/winnt.c:74 +#: config/rs6000/sysv4.h:210 #, gcc-internal-format -msgid "%qs attribute only applies to variables" +msgid "-mcall-aixdesc must be big endian" msgstr "" -#: config/i386/winnt.c:103 +#: config/rs6000/sysv4.h:215 #, gcc-internal-format -msgid "" -"%qs attribute applies only to initialized variables with external linkage" +msgid "-msecure-plt not supported by your assembler" msgstr "" -#: config/i386/winnt.c:202 config/sh/symbian.c:147 +#: config/rs6000/sysv4.h:230 #, gcc-internal-format -msgid "" -"function %q+D is defined after prior declaration as dllimport: attribute " -"ignored" +msgid "-m%s not supported in this configuration" msgstr "" -#: config/i386/winnt.c:213 config/sh/symbian.c:159 +#: config/s390/s390.c:1319 #, gcc-internal-format -msgid "inline function %q+D is declared as dllimport: attribute ignored" +msgid "stack guard value must be an exact power of 2" msgstr "" -#: config/i386/winnt.c:225 config/sh/symbian.c:173 +#: config/s390/s390.c:1326 #, gcc-internal-format -msgid "definition of static data member %q+D of dllimport'd class" +msgid "stack size must be an exact power of 2" msgstr "" -#: config/i386/winnt.c:282 +#: config/s390/s390.c:1371 #, gcc-internal-format -msgid "inconsistent dll linkage for %q+D, dllexport assumed" +msgid "z/Architecture mode not supported on %s" msgstr "" -#: config/i386/winnt.c:323 config/sh/symbian.c:273 +#: config/s390/s390.c:1373 #, gcc-internal-format -msgid "%qs declared as both exported to and imported from a DLL" +msgid "64-bit ABI not supported in ESA/390 mode" msgstr "" -#: config/i386/winnt.c:466 +#: config/s390/s390.c:1384 #, gcc-internal-format -msgid "%q+D defined locally after being referenced with dllimport linkage" +msgid "" +"-mbackchain -mpacked-stack -mhard-float are not supported in combination" msgstr "" -#: config/i386/winnt.c:469 +#: config/s390/s390.c:1390 #, gcc-internal-format -msgid "" -"%q+D redeclared without dllimport attribute after being referenced with " -"dllimport linkage" +msgid "-mstack-size implies use of -mstack-guard" msgstr "" -#: config/i386/winnt.c:637 +#: config/s390/s390.c:1392 #, gcc-internal-format -msgid "%q+D causes a section type conflict" +msgid "stack size must be greater than the stack guard value" msgstr "" -#: config/i386/cygming.h:166 +#: config/s390/s390.c:1394 #, gcc-internal-format -msgid "-f%s ignored for target (all code is position independent)" +msgid "stack size must not be greater than 64k" msgstr "" -#: config/i386/djgpp.h:181 +#: config/s390/s390.c:1397 #, gcc-internal-format -msgid "-mbnu210 is ignored (option is obsolete)" +msgid "-mstack-guard implies use of -mstack-size" msgstr "" -#: config/i386/i386-interix.h:257 +#: config/s390/s390.c:6253 #, gcc-internal-format -msgid "ms-bitfields not supported for objc" +msgid "total size of local variables exceeds architecture limit" msgstr "" -#: config/ia64/ia64-c.c:52 +#: config/s390/s390.c:6840 #, gcc-internal-format -msgid "malformed #pragma builtin" +msgid "frame size of %qs is " msgstr "" -#: config/ia64/ia64.c:505 config/m32r/m32r.c:373 +#: config/s390/s390.c:6840 #, gcc-internal-format -msgid "invalid argument of %qs attribute" +msgid " bytes" msgstr "" -#: config/ia64/ia64.c:517 +#: config/s390/s390.c:6844 #, gcc-internal-format -msgid "%Jan address area attribute cannot be specified for local variables" +msgid "%qs uses dynamic stack allocation" msgstr "" -#: config/ia64/ia64.c:524 +#: config/sh/sh.c:6486 #, gcc-internal-format -msgid "address area of %q+D conflicts with previous declaration" +msgid "__builtin_saveregs not supported by this subtarget" msgstr "" -#: config/ia64/ia64.c:531 +#: config/sh/sh.c:7535 #, gcc-internal-format -msgid "%Jaddress area attribute cannot be specified for functions" +msgid "attribute interrupt_handler is not compatible with -m5-compact" msgstr "" -#: config/ia64/ia64.c:4931 config/pa/pa.c:327 +#. The sp_switch attribute only has meaning for interrupt functions. +#. The trap_exit attribute only has meaning for interrupt functions. +#: config/sh/sh.c:7557 config/sh/sh.c:7592 #, gcc-internal-format -msgid "value of -mfixed-range must have form REG1-REG2" +msgid "%qs attribute only applies to interrupt functions" msgstr "" -#: config/ia64/ia64.c:4958 config/pa/pa.c:354 +#. The argument must be a constant string. +#: config/sh/sh.c:7564 #, gcc-internal-format -msgid "%s-%s is an empty range" +msgid "%qs attribute argument not a string constant" msgstr "" -#: config/ia64/ia64.c:4986 +#. The argument must be a constant integer. +#: config/sh/sh.c:7599 #, gcc-internal-format -msgid "bad value %<%s%> for -mtls-size= switch" +msgid "%qs attribute argument not an integer constant" msgstr "" -#: config/ia64/ia64.c:5014 +#: config/sh/sh.c:9655 #, gcc-internal-format -msgid "bad value %<%s%> for -mtune= switch" +msgid "r0 needs to be available as a call-clobbered register" msgstr "" -#: config/ia64/ia64.c:5033 +#: config/sh/sh.c:9676 #, gcc-internal-format -msgid "not yet implemented: latency-optimized inline square root" +msgid "Need a second call-clobbered general purpose register" msgstr "" -#: config/iq2000/iq2000.c:1808 +#: config/sh/sh.c:9684 #, gcc-internal-format -msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" +msgid "Need a call-clobbered target register" msgstr "" -#: config/iq2000/iq2000.c:2589 +#: config/sh/symbian.c:147 #, gcc-internal-format -msgid "argument %qd is not a constant" +msgid "" +"function %q+D is defined after prior declaration as dllimport: attribute " +"ignored" msgstr "" -#: config/iq2000/iq2000.c:2892 config/ms1/ms1.c:338 -#: config/xtensa/xtensa.c:1773 +#: config/sh/symbian.c:159 #, gcc-internal-format -msgid "PRINT_OPERAND_ADDRESS, null pointer" +msgid "inline function %q+D is declared as dllimport: attribute ignored" msgstr "" -#: config/iq2000/iq2000.c:3047 +#: config/sh/symbian.c:280 #, gcc-internal-format -msgid "PRINT_OPERAND: Unknown punctuation '%c'" +msgid "" +"failure in redeclaration of %q+D: dllimport'd symbol lacks external linkage" msgstr "" -#: config/iq2000/iq2000.c:3056 config/mips/mips.c:5390 -#: config/xtensa/xtensa.c:1627 +#: config/sh/symbian.c:326 #, gcc-internal-format -msgid "PRINT_OPERAND null pointer" +msgid "%s %q+D %s after being referenced with dllimport linkage" msgstr "" -#: config/m32c/m32c-pragma.c:64 +#: config/sh/symbian.c:892 cp/tree.c:2334 #, gcc-internal-format -msgid "junk at end of #pragma GCC memregs [0..16]" +msgid "lang_* check: failed in %s, at %s:%d" msgstr "" -#: config/m32c/m32c-pragma.c:71 +#. FIXME +#: config/sh/netbsd-elf.h:95 #, gcc-internal-format -msgid "#pragma GCC memregs must precede any function decls" +msgid "unimplemented-shmedia profiling" msgstr "" -#: config/m32c/m32c-pragma.c:82 config/m32c/m32c-pragma.c:89 +#. There are no delay slots on SHmedia. +#. Relaxation isn't yet supported for SHmedia +#. After reload, if conversion does little good but can cause ICEs: - find_if_block doesn't do anything for SH because we don't have conditional execution patterns. (We use conditional move patterns, which are handled differently, and only before reload). - find_cond_trap doesn't do anything for the SH because we #. don't have conditional traps. - find_if_case_1 uses redirect_edge_and_branch_force in the only path that does an optimization, and this causes an ICE when branch targets are in registers. - find_if_case_2 doesn't do anything for the SHmedia after reload except when it can redirect a tablejump - and that's rather rare. +#. -fprofile-arcs needs a working libgcov . In unified tree configurations with newlib, this requires to configure with --with-newlib --with-headers. But there is no way to check here we have a working libgcov, so just assume that we have. +#: config/sh/sh.h:611 #, gcc-internal-format -msgid "#pragma GCC memregs takes a number [0..16]" +msgid "profiling is still experimental for this target" msgstr "" -#: config/m32c/m32c.c:412 +#. Only the sh64-elf assembler fully supports .quad properly. +#. User supplied - leave it alone. +#. The debugging information is sufficient, but gdb doesn't implement this yet +#. Never run scheduling before reload, since that can break global alloc, and generates slower code anyway due to the pressure on R0. +#. Enable sched1 for SH4; ready queue will be reordered by the target hooks when pressure is high. We can not do this for SH3 and lower as they give spill failures for R0. +#. ??? Current exception handling places basic block boundaries after call_insns. It causes the high pressure on R0 and gives spill failures for R0 in reload. See PR 22553 and the thread on gcc-patches . +#: config/sh/sh.h:676 #, gcc-internal-format -msgid "invalid target memregs value '%d'" +msgid "ignoring -fschedule-insns because of exception handling bug" msgstr "" -#: config/m68hc11/m68hc11.c:279 +#: config/sparc/sparc.c:635 #, gcc-internal-format -msgid "-f%s ignored for 68HC11/68HC12 (not supported)" +msgid "%s is not supported by this configuration" msgstr "" -#: config/m68hc11/m68hc11.c:1240 +#: config/sparc/sparc.c:642 #, gcc-internal-format -msgid "% and % attributes are not compatible, ignoring %" +msgid "-mlong-double-64 not allowed with -m64" msgstr "" -#: config/m68hc11/m68hc11.c:1247 +#: config/sparc/sparc.c:667 #, gcc-internal-format -msgid "% attribute is already used" +msgid "-mcmodel= is not supported on 32 bit systems" msgstr "" -#: config/m68k/m68k.c:321 +#: config/stormy16/stormy16.c:497 #, gcc-internal-format -msgid "cannot specify both -msep-data and -mid-shared-library" +msgid "constant halfword load operand out of range" msgstr "" -#: config/m68k/m68k.c:333 +#: config/stormy16/stormy16.c:507 #, gcc-internal-format -msgid "-fPIC is not currently supported on the 68000 or 68010" +msgid "constant arithmetic operand out of range" msgstr "" -#: config/m68k/m68k.c:640 config/rs6000/rs6000.c:13546 +#: config/stormy16/stormy16.c:1108 #, gcc-internal-format -msgid "stack limit expression is not supported" +msgid "local variable memory requirements exceed capacity" msgstr "" -#: config/mips/mips.c:4584 +#: config/stormy16/stormy16.c:1274 #, gcc-internal-format -msgid "" -"-%s conflicts with the other architecture options, which specify a %s " -"processor" +msgid "function_profiler support" msgstr "" -#: config/mips/mips.c:4600 +#: config/stormy16/stormy16.c:1363 #, gcc-internal-format -msgid "-march=%s is not compatible with the selected ABI" +msgid "cannot use va_start in interrupt function" msgstr "" -#: config/mips/mips.c:4618 +#: config/stormy16/stormy16.c:1895 #, gcc-internal-format -msgid "-mgp64 used with a 32-bit processor" +msgid "switch statement of size %lu entries too large" msgstr "" -#: config/mips/mips.c:4620 +#: config/stormy16/stormy16.c:2263 #, gcc-internal-format -msgid "-mgp32 used with a 64-bit ABI" +msgid "%<__BELOW100__%> attribute only applies to variables" msgstr "" -#: config/mips/mips.c:4622 +#: config/stormy16/stormy16.c:2270 #, gcc-internal-format -msgid "-mgp64 used with a 32-bit ABI" +msgid "__BELOW100__ attribute not allowed with auto storage class" msgstr "" -#: config/mips/mips.c:4640 config/mips/mips.c:4642 config/mips/mips.c:4644 -#: config/mips/mips.c:4720 +#: config/v850/v850-c.c:67 #, gcc-internal-format -msgid "unsupported combination: %s" +msgid "#pragma GHS endXXXX found without previous startXXX" msgstr "" -#: config/mips/mips.c:4715 +#: config/v850/v850-c.c:70 #, gcc-internal-format -msgid "" -"generation of Branch Likely instructions enabled, but not supported by " -"architecture" +msgid "#pragma GHS endXXX does not match previous startXXX" msgstr "" -#: config/mips/mips.c:4732 +#: config/v850/v850-c.c:96 #, gcc-internal-format -msgid "-G is incompatible with PIC code which is the default" +msgid "cannot set interrupt attribute: no current function" msgstr "" -#: config/mips/mips.c:4799 +#: config/v850/v850-c.c:104 #, gcc-internal-format -msgid "-mips3d requires -mpaired-single" +msgid "cannot set interrupt attribute: no such identifier" msgstr "" -#: config/mips/mips.c:4808 +#: config/v850/v850-c.c:149 #, gcc-internal-format -msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float" +msgid "junk at end of #pragma ghs section" msgstr "" -#: config/mips/mips.c:4813 +#: config/v850/v850-c.c:166 #, gcc-internal-format -msgid "-mips3d/-mpaired-single must be used with -mips64" +msgid "unrecognized section name \"%s\"" msgstr "" -#: config/mips/mips.c:4816 +#: config/v850/v850-c.c:181 #, gcc-internal-format -msgid "-mips16 and -mdsp cannot be used together" +msgid "malformed #pragma ghs section" msgstr "" -#: config/mips/mips.c:5327 +#: config/v850/v850-c.c:200 #, gcc-internal-format -msgid "internal error: %%) found without a %%( in assembler pattern" +msgid "junk at end of #pragma ghs interrupt" msgstr "" -#: config/mips/mips.c:5341 +#: config/v850/v850-c.c:211 #, gcc-internal-format -msgid "internal error: %%] found without a %%[ in assembler pattern" +msgid "junk at end of #pragma ghs starttda" msgstr "" -#: config/mips/mips.c:5354 +#: config/v850/v850-c.c:222 #, gcc-internal-format -msgid "internal error: %%> found without a %%< in assembler pattern" +msgid "junk at end of #pragma ghs startsda" msgstr "" -#: config/mips/mips.c:5367 +#: config/v850/v850-c.c:233 #, gcc-internal-format -msgid "internal error: %%} found without a %%{ in assembler pattern" +msgid "junk at end of #pragma ghs startzda" msgstr "" -#: config/mips/mips.c:5381 +#: config/v850/v850-c.c:244 #, gcc-internal-format -msgid "PRINT_OPERAND: unknown punctuation '%c'" +msgid "junk at end of #pragma ghs endtda" msgstr "" -#: config/mips/mips.c:8144 +#: config/v850/v850-c.c:255 #, gcc-internal-format -msgid "cannot handle inconsistent calls to %qs" +msgid "junk at end of #pragma ghs endsda" msgstr "" -#: config/mips/mips.c:9543 +#: config/v850/v850-c.c:266 #, gcc-internal-format -msgid "the cpu name must be lower case" +msgid "junk at end of #pragma ghs endzda" msgstr "" -#: config/mips/mips.c:10209 +#: config/v850/v850.c:172 #, gcc-internal-format -msgid "invalid argument to builtin function" +msgid "value passed to %<-m%s%> is too large" msgstr "" -#. Output assembler code to FILE to increment profiler label # LABELNO -#. for profiling a function entry. -#: config/mips/mips.h:2106 +#: config/v850/v850.c:2147 #, gcc-internal-format -msgid "mips16 function profiling" +msgid "%Jdata area attributes cannot be specified for local variables" msgstr "" -#: config/mmix/mmix.c:227 +#: config/v850/v850.c:2158 #, gcc-internal-format -msgid "-f%s not supported: ignored" +msgid "data area of %q+D conflicts with previous declaration" msgstr "" -#: config/mmix/mmix.c:655 +#: config/v850/v850.c:2288 #, gcc-internal-format -msgid "support for mode %qs" +msgid "bogus JR construction: %d" msgstr "" -#: config/mmix/mmix.c:669 +#: config/v850/v850.c:2306 config/v850/v850.c:2415 #, gcc-internal-format -msgid "" -"too large function value type, needs %d registers, have only %d registers " -"for this" +msgid "bad amount of stack space removal: %d" msgstr "" -#: config/mmix/mmix.c:839 +#: config/v850/v850.c:2395 #, gcc-internal-format -msgid "function_profiler support for MMIX" +msgid "bogus JARL construction: %d\n" msgstr "" -#: config/mmix/mmix.c:861 +#: config/v850/v850.c:2694 #, gcc-internal-format -msgid "MMIX Internal: Last named vararg would not fit in a register" +msgid "bogus DISPOSE construction: %d" msgstr "" -#: config/mmix/mmix.c:1476 config/mmix/mmix.c:1500 config/mmix/mmix.c:1616 +#: config/v850/v850.c:2713 #, gcc-internal-format -msgid "MMIX Internal: Bad register: %d" +msgid "too much stack space to dispose of: %d" msgstr "" -#. Presumably there's a missing case above if we get here. -#: config/mmix/mmix.c:1608 +#: config/v850/v850.c:2815 #, gcc-internal-format -msgid "MMIX Internal: Missing %qc case in mmix_print_operand" +msgid "bogus PREPEARE construction: %d" msgstr "" -#: config/mmix/mmix.c:1894 +#: config/v850/v850.c:2834 #, gcc-internal-format -msgid "stack frame not a multiple of 8 bytes: %wd" +msgid "too much stack space to prepare: %d" msgstr "" -#: config/mmix/mmix.c:2130 +#: config/xtensa/xtensa.c:1505 #, gcc-internal-format -msgid "stack frame not a multiple of octabyte: %wd" +msgid "boolean registers required for the floating-point option" msgstr "" -#: config/mmix/mmix.c:2470 config/mmix/mmix.c:2534 +#: config/xtensa/xtensa.c:1551 #, gcc-internal-format -msgid "MMIX Internal: %s is not a shiftable int" +msgid "-f%s is not supported with CONST16 instructions" msgstr "" -#: config/ms1/ms1.c:301 +#: config/xtensa/xtensa.c:1556 #, gcc-internal-format -msgid "info pointer NULL" +msgid "PIC is required but not supported with CONST16 instructions" msgstr "" -#: config/pa/pa.c:459 +#: config/xtensa/xtensa.c:2414 #, gcc-internal-format -msgid "PIC code generation is not supported in the portable runtime model" +msgid "only uninitialized variables can be placed in a .bss section" msgstr "" -#: config/pa/pa.c:464 +#: ada/misc.c:262 #, gcc-internal-format -msgid "PIC code generation is not compatible with fast indirect calls" +msgid "missing argument to \"-%s\"" msgstr "" -#: config/pa/pa.c:469 +#: ada/misc.c:303 #, gcc-internal-format -msgid "-g is only supported when using GAS on this processor," +msgid "%<-gnat%> misspelled as %<-gant%>" msgstr "" -#: config/pa/pa.c:470 +#: cp/call.c:289 #, gcc-internal-format -msgid "-g option disabled" +msgid "unable to call pointer to member function here" msgstr "" -#: config/pa/pa.c:7982 +#: cp/call.c:2392 #, gcc-internal-format -msgid "" -"alignment (%u) for %s exceeds maximum alignment for global common data. " -"Using %u" +msgid "%s %D(%T, %T, %T) " msgstr "" -#: config/pa/pa-hpux11.h:85 +#: cp/call.c:2397 #, gcc-internal-format -msgid "-munix=98 option required for C89 Amendment 1 features.\n" +msgid "%s %D(%T, %T) " msgstr "" -#: config/rs6000/host-darwin.c:52 +#: cp/call.c:2401 #, gcc-internal-format -msgid "Segmentation Fault (code)" +msgid "%s %D(%T) " msgstr "" -#: config/rs6000/host-darwin.c:117 +#: cp/call.c:2405 #, gcc-internal-format -msgid "Segmentation Fault" +msgid "%s %T " msgstr "" -#: config/rs6000/host-darwin.c:131 +#: cp/call.c:2407 #, gcc-internal-format -msgid "While setting up signal stack: %m" +msgid "%s %+#D " msgstr "" -#: config/rs6000/host-darwin.c:137 +#: cp/call.c:2409 cp/pt.c:1324 #, gcc-internal-format -msgid "While setting up signal handler: %m" +msgid "%s %+#D" msgstr "" -#. Handle the machine specific pragma longcall. Its syntax is -#. -#. # pragma longcall ( TOGGLE ) -#. -#. where TOGGLE is either 0 or 1. -#. -#. rs6000_default_long_calls is set to the value of TOGGLE, changing -#. whether or not new function declarations receive a longcall -#. attribute by default. -#: config/rs6000/rs6000-c.c:53 +#: cp/call.c:2631 +#, gcc-internal-format +msgid "conversion from %qT to %qT is ambiguous" +msgstr "" + +#: cp/call.c:2782 cp/call.c:2800 cp/call.c:2858 #, gcc-internal-format -msgid "ignoring malformed #pragma longcall" +msgid "no matching function for call to %<%D(%A)%>" msgstr "" -#: config/rs6000/rs6000-c.c:66 +#: cp/call.c:2803 cp/call.c:2861 #, gcc-internal-format -msgid "missing open paren" +msgid "call of overloaded %<%D(%A)%> is ambiguous" msgstr "" -#: config/rs6000/rs6000-c.c:68 +#. It's no good looking for an overloaded operator() on a +#. pointer-to-member-function. +#: cp/call.c:2929 #, gcc-internal-format -msgid "missing number" +msgid "" +"pointer-to-member function %E cannot be called without an object; consider " +"using .* or ->*" msgstr "" -#: config/rs6000/rs6000-c.c:70 +#: cp/call.c:3003 #, gcc-internal-format -msgid "missing close paren" +msgid "no match for call to %<(%T) (%A)%>" msgstr "" -#: config/rs6000/rs6000-c.c:73 +#: cp/call.c:3012 #, gcc-internal-format -msgid "number must be 0 or 1" +msgid "call of %<(%T) (%A)%> is ambiguous" msgstr "" -#: config/rs6000/rs6000-c.c:76 +#: cp/call.c:3050 #, gcc-internal-format -msgid "junk at end of #pragma longcall" +msgid "%s for ternary % in %<%E ? %E : %E%>" msgstr "" -#: config/rs6000/rs6000-c.c:2520 +#: cp/call.c:3056 #, gcc-internal-format -msgid "passing arg %d of %qE discards qualifiers frompointer target type" +msgid "%s for % in %<%E%s%>" msgstr "" -#: config/rs6000/rs6000-c.c:2563 +#: cp/call.c:3060 #, gcc-internal-format -msgid "invalid parameter combination for AltiVec intrinsic" +msgid "%s for % in %<%E[%E]%>" msgstr "" -#: config/rs6000/rs6000.c:1246 +#: cp/call.c:3065 #, gcc-internal-format -msgid "-mmultiple is not supported on little endian systems" +msgid "%s for %qs in %<%s %E%>" msgstr "" -#: config/rs6000/rs6000.c:1253 +#: cp/call.c:3070 #, gcc-internal-format -msgid "-mstring is not supported on little endian systems" +msgid "%s for % in %<%E %s %E%>" msgstr "" -#: config/rs6000/rs6000.c:1267 +#: cp/call.c:3073 #, gcc-internal-format -msgid "unknown -mdebug-%s switch" +msgid "%s for % in %<%s%E%>" msgstr "" -#: config/rs6000/rs6000.c:1279 +#: cp/call.c:3165 #, gcc-internal-format -msgid "" -"unknown -mtraceback arg %qs; expecting %, % or %" +msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "" -#: config/rs6000/rs6000.c:1320 +#: cp/call.c:3242 #, gcc-internal-format -msgid "AltiVec and E500 instructions cannot coexist" +msgid "%qE has type % and is not a throw-expression" msgstr "" -#: config/rs6000/rs6000.c:1549 +#: cp/call.c:3281 cp/call.c:3491 #, gcc-internal-format -msgid "unknown -m%s= option specified: '%s'" +msgid "operands to ?: have different types" msgstr "" -#: config/rs6000/rs6000.c:1751 +#: cp/call.c:3445 #, gcc-internal-format -msgid "not configured for ABI: '%s'" +msgid "enumeral mismatch in conditional expression: %qT vs %qT" msgstr "" -#: config/rs6000/rs6000.c:1761 +#: cp/call.c:3452 #, gcc-internal-format -msgid "Using darwin64 ABI" +msgid "enumeral and non-enumeral type in conditional expression" msgstr "" -#: config/rs6000/rs6000.c:1766 +#: cp/call.c:3746 #, gcc-internal-format -msgid "Using old darwin ABI" +msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead" msgstr "" -#: config/rs6000/rs6000.c:1771 +#: cp/call.c:3819 #, gcc-internal-format -msgid "unknown ABI specified: '%s'" +msgid "comparison between %q#T and %q#T" msgstr "" -#: config/rs6000/rs6000.c:1798 +#: cp/call.c:4078 #, gcc-internal-format -msgid "invalid option for -mfloat-gprs: '%s'" +msgid "no suitable % for %qT" msgstr "" -#: config/rs6000/rs6000.c:1808 +#: cp/call.c:4095 #, gcc-internal-format -msgid "Unknown switch -mlong-double-%s" +msgid "%q+#D is private" msgstr "" -#: config/rs6000/rs6000.c:1829 +#: cp/call.c:4097 #, gcc-internal-format -msgid "" -"-malign-power is not supported for 64-bit Darwin; it is incompatible with " -"the installed C and C++ libraries" +msgid "%q+#D is protected" msgstr "" -#: config/rs6000/rs6000.c:1837 +#: cp/call.c:4099 #, gcc-internal-format -msgid "unknown -malign-XXXXX option specified: '%s'" +msgid "%q+#D is inaccessible" msgstr "" -#: config/rs6000/rs6000.c:4131 +#: cp/call.c:4100 #, gcc-internal-format -msgid "" -"GCC vector returned by reference: non-standard ABI extension with no " -"compatibility guarantee" +msgid "within this context" msgstr "" -#: config/rs6000/rs6000.c:4204 +#: cp/call.c:4189 cp/cvt.c:264 #, gcc-internal-format -msgid "" -"cannot return value in vector register because altivec instructions are " -"disabled, use -maltivec to enable them" +msgid "invalid conversion from %qT to %qT" msgstr "" -#: config/rs6000/rs6000.c:4450 +#: cp/call.c:4191 #, gcc-internal-format -msgid "" -"cannot pass argument in vector register because altivec instructions are " -"disabled, use -maltivec to enable them" +msgid " initializing argument %P of %qD" msgstr "" -#: config/rs6000/rs6000.c:5303 +#: cp/call.c:4203 #, gcc-internal-format -msgid "" -"GCC vector passed by reference: non-standard ABI extension with no " -"compatibility guarantee" +msgid "passing NULL to non-pointer argument %P of %qD" msgstr "" -#: config/rs6000/rs6000.c:6474 +#: cp/call.c:4206 #, gcc-internal-format -msgid "argument 1 must be a 5-bit signed literal" +msgid "converting to non-pointer type %qT from NULL" msgstr "" -#: config/rs6000/rs6000.c:6577 config/rs6000/rs6000.c:7371 +#: cp/call.c:4214 #, gcc-internal-format -msgid "argument 2 must be a 5-bit unsigned literal" +msgid "passing %qT for argument %P to %qD" msgstr "" -#: config/rs6000/rs6000.c:6617 +#: cp/call.c:4217 #, gcc-internal-format -msgid "argument 1 of __builtin_altivec_predicate must be a constant" +msgid "converting to %qT from %qT" msgstr "" -#: config/rs6000/rs6000.c:6670 +#: cp/call.c:4356 #, gcc-internal-format -msgid "argument 1 of __builtin_altivec_predicate is out of range" +msgid "cannot bind bitfield %qE to %qT" msgstr "" -#: config/rs6000/rs6000.c:6832 +#: cp/call.c:4359 cp/call.c:4375 #, gcc-internal-format -msgid "argument 3 must be a 4-bit unsigned literal" +msgid "cannot bind packed field %qE to %qT" msgstr "" -#: config/rs6000/rs6000.c:7004 +#: cp/call.c:4362 #, gcc-internal-format -msgid "argument to %qs must be a 2-bit unsigned literal" +msgid "cannot bind rvalue %qE to %qT" msgstr "" -#: config/rs6000/rs6000.c:7148 +#: cp/call.c:4476 #, gcc-internal-format -msgid "unresolved overload for Altivec builtin %qF" +msgid "" +"cannot pass objects of non-POD type %q#T through %<...%>; call will abort at " +"runtime" msgstr "" -#: config/rs6000/rs6000.c:7230 +#. Undefined behavior [expr.call] 5.2.2/7. +#: cp/call.c:4502 #, gcc-internal-format -msgid "argument to dss must be a 2-bit unsigned literal" +msgid "" +"cannot receive objects of non-POD type %q#T through %<...%>; call will abort " +"at runtime" msgstr "" -#: config/rs6000/rs6000.c:7491 +#: cp/call.c:4545 #, gcc-internal-format -msgid "argument 1 of __builtin_spe_predicate must be a constant" +msgid "the default argument for parameter %d of %qD has not yet been parsed" msgstr "" -#: config/rs6000/rs6000.c:7563 +#: cp/call.c:4624 #, gcc-internal-format -msgid "argument 1 of __builtin_spe_predicate is out of range" +msgid "argument of function call might be a candidate for a format attribute" msgstr "" -#: config/rs6000/rs6000.c:13509 +#: cp/call.c:4761 #, gcc-internal-format -msgid "stack frame too large" +msgid "passing %qT as % argument of %q#D discards qualifiers" msgstr "" -#: config/rs6000/rs6000.c:16069 +#: cp/call.c:4780 #, gcc-internal-format -msgid "no profiling of 64-bit code for this ABI" +msgid "%qT is not an accessible base of %qT" msgstr "" -#: config/rs6000/rs6000.c:17178 +#: cp/call.c:5030 #, gcc-internal-format -msgid "use of % in AltiVec types is invalid for 64-bit code" +msgid "could not find class$ field in java interface type %qT" msgstr "" -#: config/rs6000/rs6000.c:17180 +#: cp/call.c:5267 #, gcc-internal-format -msgid "use of % in AltiVec types is deprecated; use %" +msgid "call to non-function %qD" msgstr "" -#: config/rs6000/rs6000.c:17184 +#: cp/call.c:5389 #, gcc-internal-format -msgid "use of % in AltiVec types is invalid" +msgid "no matching function for call to %<%T::%s(%A)%#V%>" msgstr "" -#: config/rs6000/rs6000.c:17186 +#: cp/call.c:5407 #, gcc-internal-format -msgid "use of % in AltiVec types is invalid" +msgid "call of overloaded %<%s(%A)%> is ambiguous" msgstr "" -#: config/rs6000/rs6000.c:17188 +#: cp/call.c:5431 #, gcc-internal-format -msgid "use of % in AltiVec types is invalid" +msgid "cannot call member function %qD without object" msgstr "" -#: config/rs6000/rs6000.c:17190 +#: cp/call.c:6036 #, gcc-internal-format -msgid "use of boolean types in AltiVec types is invalid" +msgid "passing %qT chooses %qT over %qT" msgstr "" -#: config/rs6000/rs6000.c:17192 +#: cp/call.c:6038 cp/name-lookup.c:4228 #, gcc-internal-format -msgid "use of % in AltiVec types is invalid" +msgid " in call to %qD" msgstr "" -#: config/rs6000/aix43.h:39 config/rs6000/aix51.h:38 config/rs6000/aix52.h:38 +#: cp/call.c:6095 #, gcc-internal-format -msgid "-maix64 and POWER architecture are incompatible" +msgid "choosing %qD over %qD" msgstr "" -#: config/rs6000/aix43.h:44 config/rs6000/aix51.h:43 config/rs6000/aix52.h:43 +#: cp/call.c:6096 #, gcc-internal-format -msgid "-maix64 requires PowerPC64 architecture remain enabled" +msgid " for conversion from %qT to %qT" msgstr "" -#: config/rs6000/aix43.h:48 config/rs6000/aix51.h:47 config/rs6000/aix52.h:47 +#: cp/call.c:6098 #, gcc-internal-format -msgid "" -"-maix64 required: 64-bit computation with 32-bit addressing not yet supported" +msgid " because conversion sequence for the argument is better" msgstr "" -#. The Darwin ABI always includes AltiVec, can't be (validly) turned -#. off. -#: config/rs6000/darwin.h:75 +#: cp/call.c:6212 #, gcc-internal-format -msgid "-mdynamic-no-pic overrides -fpic or -fPIC" +msgid "" +"ISO C++ says that these are ambiguous, even though the worst conversion for " +"the first is better than the worst conversion for the second:" msgstr "" -#. Darwin doesn't support -fpic. -#: config/rs6000/darwin.h:81 +#: cp/call.c:6356 #, gcc-internal-format -msgid "-fpic is not supported; -fPIC assumed" +msgid "could not convert %qE to %qT" msgstr "" -#: config/rs6000/darwin.h:88 +#: cp/call.c:6488 #, gcc-internal-format -msgid "-m64 requires PowerPC64 architecture, enabling" +msgid "" +"invalid initialization of non-const reference of type %qT from a temporary " +"of type %qT" msgstr "" -#. See note below. -#. if (!rs6000_explicit_options.long_double) -#. rs6000_long_double_type_size = 128; -#: config/rs6000/eabispe.h:45 config/rs6000/linuxspe.h:62 +#: cp/call.c:6492 #, gcc-internal-format -msgid "-m64 not supported in this configuration" +msgid "" +"invalid initialization of reference of type %qT from expression of type %qT" msgstr "" -#: config/rs6000/linux64.h:109 +#: cp/class.c:277 #, gcc-internal-format -msgid "-m64 requires a PowerPC64 cpu" +msgid "cannot convert from base %qT to derived type %qT via virtual base %qT" msgstr "" -#. Definitions for __builtin_return_address and __builtin_frame_address. -#. __builtin_return_address (0) should give link register (65), enable -#. this. -#. This should be uncommented, so that the link register is used, but -#. currently this would result in unmatched insns and spilling fixed -#. registers so we'll leave it for another day. When these problems are -#. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. -#. (mrs) -#. #define RETURN_ADDR_IN_PREVIOUS_FRAME -#. Number of bytes into the frame return addresses can be found. See -#. rs6000_stack_info in rs6000.c for more information on how the different -#. abi's store the return address. -#: config/rs6000/rs6000.h:1581 +#: cp/class.c:933 #, gcc-internal-format -msgid "RETURN_ADDRESS_OFFSET not supported" +msgid "Java class %qT cannot have a destructor" msgstr "" -#. Sometimes certain combinations of command options do not make sense -#. on a particular target machine. You can define a macro -#. `OVERRIDE_OPTIONS' to take account of this. This macro, if -#. defined, is executed once just after all the command options have -#. been parsed. -#. -#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to -#. get control. -#: config/rs6000/sysv4.h:130 +#: cp/class.c:935 #, gcc-internal-format -msgid "bad value for -mcall-%s" +msgid "Java class %qT cannot have an implicit non-trivial destructor" msgstr "" -#: config/rs6000/sysv4.h:146 +#: cp/class.c:1036 #, gcc-internal-format -msgid "bad value for -msdata=%s" +msgid "repeated using declaration %q+D" msgstr "" -#: config/rs6000/sysv4.h:163 +#: cp/class.c:1038 #, gcc-internal-format -msgid "-mrelocatable and -msdata=%s are incompatible" +msgid "using declaration %q+D conflicts with a previous using declaration" msgstr "" -#: config/rs6000/sysv4.h:172 +#: cp/class.c:1043 #, gcc-internal-format -msgid "-f%s and -msdata=%s are incompatible" +msgid "%q+#D cannot be overloaded" msgstr "" -#: config/rs6000/sysv4.h:181 +#: cp/class.c:1044 #, gcc-internal-format -msgid "-msdata=%s and -mcall-%s are incompatible" +msgid "with %q+#D" msgstr "" -#: config/rs6000/sysv4.h:190 +#: cp/class.c:1100 #, gcc-internal-format -msgid "-mrelocatable and -mno-minimal-toc are incompatible" +msgid "conflicting access specifications for method %q+D, ignored" msgstr "" -#: config/rs6000/sysv4.h:196 +#: cp/class.c:1103 #, gcc-internal-format -msgid "-mrelocatable and -mcall-%s are incompatible" +msgid "conflicting access specifications for field %qE, ignored" msgstr "" -#: config/rs6000/sysv4.h:203 +#: cp/class.c:1164 cp/class.c:1172 #, gcc-internal-format -msgid "-fPIC and -mcall-%s are incompatible" +msgid "%q+D invalid in %q#T" msgstr "" -#: config/rs6000/sysv4.h:210 +#: cp/class.c:1165 #, gcc-internal-format -msgid "-mcall-aixdesc must be big endian" +msgid " because of local method %q+#D with same name" msgstr "" -#: config/rs6000/sysv4.h:215 +#: cp/class.c:1173 #, gcc-internal-format -msgid "-msecure-plt not supported by your assembler" +msgid " because of local member %q+#D with same name" msgstr "" -#: config/rs6000/sysv4.h:230 +#: cp/class.c:1215 #, gcc-internal-format -msgid "-m%s not supported in this configuration" +msgid "base class %q#T has a non-virtual destructor" msgstr "" -#: config/s390/s390.c:1314 +#: cp/class.c:1529 #, gcc-internal-format -msgid "stack guard value must be an exact power of 2" +msgid "all member functions in class %qT are private" msgstr "" -#: config/s390/s390.c:1321 +#: cp/class.c:1540 #, gcc-internal-format -msgid "stack size must be an exact power of 2" +msgid "%q#T only defines a private destructor and has no friends" msgstr "" -#: config/s390/s390.c:1366 +#: cp/class.c:1583 #, gcc-internal-format -msgid "z/Architecture mode not supported on %s" +msgid "%q#T only defines private constructors and has no friends" msgstr "" -#: config/s390/s390.c:1368 +#: cp/class.c:1976 #, gcc-internal-format -msgid "64-bit ABI not supported in ESA/390 mode" +msgid "no unique final overrider for %qD in %qT" msgstr "" -#: config/s390/s390.c:1379 +#. Here we know it is a hider, and no overrider exists. +#: cp/class.c:2395 #, gcc-internal-format -msgid "" -"-mbackchain -mpacked-stack -mhard-float are not supported in combination" +msgid "%q+D was hidden" msgstr "" -#: config/s390/s390.c:1385 +#: cp/class.c:2396 #, gcc-internal-format -msgid "-mstack-size implies use of -mstack-guard" +msgid " by %q+D" msgstr "" -#: config/s390/s390.c:1387 +#: cp/class.c:2437 cp/decl2.c:1083 #, gcc-internal-format -msgid "stack size must be greater than the stack guard value" +msgid "%q+#D invalid; an anonymous union can only have non-static data members" msgstr "" -#: config/s390/s390.c:1390 +#: cp/class.c:2443 cp/decl2.c:1089 #, gcc-internal-format -msgid "-mstack-guard implies use of -mstack-size" +msgid "private member %q+#D in anonymous union" msgstr "" -#: config/s390/s390.c:6077 +#: cp/class.c:2445 cp/decl2.c:1091 #, gcc-internal-format -msgid "total size of local variables exceeds architecture limit" +msgid "protected member %q+#D in anonymous union" msgstr "" -#: config/s390/s390.c:6623 +#: cp/class.c:2611 #, gcc-internal-format -msgid "frame size of %qs is " +msgid "bit-field %q+#D with non-integral type" msgstr "" -#: config/s390/s390.c:6623 +#: cp/class.c:2628 #, gcc-internal-format -msgid " bytes" +msgid "bit-field %q+D width not an integer constant" msgstr "" -#: config/s390/s390.c:6627 +#: cp/class.c:2633 #, gcc-internal-format -msgid "%qs uses dynamic stack allocation" +msgid "negative width in bit-field %q+D" msgstr "" -#: config/sh/sh.c:6473 +#: cp/class.c:2638 #, gcc-internal-format -msgid "__builtin_saveregs not supported by this subtarget" +msgid "zero width for bit-field %q+D" msgstr "" -#: config/sh/sh.c:7522 +#: cp/class.c:2644 #, gcc-internal-format -msgid "attribute interrupt_handler is not compatible with -m5-compact" +msgid "width of %q+D exceeds its type" msgstr "" -#. The sp_switch attribute only has meaning for interrupt functions. -#. The trap_exit attribute only has meaning for interrupt functions. -#: config/sh/sh.c:7544 config/sh/sh.c:7579 +#: cp/class.c:2653 #, gcc-internal-format -msgid "%qs attribute only applies to interrupt functions" +msgid "%q+D is too small to hold all values of %q#T" msgstr "" -#. The argument must be a constant string. -#: config/sh/sh.c:7551 +#: cp/class.c:2712 #, gcc-internal-format -msgid "%qs attribute argument not a string constant" +msgid "member %q+#D with constructor not allowed in union" msgstr "" -#. The argument must be a constant integer. -#: config/sh/sh.c:7586 +#: cp/class.c:2715 #, gcc-internal-format -msgid "%qs attribute argument not an integer constant" +msgid "member %q+#D with destructor not allowed in union" msgstr "" -#: config/sh/sh.c:9602 +#: cp/class.c:2717 #, gcc-internal-format -msgid "r0 needs to be available as a call-clobbered register" +msgid "member %q+#D with copy assignment operator not allowed in union" msgstr "" -#: config/sh/sh.c:9623 +#: cp/class.c:2740 #, gcc-internal-format -msgid "Need a second call-clobbered general purpose register" +msgid "multiple fields in union %qT initialized" msgstr "" -#: config/sh/sh.c:9631 +#: cp/class.c:2802 #, gcc-internal-format -msgid "Need a call-clobbered target register" +msgid "ignoring packed attribute on unpacked non-POD field %q+#D" msgstr "" -#: config/sh/symbian.c:280 +#: cp/class.c:2862 #, gcc-internal-format -msgid "" -"failure in redeclaration of %q+D: dllimport'd symbol lacks external linkage" +msgid "%q+D may not be static because it is a member of a union" msgstr "" -#: config/sh/symbian.c:326 +#: cp/class.c:2867 #, gcc-internal-format -msgid "%s %q+D %s after being referenced with dllimport linkage" +msgid "%q+D may not have reference type %qT because it is a member of a union" msgstr "" -#: config/sh/symbian.c:892 cp/tree.c:2313 +#: cp/class.c:2876 #, gcc-internal-format -msgid "lang_* check: failed in %s, at %s:%d" +msgid "field %q+D in local class cannot be static" msgstr "" -#. FIXME -#: config/sh/netbsd-elf.h:95 +#: cp/class.c:2882 #, gcc-internal-format -msgid "unimplemented-shmedia profiling" +msgid "field %q+D invalidly declared function type" msgstr "" -#. There are no delay slots on SHmedia. -#. Relaxation isn't yet supported for SHmedia -#. After reload, if conversion does little good but can cause ICEs: - find_if_block doesn't do anything for SH because we don't have conditional execution patterns. (We use conditional move patterns, which are handled differently, and only before reload). - find_cond_trap doesn't do anything for the SH because we #. don't have conditional traps. - find_if_case_1 uses redirect_edge_and_branch_force in the only path that does an optimization, and this causes an ICE when branch targets are in registers. - find_if_case_2 doesn't do anything for the SHmedia after reload except when it can redirect a tablejump - and that's rather rare. -#. -fprofile-arcs needs a working libgcov . In unified tree configurations with newlib, this requires to configure with --with-newlib --with-headers. But there is no way to check here we have a working libgcov, so just assume that we have. -#: config/sh/sh.h:607 +#: cp/class.c:2888 #, gcc-internal-format -msgid "profiling is still experimental for this target" +msgid "field %q+D invalidly declared method type" msgstr "" -#: config/sparc/sparc.c:635 +#: cp/class.c:2920 #, gcc-internal-format -msgid "%s is not supported by this configuration" +msgid "non-static reference %q+#D in class without a constructor" msgstr "" -#: config/sparc/sparc.c:642 +#: cp/class.c:2967 #, gcc-internal-format -msgid "-mlong-double-64 not allowed with -m64" +msgid "non-static const member %q+#D in class without a constructor" msgstr "" -#: config/sparc/sparc.c:667 +#: cp/class.c:2982 #, gcc-internal-format -msgid "-mcmodel= is not supported on 32 bit systems" +msgid "field %q+#D with same name as class" msgstr "" -#: config/stormy16/stormy16.c:497 +#: cp/class.c:3015 #, gcc-internal-format -msgid "constant halfword load operand out of range" +msgid "%q#T has pointer data members" msgstr "" -#: config/stormy16/stormy16.c:507 +#: cp/class.c:3019 #, gcc-internal-format -msgid "constant arithmetic operand out of range" +msgid " but does not override %<%T(const %T&)%>" msgstr "" -#: config/stormy16/stormy16.c:1108 +#: cp/class.c:3021 #, gcc-internal-format -msgid "local variable memory requirements exceed capacity" +msgid " or %" msgstr "" -#: config/stormy16/stormy16.c:1274 +#: cp/class.c:3024 #, gcc-internal-format -msgid "function_profiler support" +msgid " but does not override %" msgstr "" -#: config/stormy16/stormy16.c:1363 +#: cp/class.c:3480 #, gcc-internal-format -msgid "cannot use va_start in interrupt function" +msgid "" +"offset of empty base %qT may not be ABI-compliant and maychange in a future " +"version of GCC" msgstr "" -#: config/stormy16/stormy16.c:1895 +#: cp/class.c:3592 #, gcc-internal-format -msgid "switch statement of size %lu entries too large" +msgid "class %qT will be considered nearly empty in a future version of GCC" msgstr "" -#: config/stormy16/stormy16.c:2263 +#: cp/class.c:3674 #, gcc-internal-format -msgid "%<__BELOW100__%> attribute only applies to variables" +msgid "initializer specified for non-virtual method %q+D" msgstr "" -#: config/stormy16/stormy16.c:2270 +#: cp/class.c:4336 #, gcc-internal-format -msgid "__BELOW100__ attribute not allowed with auto storage class" +msgid "" +"offset of virtual base %qT is not ABI-compliant and may change in a future " +"version of GCC" msgstr "" -#: config/v850/v850-c.c:67 +#: cp/class.c:4435 #, gcc-internal-format -msgid "#pragma GHS endXXXX found without previous startXXX" +msgid "direct base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: config/v850/v850-c.c:70 +#: cp/class.c:4447 #, gcc-internal-format -msgid "#pragma GHS endXXX does not match previous startXXX" +msgid "virtual base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: config/v850/v850-c.c:96 +#: cp/class.c:4624 #, gcc-internal-format -msgid "cannot set interrupt attribute: no current function" +msgid "" +"size assigned to %qT may not be ABI-compliant and may change in a future " +"version of GCC" msgstr "" -#: config/v850/v850-c.c:104 +#. Versions of G++ before G++ 3.4 did not reset the +#. DECL_MODE. +#: cp/class.c:4663 #, gcc-internal-format -msgid "cannot set interrupt attribute: no such identifier" +msgid "" +"the offset of %qD may not be ABI-compliant and may change in a future " +"version of GCC" msgstr "" -#: config/v850/v850-c.c:149 +#: cp/class.c:4691 #, gcc-internal-format -msgid "junk at end of #pragma ghs section" +msgid "" +"offset of %q+D is not ABI-compliant and may change in a future version of GCC" msgstr "" -#: config/v850/v850-c.c:166 +#: cp/class.c:4700 #, gcc-internal-format -msgid "unrecognized section name \"%s\"" +msgid "" +"%q+D contains empty classes which may cause base classes to be placed at " +"different locations in a future version of GCC" msgstr "" -#: config/v850/v850-c.c:181 +#: cp/class.c:4759 #, gcc-internal-format -msgid "malformed #pragma ghs section" +msgid "" +"layout of classes derived from empty class %qT may change in a future " +"version of GCC" msgstr "" -#: config/v850/v850-c.c:200 +#: cp/class.c:4905 cp/parser.c:13111 #, gcc-internal-format -msgid "junk at end of #pragma ghs interrupt" +msgid "redefinition of %q#T" msgstr "" -#: config/v850/v850-c.c:211 +#: cp/class.c:5055 #, gcc-internal-format -msgid "junk at end of #pragma ghs starttda" +msgid "%q#T has virtual functions but non-virtual destructor" msgstr "" -#: config/v850/v850-c.c:222 +#: cp/class.c:5157 #, gcc-internal-format -msgid "junk at end of #pragma ghs startsda" +msgid "trying to finish struct, but kicked out due to previous parse errors" msgstr "" -#: config/v850/v850-c.c:233 +#: cp/class.c:5574 #, gcc-internal-format -msgid "junk at end of #pragma ghs startzda" +msgid "language string %<\"%E\"%> not recognized" msgstr "" -#: config/v850/v850-c.c:244 +#: cp/class.c:5660 #, gcc-internal-format -msgid "junk at end of #pragma ghs endtda" +msgid "cannot resolve overloaded function %qD based on conversion to type %qT" msgstr "" -#: config/v850/v850-c.c:255 +#: cp/class.c:5787 #, gcc-internal-format -msgid "junk at end of #pragma ghs endsda" +msgid "no matches converting function %qD to type %q#T" msgstr "" -#: config/v850/v850-c.c:266 +#: cp/class.c:5810 #, gcc-internal-format -msgid "junk at end of #pragma ghs endzda" +msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "" -#: config/v850/v850.c:172 +#: cp/class.c:5836 #, gcc-internal-format -msgid "value passed to %<-m%s%> is too large" +msgid "assuming pointer to member %qD" msgstr "" -#: config/v850/v850.c:2147 +#: cp/class.c:5839 #, gcc-internal-format -msgid "%Jdata area attributes cannot be specified for local variables" +msgid "(a pointer to member can only be formed with %<&%E%>)" msgstr "" -#: config/v850/v850.c:2158 +#: cp/class.c:5884 cp/class.c:5915 cp/class.c:6067 cp/class.c:6074 #, gcc-internal-format -msgid "data area of %q+D conflicts with previous declaration" +msgid "not enough type information" msgstr "" -#: config/v850/v850.c:2288 +#: cp/class.c:5901 #, gcc-internal-format -msgid "bogus JR construction: %d" +msgid "argument of type %qT does not match %qT" msgstr "" -#: config/v850/v850.c:2306 config/v850/v850.c:2415 +#: cp/class.c:6051 #, gcc-internal-format -msgid "bad amount of stack space removal: %d" +msgid "invalid operation on uninstantiated type" msgstr "" -#: config/v850/v850.c:2395 +#. [basic.scope.class] +#. +#. A name N used in a class S shall refer to the same declaration +#. in its context and when re-evaluated in the completed scope of +#. S. +#: cp/class.c:6288 cp/decl.c:1136 cp/name-lookup.c:508 #, gcc-internal-format -msgid "bogus JARL construction: %d\n" +msgid "declaration of %q#D" msgstr "" -#: config/v850/v850.c:2694 +#: cp/class.c:6289 #, gcc-internal-format -msgid "bogus DISPOSE construction: %d" +msgid "changes meaning of %qD from %q+#D" msgstr "" -#: config/v850/v850.c:2713 +#: cp/cp-gimplify.c:120 #, gcc-internal-format -msgid "too much stack space to dispose of: %d" +msgid "continue statement not within loop or switch" msgstr "" -#: config/v850/v850.c:2815 +#: cp/cp-gimplify.c:365 #, gcc-internal-format -msgid "bogus PREPEARE construction: %d" +msgid "statement with no effect" msgstr "" -#: config/v850/v850.c:2834 +#: cp/cvt.c:91 #, gcc-internal-format -msgid "too much stack space to prepare: %d" +msgid "can't convert from incomplete type %qT to %qT" msgstr "" -#: config/xtensa/xtensa.c:1505 +#: cp/cvt.c:100 #, gcc-internal-format -msgid "boolean registers required for the floating-point option" +msgid "conversion of %qE from %qT to %qT is ambiguous" msgstr "" -#: config/xtensa/xtensa.c:1551 +#: cp/cvt.c:169 cp/cvt.c:238 cp/cvt.c:285 #, gcc-internal-format -msgid "-f%s is not supported with CONST16 instructions" +msgid "cannot convert %qE from type %qT to type %qT" msgstr "" -#: config/xtensa/xtensa.c:1556 +#: cp/cvt.c:198 cp/cvt.c:202 #, gcc-internal-format -msgid "PIC is required but not supported with CONST16 instructions" +msgid "pointer to member cast from %qT to %qT is via virtual base" msgstr "" -#: config/xtensa/xtensa.c:2414 +#: cp/cvt.c:498 #, gcc-internal-format -msgid "only uninitialized variables can be placed in a .bss section" +msgid "conversion from %qT to %qT discards qualifiers" msgstr "" -#: ada/misc.c:262 +#: cp/cvt.c:516 cp/typeck.c:4960 #, gcc-internal-format -msgid "missing argument to \"-%s\"" +msgid "casting %qT to %qT does not dereference pointer" msgstr "" -#: ada/misc.c:303 +#: cp/cvt.c:543 #, gcc-internal-format -msgid "%<-gnat%> misspelled as %<-gant%>" +msgid "cannot convert type %qT to type %qT" msgstr "" -#: cp/call.c:289 +#: cp/cvt.c:679 #, gcc-internal-format -msgid "unable to call pointer to member function here" +msgid "conversion from %q#T to %q#T" msgstr "" -#: cp/call.c:2392 +#: cp/cvt.c:691 cp/cvt.c:711 #, gcc-internal-format -msgid "%s %D(%T, %T, %T) " +msgid "%q#T used where a %qT was expected" msgstr "" -#: cp/call.c:2397 +#: cp/cvt.c:726 #, gcc-internal-format -msgid "%s %D(%T, %T) " +msgid "%q#T used where a floating point value was expected" msgstr "" -#: cp/call.c:2401 +#: cp/cvt.c:773 #, gcc-internal-format -msgid "%s %D(%T) " +msgid "conversion from %qT to non-scalar type %qT requested" msgstr "" -#: cp/call.c:2405 +#: cp/cvt.c:807 #, gcc-internal-format -msgid "%s %T " +msgid "pseudo-destructor is not called" msgstr "" -#: cp/call.c:2407 +#: cp/cvt.c:866 #, gcc-internal-format -msgid "%s %+#D " +msgid "object of incomplete type %qT will not be accessed in %s" msgstr "" -#: cp/call.c:2409 cp/pt.c:1306 +#: cp/cvt.c:869 #, gcc-internal-format -msgid "%s %+#D" +msgid "object of type %qT will not be accessed in %s" msgstr "" -#: cp/call.c:2631 +#: cp/cvt.c:885 #, gcc-internal-format -msgid "conversion from %qT to %qT is ambiguous" +msgid "object %qE of incomplete type %qT will not be accessed in %s" msgstr "" -#: cp/call.c:2782 cp/call.c:2800 cp/call.c:2858 +#. [over.over] enumerates the places where we can take the address +#. of an overloaded function, and this is not one of them. +#: cp/cvt.c:901 #, gcc-internal-format -msgid "no matching function for call to %<%D(%A)%>" +msgid "%s cannot resolve address of overloaded function" msgstr "" -#: cp/call.c:2803 cp/call.c:2861 +#. Only warn when there is no &. +#: cp/cvt.c:907 #, gcc-internal-format -msgid "call of overloaded %<%D(%A)%> is ambiguous" +msgid "%s is a reference, not call, to function %qE" msgstr "" -#. It's no good looking for an overloaded operator() on a -#. pointer-to-member-function. -#: cp/call.c:2929 +#: cp/cvt.c:921 #, gcc-internal-format -msgid "" -"pointer-to-member function %E cannot be called without an object; consider " -"using .* or ->*" +msgid "%s has no effect" msgstr "" -#: cp/call.c:2998 +#: cp/cvt.c:953 #, gcc-internal-format -msgid "no match for call to %<(%T) (%A)%>" +msgid "value computed is not used" msgstr "" -#: cp/call.c:3007 +#: cp/cvt.c:1061 #, gcc-internal-format -msgid "call of %<(%T) (%A)%> is ambiguous" +msgid "converting NULL to non-pointer type" msgstr "" -#: cp/call.c:3045 +#: cp/cvt.c:1134 #, gcc-internal-format -msgid "%s for ternary % in %<%E ? %E : %E%>" +msgid "ambiguous default type conversion from %qT" msgstr "" -#: cp/call.c:3051 +#: cp/cvt.c:1136 #, gcc-internal-format -msgid "%s for % in %<%E%s%>" +msgid " candidate conversions include %qD and %qD" msgstr "" -#: cp/call.c:3055 +#: cp/decl.c:1003 #, gcc-internal-format -msgid "%s for % in %<%E[%E]%>" +msgid "%qD was declared % and later %" msgstr "" -#: cp/call.c:3060 +#: cp/decl.c:1004 cp/decl.c:1508 objc/objc-act.c:2920 objc/objc-act.c:7487 #, gcc-internal-format -msgid "%s for %qs in %<%s %E%>" +msgid "previous declaration of %q+D" msgstr "" -#: cp/call.c:3065 +#: cp/decl.c:1037 #, gcc-internal-format -msgid "%s for % in %<%E %s %E%>" +msgid "declaration of %qF throws different exceptions" msgstr "" -#: cp/call.c:3068 +#: cp/decl.c:1038 #, gcc-internal-format -msgid "%s for % in %<%s%E%>" +msgid "from previous declaration %q+F" msgstr "" -#: cp/call.c:3160 +#: cp/decl.c:1089 #, gcc-internal-format -msgid "ISO C++ forbids omitting the middle term of a ?: expression" +msgid "function %q+D redeclared as inline" msgstr "" -#: cp/call.c:3237 +#: cp/decl.c:1091 #, gcc-internal-format -msgid "%qE has type % and is not a throw-expression" +msgid "previous declaration of %q+D with attribute noinline" msgstr "" -#: cp/call.c:3276 cp/call.c:3486 +#: cp/decl.c:1098 #, gcc-internal-format -msgid "operands to ?: have different types" +msgid "function %q+D redeclared with attribute noinline" msgstr "" -#: cp/call.c:3440 +#: cp/decl.c:1100 #, gcc-internal-format -msgid "enumeral mismatch in conditional expression: %qT vs %qT" +msgid "previous declaration of %q+D was inline" msgstr "" -#: cp/call.c:3447 +#: cp/decl.c:1123 cp/decl.c:1196 #, gcc-internal-format -msgid "enumeral and non-enumeral type in conditional expression" +msgid "shadowing %s function %q#D" msgstr "" -#: cp/call.c:3741 +#: cp/decl.c:1132 #, gcc-internal-format -msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead" +msgid "library function %q#D redeclared as non-function %q#D" msgstr "" -#: cp/call.c:3814 +#: cp/decl.c:1137 #, gcc-internal-format -msgid "comparison between %q#T and %q#T" +msgid "conflicts with built-in declaration %q#D" msgstr "" -#: cp/call.c:4073 +#: cp/decl.c:1191 cp/decl.c:1300 cp/decl.c:1316 #, gcc-internal-format -msgid "no suitable % for %qT" +msgid "new declaration %q#D" msgstr "" -#: cp/call.c:4090 +#: cp/decl.c:1192 #, gcc-internal-format -msgid "%q+#D is private" +msgid "ambiguates built-in declaration %q#D" msgstr "" -#: cp/call.c:4092 +#: cp/decl.c:1264 #, gcc-internal-format -msgid "%q+#D is protected" +msgid "%q#D redeclared as different kind of symbol" msgstr "" -#: cp/call.c:4094 +#: cp/decl.c:1267 #, gcc-internal-format -msgid "%q+#D is inaccessible" +msgid "previous declaration of %q+#D" msgstr "" -#: cp/call.c:4095 +#: cp/decl.c:1286 #, gcc-internal-format -msgid "within this context" +msgid "declaration of template %q#D" msgstr "" -#: cp/call.c:4184 cp/cvt.c:264 +#: cp/decl.c:1287 cp/name-lookup.c:509 #, gcc-internal-format -msgid "invalid conversion from %qT to %qT" +msgid "conflicts with previous declaration %q+#D" msgstr "" -#: cp/call.c:4186 +#: cp/decl.c:1301 cp/decl.c:1317 #, gcc-internal-format -msgid " initializing argument %P of %qD" +msgid "ambiguates old declaration %q+#D" msgstr "" -#: cp/call.c:4198 +#: cp/decl.c:1309 #, gcc-internal-format -msgid "passing NULL to non-pointer argument %P of %qD" +msgid "declaration of C function %q#D conflicts with" msgstr "" -#: cp/call.c:4201 +#: cp/decl.c:1311 #, gcc-internal-format -msgid "converting to non-pointer type %qT from NULL" +msgid "previous declaration %q+#D here" msgstr "" -#: cp/call.c:4209 +#: cp/decl.c:1324 #, gcc-internal-format -msgid "passing %qT for argument %P to %qD" +msgid "conflicting declaration %q#D" msgstr "" -#: cp/call.c:4212 +#: cp/decl.c:1325 #, gcc-internal-format -msgid "converting to %qT from %qT" +msgid "%q+D has a previous declaration as %q#D" msgstr "" -#: cp/call.c:4221 +#. [namespace.alias] +#. +#. A namespace-name or namespace-alias shall not be declared as +#. the name of any other entity in the same declarative region. +#. A namespace-name defined at global scope shall not be +#. declared as the name of any other entity in any global scope +#. of the program. +#: cp/decl.c:1377 #, gcc-internal-format -msgid "passing negative value %qE for argument %P to %qD" +msgid "declaration of namespace %qD conflicts with" msgstr "" -#: cp/call.c:4224 +#: cp/decl.c:1378 #, gcc-internal-format -msgid "converting negative value %qE to %qT" +msgid "previous declaration of namespace %q+D here" msgstr "" -#: cp/call.c:4366 +#: cp/decl.c:1389 #, gcc-internal-format -msgid "cannot bind bitfield %qE to %qT" +msgid "%q+#D previously defined here" msgstr "" -#: cp/call.c:4369 cp/call.c:4385 +#: cp/decl.c:1390 #, gcc-internal-format -msgid "cannot bind packed field %qE to %qT" +msgid "%q+#D previously declared here" msgstr "" -#: cp/call.c:4372 +#. Prototype decl follows defn w/o prototype. +#: cp/decl.c:1399 #, gcc-internal-format -msgid "cannot bind rvalue %qE to %qT" +msgid "prototype for %q+#D" msgstr "" -#: cp/call.c:4481 +#: cp/decl.c:1400 #, gcc-internal-format -msgid "" -"cannot pass objects of non-POD type %q#T through %<...%>; call will abort at " -"runtime" +msgid "%Jfollows non-prototype definition here" msgstr "" -#. Undefined behavior [expr.call] 5.2.2/7. -#: cp/call.c:4507 +#: cp/decl.c:1412 #, gcc-internal-format -msgid "" -"cannot receive objects of non-POD type %q#T through %<...%>; call will abort " -"at runtime" +msgid "previous declaration of %q+#D with %qL linkage" msgstr "" -#: cp/call.c:4550 +#: cp/decl.c:1414 #, gcc-internal-format -msgid "the default argument for parameter %d of %qD has not yet been parsed" +msgid "conflicts with new declaration with %qL linkage" msgstr "" -#: cp/call.c:4629 +#: cp/decl.c:1437 cp/decl.c:1443 #, gcc-internal-format -msgid "argument of function call might be a candidate for a format attribute" +msgid "default argument given for parameter %d of %q#D" msgstr "" -#: cp/call.c:4766 +#: cp/decl.c:1439 cp/decl.c:1445 #, gcc-internal-format -msgid "passing %qT as % argument of %q#D discards qualifiers" +msgid "after previous specification in %q+#D" msgstr "" -#: cp/call.c:4785 +#: cp/decl.c:1454 #, gcc-internal-format -msgid "%qT is not an accessible base of %qT" +msgid "%q#D was used before it was declared inline" msgstr "" -#: cp/call.c:5035 +#: cp/decl.c:1455 #, gcc-internal-format -msgid "could not find class$ field in java interface type %qT" +msgid "%Jprevious non-inline declaration here" msgstr "" -#: cp/call.c:5295 +#: cp/decl.c:1507 #, gcc-internal-format -msgid "call to non-function %qD" +msgid "redundant redeclaration of %qD in same scope" msgstr "" -#: cp/call.c:5320 +#. From [temp.expl.spec]: +#. +#. If a template, a member template or the member of a class +#. template is explicitly specialized then that +#. specialization shall be declared before the first use of +#. that specialization that would cause an implicit +#. instantiation to take place, in every translation unit in +#. which such a use occurs. +#: cp/decl.c:1756 #, gcc-internal-format -msgid "request for member %qD in %qE, which is of non-aggregate type %qT" +msgid "explicit specialization of %qD after first use" msgstr "" -#: cp/call.c:5399 +#: cp/decl.c:1835 #, gcc-internal-format -msgid "no matching function for call to %<%T::%s(%A)%#V%>" +msgid "%q+D: visibility attribute ignored because it" msgstr "" -#: cp/call.c:5417 +#: cp/decl.c:1837 #, gcc-internal-format -msgid "call of overloaded %<%s(%A)%> is ambiguous" +msgid "%Jconflicts with previous declaration here" msgstr "" -#: cp/call.c:5441 +#: cp/decl.c:2227 cp/decl.c:2249 #, gcc-internal-format -msgid "cannot call member function %qD without object" +msgid "jump to label %qD" msgstr "" -#: cp/call.c:6046 +#: cp/decl.c:2229 cp/decl.c:2251 #, gcc-internal-format -msgid "passing %qT chooses %qT over %qT" +msgid "jump to case label" msgstr "" -#: cp/call.c:6048 cp/name-lookup.c:4225 +#: cp/decl.c:2232 cp/decl.c:2254 #, gcc-internal-format -msgid " in call to %qD" +msgid "%H from here" msgstr "" -#: cp/call.c:6105 +#: cp/decl.c:2237 #, gcc-internal-format -msgid "choosing %qD over %qD" +msgid " crosses initialization of %q+#D" msgstr "" -#: cp/call.c:6106 +#: cp/decl.c:2239 cp/decl.c:2353 #, gcc-internal-format -msgid " for conversion from %qT to %qT" +msgid " enters scope of non-POD %q+#D" msgstr "" -#: cp/call.c:6108 +#: cp/decl.c:2258 cp/decl.c:2357 #, gcc-internal-format -msgid " because conversion sequence for the argument is better" +msgid " enters try block" msgstr "" -#: cp/call.c:6228 +#: cp/decl.c:2260 cp/decl.c:2359 #, gcc-internal-format -msgid "" -"ISO C++ says that these are ambiguous, even though the worst conversion for " -"the first is better than the worst conversion for the second:" +msgid " enters catch block" msgstr "" -#: cp/call.c:6372 +#: cp/decl.c:2337 #, gcc-internal-format -msgid "could not convert %qE to %qT" +msgid "jump to label %q+D" msgstr "" -#: cp/call.c:6504 +#: cp/decl.c:2338 #, gcc-internal-format -msgid "" -"invalid initialization of non-const reference of type %qT from a temporary " -"of type %qT" +msgid " from here" msgstr "" -#: cp/call.c:6508 +#. Can't skip init of __exception_info. +#: cp/decl.c:2349 #, gcc-internal-format -msgid "" -"invalid initialization of reference of type %qT from expression of type %qT" +msgid "%J enters catch block" msgstr "" -#: cp/class.c:274 +#: cp/decl.c:2351 #, gcc-internal-format -msgid "cannot convert from base %qT to derived type %qT via virtual base %qT" +msgid " skips initialization of %q+#D" msgstr "" -#: cp/class.c:931 +#: cp/decl.c:2385 #, gcc-internal-format -msgid "Java class %qT cannot have a destructor" +msgid "label named wchar_t" msgstr "" -#: cp/class.c:933 +#: cp/decl.c:2388 #, gcc-internal-format -msgid "Java class %qT cannot have an implicit non-trivial destructor" +msgid "duplicate label %qD" msgstr "" -#: cp/class.c:1034 +#: cp/decl.c:2644 cp/parser.c:3636 #, gcc-internal-format -msgid "repeated using declaration %q+D" +msgid "%qD used without template parameters" msgstr "" -#: cp/class.c:1036 +#: cp/decl.c:2661 cp/decl.c:2752 #, gcc-internal-format -msgid "using declaration %q+D conflicts with a previous using declaration" +msgid "no class template named %q#T in %q#T" msgstr "" -#: cp/class.c:1041 +#: cp/decl.c:2682 cp/decl.c:2692 cp/decl.c:2712 #, gcc-internal-format -msgid "%q+#D cannot be overloaded" +msgid "no type named %q#T in %q#T" msgstr "" -#: cp/class.c:1042 +#: cp/decl.c:2761 #, gcc-internal-format -msgid "with %q+#D" +msgid "template parameters do not match template" msgstr "" -#: cp/class.c:1097 +#: cp/decl.c:2762 cp/friend.c:317 cp/friend.c:325 #, gcc-internal-format -msgid "conflicting access specifications for method %q+D, ignored" +msgid "%q+D declared here" msgstr "" -#: cp/class.c:1100 +#: cp/decl.c:3435 #, gcc-internal-format -msgid "conflicting access specifications for field %qE, ignored" +msgid "%Jan anonymous union cannot have function members" msgstr "" -#: cp/class.c:1161 cp/class.c:1169 +#: cp/decl.c:3453 #, gcc-internal-format -msgid "%q+D invalid in %q#T" +msgid "member %q+#D with constructor not allowed in anonymous aggregate" msgstr "" -#: cp/class.c:1162 +#: cp/decl.c:3456 #, gcc-internal-format -msgid " because of local method %q+#D with same name" +msgid "member %q+#D with destructor not allowed in anonymous aggregate" msgstr "" -#: cp/class.c:1170 +#: cp/decl.c:3459 #, gcc-internal-format -msgid " because of local member %q+#D with same name" +msgid "" +"member %q+#D with copy assignment operator not allowed in anonymous aggregate" msgstr "" -#: cp/class.c:1212 +#: cp/decl.c:3484 #, gcc-internal-format -msgid "base class %q#T has a non-virtual destructor" +msgid "multiple types in one declaration" msgstr "" -#: cp/class.c:1526 +#: cp/decl.c:3488 #, gcc-internal-format -msgid "all member functions in class %qT are private" +msgid "redeclaration of C++ built-in type %qT" msgstr "" -#: cp/class.c:1537 +#: cp/decl.c:3525 #, gcc-internal-format -msgid "%q#T only defines a private destructor and has no friends" +msgid "missing type-name in typedef-declaration" msgstr "" -#: cp/class.c:1577 +#: cp/decl.c:3533 #, gcc-internal-format -msgid "%q#T only defines private constructors and has no friends" +msgid "ISO C++ prohibits anonymous structs" msgstr "" -#: cp/class.c:1910 +#: cp/decl.c:3540 #, gcc-internal-format -msgid "no unique final overrider for %qD in %qT" +msgid "%qs can only be specified for functions" msgstr "" -#. Here we know it is a hider, and no overrider exists. -#: cp/class.c:2388 +#: cp/decl.c:3546 #, gcc-internal-format -msgid "%q+D was hidden" +msgid "% can only be specified inside a class" msgstr "" -#: cp/class.c:2389 +#: cp/decl.c:3548 #, gcc-internal-format -msgid " by %q+D" +msgid "% can only be specified for constructors" msgstr "" -#: cp/class.c:2430 cp/decl2.c:1085 +#: cp/decl.c:3550 #, gcc-internal-format -msgid "%q+#D invalid; an anonymous union can only have non-static data members" +msgid "a storage class can only be specified for objects and functions" msgstr "" -#: cp/class.c:2436 cp/decl2.c:1091 +#: cp/decl.c:3556 #, gcc-internal-format -msgid "private member %q+#D in anonymous union" +msgid "qualifiers can only be specified for objects and functions" msgstr "" -#: cp/class.c:2438 cp/decl2.c:1093 +#: cp/decl.c:3586 #, gcc-internal-format -msgid "protected member %q+#D in anonymous union" +msgid "attribute ignored in declaration of %q+#T" msgstr "" -#: cp/class.c:2604 +#: cp/decl.c:3587 #, gcc-internal-format -msgid "bit-field %q+#D with non-integral type" +msgid "attribute for %q+#T must follow the %qs keyword" msgstr "" -#: cp/class.c:2621 +#: cp/decl.c:3707 #, gcc-internal-format -msgid "bit-field %q+D width not an integer constant" +msgid "function %q#D is initialized like a variable" msgstr "" -#: cp/class.c:2626 +#: cp/decl.c:3719 #, gcc-internal-format -msgid "negative width in bit-field %q+D" +msgid "declaration of %q#D has % and is initialized" msgstr "" -#: cp/class.c:2631 +#: cp/decl.c:3749 #, gcc-internal-format -msgid "zero width for bit-field %q+D" +msgid "%q#D is not a static member of %q#T" msgstr "" -#: cp/class.c:2637 +#: cp/decl.c:3755 #, gcc-internal-format -msgid "width of %q+D exceeds its type" +msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" msgstr "" -#: cp/class.c:2646 +#: cp/decl.c:3764 #, gcc-internal-format -msgid "%q+D is too small to hold all values of %q#T" +msgid "" +"template header not allowed in member definition of explicitly specialized " +"class" msgstr "" -#: cp/class.c:2705 +#: cp/decl.c:3773 #, gcc-internal-format -msgid "member %q+#D with constructor not allowed in union" +msgid "duplicate initialization of %qD" msgstr "" -#: cp/class.c:2708 +#: cp/decl.c:3812 #, gcc-internal-format -msgid "member %q+#D with destructor not allowed in union" +msgid "declaration of %q#D outside of class is not definition" msgstr "" -#: cp/class.c:2710 +#: cp/decl.c:3861 #, gcc-internal-format -msgid "member %q+#D with copy assignment operator not allowed in union" +msgid "variable %q#D has initializer but incomplete type" msgstr "" -#: cp/class.c:2733 +#: cp/decl.c:3868 cp/decl.c:4564 #, gcc-internal-format -msgid "multiple fields in union %qT initialized" +msgid "elements of array %q#D have incomplete type" msgstr "" -#: cp/class.c:2795 +#: cp/decl.c:3884 #, gcc-internal-format -msgid "ignoring packed attribute on unpacked non-POD field %q+#D" +msgid "aggregate %q#D has incomplete type and cannot be defined" msgstr "" -#: cp/class.c:2855 +#: cp/decl.c:3934 #, gcc-internal-format -msgid "%q+D may not be static because it is a member of a union" +msgid "%qD declared as reference but not initialized" msgstr "" -#: cp/class.c:2860 +#: cp/decl.c:3940 #, gcc-internal-format -msgid "%q+D may not have reference type %qT because it is a member of a union" +msgid "ISO C++ forbids use of initializer list to initialize reference %qD" msgstr "" -#: cp/class.c:2869 +#: cp/decl.c:3966 #, gcc-internal-format -msgid "field %q+D in local class cannot be static" +msgid "cannot initialize %qT from %qT" msgstr "" -#: cp/class.c:2875 +#: cp/decl.c:3999 #, gcc-internal-format -msgid "field %q+D invalidly declared function type" +msgid "initializer fails to determine size of %qD" msgstr "" -#: cp/class.c:2881 +#: cp/decl.c:4004 #, gcc-internal-format -msgid "field %q+D invalidly declared method type" +msgid "array size missing in %qD" msgstr "" -#: cp/class.c:2913 +#: cp/decl.c:4014 #, gcc-internal-format -msgid "non-static reference %q+#D in class without a constructor" +msgid "zero-size array %qD" msgstr "" -#: cp/class.c:2960 +#. An automatic variable with an incomplete type: that is an error. +#. Don't talk about array types here, since we took care of that +#. message in grokdeclarator. +#: cp/decl.c:4050 #, gcc-internal-format -msgid "non-static const member %q+#D in class without a constructor" +msgid "storage size of %qD isn't known" msgstr "" -#: cp/class.c:2975 +#: cp/decl.c:4072 #, gcc-internal-format -msgid "field %q+#D with same name as class" +msgid "storage size of %qD isn't constant" msgstr "" -#: cp/class.c:3008 +#: cp/decl.c:4127 #, gcc-internal-format -msgid "%q#T has pointer data members" +msgid "" +"sorry: semantics of inline function static data %q+#D are wrong (you'll wind " +"up with multiple copies)" msgstr "" -#: cp/class.c:3012 +#: cp/decl.c:4130 #, gcc-internal-format -msgid " but does not override %<%T(const %T&)%>" +msgid "%J you can work around this by removing the initializer" msgstr "" -#: cp/class.c:3014 +#: cp/decl.c:4157 #, gcc-internal-format -msgid " or %" +msgid "uninitialized const %qD" msgstr "" -#: cp/class.c:3017 +#: cp/decl.c:4228 #, gcc-internal-format -msgid " but does not override %" +msgid "name %qD used in a GNU-style designated initializer for an array" msgstr "" -#: cp/class.c:3450 +#: cp/decl.c:4275 #, gcc-internal-format -msgid "" -"offset of empty base %qT may not be ABI-compliant and maychange in a future " -"version of GCC" +msgid "invalid type %qT as initializer for a vector of type %qT" msgstr "" -#: cp/class.c:3562 +#: cp/decl.c:4317 #, gcc-internal-format -msgid "class %qT will be considered nearly empty in a future version of GCC" +msgid "initializer for %qT must be brace-enclosed" msgstr "" -#: cp/class.c:3644 +#: cp/decl.c:4332 #, gcc-internal-format -msgid "initializer specified for non-virtual method %q+D" +msgid "ISO C++ does not allow designated initializers" msgstr "" -#: cp/class.c:4306 +#: cp/decl.c:4337 #, gcc-internal-format -msgid "" -"offset of virtual base %qT is not ABI-compliant and may change in a future " -"version of GCC" +msgid "%qT has no non-static data member named %qD" msgstr "" -#: cp/class.c:4405 +#: cp/decl.c:4386 #, gcc-internal-format -msgid "direct base %qT inaccessible in %qT due to ambiguity" +msgid "braces around scalar initializer for type %qT" msgstr "" -#: cp/class.c:4417 +#: cp/decl.c:4464 #, gcc-internal-format -msgid "virtual base %qT inaccessible in %qT due to ambiguity" +msgid "missing braces around initializer for %qT" msgstr "" -#: cp/class.c:4594 +#: cp/decl.c:4520 #, gcc-internal-format -msgid "" -"size assigned to %qT may not be ABI-compliant and may change in a future " -"version of GCC" +msgid "too many initializers for %qT" msgstr "" -#. Versions of G++ before G++ 3.4 did not reset the -#. DECL_MODE. -#: cp/class.c:4633 +#: cp/decl.c:4558 #, gcc-internal-format -msgid "" -"the offset of %qD may not be ABI-compliant and may change in a future " -"version of GCC" +msgid "variable-sized object %qD may not be initialized" msgstr "" -#: cp/class.c:4661 +#: cp/decl.c:4569 #, gcc-internal-format -msgid "" -"offset of %q+D is not ABI-compliant and may change in a future version of GCC" +msgid "%qD has incomplete type" msgstr "" -#: cp/class.c:4670 +#: cp/decl.c:4616 #, gcc-internal-format -msgid "" -"%q+D contains empty classes which may cause base classes to be placed at " -"different locations in a future version of GCC" +msgid "%qD must be initialized by constructor, not by %<{...}%>" msgstr "" -#: cp/class.c:4729 +#: cp/decl.c:4652 #, gcc-internal-format -msgid "" -"layout of classes derived from empty class %qT may change in a future " -"version of GCC" +msgid "array %qD initialized by parenthesized string literal %qE" msgstr "" -#: cp/class.c:4870 cp/parser.c:13057 +#: cp/decl.c:4667 #, gcc-internal-format -msgid "redefinition of %q#T" +msgid "structure %qD with uninitialized const members" msgstr "" -#: cp/class.c:5020 +#: cp/decl.c:4669 #, gcc-internal-format -msgid "%q#T has virtual functions but non-virtual destructor" +msgid "structure %qD with uninitialized reference members" msgstr "" -#: cp/class.c:5117 +#: cp/decl.c:4871 #, gcc-internal-format -msgid "trying to finish struct, but kicked out due to previous parse errors" +msgid "assignment (not initialization) in declaration" msgstr "" -#: cp/class.c:5533 +#: cp/decl.c:4888 #, gcc-internal-format -msgid "language string %<\"%E\"%> not recognized" +msgid "cannot initialize %qD to namespace %qD" msgstr "" -#: cp/class.c:5619 +#: cp/decl.c:4929 #, gcc-internal-format -msgid "cannot resolve overloaded function %qD based on conversion to type %qT" +msgid "shadowing previous type declaration of %q#D" msgstr "" -#: cp/class.c:5746 +#: cp/decl.c:4959 #, gcc-internal-format -msgid "no matches converting function %qD to type %q#T" +msgid "%qD cannot be thread-local because it has non-POD type %qT" msgstr "" -#: cp/class.c:5769 +#: cp/decl.c:4976 #, gcc-internal-format -msgid "converting overloaded function %qD to type %q#T is ambiguous" +msgid "%qD is thread-local and so cannot be dynamically initialized" msgstr "" -#: cp/class.c:5795 +#: cp/decl.c:4994 #, gcc-internal-format -msgid "assuming pointer to member %qD" +msgid "" +"%qD cannot be initialized by a non-constant expression when being declared" msgstr "" -#: cp/class.c:5798 +#: cp/decl.c:5584 #, gcc-internal-format -msgid "(a pointer to member can only be formed with %<&%E%>)" +msgid "destructor for alien class %qT cannot be a member" msgstr "" -#: cp/class.c:5843 cp/class.c:5874 cp/class.c:6026 cp/class.c:6033 +#: cp/decl.c:5586 #, gcc-internal-format -msgid "not enough type information" +msgid "constructor for alien class %qT cannot be a member" msgstr "" -#: cp/class.c:5860 +#: cp/decl.c:5607 #, gcc-internal-format -msgid "argument of type %qT does not match %qT" +msgid "%qD declared as a % %s" msgstr "" -#: cp/class.c:6010 +#: cp/decl.c:5609 #, gcc-internal-format -msgid "invalid operation on uninstantiated type" +msgid "%qD declared as an % %s" msgstr "" -#. [basic.scope.class] -#. -#. A name N used in a class S shall refer to the same declaration -#. in its context and when re-evaluated in the completed scope of -#. S. -#: cp/class.c:6247 cp/decl.c:1101 cp/name-lookup.c:508 +#: cp/decl.c:5611 #, gcc-internal-format -msgid "declaration of %q#D" +msgid "" +"% and % function specifiers on %qD invalid in %s " +"declaration" msgstr "" -#: cp/class.c:6248 +#: cp/decl.c:5615 #, gcc-internal-format -msgid "changes meaning of %qD from %q+#D" +msgid "%q+D declared as a friend" msgstr "" -#: cp/cp-gimplify.c:120 +#: cp/decl.c:5621 #, gcc-internal-format -msgid "continue statement not within loop or switch" +msgid "%q+D declared with an exception specification" msgstr "" -#: cp/cp-gimplify.c:365 +#: cp/decl.c:5655 #, gcc-internal-format -msgid "statement with no effect" +msgid "definition of %qD is not in namespace enclosing %qT" msgstr "" -#: cp/cvt.c:91 +#: cp/decl.c:5715 #, gcc-internal-format -msgid "can't convert from incomplete type %qT to %qT" +msgid "defining explicit specialization %qD in friend declaration" msgstr "" -#: cp/cvt.c:100 +#. Something like `template friend void f()'. +#: cp/decl.c:5725 #, gcc-internal-format -msgid "conversion of %qE from %qT to %qT is ambiguous" +msgid "invalid use of template-id %qD in declaration of primary template" msgstr "" -#: cp/cvt.c:169 cp/cvt.c:238 cp/cvt.c:285 +#: cp/decl.c:5755 #, gcc-internal-format -msgid "cannot convert %qE from type %qT to type %qT" +msgid "" +"default arguments are not allowed in declaration of friend template " +"specialization %qD" msgstr "" -#: cp/cvt.c:198 cp/cvt.c:202 +#: cp/decl.c:5763 #, gcc-internal-format -msgid "pointer to member cast from %qT to %qT is via virtual base" +msgid "" +"% is not allowed in declaration of friend template specialization %" +"qD" msgstr "" -#: cp/cvt.c:498 +#: cp/decl.c:5806 #, gcc-internal-format -msgid "conversion from %qT to %qT discards qualifiers" +msgid "cannot declare %<::main%> to be a template" msgstr "" -#: cp/cvt.c:516 cp/typeck.c:4890 +#: cp/decl.c:5808 #, gcc-internal-format -msgid "casting %qT to %qT does not dereference pointer" +msgid "cannot declare %<::main%> to be inline" msgstr "" -#: cp/cvt.c:543 +#: cp/decl.c:5810 #, gcc-internal-format -msgid "cannot convert type %qT to type %qT" +msgid "cannot declare %<::main%> to be static" msgstr "" -#: cp/cvt.c:679 +#: cp/decl.c:5816 #, gcc-internal-format -msgid "conversion from %q#T to %q#T" +msgid "%<::main%> must return %" msgstr "" -#: cp/cvt.c:691 cp/cvt.c:711 +#: cp/decl.c:5848 #, gcc-internal-format -msgid "%q#T used where a %qT was expected" +msgid "non-local function %q#D uses anonymous type" msgstr "" -#: cp/cvt.c:726 +#: cp/decl.c:5851 cp/decl.c:6121 #, gcc-internal-format -msgid "%q#T used where a floating point value was expected" +msgid "" +"%q+#D does not refer to the unqualified type, so it is not used for linkage" msgstr "" -#: cp/cvt.c:773 +#: cp/decl.c:5857 #, gcc-internal-format -msgid "conversion from %qT to non-scalar type %qT requested" +msgid "non-local function %q#D uses local type %qT" msgstr "" -#: cp/cvt.c:807 +#: cp/decl.c:5880 #, gcc-internal-format -msgid "pseudo-destructor is not called" +msgid "%smember function %qD cannot have cv-qualifier" msgstr "" -#: cp/cvt.c:866 +#: cp/decl.c:5949 #, gcc-internal-format -msgid "object of incomplete type %qT will not be accessed in %s" +msgid "definition of implicitly-declared %qD" msgstr "" -#: cp/cvt.c:869 +#: cp/decl.c:5969 cp/decl2.c:704 #, gcc-internal-format -msgid "object of type %qT will not be accessed in %s" +msgid "no %q#D member function declared in class %qT" msgstr "" -#: cp/cvt.c:885 +#. DRs 132, 319 and 389 seem to indicate types with +#. no linkage can only be used to declare extern "C" +#. entities. Since it's not always an error in the +#. ISO C++ 90 Standard, we only issue a warning. +#: cp/decl.c:6118 #, gcc-internal-format -msgid "object %qE of incomplete type %qT will not be accessed in %s" +msgid "non-local variable %q#D uses anonymous type" msgstr "" -#. [over.over] enumerates the places where we can take the address -#. of an overloaded function, and this is not one of them. -#: cp/cvt.c:901 +#: cp/decl.c:6127 #, gcc-internal-format -msgid "%s cannot resolve address of overloaded function" +msgid "non-local variable %q#D uses local type %qT" msgstr "" -#. Only warn when there is no &. -#: cp/cvt.c:907 +#: cp/decl.c:6244 #, gcc-internal-format -msgid "%s is a reference, not call, to function %qE" +msgid "" +"invalid in-class initialization of static data member of non-integral type %" +"qT" msgstr "" -#: cp/cvt.c:918 +#: cp/decl.c:6254 #, gcc-internal-format -msgid "%s has no effect" +msgid "ISO C++ forbids in-class initialization of non-const static member %qD" msgstr "" -#: cp/cvt.c:950 +#: cp/decl.c:6258 #, gcc-internal-format -msgid "value computed is not used" +msgid "" +"ISO C++ forbids initialization of member constant %qD of non-integral type %" +"qT" msgstr "" -#: cp/cvt.c:1058 +#: cp/decl.c:6278 #, gcc-internal-format -msgid "converting NULL to non-pointer type" +msgid "size of array %qD has non-integral type %qT" msgstr "" -#: cp/cvt.c:1131 +#: cp/decl.c:6280 #, gcc-internal-format -msgid "ambiguous default type conversion from %qT" +msgid "size of array has non-integral type %qT" msgstr "" -#: cp/cvt.c:1133 +#: cp/decl.c:6316 #, gcc-internal-format -msgid " candidate conversions include %qD and %qD" +msgid "size of array %qD is negative" msgstr "" -#: cp/decl.c:1003 +#: cp/decl.c:6318 #, gcc-internal-format -msgid "%qD was declared % and later %" +msgid "size of array is negative" msgstr "" -#: cp/decl.c:1004 cp/decl.c:1473 objc/objc-act.c:2903 objc/objc-act.c:7470 +#: cp/decl.c:6326 #, gcc-internal-format -msgid "previous declaration of %q+D" +msgid "ISO C++ forbids zero-size array %qD" msgstr "" -#: cp/decl.c:1054 +#: cp/decl.c:6328 #, gcc-internal-format -msgid "function %q+D redeclared as inline" +msgid "ISO C++ forbids zero-size array" msgstr "" -#: cp/decl.c:1056 +#: cp/decl.c:6335 #, gcc-internal-format -msgid "previous declaration of %q+D with attribute noinline" +msgid "size of array %qD is not an integral constant-expression" msgstr "" -#: cp/decl.c:1063 +#: cp/decl.c:6338 #, gcc-internal-format -msgid "function %q+D redeclared with attribute noinline" +msgid "size of array is not an integral constant-expression" msgstr "" -#: cp/decl.c:1065 +#: cp/decl.c:6343 #, gcc-internal-format -msgid "previous declaration of %q+D was inline" +msgid "ISO C++ forbids variable-size array %qD" msgstr "" -#: cp/decl.c:1088 cp/decl.c:1161 +#: cp/decl.c:6345 #, gcc-internal-format -msgid "shadowing %s function %q#D" +msgid "ISO C++ forbids variable-size array" msgstr "" -#: cp/decl.c:1097 +#: cp/decl.c:6375 #, gcc-internal-format -msgid "library function %q#D redeclared as non-function %q#D" +msgid "overflow in array dimension" msgstr "" -#: cp/decl.c:1102 +#: cp/decl.c:6449 #, gcc-internal-format -msgid "conflicts with built-in declaration %q#D" +msgid "declaration of %qD as %s" msgstr "" -#: cp/decl.c:1156 cp/decl.c:1265 cp/decl.c:1281 +#: cp/decl.c:6451 #, gcc-internal-format -msgid "new declaration %q#D" +msgid "creating %s" msgstr "" -#: cp/decl.c:1157 +#: cp/decl.c:6463 #, gcc-internal-format -msgid "ambiguates built-in declaration %q#D" +msgid "" +"declaration of %qD as multidimensional array must have bounds for all " +"dimensions except the first" msgstr "" -#: cp/decl.c:1229 +#: cp/decl.c:6467 #, gcc-internal-format -msgid "%q#D redeclared as different kind of symbol" +msgid "" +"multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.c:1232 +#: cp/decl.c:6502 #, gcc-internal-format -msgid "previous declaration of %q+#D" +msgid "return type specification for constructor invalid" msgstr "" -#: cp/decl.c:1251 +#: cp/decl.c:6512 #, gcc-internal-format -msgid "declaration of template %q#D" +msgid "return type specification for destructor invalid" msgstr "" -#: cp/decl.c:1252 cp/name-lookup.c:509 +#: cp/decl.c:6525 #, gcc-internal-format -msgid "conflicts with previous declaration %q+#D" +msgid "operator %qT declared to return %qT" msgstr "" -#: cp/decl.c:1266 cp/decl.c:1282 +#: cp/decl.c:6527 #, gcc-internal-format -msgid "ambiguates old declaration %q+#D" +msgid "return type specified for %" msgstr "" -#: cp/decl.c:1274 +#: cp/decl.c:6549 #, gcc-internal-format -msgid "declaration of C function %q#D conflicts with" +msgid "unnamed variable or field declared void" msgstr "" -#: cp/decl.c:1276 +#: cp/decl.c:6553 #, gcc-internal-format -msgid "previous declaration %q+#D here" +msgid "variable or field %qE declared void" msgstr "" -#: cp/decl.c:1289 +#: cp/decl.c:6556 #, gcc-internal-format -msgid "conflicting declaration %q#D" +msgid "variable or field declared void" msgstr "" -#: cp/decl.c:1290 +#: cp/decl.c:6711 #, gcc-internal-format -msgid "%q+D has a previous declaration as %q#D" +msgid "type %qT is not derived from type %qT" msgstr "" -#. [namespace.alias] -#. -#. A namespace-name or namespace-alias shall not be declared as -#. the name of any other entity in the same declarative region. -#. A namespace-name defined at global scope shall not be -#. declared as the name of any other entity in any global scope -#. of the program. -#: cp/decl.c:1342 +#: cp/decl.c:6731 cp/decl.c:6823 cp/decl.c:7948 #, gcc-internal-format -msgid "declaration of namespace %qD conflicts with" +msgid "declaration of %qD as non-function" msgstr "" -#: cp/decl.c:1343 +#: cp/decl.c:6737 #, gcc-internal-format -msgid "previous declaration of namespace %q+D here" +msgid "declaration of %qD as non-member" msgstr "" -#: cp/decl.c:1354 +#: cp/decl.c:6767 #, gcc-internal-format -msgid "%q+#D previously defined here" +msgid "declarator-id missing; using reserved word %qD" msgstr "" -#: cp/decl.c:1355 +#: cp/decl.c:6856 #, gcc-internal-format -msgid "%q+#D previously declared here" +msgid "two or more data types in declaration of %qs" msgstr "" -#. Prototype decl follows defn w/o prototype. -#: cp/decl.c:1364 +#: cp/decl.c:6899 #, gcc-internal-format -msgid "prototype for %q+#D" +msgid "ISO C++ does not support %" msgstr "" -#: cp/decl.c:1365 +#: cp/decl.c:6921 #, gcc-internal-format -msgid "%Jfollows non-prototype definition here" +msgid "duplicate %qs" msgstr "" -#: cp/decl.c:1377 +#: cp/decl.c:6959 cp/decl.c:6961 #, gcc-internal-format -msgid "previous declaration of %q+#D with %qL linkage" +msgid "ISO C++ forbids declaration of %qs with no type" msgstr "" -#: cp/decl.c:1379 +#: cp/decl.c:6986 #, gcc-internal-format -msgid "conflicts with new declaration with %qL linkage" +msgid "short, signed or unsigned invalid for %qs" msgstr "" -#: cp/decl.c:1402 cp/decl.c:1408 +#: cp/decl.c:6988 #, gcc-internal-format -msgid "default argument given for parameter %d of %q#D" +msgid "long, short, signed or unsigned invalid for %qs" msgstr "" -#: cp/decl.c:1404 cp/decl.c:1410 +#: cp/decl.c:6990 #, gcc-internal-format -msgid "after previous specification in %q+#D" +msgid "long and short specified together for %qs" msgstr "" -#: cp/decl.c:1419 +#: cp/decl.c:6992 #, gcc-internal-format -msgid "%q#D was used before it was declared inline" +msgid "long or short specified with char for %qs" msgstr "" -#: cp/decl.c:1420 +#: cp/decl.c:6994 #, gcc-internal-format -msgid "%Jprevious non-inline declaration here" +msgid "long or short specified with floating type for %qs" msgstr "" -#: cp/decl.c:1472 +#: cp/decl.c:6996 #, gcc-internal-format -msgid "redundant redeclaration of %qD in same scope" +msgid "signed and unsigned given together for %qs" msgstr "" -#: cp/decl.c:1566 +#: cp/decl.c:7002 #, gcc-internal-format -msgid "declaration of %qF throws different exceptions" +msgid "long, short, signed or unsigned used invalidly for %qs" msgstr "" -#: cp/decl.c:1568 +#: cp/decl.c:7067 #, gcc-internal-format -msgid "than previous declaration %q+F" +msgid "complex invalid for %qs" msgstr "" -#. From [temp.expl.spec]: -#. -#. If a template, a member template or the member of a class -#. template is explicitly specialized then that -#. specialization shall be declared before the first use of -#. that specialization that would cause an implicit -#. instantiation to take place, in every translation unit in -#. which such a use occurs. -#: cp/decl.c:1732 +#: cp/decl.c:7096 #, gcc-internal-format -msgid "explicit specialization of %qD after first use" +msgid "qualifiers are not allowed on declaration of %" msgstr "" -#: cp/decl.c:1811 +#: cp/decl.c:7108 cp/typeck.c:6605 #, gcc-internal-format -msgid "%q+D: visibility attribute ignored because it" +msgid "ignoring %qV qualifiers added to function type %qT" msgstr "" -#: cp/decl.c:1813 +#: cp/decl.c:7131 #, gcc-internal-format -msgid "%Jconflicts with previous declaration here" +msgid "member %qD cannot be declared both virtual and static" msgstr "" -#: cp/decl.c:2191 cp/decl.c:2213 +#: cp/decl.c:7138 #, gcc-internal-format -msgid "jump to label %qD" +msgid "%<%T::%D%> is not a valid declarator" msgstr "" -#: cp/decl.c:2193 cp/decl.c:2215 +#: cp/decl.c:7146 #, gcc-internal-format -msgid "jump to case label" +msgid "typedef declaration invalid in parameter declaration" msgstr "" -#: cp/decl.c:2196 cp/decl.c:2218 +#: cp/decl.c:7150 #, gcc-internal-format -msgid "%H from here" +msgid "storage class specifiers invalid in parameter declarations" msgstr "" -#: cp/decl.c:2201 +#: cp/decl.c:7157 #, gcc-internal-format -msgid " crosses initialization of %q+#D" +msgid "virtual outside class declaration" msgstr "" -#: cp/decl.c:2203 cp/decl.c:2317 +#: cp/decl.c:7171 cp/decl.c:7180 #, gcc-internal-format -msgid " enters scope of non-POD %q+#D" +msgid "multiple storage classes in declaration of %qs" msgstr "" -#: cp/decl.c:2222 cp/decl.c:2321 +#: cp/decl.c:7203 #, gcc-internal-format -msgid " enters try block" +msgid "storage class specified for %qs" msgstr "" -#: cp/decl.c:2224 cp/decl.c:2323 +#: cp/decl.c:7237 #, gcc-internal-format -msgid " enters catch block" +msgid "top-level declaration of %qs specifies %" msgstr "" -#: cp/decl.c:2301 +#: cp/decl.c:7249 #, gcc-internal-format -msgid "jump to label %q+D" +msgid "storage class specifiers invalid in friend function declarations" msgstr "" -#: cp/decl.c:2302 +#: cp/decl.c:7375 #, gcc-internal-format -msgid " from here" +msgid "destructor cannot be static member function" msgstr "" -#. Can't skip init of __exception_info. -#: cp/decl.c:2313 +#: cp/decl.c:7378 #, gcc-internal-format -msgid "%J enters catch block" +msgid "destructors may not be cv-qualified" msgstr "" -#: cp/decl.c:2315 +#: cp/decl.c:7398 #, gcc-internal-format -msgid " skips initialization of %q+#D" +msgid "constructor cannot be static member function" msgstr "" -#: cp/decl.c:2349 +#: cp/decl.c:7401 #, gcc-internal-format -msgid "label named wchar_t" +msgid "constructors cannot be declared virtual" msgstr "" -#: cp/decl.c:2352 +#: cp/decl.c:7406 #, gcc-internal-format -msgid "duplicate label %qD" +msgid "constructors may not be cv-qualified" msgstr "" -#: cp/decl.c:2607 cp/parser.c:3609 +#: cp/decl.c:7426 #, gcc-internal-format -msgid "%qD used without template parameters" +msgid "can't initialize friend function %qs" msgstr "" -#: cp/decl.c:2624 cp/decl.c:2715 +#. Cannot be both friend and virtual. +#: cp/decl.c:7430 #, gcc-internal-format -msgid "no class template named %q#T in %q#T" +msgid "virtual functions cannot be friends" msgstr "" -#: cp/decl.c:2645 cp/decl.c:2655 cp/decl.c:2675 +#: cp/decl.c:7434 #, gcc-internal-format -msgid "no type named %q#T in %q#T" +msgid "friend declaration not in class definition" msgstr "" -#: cp/decl.c:2724 +#: cp/decl.c:7436 #, gcc-internal-format -msgid "template parameters do not match template" +msgid "can't define friend function %qs in a local class definition" msgstr "" -#: cp/decl.c:2725 cp/friend.c:317 cp/friend.c:325 +#: cp/decl.c:7449 #, gcc-internal-format -msgid "%q+D declared here" +msgid "destructors may not have parameters" msgstr "" -#: cp/decl.c:3398 +#: cp/decl.c:7468 cp/decl.c:7475 #, gcc-internal-format -msgid "%Jan anonymous union cannot have function members" +msgid "cannot declare reference to %q#T" msgstr "" -#: cp/decl.c:3416 +#: cp/decl.c:7469 #, gcc-internal-format -msgid "member %q+#D with constructor not allowed in anonymous aggregate" +msgid "cannot declare pointer to %q#T" msgstr "" -#: cp/decl.c:3419 +#: cp/decl.c:7477 #, gcc-internal-format -msgid "member %q+#D with destructor not allowed in anonymous aggregate" +msgid "cannot declare pointer to %q#T member" msgstr "" -#: cp/decl.c:3422 +#: cp/decl.c:7516 #, gcc-internal-format -msgid "" -"member %q+#D with copy assignment operator not allowed in anonymous aggregate" +msgid "%qD is a namespace" msgstr "" -#: cp/decl.c:3447 +#: cp/decl.c:7555 #, gcc-internal-format -msgid "multiple types in one declaration" +msgid "template-id %qD used as a declarator" msgstr "" -#: cp/decl.c:3451 +#: cp/decl.c:7603 #, gcc-internal-format -msgid "redeclaration of C++ built-in type %qT" +msgid "extra qualification %<%T::%> on member %qs" msgstr "" -#: cp/decl.c:3488 +#: cp/decl.c:7621 #, gcc-internal-format -msgid "missing type-name in typedef-declaration" +msgid "cannot declare member function %<%T::%s%> within %<%T%>" msgstr "" -#: cp/decl.c:3496 +#: cp/decl.c:7636 #, gcc-internal-format -msgid "ISO C++ prohibits anonymous structs" +msgid "cannot declare member %<%T::%s%> within %qT" msgstr "" -#: cp/decl.c:3503 +#: cp/decl.c:7676 #, gcc-internal-format -msgid "%qs can only be specified for functions" +msgid "data member may not have variably modified type %qT" msgstr "" -#: cp/decl.c:3509 +#: cp/decl.c:7678 #, gcc-internal-format -msgid "% can only be specified inside a class" +msgid "parameter may not have variably modified type %qT" msgstr "" -#: cp/decl.c:3511 +#. [dcl.fct.spec] The explicit specifier shall only be used in +#. declarations of constructors within a class definition. +#: cp/decl.c:7686 #, gcc-internal-format -msgid "% can only be specified for constructors" +msgid "only declarations of constructors can be %" msgstr "" -#: cp/decl.c:3513 +#: cp/decl.c:7694 #, gcc-internal-format -msgid "a storage class can only be specified for objects and functions" +msgid "non-member %qs cannot be declared %" msgstr "" -#: cp/decl.c:3519 +#: cp/decl.c:7699 #, gcc-internal-format -msgid "qualifiers can only be specified for objects and functions" +msgid "non-object member %qs cannot be declared %" msgstr "" -#: cp/decl.c:3549 +#: cp/decl.c:7705 #, gcc-internal-format -msgid "attribute ignored in declaration of %q+#T" +msgid "function %qs cannot be declared %" msgstr "" -#: cp/decl.c:3550 +#: cp/decl.c:7710 #, gcc-internal-format -msgid "attribute for %q+#T must follow the %qs keyword" +msgid "static %qs cannot be declared %" msgstr "" -#: cp/decl.c:3672 +#: cp/decl.c:7715 #, gcc-internal-format -msgid "function %q#D is initialized like a variable" +msgid "const %qs cannot be declared %" msgstr "" -#: cp/decl.c:3684 +#: cp/decl.c:7735 #, gcc-internal-format -msgid "declaration of %q#D has % and is initialized" +msgid "%Jtypedef name may not be a nested-name-specifier" msgstr "" -#: cp/decl.c:3714 +#: cp/decl.c:7751 #, gcc-internal-format -msgid "%q#D is not a static member of %q#T" +msgid "ISO C++ forbids nested type %qD with same name as enclosing class" msgstr "" -#: cp/decl.c:3720 +#: cp/decl.c:7850 #, gcc-internal-format -msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" +msgid "qualified function types cannot be used to declare %s functions" msgstr "" -#: cp/decl.c:3729 +#: cp/decl.c:7876 #, gcc-internal-format -msgid "" -"template header not allowed in member definition of explicitly specialized " -"class" +msgid "type qualifiers specified for friend class declaration" msgstr "" -#: cp/decl.c:3738 +#: cp/decl.c:7881 #, gcc-internal-format -msgid "duplicate initialization of %qD" +msgid "% specified for friend class declaration" msgstr "" -#: cp/decl.c:3777 +#: cp/decl.c:7889 #, gcc-internal-format -msgid "declaration of %q#D outside of class is not definition" +msgid "template parameters cannot be friends" msgstr "" -#: cp/decl.c:3826 +#: cp/decl.c:7891 #, gcc-internal-format -msgid "variable %q#D has initializer but incomplete type" +msgid "friend declaration requires class-key, i.e. %" msgstr "" -#: cp/decl.c:3833 cp/decl.c:4529 +#: cp/decl.c:7895 #, gcc-internal-format -msgid "elements of array %q#D have incomplete type" +msgid "friend declaration requires class-key, i.e. %" msgstr "" -#: cp/decl.c:3849 +#: cp/decl.c:7908 #, gcc-internal-format -msgid "aggregate %q#D has incomplete type and cannot be defined" +msgid "trying to make class %qT a friend of global scope" msgstr "" -#: cp/decl.c:3899 +#: cp/decl.c:7919 #, gcc-internal-format -msgid "%qD declared as reference but not initialized" +msgid "invalid qualifiers on non-member function type" msgstr "" -#: cp/decl.c:3905 +#: cp/decl.c:7938 #, gcc-internal-format -msgid "ISO C++ forbids use of initializer list to initialize reference %qD" +msgid "abstract declarator %qT used as declaration" msgstr "" -#: cp/decl.c:3931 +#: cp/decl.c:7963 #, gcc-internal-format -msgid "cannot initialize %qT from %qT" +msgid "cannot use %<::%> in parameter declaration" msgstr "" -#: cp/decl.c:3964 +#. Something like struct S { int N::j; }; +#: cp/decl.c:8008 #, gcc-internal-format -msgid "initializer fails to determine size of %qD" +msgid "invalid use of %<::%>" msgstr "" -#: cp/decl.c:3969 +#: cp/decl.c:8023 #, gcc-internal-format -msgid "array size missing in %qD" +msgid "can't make %qD into a method -- not in a class" msgstr "" -#: cp/decl.c:3979 +#: cp/decl.c:8032 #, gcc-internal-format -msgid "zero-size array %qD" +msgid "function %qD declared virtual inside a union" msgstr "" -#. An automatic variable with an incomplete type: that is an error. -#. Don't talk about array types here, since we took care of that -#. message in grokdeclarator. -#: cp/decl.c:4015 +#: cp/decl.c:8041 #, gcc-internal-format -msgid "storage size of %qD isn't known" +msgid "%qD cannot be declared virtual, since it is always static" msgstr "" -#: cp/decl.c:4037 +#: cp/decl.c:8059 #, gcc-internal-format -msgid "storage size of %qD isn't constant" +msgid "expected qualified name in friend declaration for destructor %qD" msgstr "" -#: cp/decl.c:4092 +#: cp/decl.c:8069 #, gcc-internal-format -msgid "" -"sorry: semantics of inline function static data %q+#D are wrong (you'll wind " -"up with multiple copies)" +msgid "declaration of %qD as member of %qT" msgstr "" -#: cp/decl.c:4095 +#: cp/decl.c:8145 #, gcc-internal-format -msgid "%J you can work around this by removing the initializer" +msgid "field %qD has incomplete type" msgstr "" -#: cp/decl.c:4122 +#: cp/decl.c:8147 #, gcc-internal-format -msgid "uninitialized const %qD" +msgid "name %qT has incomplete type" msgstr "" -#: cp/decl.c:4193 +#: cp/decl.c:8156 #, gcc-internal-format -msgid "name %qD used in a GNU-style designated initializer for an array" +msgid " in instantiation of template %qT" msgstr "" -#: cp/decl.c:4240 +#: cp/decl.c:8166 #, gcc-internal-format -msgid "invalid type %qT as initializer for a vector of type %qT" +msgid "%qE is neither function nor member function; cannot be declared friend" msgstr "" -#: cp/decl.c:4282 +#: cp/decl.c:8177 #, gcc-internal-format -msgid "initializer for %qT must be brace-enclosed" +msgid "member functions are implicitly friends of their class" msgstr "" -#: cp/decl.c:4297 +#. An attempt is being made to initialize a non-static +#. member. But, from [class.mem]: +#. +#. 4 A member-declarator can contain a +#. constant-initializer only if it declares a static +#. member (_class.static_) of integral or enumeration +#. type, see _class.static.data_. +#. +#. This used to be relatively common practice, but +#. the rest of the compiler does not correctly +#. handle the initialization unless the member is +#. static so we make it static below. +#: cp/decl.c:8217 #, gcc-internal-format -msgid "ISO C++ does not allow designated initializers" +msgid "ISO C++ forbids initialization of member %qD" msgstr "" -#: cp/decl.c:4302 +#: cp/decl.c:8219 #, gcc-internal-format -msgid "%qT has no non-static data member named %qD" +msgid "making %qD static" msgstr "" -#: cp/decl.c:4351 +#: cp/decl.c:8288 #, gcc-internal-format -msgid "braces around scalar initializer for type %qT" +msgid "storage class % invalid for function %qs" msgstr "" -#: cp/decl.c:4429 +#: cp/decl.c:8290 #, gcc-internal-format -msgid "missing braces around initializer for %qT" +msgid "storage class % invalid for function %qs" msgstr "" -#: cp/decl.c:4485 +#: cp/decl.c:8292 #, gcc-internal-format -msgid "too many initializers for %qT" +msgid "storage class %<__thread%> invalid for function %qs" msgstr "" -#: cp/decl.c:4523 +#: cp/decl.c:8303 #, gcc-internal-format -msgid "variable-sized object %qD may not be initialized" +msgid "" +"% specified invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:4534 +#: cp/decl.c:8306 #, gcc-internal-format -msgid "%qD has incomplete type" +msgid "" +"% specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:4581 +#: cp/decl.c:8314 #, gcc-internal-format -msgid "%qD must be initialized by constructor, not by %<{...}%>" +msgid "virtual non-class function %qs" msgstr "" -#: cp/decl.c:4617 +#: cp/decl.c:8345 #, gcc-internal-format -msgid "array %qD initialized by parenthesized string literal %qE" +msgid "cannot declare member function %qD to have static linkage" msgstr "" -#: cp/decl.c:4632 +#. FIXME need arm citation +#: cp/decl.c:8352 #, gcc-internal-format -msgid "structure %qD with uninitialized const members" +msgid "cannot declare static function inside another function" msgstr "" -#: cp/decl.c:4634 +#: cp/decl.c:8381 #, gcc-internal-format -msgid "structure %qD with uninitialized reference members" +msgid "" +"% may not be used when defining (as opposed to declaring) a static " +"data member" msgstr "" -#: cp/decl.c:4836 +#: cp/decl.c:8388 #, gcc-internal-format -msgid "assignment (not initialization) in declaration" +msgid "static member %qD declared %" msgstr "" -#: cp/decl.c:4853 +#: cp/decl.c:8393 #, gcc-internal-format -msgid "cannot initialize %qD to namespace %qD" +msgid "cannot explicitly declare member %q#D to have extern linkage" msgstr "" -#: cp/decl.c:4894 +#: cp/decl.c:8531 #, gcc-internal-format -msgid "shadowing previous type declaration of %q#D" +msgid "default argument for %q#D has type %qT" msgstr "" -#: cp/decl.c:4924 +#: cp/decl.c:8534 #, gcc-internal-format -msgid "%qD cannot be thread-local because it has non-POD type %qT" +msgid "default argument for parameter of type %qT has type %qT" msgstr "" -#: cp/decl.c:4939 +#: cp/decl.c:8551 #, gcc-internal-format -msgid "%qD is thread-local and so cannot be dynamically initialized" +msgid "default argument %qE uses local variable %qD" msgstr "" -#: cp/decl.c:4957 +#: cp/decl.c:8619 #, gcc-internal-format -msgid "" -"%qD cannot be initialized by a non-constant expression when being declared" +msgid "parameter %qD invalidly declared method type" msgstr "" -#: cp/decl.c:5547 +#: cp/decl.c:8643 #, gcc-internal-format -msgid "destructor for alien class %qT cannot be a member" +msgid "parameter %qD includes %s to array of unknown bound %qT" msgstr "" -#: cp/decl.c:5549 +#. [class.copy] +#. +#. A declaration of a constructor for a class X is ill-formed if +#. its first parameter is of type (optionally cv-qualified) X +#. and either there are no other parameters or else all other +#. parameters have default arguments. +#. +#. We *don't* complain about member template instantiations that +#. have this form, though; they can occur as we try to decide +#. what constructor to use during overload resolution. Since +#. overload resolution will never prefer such a constructor to +#. the non-template copy constructor (which is either explicitly +#. or implicitly defined), there's no need to worry about their +#. existence. Theoretically, they should never even be +#. instantiated, but that's hard to forestall. +#: cp/decl.c:8802 #, gcc-internal-format -msgid "constructor for alien class %qT cannot be a member" +msgid "invalid constructor; you probably meant %<%T (const %T&)%>" msgstr "" -#: cp/decl.c:5570 +#: cp/decl.c:8921 #, gcc-internal-format -msgid "%qD declared as a % %s" +msgid "%qD may not be declared within a namespace" msgstr "" -#: cp/decl.c:5572 +#: cp/decl.c:8923 #, gcc-internal-format -msgid "%qD declared as an % %s" +msgid "%qD may not be declared as static" msgstr "" -#: cp/decl.c:5574 +#: cp/decl.c:8944 #, gcc-internal-format -msgid "" -"% and % function specifiers on %qD invalid in %s " -"declaration" +msgid "%qD must be a nonstatic member function" msgstr "" -#: cp/decl.c:5578 +#: cp/decl.c:8953 #, gcc-internal-format -msgid "%q+D declared as a friend" +msgid "" +"%qD must be either a non-static member function or a non-member function" msgstr "" -#: cp/decl.c:5584 +#: cp/decl.c:8973 #, gcc-internal-format -msgid "%q+D declared with an exception specification" +msgid "%qD must have an argument of class or enumerated type" msgstr "" -#: cp/decl.c:5618 +#: cp/decl.c:9014 #, gcc-internal-format -msgid "definition of %qD is not in namespace enclosing %qT" +msgid "conversion to %s%s will never use a type conversion operator" msgstr "" -#: cp/decl.c:5709 +#. 13.4.0.3 +#: cp/decl.c:9021 #, gcc-internal-format -msgid "cannot declare %<::main%> to be a template" +msgid "ISO C++ prohibits overloading operator ?:" msgstr "" -#: cp/decl.c:5711 +#: cp/decl.c:9071 #, gcc-internal-format -msgid "cannot declare %<::main%> to be inline" +msgid "postfix %qD must take % as its argument" msgstr "" -#: cp/decl.c:5713 +#: cp/decl.c:9075 #, gcc-internal-format -msgid "cannot declare %<::main%> to be static" +msgid "postfix %qD must take % as its second argument" msgstr "" -#: cp/decl.c:5717 +#: cp/decl.c:9082 #, gcc-internal-format -msgid "%<::main%> must return %" +msgid "%qD must take either zero or one argument" msgstr "" -#: cp/decl.c:5747 +#: cp/decl.c:9084 #, gcc-internal-format -msgid "non-local function %q#D uses anonymous type" +msgid "%qD must take either one or two arguments" msgstr "" -#: cp/decl.c:5750 cp/decl.c:6087 +#: cp/decl.c:9105 #, gcc-internal-format -msgid "" -"%q+#D does not refer to the unqualified type, so it is not used for linkage" +msgid "prefix %qD should return %qT" msgstr "" -#: cp/decl.c:5756 +#: cp/decl.c:9111 #, gcc-internal-format -msgid "non-local function %q#D uses local type %qT" +msgid "postfix %qD should return %qT" msgstr "" -#: cp/decl.c:5779 +#: cp/decl.c:9120 #, gcc-internal-format -msgid "%smember function %qD cannot have cv-qualifier" +msgid "%qD must take %" msgstr "" -#: cp/decl.c:5803 +#: cp/decl.c:9122 cp/decl.c:9130 #, gcc-internal-format -msgid "defining explicit specialization %qD in friend declaration" +msgid "%qD must take exactly one argument" msgstr "" -#. Something like `template friend void f()'. -#: cp/decl.c:5813 +#: cp/decl.c:9132 #, gcc-internal-format -msgid "invalid use of template-id %qD in declaration of primary template" +msgid "%qD must take exactly two arguments" msgstr "" -#: cp/decl.c:5841 +#: cp/decl.c:9140 #, gcc-internal-format -msgid "" -"default arguments are not allowed in declaration of friend template " -"specialization %qD" +msgid "user-defined %qD always evaluates both arguments" msgstr "" -#: cp/decl.c:5849 +#: cp/decl.c:9154 #, gcc-internal-format -msgid "" -"% is not allowed in declaration of friend template specialization %" -"qD" +msgid "%qD should return by value" msgstr "" -#: cp/decl.c:5915 +#: cp/decl.c:9166 cp/decl.c:9169 #, gcc-internal-format -msgid "definition of implicitly-declared %qD" +msgid "%qD cannot have default arguments" msgstr "" -#: cp/decl.c:5935 cp/decl2.c:706 +#: cp/decl.c:9226 #, gcc-internal-format -msgid "no %q#D member function declared in class %qT" +msgid "using template type parameter %qT after %qs" msgstr "" -#. DRs 132, 319 and 389 seem to indicate types with -#. no linkage can only be used to declare extern "C" -#. entities. Since it's not always an error in the -#. ISO C++ 90 Standard, we only issue a warning. -#: cp/decl.c:6084 +#: cp/decl.c:9241 #, gcc-internal-format -msgid "non-local variable %q#D uses anonymous type" +msgid "using typedef-name %qD after %qs" msgstr "" -#: cp/decl.c:6093 +#: cp/decl.c:9242 #, gcc-internal-format -msgid "non-local variable %q#D uses local type %qT" +msgid "%q+D has a previous declaration here" msgstr "" -#: cp/decl.c:6210 +#: cp/decl.c:9250 #, gcc-internal-format -msgid "" -"invalid in-class initialization of static data member of non-integral type %" -"qT" +msgid "%qT referred to as %qs" msgstr "" -#: cp/decl.c:6220 +#: cp/decl.c:9251 cp/decl.c:9258 #, gcc-internal-format -msgid "ISO C++ forbids in-class initialization of non-const static member %qD" +msgid "%q+T has a previous declaration here" msgstr "" -#: cp/decl.c:6224 +#: cp/decl.c:9257 #, gcc-internal-format -msgid "" -"ISO C++ forbids initialization of member constant %qD of non-integral type %" -"qT" +msgid "%qT referred to as enum" msgstr "" -#: cp/decl.c:6244 +#. If a class template appears as elaborated type specifier +#. without a template header such as: +#. +#. template class C {}; +#. void f(class C); // No template header here +#. +#. then the required template argument is missing. +#: cp/decl.c:9272 #, gcc-internal-format -msgid "size of array %qD has non-integral type %qT" +msgid "template argument required for %<%s %T%>" msgstr "" -#: cp/decl.c:6246 +#: cp/decl.c:9320 cp/name-lookup.c:2629 #, gcc-internal-format -msgid "size of array has non-integral type %qT" +msgid "%qD has the same name as the class in which it is declared" msgstr "" -#: cp/decl.c:6282 +#: cp/decl.c:9458 #, gcc-internal-format -msgid "size of array %qD is negative" +msgid "use of enum %q#D without previous declaration" msgstr "" -#: cp/decl.c:6284 +#: cp/decl.c:9476 #, gcc-internal-format -msgid "size of array is negative" +msgid "redeclaration of %qT as a non-template" msgstr "" -#: cp/decl.c:6292 +#: cp/decl.c:9583 #, gcc-internal-format -msgid "ISO C++ forbids zero-size array %qD" +msgid "derived union %qT invalid" msgstr "" -#: cp/decl.c:6294 +#: cp/decl.c:9589 #, gcc-internal-format -msgid "ISO C++ forbids zero-size array" +msgid "Java class %qT cannot have multiple bases" msgstr "" -#: cp/decl.c:6301 +#: cp/decl.c:9597 #, gcc-internal-format -msgid "size of array %qD is not an integral constant-expression" +msgid "Java class %qT cannot have virtual bases" msgstr "" -#: cp/decl.c:6304 +#: cp/decl.c:9616 #, gcc-internal-format -msgid "size of array is not an integral constant-expression" +msgid "base type %qT fails to be a struct or class type" msgstr "" -#: cp/decl.c:6309 +#: cp/decl.c:9649 #, gcc-internal-format -msgid "ISO C++ forbids variable-size array %qD" +msgid "recursive type %qT undefined" msgstr "" -#: cp/decl.c:6311 +#: cp/decl.c:9651 #, gcc-internal-format -msgid "ISO C++ forbids variable-size array" +msgid "duplicate base type %qT invalid" msgstr "" -#: cp/decl.c:6341 +#: cp/decl.c:9721 #, gcc-internal-format -msgid "overflow in array dimension" +msgid "multiple definition of %q#T" msgstr "" -#: cp/decl.c:6415 +#: cp/decl.c:9722 #, gcc-internal-format -msgid "declaration of %qD as %s" +msgid "%Jprevious definition here" msgstr "" -#: cp/decl.c:6417 +#. DR 377 +#. +#. IF no integral type can represent all the enumerator values, the +#. enumeration is ill-formed. +#: cp/decl.c:9861 #, gcc-internal-format -msgid "creating %s" +msgid "no integral type can represent all of the enumerator values for %qT" msgstr "" -#: cp/decl.c:6429 +#: cp/decl.c:9972 #, gcc-internal-format -msgid "" -"declaration of %qD as multidimensional array must have bounds for all " -"dimensions except the first" +msgid "enumerator value for %qD not integer constant" msgstr "" -#: cp/decl.c:6433 +#: cp/decl.c:10000 #, gcc-internal-format -msgid "" -"multidimensional array must have bounds for all dimensions except the first" +msgid "overflow in enumeration values at %qD" msgstr "" -#: cp/decl.c:6468 +#: cp/decl.c:10075 #, gcc-internal-format -msgid "return type specification for constructor invalid" +msgid "return type %q#T is incomplete" msgstr "" -#: cp/decl.c:6478 +#: cp/decl.c:10185 cp/typeck.c:6352 #, gcc-internal-format -msgid "return type specification for destructor invalid" +msgid "% should return a reference to %<*this%>" msgstr "" -#: cp/decl.c:6491 +#: cp/decl.c:10520 #, gcc-internal-format -msgid "operator %qT declared to return %qT" +msgid "parameter %qD declared void" msgstr "" -#: cp/decl.c:6493 +#: cp/decl.c:11030 #, gcc-internal-format -msgid "return type specified for %" +msgid "invalid member function declaration" msgstr "" -#: cp/decl.c:6515 +#: cp/decl.c:11045 #, gcc-internal-format -msgid "unnamed variable or field declared void" +msgid "%qD is already defined in class %qT" msgstr "" -#: cp/decl.c:6519 +#: cp/decl.c:11255 #, gcc-internal-format -msgid "variable or field %qE declared void" +msgid "static member function %q#D declared with type qualifiers" msgstr "" -#: cp/decl.c:6522 +#: cp/decl2.c:271 #, gcc-internal-format -msgid "variable or field declared void" +msgid "name missing for member function" msgstr "" -#: cp/decl.c:6677 +#: cp/decl2.c:364 cp/decl2.c:378 #, gcc-internal-format -msgid "type %qT is not derived from type %qT" +msgid "ambiguous conversion for array subscript" msgstr "" -#: cp/decl.c:6697 cp/decl.c:6789 cp/decl.c:7919 +#: cp/decl2.c:372 #, gcc-internal-format -msgid "declaration of %qD as non-function" +msgid "invalid types %<%T[%T]%> for array subscript" msgstr "" -#: cp/decl.c:6703 +#: cp/decl2.c:415 #, gcc-internal-format -msgid "declaration of %qD as non-member" +msgid "deleting array %q#D" msgstr "" -#: cp/decl.c:6733 +#: cp/decl2.c:421 #, gcc-internal-format -msgid "declarator-id missing; using reserved word %qD" +msgid "type %q#T argument given to %, expected pointer" msgstr "" -#: cp/decl.c:6822 +#: cp/decl2.c:433 #, gcc-internal-format -msgid "two or more data types in declaration of %qs" +msgid "" +"cannot delete a function. Only pointer-to-objects are valid arguments to %" +"" msgstr "" -#: cp/decl.c:6865 +#: cp/decl2.c:441 #, gcc-internal-format -msgid "ISO C++ does not support %" +msgid "deleting %qT is undefined" msgstr "" -#: cp/decl.c:6887 +#. 14.5.2.2 [temp.mem] +#. +#. A local class shall not have member templates. +#: cp/decl2.c:477 #, gcc-internal-format -msgid "duplicate %qs" +msgid "invalid declaration of member template %q#D in local class" msgstr "" -#: cp/decl.c:6925 cp/decl.c:6927 +#: cp/decl2.c:486 #, gcc-internal-format -msgid "ISO C++ forbids declaration of %qs with no type" +msgid "invalid use of % in template declaration of %q#D" msgstr "" -#: cp/decl.c:6952 +#: cp/decl2.c:496 cp/pt.c:3020 #, gcc-internal-format -msgid "short, signed or unsigned invalid for %qs" +msgid "template declaration of %q#D" msgstr "" -#: cp/decl.c:6954 +#: cp/decl2.c:545 #, gcc-internal-format -msgid "long, short, signed or unsigned invalid for %qs" +msgid "Java method %qD has non-Java return type %qT" msgstr "" -#: cp/decl.c:6956 +#: cp/decl2.c:561 #, gcc-internal-format -msgid "long and short specified together for %qs" +msgid "Java method %qD has non-Java parameter type %qT" msgstr "" -#: cp/decl.c:6958 +#: cp/decl2.c:666 #, gcc-internal-format -msgid "long or short specified with char for %qs" +msgid "prototype for %q#D does not match any in class %qT" msgstr "" -#: cp/decl.c:6960 +#: cp/decl2.c:763 #, gcc-internal-format -msgid "long or short specified with floating type for %qs" +msgid "local class %q#T shall not have static data member %q#D" msgstr "" -#: cp/decl.c:6962 +#: cp/decl2.c:771 #, gcc-internal-format -msgid "signed and unsigned given together for %qs" +msgid "initializer invalid for static member with constructor" msgstr "" -#: cp/decl.c:6968 +#: cp/decl2.c:774 #, gcc-internal-format -msgid "long, short, signed or unsigned used invalidly for %qs" +msgid "(an out of class initialization is required)" msgstr "" -#: cp/decl.c:7033 +#: cp/decl2.c:855 #, gcc-internal-format -msgid "complex invalid for %qs" +msgid "member %qD conflicts with virtual function table field name" msgstr "" -#: cp/decl.c:7062 +#: cp/decl2.c:874 #, gcc-internal-format -msgid "qualifiers are not allowed on declaration of %" +msgid "applying attributes to template parameters is not implemented" msgstr "" -#: cp/decl.c:7074 cp/typeck.c:6522 +#: cp/decl2.c:884 #, gcc-internal-format -msgid "ignoring %qV qualifiers added to function type %qT" +msgid "%qD is already defined in %qT" msgstr "" -#: cp/decl.c:7097 +#: cp/decl2.c:905 #, gcc-internal-format -msgid "member %qD cannot be declared both virtual and static" +msgid "initializer specified for static member function %qD" msgstr "" -#: cp/decl.c:7104 +#: cp/decl2.c:928 #, gcc-internal-format -msgid "%<%T::%D%> is not a valid declarator" +msgid "field initializer is not constant" msgstr "" -#: cp/decl.c:7112 +#: cp/decl2.c:955 #, gcc-internal-format -msgid "typedef declaration invalid in parameter declaration" +msgid "% specifiers are not permitted on non-static data members" msgstr "" -#: cp/decl.c:7116 +#: cp/decl2.c:1001 #, gcc-internal-format -msgid "storage class specifiers invalid in parameter declarations" +msgid "cannot declare %qD to be a bit-field type" msgstr "" -#: cp/decl.c:7123 +#: cp/decl2.c:1011 #, gcc-internal-format -msgid "virtual outside class declaration" +msgid "cannot declare bit-field %qD with function type" msgstr "" -#: cp/decl.c:7137 cp/decl.c:7146 +#: cp/decl2.c:1018 #, gcc-internal-format -msgid "multiple storage classes in declaration of %qs" +msgid "%qD is already defined in the class %qT" msgstr "" -#: cp/decl.c:7169 +#: cp/decl2.c:1025 #, gcc-internal-format -msgid "storage class specified for %qs" +msgid "static member %qD cannot be a bit-field" msgstr "" -#: cp/decl.c:7203 +#: cp/decl2.c:1070 #, gcc-internal-format -msgid "top-level declaration of %qs specifies %" +msgid "anonymous struct not inside named type" msgstr "" -#: cp/decl.c:7215 +#: cp/decl2.c:1153 #, gcc-internal-format -msgid "storage class specifiers invalid in friend function declarations" +msgid "namespace-scope anonymous aggregates must be static" msgstr "" -#: cp/decl.c:7341 +#: cp/decl2.c:1160 #, gcc-internal-format -msgid "destructor cannot be static member function" +msgid "anonymous union with no members" msgstr "" -#: cp/decl.c:7344 +#: cp/decl2.c:1196 #, gcc-internal-format -msgid "destructors may not be cv-qualified" +msgid "% must return type %qT" msgstr "" -#: cp/decl.c:7364 +#: cp/decl2.c:1205 #, gcc-internal-format -msgid "constructor cannot be static member function" +msgid "% takes type % (%qT) as first parameter" msgstr "" -#: cp/decl.c:7367 +#: cp/decl2.c:1234 #, gcc-internal-format -msgid "constructors cannot be declared virtual" +msgid "% must return type %qT" msgstr "" -#: cp/decl.c:7372 +#: cp/decl2.c:1243 #, gcc-internal-format -msgid "constructors may not be cv-qualified" +msgid "% takes type %qT as first parameter" msgstr "" -#: cp/decl.c:7392 +#: cp/decl2.c:3076 #, gcc-internal-format -msgid "can't initialize friend function %qs" +msgid "inline function %q+D used but never defined" msgstr "" -#. Cannot be both friend and virtual. -#: cp/decl.c:7396 +#: cp/decl2.c:3230 #, gcc-internal-format -msgid "virtual functions cannot be friends" +msgid "default argument missing for parameter %P of %q+#D" msgstr "" -#: cp/decl.c:7400 +#. Can't throw a reference. +#: cp/except.c:267 #, gcc-internal-format -msgid "friend declaration not in class definition" +msgid "type %qT is disallowed in Java % or %" msgstr "" -#: cp/decl.c:7402 +#: cp/except.c:278 #, gcc-internal-format -msgid "can't define friend function %qs in a local class definition" +msgid "call to Java % or % with % undefined" msgstr "" -#: cp/decl.c:7415 +#. Thrown object must be a Throwable. +#: cp/except.c:285 #, gcc-internal-format -msgid "destructors may not have parameters" +msgid "type %qT is not derived from %" msgstr "" -#: cp/decl.c:7434 cp/decl.c:7441 +#: cp/except.c:348 #, gcc-internal-format -msgid "cannot declare reference to %q#T" +msgid "mixing C++ and Java catches in a single translation unit" msgstr "" -#: cp/decl.c:7435 +#: cp/except.c:607 #, gcc-internal-format -msgid "cannot declare pointer to %q#T" +msgid "throwing NULL, which has integral, not pointer type" msgstr "" -#: cp/decl.c:7443 +#: cp/except.c:630 cp/init.c:1923 #, gcc-internal-format -msgid "cannot declare pointer to %q#T member" +msgid "%qD should never be overloaded" msgstr "" -#: cp/decl.c:7482 +#: cp/except.c:697 #, gcc-internal-format -msgid "%qD is a namespace" +msgid " in thrown expression" msgstr "" -#: cp/decl.c:7521 +#: cp/except.c:844 #, gcc-internal-format -msgid "template-id %qD used as a declarator" +msgid "" +"expression %qE of abstract class type %qT cannot be used in throw-expression" msgstr "" -#: cp/decl.c:7573 +#: cp/except.c:929 #, gcc-internal-format -msgid "extra qualification %<%T::%> on member %qs ignored" +msgid "%Hexception of type %qT will be caught" msgstr "" -#: cp/decl.c:7592 +#: cp/except.c:931 #, gcc-internal-format -msgid "cannot declare member function %<%T::%s%> within %<%T%>" +msgid "%H by earlier handler for %qT" msgstr "" -#: cp/decl.c:7607 +#: cp/except.c:961 #, gcc-internal-format -msgid "cannot declare member %<%T::%s%> within %qT" +msgid "%H%<...%> handler must be the last handler for its try block" msgstr "" -#: cp/decl.c:7647 +#: cp/friend.c:152 #, gcc-internal-format -msgid "data member may not have variably modified type %qT" +msgid "%qD is already a friend of class %qT" msgstr "" -#: cp/decl.c:7649 +#: cp/friend.c:228 #, gcc-internal-format -msgid "parameter may not have variably modified type %qT" +msgid "invalid type %qT declared %" msgstr "" -#. [dcl.fct.spec] The explicit specifier shall only be used in -#. declarations of constructors within a class definition. -#: cp/decl.c:7657 +#. [temp.friend] +#. Friend declarations shall not declare partial +#. specializations. +#. template friend class T::X; +#. [temp.friend] +#. Friend declarations shall not declare partial +#. specializations. +#: cp/friend.c:244 cp/friend.c:274 #, gcc-internal-format -msgid "only declarations of constructors can be %" +msgid "partial specialization %qT declared %" msgstr "" -#: cp/decl.c:7665 +#: cp/friend.c:252 #, gcc-internal-format -msgid "non-member %qs cannot be declared %" +msgid "class %qT is implicitly friends with itself" msgstr "" -#: cp/decl.c:7670 +#: cp/friend.c:310 #, gcc-internal-format -msgid "non-object member %qs cannot be declared %" +msgid "%qT is not a member of %qT" msgstr "" -#: cp/decl.c:7676 +#: cp/friend.c:315 #, gcc-internal-format -msgid "function %qs cannot be declared %" +msgid "%qT is not a member class template of %qT" msgstr "" -#: cp/decl.c:7681 +#: cp/friend.c:323 #, gcc-internal-format -msgid "static %qs cannot be declared %" +msgid "%qT is not a nested class of %qT" msgstr "" -#: cp/decl.c:7686 +#. template friend class T; +#: cp/friend.c:336 #, gcc-internal-format -msgid "const %qs cannot be declared %" +msgid "template parameter type %qT declared %" msgstr "" -#: cp/decl.c:7706 +#. template friend class A; where A is not a template +#: cp/friend.c:342 #, gcc-internal-format -msgid "%Jtypedef name may not be a nested-name-specifier" +msgid "%q#T is not a template" msgstr "" -#: cp/decl.c:7722 +#: cp/friend.c:364 #, gcc-internal-format -msgid "ISO C++ forbids nested type %qD with same name as enclosing class" +msgid "%qD is already a friend of %qT" msgstr "" -#: cp/decl.c:7821 +#: cp/friend.c:373 #, gcc-internal-format -msgid "qualified function types cannot be used to declare %s functions" +msgid "%qT is already a friend of %qT" msgstr "" -#: cp/decl.c:7847 +#: cp/friend.c:497 #, gcc-internal-format -msgid "type qualifiers specified for friend class declaration" +msgid "member %qD declared as friend before type %qT defined" msgstr "" -#: cp/decl.c:7852 +#: cp/friend.c:553 #, gcc-internal-format -msgid "% specified for friend class declaration" +msgid "friend declaration %q#D declares a non-template function" msgstr "" -#: cp/decl.c:7860 +#: cp/friend.c:557 #, gcc-internal-format -msgid "template parameters cannot be friends" +msgid "" +"(if this is not what you intended, make sure the function template has " +"already been declared and add <> after the function name here) -Wno-non-" +"template-friend disables this warning" msgstr "" -#: cp/decl.c:7862 +#: cp/init.c:327 #, gcc-internal-format -msgid "friend declaration requires class-key, i.e. %" +msgid "%J%qD should be initialized in the member initialization list" msgstr "" -#: cp/decl.c:7866 +#: cp/init.c:375 #, gcc-internal-format -msgid "friend declaration requires class-key, i.e. %" +msgid "%Jdefault-initialization of %q#D, which has reference type" msgstr "" -#: cp/decl.c:7879 +#: cp/init.c:381 #, gcc-internal-format -msgid "trying to make class %qT a friend of global scope" +msgid "%Juninitialized reference member %qD" msgstr "" -#: cp/decl.c:7890 +#: cp/init.c:384 #, gcc-internal-format -msgid "invalid qualifiers on non-member function type" +msgid "%Juninitialized member %qD with % type %qT" msgstr "" -#: cp/decl.c:7909 +#: cp/init.c:527 #, gcc-internal-format -msgid "abstract declarator %qT used as declaration" +msgid "%q+D will be initialized after" msgstr "" -#: cp/decl.c:7934 +#: cp/init.c:530 #, gcc-internal-format -msgid "cannot use %<::%> in parameter declaration" +msgid "base %qT will be initialized after" msgstr "" -#. Something like struct S { int N::j; }; -#: cp/decl.c:7979 +#: cp/init.c:533 #, gcc-internal-format -msgid "invalid use of %<::%>" +msgid " %q+#D" msgstr "" -#: cp/decl.c:7994 +#: cp/init.c:535 #, gcc-internal-format -msgid "can't make %qD into a method -- not in a class" +msgid " base %qT" msgstr "" -#: cp/decl.c:8003 +#: cp/init.c:536 #, gcc-internal-format -msgid "function %qD declared virtual inside a union" +msgid "%J when initialized here" msgstr "" -#: cp/decl.c:8012 +#: cp/init.c:552 #, gcc-internal-format -msgid "%qD cannot be declared virtual, since it is always static" +msgid "%Jmultiple initializations given for %qD" msgstr "" -#: cp/decl.c:8030 +#: cp/init.c:555 #, gcc-internal-format -msgid "declaration of %qD as member of %qT" +msgid "%Jmultiple initializations given for base %qT" msgstr "" -#: cp/decl.c:8106 +#: cp/init.c:622 #, gcc-internal-format -msgid "field %qD has incomplete type" +msgid "%Jinitializations for multiple members of %qT" msgstr "" -#: cp/decl.c:8108 +#: cp/init.c:684 #, gcc-internal-format -msgid "name %qT has incomplete type" +msgid "" +"%Jbase class %q#T should be explicitly initialized in the copy constructor" msgstr "" -#: cp/decl.c:8117 +#: cp/init.c:908 cp/init.c:927 #, gcc-internal-format -msgid " in instantiation of template %qT" +msgid "class %qT does not have any field named %qD" msgstr "" -#: cp/decl.c:8127 +#: cp/init.c:914 #, gcc-internal-format -msgid "%qE is neither function nor member function; cannot be declared friend" +msgid "" +"%q#D is a static data member; it can only be initialized at its definition" msgstr "" -#: cp/decl.c:8138 +#: cp/init.c:921 #, gcc-internal-format -msgid "member functions are implicitly friends of their class" +msgid "%q#D is not a non-static data member of %qT" msgstr "" -#. An attempt is being made to initialize a non-static -#. member. But, from [class.mem]: -#. -#. 4 A member-declarator can contain a -#. constant-initializer only if it declares a static -#. member (_class.static_) of integral or enumeration -#. type, see _class.static.data_. -#. -#. This used to be relatively common practice, but -#. the rest of the compiler does not correctly -#. handle the initialization unless the member is -#. static so we make it static below. -#: cp/decl.c:8178 +#: cp/init.c:960 #, gcc-internal-format -msgid "ISO C++ forbids initialization of member %qD" +msgid "unnamed initializer for %qT, which has no base classes" msgstr "" -#: cp/decl.c:8180 +#: cp/init.c:968 #, gcc-internal-format -msgid "making %qD static" +msgid "unnamed initializer for %qT, which uses multiple inheritance" msgstr "" -#: cp/decl.c:8238 +#: cp/init.c:1014 #, gcc-internal-format -msgid "storage class % invalid for function %qs" +msgid "%qD is both a direct base and an indirect virtual base" msgstr "" -#: cp/decl.c:8240 +#: cp/init.c:1022 #, gcc-internal-format -msgid "storage class % invalid for function %qs" +msgid "type %qD is not a direct or virtual base of %qT" msgstr "" -#: cp/decl.c:8242 +#: cp/init.c:1025 #, gcc-internal-format -msgid "storage class %<__thread%> invalid for function %qs" +msgid "type %qD is not a direct base of %qT" msgstr "" -#: cp/decl.c:8253 +#: cp/init.c:1105 #, gcc-internal-format -msgid "" -"% specified invalid for function %qs declared out of global scope" +msgid "bad array initializer" msgstr "" -#: cp/decl.c:8256 +#: cp/init.c:1305 #, gcc-internal-format -msgid "" -"% specifier invalid for function %qs declared out of global scope" +msgid "%qT is not an aggregate type" msgstr "" -#: cp/decl.c:8264 +#: cp/init.c:1398 #, gcc-internal-format -msgid "virtual non-class function %qs" +msgid "qualified type %qT does not match destructor name %<~%T%>" msgstr "" -#: cp/decl.c:8295 +#: cp/init.c:1406 #, gcc-internal-format -msgid "cannot declare member function %qD to have static linkage" +msgid "incomplete type %qT does not have member %qD" msgstr "" -#. FIXME need arm citation -#: cp/decl.c:8302 +#: cp/init.c:1425 #, gcc-internal-format -msgid "cannot declare static function inside another function" +msgid "%qD is not a member of type %qT" msgstr "" -#: cp/decl.c:8331 +#: cp/init.c:1444 #, gcc-internal-format -msgid "" -"% may not be used when defining (as opposed to declaring) a static " -"data member" +msgid "invalid pointer to bit-field %qD" msgstr "" -#: cp/decl.c:8338 +#: cp/init.c:1546 #, gcc-internal-format -msgid "static member %qD declared %" +msgid "invalid use of non-static member function %qD" msgstr "" -#: cp/decl.c:8343 +#: cp/init.c:1552 #, gcc-internal-format -msgid "cannot explicitly declare member %q#D to have extern linkage" +msgid "invalid use of non-static data member %qD" msgstr "" -#: cp/decl.c:8488 +#: cp/init.c:1681 #, gcc-internal-format -msgid "default argument for %q#D has type %qT" +msgid "size in array new must have integral type" msgstr "" -#: cp/decl.c:8491 +#: cp/init.c:1684 #, gcc-internal-format -msgid "default argument for parameter of type %qT has type %qT" +msgid "zero size array reserves no space" msgstr "" -#: cp/decl.c:8508 +#: cp/init.c:1692 #, gcc-internal-format -msgid "default argument %qE uses local variable %qD" +msgid "new cannot be applied to a reference type" msgstr "" -#: cp/decl.c:8576 +#: cp/init.c:1698 #, gcc-internal-format -msgid "parameter %qD invalidly declared method type" +msgid "new cannot be applied to a function type" msgstr "" -#: cp/decl.c:8600 +#: cp/init.c:1730 #, gcc-internal-format -msgid "parameter %qD includes %s to array of unknown bound %qT" +msgid "call to Java constructor, while % undefined" msgstr "" -#. [class.copy] -#. -#. A declaration of a constructor for a class X is ill-formed if -#. its first parameter is of type (optionally cv-qualified) X -#. and either there are no other parameters or else all other -#. parameters have default arguments. -#. -#. We *don't* complain about member template instantiations that -#. have this form, though; they can occur as we try to decide -#. what constructor to use during overload resolution. Since -#. overload resolution will never prefer such a constructor to -#. the non-template copy constructor (which is either explicitly -#. or implicitly defined), there's no need to worry about their -#. existence. Theoretically, they should never even be -#. instantiated, but that's hard to forestall. -#: cp/decl.c:8759 +#: cp/init.c:1746 #, gcc-internal-format -msgid "invalid constructor; you probably meant %<%T (const %T&)%>" +msgid "can't find class$" msgstr "" -#: cp/decl.c:8878 +#: cp/init.c:1874 #, gcc-internal-format -msgid "%qD may not be declared within a namespace" +msgid "invalid type % for new" msgstr "" -#: cp/decl.c:8880 +#: cp/init.c:1884 #, gcc-internal-format -msgid "%qD may not be declared as static" +msgid "uninitialized const in % of %q#T" msgstr "" -#: cp/decl.c:8901 +#: cp/init.c:1918 #, gcc-internal-format -msgid "%qD must be a nonstatic member function" +msgid "call to Java constructor with %qs undefined" msgstr "" -#: cp/decl.c:8910 +#: cp/init.c:1958 #, gcc-internal-format -msgid "" -"%qD must be either a non-static member function or a non-member function" +msgid "no suitable %qD found in class %qT" msgstr "" -#: cp/decl.c:8930 +#: cp/init.c:1963 #, gcc-internal-format -msgid "%qD must have an argument of class or enumerated type" +msgid "request for member %qD is ambiguous" msgstr "" -#: cp/decl.c:8971 +#: cp/init.c:2103 #, gcc-internal-format -msgid "conversion to %s%s will never use a type conversion operator" +msgid "ISO C++ forbids initialization in array new" msgstr "" -#. 13.4.0.3 -#: cp/decl.c:8978 +#: cp/init.c:2591 #, gcc-internal-format -msgid "ISO C++ prohibits overloading operator ?:" +msgid "initializer ends prematurely" msgstr "" -#: cp/decl.c:9028 +#: cp/init.c:2646 #, gcc-internal-format -msgid "postfix %qD must take % as its argument" +msgid "cannot initialize multi-dimensional array with initializer" msgstr "" -#: cp/decl.c:9032 +#: cp/init.c:2807 #, gcc-internal-format -msgid "postfix %qD must take % as its second argument" +msgid "possible problem detected in invocation of delete operator:" msgstr "" -#: cp/decl.c:9039 +#: cp/init.c:2810 #, gcc-internal-format -msgid "%qD must take either zero or one argument" +msgid "" +"neither the destructor nor the class-specific operator delete will be " +"called, even if they are declared when the class is defined." msgstr "" -#: cp/decl.c:9041 +#: cp/init.c:2831 #, gcc-internal-format -msgid "%qD must take either one or two arguments" +msgid "unknown array size in delete" msgstr "" -#: cp/decl.c:9062 +#: cp/init.c:3064 #, gcc-internal-format -msgid "prefix %qD should return %qT" +msgid "type to vector delete is neither pointer or array type" msgstr "" -#: cp/decl.c:9068 +#: cp/lex.c:468 #, gcc-internal-format -msgid "postfix %qD should return %qT" +msgid "junk at end of #pragma %s" msgstr "" -#: cp/decl.c:9077 +#: cp/lex.c:475 #, gcc-internal-format -msgid "%qD must take %" +msgid "invalid #pragma %s" msgstr "" -#: cp/decl.c:9079 cp/decl.c:9087 +#: cp/lex.c:483 #, gcc-internal-format -msgid "%qD must take exactly one argument" +msgid "#pragma vtable no longer supported" msgstr "" -#: cp/decl.c:9089 +#: cp/lex.c:562 #, gcc-internal-format -msgid "%qD must take exactly two arguments" +msgid "#pragma implementation for %qs appears after file is included" msgstr "" -#: cp/decl.c:9097 +#: cp/lex.c:587 #, gcc-internal-format -msgid "user-defined %qD always evaluates both arguments" +msgid "junk at end of #pragma GCC java_exceptions" msgstr "" -#: cp/decl.c:9111 +#: cp/lex.c:601 #, gcc-internal-format -msgid "%qD should return by value" +msgid "%qD not defined" msgstr "" -#: cp/decl.c:9123 cp/decl.c:9126 +#: cp/lex.c:605 #, gcc-internal-format -msgid "%qD cannot have default arguments" +msgid "%qD was not declared in this scope" msgstr "" -#: cp/decl.c:9183 +#. In a template, it is invalid to write "f()" or "f(3)" if no +#. declaration of "f" is available. Historically, G++ and most +#. other compilers accepted that usage since they deferred all name +#. lookup until instantiation time rather than doing unqualified +#. name lookup at template definition time; explain to the user what +#. is going wrong. +#. +#. Note that we have the exact wording of the following message in +#. the manual (trouble.texi, node "Name lookup"), so they need to +#. be kept in synch. +#: cp/lex.c:642 #, gcc-internal-format -msgid "using template type parameter %qT after %qs" +msgid "" +"there are no arguments to %qD that depend on a template parameter, so a " +"declaration of %qD must be available" msgstr "" -#: cp/decl.c:9198 +#: cp/lex.c:651 #, gcc-internal-format -msgid "using typedef-name %qD after %qs" +msgid "" +"(if you use %<-fpermissive%>, G++ will accept your code, but allowing the " +"use of an undeclared name is deprecated)" msgstr "" -#: cp/decl.c:9199 +#: cp/mangle.c:2139 #, gcc-internal-format -msgid "%q+D has a previous declaration here" +msgid "call_expr cannot be mangled due to a defect in the C++ ABI" msgstr "" -#: cp/decl.c:9207 +#: cp/mangle.c:2147 #, gcc-internal-format -msgid "%qT referred to as %qs" +msgid "zero-operand casts cannot be mangled due to a defect in the C++ ABI" msgstr "" -#: cp/decl.c:9208 cp/decl.c:9215 +#: cp/mangle.c:2197 #, gcc-internal-format -msgid "%q+T has a previous declaration here" +msgid "omitted middle operand to % operand cannot be mangled" msgstr "" -#: cp/decl.c:9214 +#: cp/mangle.c:2507 #, gcc-internal-format -msgid "%qT referred to as enum" +msgid "the mangled name of %qD will change in a future version of GCC" msgstr "" -#. If a class template appears as elaborated type specifier -#. without a template header such as: -#. -#. template class C {}; -#. void f(class C); // No template header here -#. -#. then the required template argument is missing. -#: cp/decl.c:9229 +#: cp/method.c:457 #, gcc-internal-format -msgid "template argument required for %<%s %T%>" +msgid "generic thunk code fails for method %q#D which uses %<...%>" msgstr "" -#: cp/decl.c:9277 cp/name-lookup.c:2628 +#: cp/method.c:693 #, gcc-internal-format -msgid "%qD has the same name as the class in which it is declared" +msgid "non-static const member %q#D, can't use default assignment operator" msgstr "" -#: cp/decl.c:9415 +#: cp/method.c:699 #, gcc-internal-format -msgid "use of enum %q#D without previous declaration" +msgid "non-static reference member %q#D, can't use default assignment operator" msgstr "" -#: cp/decl.c:9433 +#: cp/method.c:811 #, gcc-internal-format -msgid "redeclaration of %qT as a non-template" +msgid "%Hsynthesized method %qD first required here " msgstr "" -#: cp/decl.c:9540 +#: cp/method.c:1140 #, gcc-internal-format -msgid "derived union %qT invalid" +msgid "" +"vtable layout for class %qT may not be ABI-compliantand may change in a " +"future version of GCC due to implicit virtual destructor" msgstr "" -#: cp/decl.c:9546 +#: cp/name-lookup.c:694 #, gcc-internal-format -msgid "Java class %qT cannot have multiple bases" +msgid "redeclaration of % as %qT" msgstr "" -#: cp/decl.c:9554 +#. A redeclaration of main, but not a duplicate of the +#. previous one. +#. +#. [basic.start.main] +#. +#. This function shall not be overloaded. +#: cp/name-lookup.c:726 #, gcc-internal-format -msgid "Java class %qT cannot have virtual bases" +msgid "invalid redeclaration of %q+D" msgstr "" -#: cp/decl.c:9573 +#: cp/name-lookup.c:727 #, gcc-internal-format -msgid "base type %qT fails to be a struct or class type" +msgid "as %qD" msgstr "" -#: cp/decl.c:9606 +#: cp/name-lookup.c:815 #, gcc-internal-format -msgid "recursive type %qT undefined" +msgid "type mismatch with previous external decl of %q#D" msgstr "" -#: cp/decl.c:9608 +#: cp/name-lookup.c:816 #, gcc-internal-format -msgid "duplicate base type %qT invalid" +msgid "previous external decl of %q+#D" msgstr "" -#: cp/decl.c:9678 +#: cp/name-lookup.c:907 #, gcc-internal-format -msgid "multiple definition of %q#T" +msgid "extern declaration of %q#D doesn't match" msgstr "" -#: cp/decl.c:9679 +#: cp/name-lookup.c:908 #, gcc-internal-format -msgid "%Jprevious definition here" +msgid "global declaration %q+#D" msgstr "" -#. DR 377 -#. -#. IF no integral type can represent all the enumerator values, the -#. enumeration is ill-formed. -#: cp/decl.c:9816 +#: cp/name-lookup.c:945 cp/name-lookup.c:952 #, gcc-internal-format -msgid "no integral type can represent all of the enumerator values for %qT" +msgid "declaration of %q#D shadows a parameter" msgstr "" -#: cp/decl.c:9922 +#. Location of previous decl is not useful in this case. +#: cp/name-lookup.c:977 #, gcc-internal-format -msgid "enumerator value for %qD not integer constant" +msgid "declaration of %qD shadows a member of 'this'" msgstr "" -#: cp/decl.c:9949 +#: cp/name-lookup.c:983 #, gcc-internal-format -msgid "overflow in enumeration values at %qD" +msgid "declaration of %qD shadows a previous local" msgstr "" -#: cp/decl.c:10020 +#: cp/name-lookup.c:990 #, gcc-internal-format -msgid "return type %q#T is incomplete" +msgid "declaration of %qD shadows a global declaration" msgstr "" -#: cp/decl.c:10137 cp/typeck.c:6274 +#: cp/name-lookup.c:1116 #, gcc-internal-format -msgid "% should return a reference to %<*this%>" +msgid "name lookup of %qD changed" msgstr "" -#: cp/decl.c:10472 +#: cp/name-lookup.c:1117 #, gcc-internal-format -msgid "parameter %qD declared void" +msgid " matches this %q+D under ISO standard rules" msgstr "" -#: cp/decl.c:10965 +#: cp/name-lookup.c:1119 #, gcc-internal-format -msgid "invalid member function declaration" +msgid " matches this %q+D under old rules" msgstr "" -#: cp/decl.c:10980 +#: cp/name-lookup.c:1137 cp/name-lookup.c:1145 #, gcc-internal-format -msgid "%qD is already defined in class %qT" +msgid "name lookup of %qD changed for new ISO % scoping" msgstr "" -#: cp/decl.c:11190 +#: cp/name-lookup.c:1139 #, gcc-internal-format -msgid "static member function %q#D declared with type qualifiers" +msgid " cannot use obsolete binding at %q+D because it has a destructor" msgstr "" -#: cp/decl2.c:273 +#: cp/name-lookup.c:1147 #, gcc-internal-format -msgid "name missing for member function" +msgid " using obsolete binding at %q+D" msgstr "" -#: cp/decl2.c:366 cp/decl2.c:380 +#: cp/name-lookup.c:1200 #, gcc-internal-format -msgid "ambiguous conversion for array subscript" +msgid "%s %s(%E) %p %d\n" msgstr "" -#: cp/decl2.c:374 +#: cp/name-lookup.c:1203 #, gcc-internal-format -msgid "invalid types %<%T[%T]%> for array subscript" +msgid "%s %s %p %d\n" msgstr "" -#: cp/decl2.c:417 +#: cp/name-lookup.c:1329 #, gcc-internal-format -msgid "deleting array %q#D" +msgid "XXX is_class_level != (current_scope == class_scope)\n" msgstr "" -#: cp/decl2.c:423 +#: cp/name-lookup.c:1887 #, gcc-internal-format -msgid "type %q#T argument given to %, expected pointer" +msgid "%q#D hides constructor for %q#T" msgstr "" -#: cp/decl2.c:435 +#: cp/name-lookup.c:1903 #, gcc-internal-format -msgid "" -"cannot delete a function. Only pointer-to-objects are valid arguments to %" -"" +msgid "%q#D conflicts with previous using declaration %q#D" msgstr "" -#: cp/decl2.c:443 +#: cp/name-lookup.c:1923 #, gcc-internal-format -msgid "deleting %qT is undefined" +msgid "previous non-function declaration %q+#D" msgstr "" -#. 14.5.2.2 [temp.mem] -#. -#. A local class shall not have member templates. -#: cp/decl2.c:479 +#: cp/name-lookup.c:1924 #, gcc-internal-format -msgid "invalid declaration of member template %q#D in local class" +msgid "conflicts with function declaration %q#D" msgstr "" -#: cp/decl2.c:488 +#. It's a nested name with template parameter dependent scope. +#. This can only be using-declaration for class member. +#: cp/name-lookup.c:2002 cp/name-lookup.c:2027 #, gcc-internal-format -msgid "invalid use of % in template declaration of %q#D" +msgid "%qT is not a namespace" +msgstr "" + +#. 7.3.3/5 +#. A using-declaration shall not name a template-id. +#: cp/name-lookup.c:2012 +#, gcc-internal-format +msgid "a using-declaration cannot specify a template-id. Try %" msgstr "" -#: cp/decl2.c:498 cp/pt.c:3007 +#: cp/name-lookup.c:2019 #, gcc-internal-format -msgid "template declaration of %q#D" +msgid "namespace %qD not allowed in using-declaration" msgstr "" -#: cp/decl2.c:547 +#: cp/name-lookup.c:2055 #, gcc-internal-format -msgid "Java method %qD has non-Java return type %qT" +msgid "%qD not declared" msgstr "" -#: cp/decl2.c:563 +#: cp/name-lookup.c:2076 cp/name-lookup.c:2113 cp/name-lookup.c:2147 #, gcc-internal-format -msgid "Java method %qD has non-Java parameter type %qT" +msgid "%qD is already declared in this scope" msgstr "" -#: cp/decl2.c:668 +#: cp/name-lookup.c:2153 #, gcc-internal-format -msgid "prototype for %q#D does not match any in class %qT" +msgid "using declaration %qD introduced ambiguous type %qT" +msgstr "" + +#: cp/name-lookup.c:2727 +#, gcc-internal-format +msgid "using-declaration for non-member at class scope" msgstr "" -#: cp/decl2.c:765 +#: cp/name-lookup.c:2753 #, gcc-internal-format -msgid "local class %q#T shall not have static data member %q#D" +msgid "%<%T::%D%> names destructor" msgstr "" -#: cp/decl2.c:773 +#: cp/name-lookup.c:2758 #, gcc-internal-format -msgid "initializer invalid for static member with constructor" +msgid "%<%T::%D%> names constructor" msgstr "" -#: cp/decl2.c:776 +#: cp/name-lookup.c:2763 #, gcc-internal-format -msgid "(an out of class initialization is required)" +msgid "%<%T::%D%> names constructor in %qT" msgstr "" -#: cp/decl2.c:857 +#: cp/name-lookup.c:2779 #, gcc-internal-format -msgid "member %qD conflicts with virtual function table field name" +msgid "no members matching %<%T::%D%> in %q#T" msgstr "" -#: cp/decl2.c:876 +#: cp/name-lookup.c:2848 #, gcc-internal-format -msgid "applying attributes to template parameters is not implemented" +msgid "declaration of %qD not in a namespace surrounding %qD" msgstr "" -#: cp/decl2.c:886 +#: cp/name-lookup.c:2856 #, gcc-internal-format -msgid "%qD is already defined in %qT" +msgid "explicit qualification in declaration of %qD" msgstr "" -#: cp/decl2.c:907 +#: cp/name-lookup.c:2896 #, gcc-internal-format -msgid "initializer specified for static member function %qD" +msgid "%qD should have been declared inside %qD" msgstr "" -#: cp/decl2.c:930 +#: cp/name-lookup.c:2958 #, gcc-internal-format -msgid "field initializer is not constant" +msgid "namespace alias %qD not allowed here, assuming %qD" msgstr "" -#: cp/decl2.c:957 +#: cp/name-lookup.c:3265 #, gcc-internal-format -msgid "% specifiers are not permitted on non-static data members" +msgid "strong using only meaningful at namespace scope" msgstr "" -#: cp/decl2.c:1003 +#: cp/name-lookup.c:3272 #, gcc-internal-format -msgid "cannot declare %qD to be a bit-field type" +msgid "%qD attribute directive ignored" msgstr "" -#: cp/decl2.c:1013 +#: cp/name-lookup.c:3422 #, gcc-internal-format -msgid "cannot declare bit-field %qD with function type" +msgid "%qD denotes an ambiguous type" msgstr "" -#: cp/decl2.c:1020 +#: cp/name-lookup.c:3423 #, gcc-internal-format -msgid "%qD is already defined in the class %qT" +msgid "%J first type here" msgstr "" -#: cp/decl2.c:1027 +#: cp/name-lookup.c:3424 #, gcc-internal-format -msgid "static member %qD cannot be a bit-field" +msgid "%J other type here" msgstr "" -#: cp/decl2.c:1072 +#. This happens for A::B where B is a template, and there are no +#. template arguments. +#: cp/name-lookup.c:3534 cp/parser.c:4475 cp/typeck.c:1807 #, gcc-internal-format -msgid "anonymous struct not inside named type" +msgid "invalid use of %qD" msgstr "" -#: cp/decl2.c:1155 +#: cp/name-lookup.c:3574 #, gcc-internal-format -msgid "namespace-scope anonymous aggregates must be static" +msgid "%<%D::%D%> is not a template" msgstr "" -#: cp/decl2.c:1162 +#: cp/name-lookup.c:3589 #, gcc-internal-format -msgid "anonymous union with no members" +msgid "%qD undeclared in namespace %qD" msgstr "" -#: cp/decl2.c:1198 +#: cp/name-lookup.c:4226 #, gcc-internal-format -msgid "% must return type %qT" +msgid "%q+D is not a function," msgstr "" -#: cp/decl2.c:1207 +#: cp/name-lookup.c:4227 #, gcc-internal-format -msgid "% takes type % (%qT) as first parameter" +msgid " conflict with %q+D" msgstr "" -#: cp/decl2.c:1236 +#: cp/name-lookup.c:5059 #, gcc-internal-format -msgid "% must return type %qT" +msgid "XXX entering pop_everything ()\n" msgstr "" -#: cp/decl2.c:1245 +#: cp/name-lookup.c:5068 #, gcc-internal-format -msgid "% takes type %qT as first parameter" +msgid "XXX leaving pop_everything ()\n" msgstr "" -#: cp/decl2.c:3072 +#: cp/parser.c:1866 #, gcc-internal-format -msgid "inline function %q+D used but never defined" +msgid "minimum/maximum operators are deprecated" msgstr "" -#: cp/decl2.c:3228 +#: cp/parser.c:1886 #, gcc-internal-format -msgid "default argument missing for parameter %P of %q+#D" +msgid "%<#pragma%> is not allowed here" msgstr "" -#. Can't throw a reference. -#: cp/except.c:267 +#: cp/parser.c:1915 #, gcc-internal-format -msgid "type %qT is disallowed in Java % or %" +msgid "%<%D::%D%> has not been declared" msgstr "" -#: cp/except.c:278 +#: cp/parser.c:1918 cp/semantics.c:2387 #, gcc-internal-format -msgid "call to Java % or % with % undefined" +msgid "%<::%D%> has not been declared" msgstr "" -#. Thrown object must be a Throwable. -#: cp/except.c:285 +#: cp/parser.c:1921 #, gcc-internal-format -msgid "type %qT is not derived from %" +msgid "request for member %qD in non-class type %qT" msgstr "" -#: cp/except.c:348 +#: cp/parser.c:1924 #, gcc-internal-format -msgid "mixing C++ and Java catches in a single translation unit" +msgid "%<%T::%D%> has not been declared" msgstr "" -#: cp/except.c:607 +#: cp/parser.c:1927 #, gcc-internal-format -msgid "throwing NULL, which has integral, not pointer type" +msgid "%qD has not been declared" msgstr "" -#: cp/except.c:630 cp/init.c:1903 +#: cp/parser.c:1930 #, gcc-internal-format -msgid "%qD should never be overloaded" +msgid "%<%D::%D%> %s" msgstr "" -#: cp/except.c:697 +#: cp/parser.c:1932 #, gcc-internal-format -msgid " in thrown expression" +msgid "%<::%D%> %s" msgstr "" -#: cp/except.c:844 +#: cp/parser.c:1934 #, gcc-internal-format -msgid "" -"expression %qE of abstract class type %qT cannot be used in throw-expression" +msgid "%qD %s" msgstr "" -#: cp/except.c:929 +#: cp/parser.c:1986 #, gcc-internal-format -msgid "%Hexception of type %qT will be caught" +msgid "new types may not be defined in a return type" msgstr "" -#: cp/except.c:931 +#: cp/parser.c:1987 #, gcc-internal-format -msgid "%H by earlier handler for %qT" +msgid "(perhaps a semicolon is missing after the definition of %qT)" msgstr "" -#: cp/except.c:961 +#: cp/parser.c:2006 cp/parser.c:3680 cp/pt.c:4396 #, gcc-internal-format -msgid "%H%<...%> handler must be the last handler for its try block" +msgid "%qT is not a template" msgstr "" -#: cp/friend.c:152 +#: cp/parser.c:2008 #, gcc-internal-format -msgid "%qD is already a friend of class %qT" +msgid "%qE is not a template" msgstr "" -#: cp/friend.c:228 +#: cp/parser.c:2010 #, gcc-internal-format -msgid "invalid type %qT declared %" +msgid "invalid template-id" msgstr "" -#. [temp.friend] -#. Friend declarations shall not declare partial -#. specializations. -#. template friend class T::X; -#. [temp.friend] -#. Friend declarations shall not declare partial -#. specializations. -#: cp/friend.c:244 cp/friend.c:274 +#: cp/parser.c:2039 #, gcc-internal-format -msgid "partial specialization %qT declared %" +msgid "%s cannot appear in a constant-expression" msgstr "" -#: cp/friend.c:252 +#: cp/parser.c:2064 #, gcc-internal-format -msgid "class %qT is implicitly friends with itself" +msgid "invalid use of template-name %qE without an argument list" msgstr "" -#: cp/friend.c:310 +#. Issue an error message. +#: cp/parser.c:2069 #, gcc-internal-format -msgid "%qT is not a member of %qT" +msgid "%qE does not name a type" msgstr "" -#: cp/friend.c:315 +#: cp/parser.c:2101 #, gcc-internal-format -msgid "%qT is not a member class template of %qT" +msgid "(perhaps % was intended)" msgstr "" -#: cp/friend.c:323 +#: cp/parser.c:2116 #, gcc-internal-format -msgid "%qT is not a nested class of %qT" +msgid "%qE in namespace %qE does not name a type" msgstr "" -#. template friend class T; -#: cp/friend.c:336 +#: cp/parser.c:2119 #, gcc-internal-format -msgid "template parameter type %qT declared %" +msgid "%qE in class %qT does not name a type" msgstr "" -#. template friend class A; where A is not a template -#: cp/friend.c:342 +#: cp/parser.c:2839 #, gcc-internal-format -msgid "%q#T is not a template" +msgid "ISO C++ forbids braced-groups within expressions" msgstr "" -#: cp/friend.c:364 +#: cp/parser.c:2848 #, gcc-internal-format -msgid "%qD is already a friend of %qT" +msgid "statement-expressions are allowed only inside functions" msgstr "" -#: cp/friend.c:373 +#: cp/parser.c:2899 #, gcc-internal-format -msgid "%qT is already a friend of %qT" +msgid "% may not be used in this context" msgstr "" -#: cp/friend.c:497 +#: cp/parser.c:3050 #, gcc-internal-format -msgid "member %qD declared as friend before type %qT defined" +msgid "local variable %qD may not appear in this context" msgstr "" -#: cp/friend.c:553 +#: cp/parser.c:3430 #, gcc-internal-format -msgid "friend declaration %q#D declares a non-template function" +msgid "typedef-name %qD used as destructor declarator" msgstr "" -#: cp/friend.c:557 +#: cp/parser.c:3639 cp/parser.c:12562 cp/parser.c:14693 #, gcc-internal-format -msgid "" -"(if this is not what you intended, make sure the function template has " -"already been declared and add <> after the function name here) -Wno-non-" -"template-friend disables this warning" +msgid "reference to %qD is ambiguous" msgstr "" -#: cp/init.c:327 +#: cp/parser.c:3681 cp/typeck.c:1878 cp/typeck.c:1898 #, gcc-internal-format -msgid "%J%qD should be initialized in the member initialization list" +msgid "%qD is not a template" msgstr "" -#: cp/init.c:375 +#: cp/parser.c:4068 #, gcc-internal-format -msgid "%Jdefault-initialization of %q#D, which has reference type" +msgid "ISO C++ forbids compound-literals" msgstr "" -#: cp/init.c:381 +#: cp/parser.c:4400 #, gcc-internal-format -msgid "%Juninitialized reference member %qD" +msgid "%qE does not have class type" msgstr "" -#: cp/init.c:384 +#: cp/parser.c:4999 #, gcc-internal-format -msgid "%Juninitialized member %qD with % type %qT" +msgid "array bound forbidden after parenthesized type-id" msgstr "" -#: cp/init.c:527 +#: cp/parser.c:5000 #, gcc-internal-format -msgid "%q+D will be initialized after" +msgid "try removing the parentheses around the type-id" msgstr "" -#: cp/init.c:530 +#: cp/parser.c:5202 #, gcc-internal-format -msgid "base %qT will be initialized after" +msgid "expression in new-declarator must have integral or enumeration type" msgstr "" -#: cp/init.c:533 +#: cp/parser.c:5391 #, gcc-internal-format -msgid " %q+#D" +msgid "use of old-style cast" msgstr "" -#: cp/init.c:535 +#: cp/parser.c:6175 #, gcc-internal-format -msgid " base %qT" +msgid "case label %qE not within a switch statement" msgstr "" -#: cp/init.c:536 +#: cp/parser.c:6719 #, gcc-internal-format -msgid "%J when initialized here" +msgid "ISO C++ forbids computed gotos" msgstr "" -#: cp/init.c:552 +#: cp/parser.c:6844 #, gcc-internal-format -msgid "%Jmultiple initializations given for %qD" +msgid "extra %<;%>" msgstr "" -#: cp/init.c:555 +#: cp/parser.c:7168 #, gcc-internal-format -msgid "%Jmultiple initializations given for base %qT" +msgid "mixing declarations and function-definitions is forbidden" msgstr "" -#: cp/init.c:622 +#: cp/parser.c:7299 #, gcc-internal-format -msgid "%Jinitializations for multiple members of %qT" +msgid "duplicate %" msgstr "" -#: cp/init.c:684 +#: cp/parser.c:7468 #, gcc-internal-format -msgid "" -"%Jbase class %q#T should be explicitly initialized in the copy constructor" +msgid "class definition may not be declared a friend" msgstr "" -#: cp/init.c:908 cp/init.c:927 +#: cp/parser.c:7782 #, gcc-internal-format -msgid "class %qT does not have any field named %qD" +msgid "only constructors take base initializers" msgstr "" -#: cp/init.c:914 +#: cp/parser.c:7833 #, gcc-internal-format -msgid "" -"%q#D is a static data member; it can only be initialized at its definition" +msgid "anachronistic old-style base class initializer" msgstr "" -#: cp/init.c:921 +#: cp/parser.c:7875 #, gcc-internal-format -msgid "%q#D is not a non-static data member of %qT" +msgid "" +"keyword % not allowed in this context (a qualified member " +"initializer is implicitly a type)" msgstr "" -#: cp/init.c:960 +#. Warn that we do not support `export'. +#: cp/parser.c:8241 #, gcc-internal-format -msgid "unnamed initializer for %qT, which has no base classes" +msgid "keyword % not implemented, and will be ignored" msgstr "" -#: cp/init.c:968 +#. Otherwise, emit an error about the invalid digraph, but continue +#. parsing because we got our argument list. +#: cp/parser.c:8614 #, gcc-internal-format -msgid "unnamed initializer for %qT, which uses multiple inheritance" +msgid "%<<::%> cannot begin a template-argument list" msgstr "" -#: cp/init.c:1014 +#: cp/parser.c:8615 #, gcc-internal-format -msgid "%qD is both a direct base and an indirect virtual base" +msgid "" +"%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> " +"and %<::%>" msgstr "" -#: cp/init.c:1022 +#: cp/parser.c:8622 #, gcc-internal-format -msgid "type %qD is not a direct or virtual base of %qT" +msgid "(if you use -fpermissive G++ will accept your code)" msgstr "" -#: cp/init.c:1025 +#: cp/parser.c:8686 #, gcc-internal-format -msgid "type %qD is not a direct base of %qT" +msgid "parse error in template argument list" msgstr "" -#: cp/init.c:1105 +#. Explain what went wrong. +#: cp/parser.c:8799 #, gcc-internal-format -msgid "bad array initializer" +msgid "non-template %qD used as template" msgstr "" -#: cp/init.c:1305 +#: cp/parser.c:8800 #, gcc-internal-format -msgid "%qT is not an aggregate type" +msgid "use %<%T::template %D%> to indicate that it is a template" msgstr "" -#: cp/init.c:1397 +#: cp/parser.c:9313 #, gcc-internal-format -msgid "qualified type %qT does not match destructor name %<~%T%>" +msgid "template specialization with C linkage" msgstr "" -#: cp/init.c:1405 +#: cp/parser.c:9419 cp/parser.c:15322 #, gcc-internal-format -msgid "incomplete type %qT does not have member %qD" +msgid "template declaration of %qs" msgstr "" -#: cp/init.c:1424 +#: cp/parser.c:9892 #, gcc-internal-format -msgid "%qD is not a member of type %qT" +msgid "using % outside of template" msgstr "" -#: cp/init.c:1443 +#: cp/parser.c:10089 #, gcc-internal-format -msgid "invalid pointer to bit-field %qD" +msgid "type attributes are honored only at type definition" msgstr "" -#: cp/init.c:1545 +#: cp/parser.c:10286 #, gcc-internal-format -msgid "invalid use of non-static member function %qD" +msgid "%qD is not a namespace-name" msgstr "" -#: cp/init.c:1551 +#. [namespace.udecl] +#. +#. A using declaration shall not name a template-id. +#: cp/parser.c:10476 #, gcc-internal-format -msgid "invalid use of non-static data member %qD" +msgid "a template-id may not appear in a using-declaration" msgstr "" -#: cp/init.c:1661 +#: cp/parser.c:10806 #, gcc-internal-format -msgid "size in array new must have integral type" +msgid "an asm-specification is not allowed on a function-definition" msgstr "" -#: cp/init.c:1664 +#: cp/parser.c:10808 #, gcc-internal-format -msgid "zero size array reserves no space" +msgid "attributes are not allowed on a function-definition" msgstr "" -#: cp/init.c:1672 +#: cp/parser.c:10940 #, gcc-internal-format -msgid "new cannot be applied to a reference type" +msgid "attributes after parenthesized initializer ignored" msgstr "" -#: cp/init.c:1678 +#: cp/parser.c:11325 #, gcc-internal-format -msgid "new cannot be applied to a function type" +msgid "array bound is not an integer constant" msgstr "" -#: cp/init.c:1710 +#: cp/parser.c:11395 #, gcc-internal-format -msgid "call to Java constructor, while % undefined" +msgid "%<%T::%D%> is not a type" msgstr "" -#: cp/init.c:1726 +#: cp/parser.c:11438 #, gcc-internal-format -msgid "can't find class$" +msgid "invalid use of constructor as a template" msgstr "" -#: cp/init.c:1854 +#: cp/parser.c:11439 #, gcc-internal-format -msgid "invalid type % for new" +msgid "" +"use %<%T::%D%> instead of %<%T::%T%> to name the constructor in a qualified " +"name" msgstr "" -#: cp/init.c:1864 +#: cp/parser.c:11627 #, gcc-internal-format -msgid "uninitialized const in % of %q#T" +msgid "duplicate cv-qualifier" msgstr "" -#: cp/init.c:1898 +#: cp/parser.c:12159 #, gcc-internal-format -msgid "call to Java constructor with %qs undefined" +msgid "file ends in default argument" msgstr "" -#: cp/init.c:1938 +#: cp/parser.c:12221 #, gcc-internal-format -msgid "no suitable %qD found in class %qT" +msgid "deprecated use of default argument for parameter of non-function" msgstr "" -#: cp/init.c:1943 +#: cp/parser.c:12224 #, gcc-internal-format -msgid "request for member %qD is ambiguous" +msgid "default arguments are only permitted for function parameters" msgstr "" -#: cp/init.c:2083 +#: cp/parser.c:12984 #, gcc-internal-format -msgid "ISO C++ forbids initialization in array new" +msgid "invalid class name in declaration of %qD" msgstr "" -#: cp/init.c:2571 +#: cp/parser.c:12995 #, gcc-internal-format -msgid "initializer ends prematurely" +msgid "declaration of %qD in %qD which does not enclose %qD" msgstr "" -#: cp/init.c:2626 +#: cp/parser.c:13008 #, gcc-internal-format -msgid "cannot initialize multi-dimensional array with initializer" +msgid "extra qualification ignored" msgstr "" -#: cp/init.c:2787 +#: cp/parser.c:13019 #, gcc-internal-format -msgid "possible problem detected in invocation of delete operator:" +msgid "an explicit specialization must be preceded by %